From f1a271cf727ba50a910a2ad8f9299d4f32201c0c Mon Sep 17 00:00:00 2001 From: Mark Kaylor Date: Wed, 27 Jul 2022 16:02:14 +0200 Subject: [PATCH] Convert custom field type for contentTypes and components --- .../tests/index.test.js | 2 +- .../server/services/components.js | 5 +++++ .../server/services/content-types.js | 6 ++++++ .../services/utils/convert-custom-field-type.js | 16 ++++++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 packages/core/content-type-builder/server/services/utils/convert-custom-field-type.js diff --git a/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/tests/index.test.js b/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/tests/index.test.js index 8ccd80f09e..cd5589c1f8 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/tests/index.test.js +++ b/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/tests/index.test.js @@ -37,7 +37,7 @@ describe('FromModalNavigationProvider', () => { const expected = { ...INITIAL_STATE_DATA, actionType: 'create', - modalType: 'attribute', + modalType: 'customField', attributeType: 'text', customFieldUid: 'plugin::mycustomfields.color', }; diff --git a/packages/core/content-type-builder/server/services/components.js b/packages/core/content-type-builder/server/services/components.js index 51151bf59f..e01bf73a11 100644 --- a/packages/core/content-type-builder/server/services/components.js +++ b/packages/core/content-type-builder/server/services/components.js @@ -4,6 +4,7 @@ const _ = require('lodash'); const { formatAttributes, replaceTemporaryUIDs } = require('../utils/attributes'); const createBuilder = require('./schema-builder'); +const convertCustomFieldType = require('./utils/convert-custom-field-type'); /** * Formats a component attributes @@ -41,9 +42,11 @@ const createComponent = async ({ component, components = [] }) => { const uidMap = builder.createNewComponentUIDMap(components); const replaceTmpUIDs = replaceTemporaryUIDs(uidMap); + convertCustomFieldType(component.attributes); const newComponent = builder.createComponent(replaceTmpUIDs(component)); components.forEach(component => { + convertCustomFieldType(component.attributes); if (!_.has(component, 'uid')) { return builder.createComponent(replaceTmpUIDs(component)); } @@ -67,12 +70,14 @@ const editComponent = async (uid, { component, components = [] }) => { const uidMap = builder.createNewComponentUIDMap(components); const replaceTmpUIDs = replaceTemporaryUIDs(uidMap); + convertCustomFieldType(component.attributes); const updatedComponent = builder.editComponent({ uid, ...replaceTmpUIDs(component), }); components.forEach(component => { + convertCustomFieldType(component.attributes); if (!_.has(component, 'uid')) { return builder.createComponent(replaceTmpUIDs(component)); } diff --git a/packages/core/content-type-builder/server/services/content-types.js b/packages/core/content-type-builder/server/services/content-types.js index 997d192b6b..e709ee14d7 100644 --- a/packages/core/content-type-builder/server/services/content-types.js +++ b/packages/core/content-type-builder/server/services/content-types.js @@ -8,6 +8,7 @@ const { ApplicationError } = require('@strapi/utils').errors; const { formatAttributes, replaceTemporaryUIDs } = require('../utils/attributes'); const createBuilder = require('./schema-builder'); const { coreUids, pluginsUids } = require('./constants'); +const convertCustomFieldType = require('./utils/convert-custom-field-type'); const isContentTypeVisible = model => getOr(true, 'pluginOptions.content-type-builder.visible', model) === true; @@ -84,6 +85,7 @@ const createContentType = async ({ contentType, components = [] }, options = {}) const replaceTmpUIDs = replaceTemporaryUIDs(uidMap); + convertCustomFieldType(contentType.attributes); const newContentType = builder.createContentType(replaceTmpUIDs(contentType)); // allow components to target the new contentType @@ -99,6 +101,7 @@ const createContentType = async ({ contentType, components = [] }, options = {}) }; components.forEach(component => { + convertCustomFieldType(component.attributes); const options = replaceTmpUIDs(targetContentType(component)); if (!_.has(component, 'uid')) { @@ -170,12 +173,15 @@ const editContentType = async (uid, { contentType, components = [] }) => { const uidMap = builder.createNewComponentUIDMap(components); const replaceTmpUIDs = replaceTemporaryUIDs(uidMap); + convertCustomFieldType(contentType.attributes); const updatedContentType = builder.editContentType({ uid, ...replaceTmpUIDs(contentType), }); components.forEach(component => { + convertCustomFieldType(component.attributes); + if (!_.has(component, 'uid')) { return builder.createComponent(replaceTmpUIDs(component)); } diff --git a/packages/core/content-type-builder/server/services/utils/convert-custom-field-type.js b/packages/core/content-type-builder/server/services/utils/convert-custom-field-type.js new file mode 100644 index 0000000000..469fc64d67 --- /dev/null +++ b/packages/core/content-type-builder/server/services/utils/convert-custom-field-type.js @@ -0,0 +1,16 @@ +'use strict'; + +/** + * @description + * Sets attribute.type to customField + * @param {object} attributes Attributes found on content-type or component + */ +const convertCustomFieldType = attributes => { + Object.values(attributes).forEach(attribute => { + if (attribute.customField) { + attribute.type = 'customField'; + } + }); +}; + +module.exports = convertCustomFieldType;