From 8ddf955af2624f2acfdb7146733a131c3e2fa626 Mon Sep 17 00:00:00 2001 From: soupette Date: Thu, 16 Apr 2020 12:00:26 +0200 Subject: [PATCH] Fixes #5781 Signed-off-by: soupette --- .../src/containers/FormModal/utils/forms.js | 2 ++ .../controllers/validation/common.js | 24 +++++++++++++++++++ .../controllers/validation/types.js | 2 ++ 3 files changed, 28 insertions(+) diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/utils/forms.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/utils/forms.js index 3edf25dbc7..9c35c2cfc2 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/utils/forms.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/utils/forms.js @@ -503,6 +503,8 @@ const forms = { ]; items = uidItems; + } else if (type === 'json') { + items.splice(0, 1); } if (!ATTRIBUTES_THAT_DONT_HAVE_MIN_MAX_SETTINGS.includes(type)) { diff --git a/packages/strapi-plugin-content-type-builder/controllers/validation/common.js b/packages/strapi-plugin-content-type-builder/controllers/validation/common.js index fcc45deabf..871944bfd6 100644 --- a/packages/strapi-plugin-content-type-builder/controllers/validation/common.js +++ b/packages/strapi-plugin-content-type-builder/controllers/validation/common.js @@ -1,6 +1,7 @@ 'use strict'; const yup = require('yup'); +const _ = require('lodash'); const validators = { required: yup.boolean(), @@ -80,11 +81,34 @@ const isValidRegExpPattern = { test: val => val === '' || new RegExp(val), }; +const isValidDefaultJSON = { + name: 'isValidDefaultJSON', + message: '${path} is not a valid JSON', + test: val => { + if (val === undefined) { + return true; + } + + if (_.isNumber(val) || _.isNull(val) || _.isObject(val) || _.isArray(val)) { + return true; + } + + try { + JSON.parse(val); + + return true; + } catch (err) { + return false; + } + }, +}; + module.exports = { validators, areEnumValuesUnique, isValidCollectionName, isValidCategoryName, + isValidDefaultJSON, isValidName, isValidIcon, isValidKey, diff --git a/packages/strapi-plugin-content-type-builder/controllers/validation/types.js b/packages/strapi-plugin-content-type-builder/controllers/validation/types.js index b48fa8f7d1..8460ff2669 100644 --- a/packages/strapi-plugin-content-type-builder/controllers/validation/types.js +++ b/packages/strapi-plugin-content-type-builder/controllers/validation/types.js @@ -6,6 +6,7 @@ const yup = require('yup'); const { validators, areEnumValuesUnique, + isValidDefaultJSON, isValidName, isValidEnum, isValidUID, @@ -112,6 +113,7 @@ const getTypeShape = (attribute, { modelType, attributes } = {}) => { } case 'json': { return { + default: yup.mixed().test(isValidDefaultJSON), required: validators.required, unique: validators.unique, };