@strapi/content-type-builder 5.20.0 → 5.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/DataManager/DataManagerProvider.js +3 -3
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +3 -3
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/PluralName.js +20 -17
- package/dist/admin/components/PluralName.js.map +1 -1
- package/dist/admin/components/PluralName.mjs +20 -17
- package/dist/admin/components/PluralName.mjs.map +1 -1
- package/dist/admin/components/SingularName.js +12 -4
- package/dist/admin/components/SingularName.js.map +1 -1
- package/dist/admin/components/SingularName.mjs +12 -4
- package/dist/admin/components/SingularName.mjs.map +1 -1
- package/dist/server/services/builder.js +1 -0
- package/dist/server/services/builder.js.map +1 -1
- package/dist/server/services/builder.mjs +1 -0
- package/dist/server/services/builder.mjs.map +1 -1
- package/dist/server/src/services/builder.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -152,10 +152,10 @@ const DataManagerProvider = ({ children })=>{
|
|
|
152
152
|
}
|
|
153
153
|
// Make sure the server has restarted
|
|
154
154
|
await serverRestartWatcher();
|
|
155
|
-
// Invalidate the guided tour meta query cache
|
|
156
|
-
// @ts-expect-error typescript is unable to infer the tag types defined on adminApi
|
|
155
|
+
// Invalidate the guided tour meta and homepage key statistics widget query cache
|
|
157
156
|
dispatch(strapiAdmin.adminApi.util.invalidateTags([
|
|
158
|
-
'GuidedTourMeta'
|
|
157
|
+
'GuidedTourMeta',
|
|
158
|
+
'HomepageKeyStatistics'
|
|
159
159
|
]));
|
|
160
160
|
// refetch and update initial state after the data has been saved
|
|
161
161
|
await getDataRef.current();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataManagerProvider.js","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useTracking,\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { ContentTypes, ContentType, Components } from '../../types';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n\n const isModified = React.useMemo(() => {\n return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));\n }, [components, contentTypes, initialComponents, initialContentTypes]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<any>();\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get(`/content-type-builder/schema`),\n fetchClient.get(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Invalidate the guided tour meta query cache\n // @ts-expect-error typescript is unable to infer the tag types defined on adminApi\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta']));\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: false });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: true });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(actions.addAttribute(payload));\n },\n editAttribute(payload) {\n dispatch(actions.editAttribute(payload));\n },\n addCustomFieldAttribute(payload) {\n dispatch(actions.addCustomFieldAttribute(payload));\n },\n editCustomFieldAttribute(payload) {\n dispatch(actions.editCustomFieldAttribute(payload));\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n dispatch(actions.createSchema(payload));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n dispatch(actions.updateSchema(args));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["selectState","state","initialState","DataManagerProvider","children","dispatch","useDispatch","useSelector","components","contentTypes","reservedNames","initialComponents","initialContentTypes","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","useRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","reloadPlugin","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","adminApi","util","invalidateTags","success","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","payload","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","createSchema","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataManagerProvider.js","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useTracking,\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { ContentTypes, ContentType, Components } from '../../types';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n\n const isModified = React.useMemo(() => {\n return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));\n }, [components, contentTypes, initialComponents, initialContentTypes]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<any>();\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get(`/content-type-builder/schema`),\n fetchClient.get(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Invalidate the guided tour meta and homepage key statistics widget query cache\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: false });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: true });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(actions.addAttribute(payload));\n },\n editAttribute(payload) {\n dispatch(actions.editAttribute(payload));\n },\n addCustomFieldAttribute(payload) {\n dispatch(actions.addCustomFieldAttribute(payload));\n },\n editCustomFieldAttribute(payload) {\n dispatch(actions.editCustomFieldAttribute(payload));\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n dispatch(actions.createSchema(payload));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n dispatch(actions.updateSchema(args));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["selectState","state","initialState","DataManagerProvider","children","dispatch","useDispatch","useSelector","components","contentTypes","reservedNames","initialComponents","initialContentTypes","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","useRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","reloadPlugin","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","adminApi","util","invalidateTags","success","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","payload","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","createSchema","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":"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"}
|
|
@@ -131,10 +131,10 @@ const DataManagerProvider = ({ children })=>{
|
|
|
131
131
|
}
|
|
132
132
|
// Make sure the server has restarted
|
|
133
133
|
await serverRestartWatcher();
|
|
134
|
-
// Invalidate the guided tour meta query cache
|
|
135
|
-
// @ts-expect-error typescript is unable to infer the tag types defined on adminApi
|
|
134
|
+
// Invalidate the guided tour meta and homepage key statistics widget query cache
|
|
136
135
|
dispatch(adminApi.util.invalidateTags([
|
|
137
|
-
'GuidedTourMeta'
|
|
136
|
+
'GuidedTourMeta',
|
|
137
|
+
'HomepageKeyStatistics'
|
|
138
138
|
]));
|
|
139
139
|
// refetch and update initial state after the data has been saved
|
|
140
140
|
await getDataRef.current();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataManagerProvider.mjs","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useTracking,\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { ContentTypes, ContentType, Components } from '../../types';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n\n const isModified = React.useMemo(() => {\n return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));\n }, [components, contentTypes, initialComponents, initialContentTypes]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<any>();\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get(`/content-type-builder/schema`),\n fetchClient.get(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Invalidate the guided tour meta query cache\n // @ts-expect-error typescript is unable to infer the tag types defined on adminApi\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta']));\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: false });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: true });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(actions.addAttribute(payload));\n },\n editAttribute(payload) {\n dispatch(actions.editAttribute(payload));\n },\n addCustomFieldAttribute(payload) {\n dispatch(actions.addCustomFieldAttribute(payload));\n },\n editCustomFieldAttribute(payload) {\n dispatch(actions.editCustomFieldAttribute(payload));\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n dispatch(actions.createSchema(payload));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n dispatch(actions.updateSchema(args));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["selectState","state","initialState","DataManagerProvider","children","dispatch","useDispatch","useSelector","components","contentTypes","reservedNames","initialComponents","initialContentTypes","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","useRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","reloadPlugin","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","adminApi","util","invalidateTags","success","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","payload","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","createSchema","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataManagerProvider.mjs","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useTracking,\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { ContentTypes, ContentType, Components } from '../../types';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n\n const isModified = React.useMemo(() => {\n return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));\n }, [components, contentTypes, initialComponents, initialContentTypes]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<any>();\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get(`/content-type-builder/schema`),\n fetchClient.get(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Invalidate the guided tour meta and homepage key statistics widget query cache\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: false });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: true });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(actions.addAttribute(payload));\n },\n editAttribute(payload) {\n dispatch(actions.editAttribute(payload));\n },\n addCustomFieldAttribute(payload) {\n dispatch(actions.addCustomFieldAttribute(payload));\n },\n editCustomFieldAttribute(payload) {\n dispatch(actions.editCustomFieldAttribute(payload));\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n dispatch(actions.createSchema(payload));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n dispatch(actions.updateSchema(args));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["selectState","state","initialState","DataManagerProvider","children","dispatch","useDispatch","useSelector","components","contentTypes","reservedNames","initialComponents","initialContentTypes","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","useRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","reloadPlugin","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","adminApi","util","invalidateTags","success","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","payload","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","createSchema","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":";;;;;;;;;;;;;;;;;;;AAqCA,MAAMA,cAAc,CAACC,KAAAA,GAClBA,KAAK,CAAC,2CAA2C,IAAIC,YAAAA;AAExD,MAAMC,mBAAsB,GAAA,CAAC,EAAEC,QAAQ,EAA4B,GAAA;AACjE,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;AACjB,IAAA,MAAML,QAAQM,WAAYP,CAAAA,WAAAA,CAAAA;AAE1B,IAAA,MAAM,EACJQ,UAAU,EACVC,YAAY,EACZC,aAAa,EACbC,iBAAiB,EACjBC,mBAAmB,EACnBC,SAAS,EACV,GAAGZ,MAAMa,OAAO;IAEjB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,qBAAqB,EAAEC,uBAAuB,EAAE,GAAGC,2BAAAA,EAAAA;AAC3D,IAAA,MAAMC,oBAAuBC,GAAAA,uBAAAA,EAAAA;AAE7B,IAAA,MAAMC,YAAYC,YAAa,CAAA,qBAAA,EAAuB,CAACtB,KAAAA,GAAUA,MAAMqB,SAAS,CAAA;AAChF,IAAA,MAAME,SAASF,SAAU,CAAA,sBAAA,CAAA;AACzB,IAAA,MAAMG,aAAaC,UAAW,CAAA,qBAAA,EAAuB,CAACzB,KAAAA,GAAUA,MAAMwB,UAAU,CAAA;IAChF,MAAM,EAAEE,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAMC,qBAAqBC,OAAQ,CAAA,qBAAA,EAAuB,CAAC/B,KAAAA,GAAUA,MAAM8B,kBAAkB,CAAA;IAC7F,MAAM,EAAEE,YAAY,EAAE,GAAGC,sBAAAA,EAAAA;AAEzB,IAAA,MAAM,CAACC,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IAE/C,MAAMC,UAAAA,GAAaF,KAAMG,CAAAA,OAAO,CAAC,IAAA;AAC/B,QAAA,OAAO,EAAEC,OAAAA,CAAQjC,YAAYG,iBAAsB8B,CAAAA,IAAAA,OAAAA,CAAQhC,cAAcG,mBAAmB,CAAA,CAAA;KAC3F,EAAA;AAACJ,QAAAA,UAAAA;AAAYC,QAAAA,YAAAA;AAAcE,QAAAA,iBAAAA;AAAmBC,QAAAA;AAAoB,KAAA,CAAA;AAErE,IAAA,MAAM8B,WAAcC,GAAAA,cAAAA,EAAAA;AAEpB,IAAA,MAAMC,mBAAsBnB,GAAAA,UAAAA;IAE5B,MAAMoB,UAAAA,GAAaR,MAAMS,MAAM,EAAA;AAE/BD,IAAAA,UAAAA,CAAW/B,OAAO,GAAG,UAAA;QACnB,IAAI;AACF,YAAA,MAAM,CAACiC,cAAgBC,EAAAA,qBAAAA,CAAsB,GAAG,MAAMC,OAAAA,CAAQC,GAAG,CAAC;AAChER,gBAAAA,WAAAA,CAAYS,GAAG,CAAC,CAAC,4BAA4B,CAAC,CAAA;AAC9CT,gBAAAA,WAAAA,CAAYS,GAAG,CAAC,CAAC,oCAAoC,CAAC;AACvD,aAAA,CAAA;YAED,MAAM,EAAE3C,UAAU,EAAEC,YAAY,EAAE,GAAGsC,cAAAA,CAAeK,IAAI,CAACA,IAAI;YAE7D/C,QACEgD,CAAAA,OAAAA,CAAQC,IAAI,CAAC;AACX9C,gBAAAA,UAAAA,EAAY+C,SAAU/C,CAAAA,UAAAA,EAAY,CAACgD,SAAAA,IAAe;AAChD,wBAAA,GAAGA,SAAS;wBACZC,MAAQ,EAAA;qBACV,CAAA,CAAA;AACAhD,gBAAAA,YAAAA,EAAc8C,SAAU9C,CAAAA,YAAAA,EAAc,CAACiD,WAAAA,IAAiB;AACtD,wBAAA,GAAGA,WAAW;wBACdD,MAAQ,EAAA;qBACV,CAAA,CAAA;AACA/C,gBAAAA,aAAAA,EAAesC,sBAAsBI;AACvC,aAAA,CAAA,CAAA;AAGF/C,YAAAA,QAAAA,CAASgD,QAAQM,YAAY,EAAA,CAAA;AAC/B,SAAA,CAAE,OAAOC,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAAC;AAAEF,gBAAAA;AAAI,aAAA,CAAA;YACpB7C,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAc,CAAA;oBAAEsC,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;AAEA7B,IAAAA,KAAAA,CAAM8B,SAAS,CAAC,IAAA;AACdtB,QAAAA,UAAAA,CAAW/B,OAAO,EAAA;QAElB,OAAO,IAAA;;AAELT,YAAAA,QAAAA,CAASgD,QAAQe,YAAY,EAAA,CAAA;AAC/B,SAAA;;AAEF,KAAA,EAAG,EAAE,CAAA;AAEL/B,IAAAA,KAAAA,CAAM8B,SAAS,CAAC,IAAA;AACd,QAAA,IAAI,CAAC1C,UAAY,EAAA;YACfV,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,MAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAc,CAAA;AAAEsC,oBAAAA,EAAAA,EAAII,OAAQ,CAAA,uCAAA;AAAyC,iBAAA;AAChF,aAAA,CAAA;AACF;KACC,EAAA;AAAC5C,QAAAA,UAAAA;AAAYV,QAAAA,kBAAAA;AAAoBY,QAAAA;AAAc,KAAA,CAAA;AAElD,IAAA,MAAM2C,sDAAsD,CAAC9D,UAAAA,GAAAA;AAC3D,QAAA,MAAM+D,mBAAmBC,oCAAqChE,CAAAA,UAAAA,CAAAA;QAE9D,OAAO+D,gBAAAA;AACT,KAAA;AAEA,IAAA,MAAME,yBAAyB,CAACjE,UAAAA,GAAAA;AAC9B,QAAA,MAAMkE,iBAAiBC,wBAAyBnE,CAAAA,UAAAA,CAAAA;QAEhD,OAAOkE,cAAAA;AACT,KAAA;AAEA,IAAA,MAAME,iBAAoB,GAAA,UAAA;QACxB,MAAM7C,kBAAAA,EAAAA;AACR,KAAA;AAEA,IAAA,MAAM8C,UAAa,GAAA,UAAA;QACjBzC,WAAY,CAAA,IAAA,CAAA;QAEZ,MAAM0C,WAAAA,GAActD,QAAQuD,IAAMC,EAAAA,KAAAA;AAElC,QAAA,MAAMC,UAAaC,GAAAA,MAAAA,CAAOC,OAAO,CAAClF,MAAMa,OAAO,CAACL,YAAY,CAAA,CAAE2E,MAAM,CAClE,CAACC,GAAK,EAAA,CAACC,KAAK5B,WAAY,CAAA,GAAA;YACtB2B,GAAG,CAACC,IAAI,GAAGR,WAAAA,CAAYS,uBAAuB,CAC5C7B,WAAAA,EACA9C,mBAAmB,CAAC0E,GAAI,CAAA,CAAA;YAG1B,OAAOD,GAAAA;AACT,SAAA,EACA,EAAC,CAAA;AAGH,QAAA,MAAM,EAAEG,WAAW,EAAEC,uBAAuB,EAAE,GAAGC,kBAAmB,CAAA;YAClElF,UAAYP,EAAAA,KAAAA,CAAMa,OAAO,CAACN,UAAU;YACpCC,YAAcwE,EAAAA;AAChB,SAAA,CAAA;QAEA,MAAMU,qBAAAA,GAAwBT,MAAOU,CAAAA,IAAI,CAAC3F,KAAAA,CAAMa,OAAO,CAACL,YAAY,CAAEoF,CAAAA,MAAM,GAAG,CAAA;AAE/E5E,QAAAA,qBAAAA,EAAAA;QAEA,IAAI;AACF,YAAA,MAAMyB,YAAYoD,IAAI,CAAC,CAAC,mCAAmC,CAAC,EAAE;gBAAE1C,IAAMoC,EAAAA;AAAY,aAAA,CAAA;AAElF,YAAA,IAAIG,qBAAuB,EAAA;gBACzB9D,UAAW,CAAA,mCAAA,CAAA;AACb;;YAGA,MAAMT,oBAAAA,EAAAA;;AAENf,YAAAA,QAAAA,CAAS0F,QAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA,gBAAA;AAAkB,gBAAA;AAAwB,aAAA,CAAA,CAAA;;AAEjF,YAAA,MAAMpD,WAAW/B,OAAO,EAAA;;YAExB,MAAM8D,iBAAAA,EAAAA;AACR,SAAA,CAAE,OAAOhB,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAAC;AAAEF,gBAAAA;AAAI,aAAA,CAAA;YACpB7C,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAc,CAAA;oBAAEsC,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AAEArC,YAAAA,UAAAA,CAAW,oBAAsB,EAAA;AAAE,gBAAA,GAAG4D,uBAAuB;gBAAES,OAAS,EAAA;AAAM,aAAA,CAAA;SACtE,QAAA;YACR9D,WAAY,CAAA,KAAA,CAAA;AACZlB,YAAAA,uBAAAA,EAAAA;AAEAW,YAAAA,UAAAA,CAAW,oBAAsB,EAAA;AAAE,gBAAA,GAAG4D,uBAAuB;gBAAES,OAAS,EAAA;AAAK,aAAA,CAAA;AAC/E;AACF,KAAA;IAEA,MAAMC,iDAAAA,GAAoD9D,KAAMG,CAAAA,OAAO,CAAC,IAAA;AACtE,QAAA,OAAO8B,mDAAoD9D,CAAAA,UAAAA,CAAAA;KAC1D,EAAA;AAACA,QAAAA;AAAW,KAAA,CAAA;IAEf,MAAM4F,gBAAAA,GAAmB/D,KAAMG,CAAAA,OAAO,CAAC,IAAA;AACrC,QAAA,OAAOiC,sBAAuBjE,CAAAA,UAAAA,CAAAA;KAC7B,EAAA;AAACA,QAAAA;AAAW,KAAA,CAAA;IAEf,MAAM6F,uBAAAA,GAA0BhE,KAAMG,CAAAA,OAAO,CAAC,IAAA;AAC5C,QAAA,OAAO8D,mCAAmC9F,UAAY,EAAA;AAAC,YAAA;AAAW,SAAA,CAAA;KACjE,EAAA;AAACA,QAAAA;AAAW,KAAA,CAAA;IAEf,MAAM+F,2BAAAA,GAA8BlE,KAAMG,CAAAA,OAAO,CAAC,IAAA;AAChD,QAAA,OAAOgE,QAAQhG,UAAY,EAAA,UAAA,CAAA;KAC1B,EAAA;AAACA,QAAAA;AAAW,KAAA,CAAA;IAEf,MAAMiG,sBAAAA,GAAyBpE,KAAMG,CAAAA,OAAO,CAAC,IAAA;AAC3C,QAAA,OAAOkE,eAAgBjG,CAAAA,YAAAA,CAAAA;KACtB,EAAA;AAACA,QAAAA;AAAa,KAAA,CAAA;AAEjB,IAAA,MAAMkG,OAAmC,GAAA;AACvCR,QAAAA,iDAAAA;AACAC,QAAAA,gBAAAA;AACAvB,QAAAA,UAAAA;AACAnE,QAAAA,aAAAA;AACAF,QAAAA,UAAAA;AACAC,QAAAA,YAAAA;AACAE,QAAAA,iBAAAA;AACAC,QAAAA,mBAAAA;AACAuB,QAAAA,QAAAA;AACAI,QAAAA,UAAAA;AACAK,QAAAA,mBAAAA;AACAyD,QAAAA,uBAAAA;AACAE,QAAAA,2BAAAA;AACAE,QAAAA,sBAAAA;AACA5F,QAAAA,SAAAA;AACA+F,QAAAA,YAAAA,CAAAA,CAAaC,OAAO,EAAA;YAClBxG,QAASgD,CAAAA,OAAAA,CAAQuD,YAAY,CAACC,OAAAA,CAAAA,CAAAA;AAChC,SAAA;AACAC,QAAAA,aAAAA,CAAAA,CAAcD,OAAO,EAAA;YACnBxG,QAASgD,CAAAA,OAAAA,CAAQyD,aAAa,CAACD,OAAAA,CAAAA,CAAAA;AACjC,SAAA;AACAE,QAAAA,uBAAAA,CAAAA,CAAwBF,OAAO,EAAA;YAC7BxG,QAASgD,CAAAA,OAAAA,CAAQ0D,uBAAuB,CAACF,OAAAA,CAAAA,CAAAA;AAC3C,SAAA;AACAG,QAAAA,wBAAAA,CAAAA,CAAyBH,OAAO,EAAA;YAC9BxG,QAASgD,CAAAA,OAAAA,CAAQ2D,wBAAwB,CAACH,OAAAA,CAAAA,CAAAA;AAC5C,SAAA;AACAI,QAAAA,gCAAAA,CAAAA,CAAiCJ,OAAO,EAAA;YACtCxG,QAASgD,CAAAA,OAAAA,CAAQ4D,gCAAgC,CAACJ,OAAAA,CAAAA,CAAAA;AACpD,SAAA;AACAK,QAAAA,YAAAA,CAAAA,CAAaL,OAAO,EAAA;YAClBxG,QAASgD,CAAAA,OAAAA,CAAQ6D,YAAY,CAACL,OAAAA,CAAAA,CAAAA;AAChC,SAAA;AACAM,QAAAA,qBAAAA,CAAAA,CAAsB,EAAE/D,IAAI,EAAEkC,GAAG,EAAE8B,iBAAiB,EAAE,EAAA;YACpD/G,QAASgD,CAAAA,OAAAA,CAAQ8D,qBAAqB,CAAC;AAAE/D,gBAAAA,IAAAA;AAAMkC,gBAAAA,GAAAA;AAAK8B,gBAAAA;AAAkB,aAAA,CAAA,CAAA;AACxE,SAAA;QACAC,2BAA4B,CAAA,CAAA,EAAEC,SAAS,EAAEC,SAAS,EAAEC,iBAAiB,EAAEC,aAAa,EAAE,EAAA;YACpFpH,QACEgD,CAAAA,OAAAA,CAAQgE,2BAA2B,CAAC;AAClCC,gBAAAA,SAAAA;AACAC,gBAAAA,SAAAA;AACAC,gBAAAA,iBAAAA;AACAC,gBAAAA;AACF,aAAA,CAAA,CAAA;AAEJ,SAAA;AACAC,QAAAA,eAAAA,CAAAA,CAAgBb,OAAO,EAAA;YACrB,IAAIA,OAAAA,CAAQS,SAAS,KAAK,aAAe,EAAA;gBACvCzF,UAAW,CAAA,8BAAA,CAAA;AACb;YAEAxB,QAASgD,CAAAA,OAAAA,CAAQsE,WAAW,CAACd,OAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACAe,QAAAA,8BAAAA,CAAAA,CAA+Bf,OAAO,EAAA;YACpCxG,QAASgD,CAAAA,OAAAA,CAAQuE,8BAA8B,CAACf,OAAAA,CAAAA,CAAAA;AAClD,SAAA;AACAgB,QAAAA,eAAAA,CAAAA,CAAgBvC,GAA2B,EAAA;AACzC,YAAA,MAAMwC,WAAcC,GAAAA,MAAAA,CAAOC,OAAO,CAChCrG,aAAc,CAAA;gBACZsC,EAAII,EAAAA,OAAAA,CAAQ,CAAC,yCAAyC,CAAC;AACzD,aAAA,CAAA,CAAA;AAGF,YAAA,IAAIyD,WAAa,EAAA;AACf7F,gBAAAA,YAAAA,EAAAA;gBAEA5B,QAASgD,CAAAA,OAAAA,CAAQwE,eAAe,CAACvC,GAAAA,CAAAA,CAAAA;AACnC;AACF,SAAA;AACA2C,QAAAA,iBAAAA,CAAAA,CAAkB3C,GAA6B,EAAA;AAC7C,YAAA,MAAMwC,WAAcC,GAAAA,MAAAA,CAAOC,OAAO,CAChCrG,aAAc,CAAA;gBACZsC,EAAII,EAAAA,OAAAA,CAAQ,CAAC,2CAA2C,CAAC;AAC3D,aAAA,CAAA,CAAA;AAGF,YAAA,IAAIyD,WAAa,EAAA;AACf7F,gBAAAA,YAAAA,EAAAA;gBAEA5B,QAASgD,CAAAA,OAAAA,CAAQ4E,iBAAiB,CAAC3C,GAAAA,CAAAA,CAAAA;AACrC;AACF,SAAA;AAEA4C,QAAAA,qBAAAA,CAAAA,CAAsB,EAAE9E,IAAI,EAAE+E,YAAY,EAAE,EAAA;YAC1C9H,QACEgD,CAAAA,OAAAA,CAAQ6E,qBAAqB,CAAC;AAC5B9E,gBAAAA,IAAAA;gBACAkC,GAAK6C,EAAAA;AACP,aAAA,CAAA,CAAA;AAEJ,SAAA;AAEAC,QAAAA,kBAAAA,CAAAA,CAAmB,EAAED,YAAY,EAAEE,eAAe,EAAE,EAAA;YAClDhI,QACEgD,CAAAA,OAAAA,CAAQ+E,kBAAkB,CAAC;gBACzB9C,GAAK6C,EAAAA,YAAAA;AACLE,gBAAAA;AACF,aAAA,CAAA,CAAA;AAEJ,SAAA;AAEAC,QAAAA,YAAAA,CAAAA,CAAaC,IAAI,EAAA;YACflI,QAASgD,CAAAA,OAAAA,CAAQiF,YAAY,CAACC,IAAAA,CAAAA,CAAAA;AAChC,SAAA;AAEAC,QAAAA,aAAAA,CAAAA,CAAcD,IAAI,EAAA;YAChBlI,QAASgD,CAAAA,OAAAA,CAAQmF,aAAa,CAACD,IAAAA,CAAAA,CAAAA;AACjC,SAAA;AAEAE,QAAAA,WAAAA,CAAAA,CAAYF,IAAI,EAAA;YACdlI,QAASgD,CAAAA,OAAAA,CAAQoF,WAAW,CAACF,IAAAA,CAAAA,CAAAA;AAC/B,SAAA;QAEAG,OAAS,EAAA;AACPC,YAAAA,IAAAA,CAAAA,GAAAA;AACEtI,gBAAAA,QAAAA,CAASgD,QAAQsF,IAAI,EAAA,CAAA;AACvB,aAAA;AAEAC,YAAAA,IAAAA,CAAAA,GAAAA;AACEvI,gBAAAA,QAAAA,CAASgD,QAAQuF,IAAI,EAAA,CAAA;AACvB,aAAA;AAEAC,YAAAA,iBAAAA,CAAAA,GAAAA;AACExI,gBAAAA,QAAAA,CAASgD,QAAQyF,UAAU,EAAA,CAAA;AAC7B,aAAA;AAEAC,YAAAA,OAAAA,EAAS9I,KAAM+I,CAAAA,IAAI,CAACnD,MAAM,GAAG,CAAA;AAC7BoD,YAAAA,OAAAA,EAAShJ,KAAMiJ,CAAAA,MAAM,CAACrD,MAAM,GAAG,CAAA;YAC/BsD,aAAe5G,EAAAA;AACjB;AACF,KAAA;IAEA,qBAAO6G,GAAA,CAACC,mBAAmBC,QAAQ,EAAA;QAACC,KAAO5C,EAAAA,OAAAA;AAAUvG,QAAAA,QAAAA,EAAAA;;AACvD;;;;"}
|
|
@@ -11,36 +11,39 @@ const PluralName = ({ description, error, intlLabel, modifiedData, name, onChang
|
|
|
11
11
|
const { formatMessage } = reactIntl.useIntl();
|
|
12
12
|
const onChangeRef = React.useRef(onChange);
|
|
13
13
|
const displayName = modifiedData?.displayName || '';
|
|
14
|
+
const previousDisplayName = React.useRef(displayName);
|
|
15
|
+
const previousValue = React.useRef(value);
|
|
14
16
|
React.useEffect(()=>{
|
|
15
|
-
if (displayName) {
|
|
16
|
-
const
|
|
17
|
+
if (displayName && displayName !== previousDisplayName.current) {
|
|
18
|
+
const baseValue = nameToSlug.nameToSlug(displayName);
|
|
19
|
+
let newValue = baseValue;
|
|
17
20
|
try {
|
|
18
|
-
|
|
19
|
-
onChangeRef.current({
|
|
20
|
-
target: {
|
|
21
|
-
name,
|
|
22
|
-
value: plural
|
|
23
|
-
}
|
|
24
|
-
});
|
|
21
|
+
newValue = pluralize(baseValue, 2);
|
|
25
22
|
} catch (err) {
|
|
26
|
-
|
|
27
|
-
target: {
|
|
28
|
-
name,
|
|
29
|
-
value
|
|
30
|
-
}
|
|
31
|
-
});
|
|
23
|
+
// If pluralize fails, use the base value
|
|
32
24
|
}
|
|
33
|
-
|
|
25
|
+
onChangeRef.current({
|
|
26
|
+
target: {
|
|
27
|
+
name,
|
|
28
|
+
value: newValue
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
previousValue.current = newValue;
|
|
32
|
+
previousDisplayName.current = displayName;
|
|
33
|
+
} else if (!displayName) {
|
|
34
34
|
onChangeRef.current({
|
|
35
35
|
target: {
|
|
36
36
|
name,
|
|
37
37
|
value: ''
|
|
38
38
|
}
|
|
39
39
|
});
|
|
40
|
+
previousValue.current = '';
|
|
41
|
+
previousDisplayName.current = '';
|
|
40
42
|
}
|
|
41
43
|
}, [
|
|
42
44
|
displayName,
|
|
43
|
-
name
|
|
45
|
+
name,
|
|
46
|
+
value
|
|
44
47
|
]);
|
|
45
48
|
const errorMessage = error ? formatMessage({
|
|
46
49
|
id: error,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluralName.js","sources":["../../../admin/src/components/PluralName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface PluralNameProps {\n description?: Description;\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const PluralName = ({\n description,\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value,\n}: PluralNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName) {\n const
|
|
1
|
+
{"version":3,"file":"PluralName.js","sources":["../../../admin/src/components/PluralName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface PluralNameProps {\n description?: Description;\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const PluralName = ({\n description,\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value,\n}: PluralNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n const previousDisplayName = useRef(displayName);\n const previousValue = useRef(value);\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const baseValue = nameToSlug(displayName);\n let newValue = baseValue;\n\n try {\n newValue = pluralize(baseValue, 2);\n } catch (err) {\n // If pluralize fails, use the base value\n }\n\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n </Field.Root>\n );\n};\n"],"names":["PluralName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","displayName","previousDisplayName","previousValue","useEffect","current","baseValue","nameToSlug","newValue","pluralize","err","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","Error"],"mappings":";;;;;;;;;MA0BaA,UAAa,GAAA,CAAC,EACzBC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAK,EACW,GAAA;IAChB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,YAAOL,CAAAA,QAAAA,CAAAA;IAC3B,MAAMM,WAAAA,GAAcR,cAAcQ,WAAe,IAAA,EAAA;AACjD,IAAA,MAAMC,sBAAsBF,YAAOC,CAAAA,WAAAA,CAAAA;AACnC,IAAA,MAAME,gBAAgBH,YAAOJ,CAAAA,KAAAA,CAAAA;IAE7BQ,eAAU,CAAA,IAAA;AACR,QAAA,IAAIH,WAAeA,IAAAA,WAAAA,KAAgBC,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,YAAYC,qBAAWN,CAAAA,WAAAA,CAAAA;AAC7B,YAAA,IAAIO,QAAWF,GAAAA,SAAAA;YAEf,IAAI;AACFE,gBAAAA,QAAAA,GAAWC,UAAUH,SAAW,EAAA,CAAA,CAAA;AAClC,aAAA,CAAE,OAAOI,GAAK,EAAA;;AAEd;AAEAX,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAOY,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcE,OAAO,GAAGG,QAAAA;AACxBN,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGJ,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBF,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDO,YAAAA,aAAAA,CAAcE,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACJ,QAAAA,WAAAA;AAAaP,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMgB,YAAAA,GAAerB,QAAQM,aAAc,CAAA;QAAEgB,EAAItB,EAAAA,KAAAA;QAAOuB,cAAgBvB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMwB,IAAAA,GAAOzB,cACTO,aACE,CAAA;AAAEgB,QAAAA,EAAAA,EAAIvB,YAAYuB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBxB,YAAYwB;KAClD,EAAA;AAAE,QAAA,GAAGxB,YAAY0B;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQpB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACE0B,eAAA,CAACC,mBAAMC,IAAI,EAAA;QAAC7B,KAAOqB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMrB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAA2B,cAAA,CAACF,mBAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,cAACE,CAAAA,sBAAAA,EAAAA;gBAAU5B,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA;;AAC/C,0BAAAyB,cAAA,CAACF,mBAAMK,KAAK,EAAA,EAAA;;;AAGlB;;;;"}
|
|
@@ -9,36 +9,39 @@ const PluralName = ({ description, error, intlLabel, modifiedData, name, onChang
|
|
|
9
9
|
const { formatMessage } = useIntl();
|
|
10
10
|
const onChangeRef = useRef(onChange);
|
|
11
11
|
const displayName = modifiedData?.displayName || '';
|
|
12
|
+
const previousDisplayName = useRef(displayName);
|
|
13
|
+
const previousValue = useRef(value);
|
|
12
14
|
useEffect(()=>{
|
|
13
|
-
if (displayName) {
|
|
14
|
-
const
|
|
15
|
+
if (displayName && displayName !== previousDisplayName.current) {
|
|
16
|
+
const baseValue = nameToSlug(displayName);
|
|
17
|
+
let newValue = baseValue;
|
|
15
18
|
try {
|
|
16
|
-
|
|
17
|
-
onChangeRef.current({
|
|
18
|
-
target: {
|
|
19
|
-
name,
|
|
20
|
-
value: plural
|
|
21
|
-
}
|
|
22
|
-
});
|
|
19
|
+
newValue = pluralize(baseValue, 2);
|
|
23
20
|
} catch (err) {
|
|
24
|
-
|
|
25
|
-
target: {
|
|
26
|
-
name,
|
|
27
|
-
value
|
|
28
|
-
}
|
|
29
|
-
});
|
|
21
|
+
// If pluralize fails, use the base value
|
|
30
22
|
}
|
|
31
|
-
|
|
23
|
+
onChangeRef.current({
|
|
24
|
+
target: {
|
|
25
|
+
name,
|
|
26
|
+
value: newValue
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
previousValue.current = newValue;
|
|
30
|
+
previousDisplayName.current = displayName;
|
|
31
|
+
} else if (!displayName) {
|
|
32
32
|
onChangeRef.current({
|
|
33
33
|
target: {
|
|
34
34
|
name,
|
|
35
35
|
value: ''
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
|
+
previousValue.current = '';
|
|
39
|
+
previousDisplayName.current = '';
|
|
38
40
|
}
|
|
39
41
|
}, [
|
|
40
42
|
displayName,
|
|
41
|
-
name
|
|
43
|
+
name,
|
|
44
|
+
value
|
|
42
45
|
]);
|
|
43
46
|
const errorMessage = error ? formatMessage({
|
|
44
47
|
id: error,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluralName.mjs","sources":["../../../admin/src/components/PluralName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface PluralNameProps {\n description?: Description;\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const PluralName = ({\n description,\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value,\n}: PluralNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName) {\n const
|
|
1
|
+
{"version":3,"file":"PluralName.mjs","sources":["../../../admin/src/components/PluralName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface PluralNameProps {\n description?: Description;\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const PluralName = ({\n description,\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value,\n}: PluralNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n const previousDisplayName = useRef(displayName);\n const previousValue = useRef(value);\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const baseValue = nameToSlug(displayName);\n let newValue = baseValue;\n\n try {\n newValue = pluralize(baseValue, 2);\n } catch (err) {\n // If pluralize fails, use the base value\n }\n\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n </Field.Root>\n );\n};\n"],"names":["PluralName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","displayName","previousDisplayName","previousValue","useEffect","current","baseValue","nameToSlug","newValue","pluralize","err","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","Error"],"mappings":";;;;;;;MA0BaA,UAAa,GAAA,CAAC,EACzBC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAK,EACW,GAAA;IAChB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,MAAOL,CAAAA,QAAAA,CAAAA;IAC3B,MAAMM,WAAAA,GAAcR,cAAcQ,WAAe,IAAA,EAAA;AACjD,IAAA,MAAMC,sBAAsBF,MAAOC,CAAAA,WAAAA,CAAAA;AACnC,IAAA,MAAME,gBAAgBH,MAAOJ,CAAAA,KAAAA,CAAAA;IAE7BQ,SAAU,CAAA,IAAA;AACR,QAAA,IAAIH,WAAeA,IAAAA,WAAAA,KAAgBC,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,YAAYC,UAAWN,CAAAA,WAAAA,CAAAA;AAC7B,YAAA,IAAIO,QAAWF,GAAAA,SAAAA;YAEf,IAAI;AACFE,gBAAAA,QAAAA,GAAWC,UAAUH,SAAW,EAAA,CAAA,CAAA;AAClC,aAAA,CAAE,OAAOI,GAAK,EAAA;;AAEd;AAEAX,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAOY,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcE,OAAO,GAAGG,QAAAA;AACxBN,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGJ,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBF,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDO,YAAAA,aAAAA,CAAcE,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACJ,QAAAA,WAAAA;AAAaP,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMgB,YAAAA,GAAerB,QAAQM,aAAc,CAAA;QAAEgB,EAAItB,EAAAA,KAAAA;QAAOuB,cAAgBvB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMwB,IAAAA,GAAOzB,cACTO,aACE,CAAA;AAAEgB,QAAAA,EAAAA,EAAIvB,YAAYuB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBxB,YAAYwB;KAClD,EAAA;AAAE,QAAA,GAAGxB,YAAY0B;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQpB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACE0B,IAAA,CAACC,MAAMC,IAAI,EAAA;QAAC7B,KAAOqB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMrB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAA2B,GAAA,CAACF,MAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,GAACE,CAAAA,SAAAA,EAAAA;gBAAU5B,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA;;AAC/C,0BAAAyB,GAAA,CAACF,MAAMK,KAAK,EAAA,EAAA;;;AAGlB;;;;"}
|
|
@@ -9,26 +9,34 @@ var nameToSlug = require('../utils/nameToSlug.js');
|
|
|
9
9
|
const SingularName = ({ description = null, error = null, intlLabel, modifiedData, name, onChange, value = null })=>{
|
|
10
10
|
const { formatMessage } = reactIntl.useIntl();
|
|
11
11
|
const onChangeRef = React.useRef(onChange);
|
|
12
|
+
const previousValue = React.useRef(value);
|
|
13
|
+
const previousDisplayName = React.useRef(modifiedData?.displayName || '');
|
|
12
14
|
const displayName = modifiedData?.displayName || '';
|
|
13
15
|
React.useEffect(()=>{
|
|
14
|
-
if (displayName) {
|
|
16
|
+
if (displayName && displayName !== previousDisplayName.current) {
|
|
17
|
+
const newValue = nameToSlug.nameToSlug(displayName);
|
|
15
18
|
onChangeRef.current({
|
|
16
19
|
target: {
|
|
17
20
|
name,
|
|
18
|
-
value:
|
|
21
|
+
value: newValue
|
|
19
22
|
}
|
|
20
23
|
});
|
|
21
|
-
|
|
24
|
+
previousValue.current = newValue;
|
|
25
|
+
previousDisplayName.current = displayName;
|
|
26
|
+
} else if (!displayName) {
|
|
22
27
|
onChangeRef.current({
|
|
23
28
|
target: {
|
|
24
29
|
name,
|
|
25
30
|
value: ''
|
|
26
31
|
}
|
|
27
32
|
});
|
|
33
|
+
previousValue.current = '';
|
|
34
|
+
previousDisplayName.current = '';
|
|
28
35
|
}
|
|
29
36
|
}, [
|
|
30
37
|
displayName,
|
|
31
|
-
name
|
|
38
|
+
name,
|
|
39
|
+
value
|
|
32
40
|
]);
|
|
33
41
|
const errorMessage = error ? formatMessage({
|
|
34
42
|
id: error,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingularName.js","sources":["../../../admin/src/components/SingularName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface SingularNameProps {\n description?: IntlLabel | null;\n error?: string | null;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string | null;\n}\n\nexport const SingularName = ({\n description = null,\n error = null,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: SingularNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName) {\n onChangeRef.current({ target: { name, value:
|
|
1
|
+
{"version":3,"file":"SingularName.js","sources":["../../../admin/src/components/SingularName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface SingularNameProps {\n description?: IntlLabel | null;\n error?: string | null;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string | null;\n}\n\nexport const SingularName = ({\n description = null,\n error = null,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: SingularNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const previousValue = useRef(value);\n const previousDisplayName = useRef(modifiedData?.displayName || '');\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const newValue = nameToSlug(displayName);\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n"],"names":["SingularName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","previousValue","previousDisplayName","displayName","useEffect","current","newValue","nameToSlug","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","Error","Hint"],"mappings":";;;;;;;;AAmBO,MAAMA,eAAe,CAAC,EAC3BC,cAAc,IAAI,EAClBC,QAAQ,IAAI,EACZC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAAA,GAAQ,IAAI,EACM,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,YAAOL,CAAAA,QAAAA,CAAAA;AAC3B,IAAA,MAAMM,gBAAgBD,YAAOJ,CAAAA,KAAAA,CAAAA;IAC7B,MAAMM,mBAAAA,GAAsBF,YAAOP,CAAAA,YAAAA,EAAcU,WAAe,IAAA,EAAA,CAAA;IAChE,MAAMA,WAAAA,GAAcV,cAAcU,WAAe,IAAA,EAAA;IAEjDC,eAAU,CAAA,IAAA;AACR,QAAA,IAAID,WAAeA,IAAAA,WAAAA,KAAgBD,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,WAAWC,qBAAWJ,CAAAA,WAAAA,CAAAA;AAC5BJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAOU,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcI,OAAO,GAAGC,QAAAA;AACxBJ,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGF,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDK,YAAAA,aAAAA,CAAcI,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACF,QAAAA,WAAAA;AAAaT,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMa,YAAAA,GAAelB,QAAQM,aAAc,CAAA;QAAEa,EAAInB,EAAAA,KAAAA;QAAOoB,cAAgBpB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMqB,IAAAA,GAAOtB,cACTO,aACE,CAAA;AAAEa,QAAAA,EAAAA,EAAIpB,YAAYoB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBrB,YAAYqB;KAClD,EAAA;AAAE,QAAA,GAAGrB,YAAYuB;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQjB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACEuB,eAAA,CAACC,mBAAMC,IAAI,EAAA;QAAC1B,KAAOkB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMlB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAAwB,cAAA,CAACF,mBAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,cAACE,CAAAA,sBAAAA,EAAAA;gBAAUzB,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA;;AAC/C,0BAAAsB,cAAA,CAACF,mBAAMK,KAAK,EAAA,EAAA,CAAA;AACZ,0BAAAH,cAAA,CAACF,mBAAMM,IAAI,EAAA,EAAA;;;AAGjB;;;;"}
|
|
@@ -7,26 +7,34 @@ import { nameToSlug } from '../utils/nameToSlug.mjs';
|
|
|
7
7
|
const SingularName = ({ description = null, error = null, intlLabel, modifiedData, name, onChange, value = null })=>{
|
|
8
8
|
const { formatMessage } = useIntl();
|
|
9
9
|
const onChangeRef = useRef(onChange);
|
|
10
|
+
const previousValue = useRef(value);
|
|
11
|
+
const previousDisplayName = useRef(modifiedData?.displayName || '');
|
|
10
12
|
const displayName = modifiedData?.displayName || '';
|
|
11
13
|
useEffect(()=>{
|
|
12
|
-
if (displayName) {
|
|
14
|
+
if (displayName && displayName !== previousDisplayName.current) {
|
|
15
|
+
const newValue = nameToSlug(displayName);
|
|
13
16
|
onChangeRef.current({
|
|
14
17
|
target: {
|
|
15
18
|
name,
|
|
16
|
-
value:
|
|
19
|
+
value: newValue
|
|
17
20
|
}
|
|
18
21
|
});
|
|
19
|
-
|
|
22
|
+
previousValue.current = newValue;
|
|
23
|
+
previousDisplayName.current = displayName;
|
|
24
|
+
} else if (!displayName) {
|
|
20
25
|
onChangeRef.current({
|
|
21
26
|
target: {
|
|
22
27
|
name,
|
|
23
28
|
value: ''
|
|
24
29
|
}
|
|
25
30
|
});
|
|
31
|
+
previousValue.current = '';
|
|
32
|
+
previousDisplayName.current = '';
|
|
26
33
|
}
|
|
27
34
|
}, [
|
|
28
35
|
displayName,
|
|
29
|
-
name
|
|
36
|
+
name,
|
|
37
|
+
value
|
|
30
38
|
]);
|
|
31
39
|
const errorMessage = error ? formatMessage({
|
|
32
40
|
id: error,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingularName.mjs","sources":["../../../admin/src/components/SingularName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface SingularNameProps {\n description?: IntlLabel | null;\n error?: string | null;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string | null;\n}\n\nexport const SingularName = ({\n description = null,\n error = null,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: SingularNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName) {\n onChangeRef.current({ target: { name, value:
|
|
1
|
+
{"version":3,"file":"SingularName.mjs","sources":["../../../admin/src/components/SingularName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface SingularNameProps {\n description?: IntlLabel | null;\n error?: string | null;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string | null;\n}\n\nexport const SingularName = ({\n description = null,\n error = null,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: SingularNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const previousValue = useRef(value);\n const previousDisplayName = useRef(modifiedData?.displayName || '');\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const newValue = nameToSlug(displayName);\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n"],"names":["SingularName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","previousValue","previousDisplayName","displayName","useEffect","current","newValue","nameToSlug","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","Error","Hint"],"mappings":";;;;;;AAmBO,MAAMA,eAAe,CAAC,EAC3BC,cAAc,IAAI,EAClBC,QAAQ,IAAI,EACZC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAAA,GAAQ,IAAI,EACM,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,MAAOL,CAAAA,QAAAA,CAAAA;AAC3B,IAAA,MAAMM,gBAAgBD,MAAOJ,CAAAA,KAAAA,CAAAA;IAC7B,MAAMM,mBAAAA,GAAsBF,MAAOP,CAAAA,YAAAA,EAAcU,WAAe,IAAA,EAAA,CAAA;IAChE,MAAMA,WAAAA,GAAcV,cAAcU,WAAe,IAAA,EAAA;IAEjDC,SAAU,CAAA,IAAA;AACR,QAAA,IAAID,WAAeA,IAAAA,WAAAA,KAAgBD,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,WAAWC,UAAWJ,CAAAA,WAAAA,CAAAA;AAC5BJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAOU,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcI,OAAO,GAAGC,QAAAA;AACxBJ,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGF,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDK,YAAAA,aAAAA,CAAcI,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACF,QAAAA,WAAAA;AAAaT,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMa,YAAAA,GAAelB,QAAQM,aAAc,CAAA;QAAEa,EAAInB,EAAAA,KAAAA;QAAOoB,cAAgBpB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMqB,IAAAA,GAAOtB,cACTO,aACE,CAAA;AAAEa,QAAAA,EAAAA,EAAIpB,YAAYoB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBrB,YAAYqB;KAClD,EAAA;AAAE,QAAA,GAAGrB,YAAYuB;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQjB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACEuB,IAAA,CAACC,MAAMC,IAAI,EAAA;QAAC1B,KAAOkB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMlB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAAwB,GAAA,CAACF,MAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,GAACE,CAAAA,SAAAA,EAAAA;gBAAUzB,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA;;AAC/C,0BAAAsB,GAAA,CAACF,MAAMK,KAAK,EAAA,EAAA,CAAA;AACZ,0BAAAH,GAAA,CAACF,MAAMM,IAAI,EAAA,EAAA;;;AAGjB;;;;"}
|
|
@@ -12,6 +12,7 @@ const reservedAttributes = [
|
|
|
12
12
|
'created_at',
|
|
13
13
|
'updated_at',
|
|
14
14
|
'published_at',
|
|
15
|
+
// V6: we will need to add first_published_at when it becomes the default behaviour
|
|
15
16
|
'created_by_id',
|
|
16
17
|
'updated_by_id',
|
|
17
18
|
// does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sources":["../../../server/src/services/builder.ts"],"sourcesContent":["import { snakeCase } from 'lodash/fp';\n\n// use snake_case\nexport const reservedAttributes = [\n // TODO: these need to come from a centralized place so we don't break things accidentally in the future and can share them outside the CTB, for example on Strapi bootstrap prior to schema db sync\n\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'status',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n// use snake_case\nexport const reservedModels = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nexport const getReservedNames = () => {\n return {\n models: reservedModels,\n attributes: reservedAttributes,\n };\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedModelName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedModels.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedModels\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedAttributeName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedAttributes.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedAttributes\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n"],"names":["reservedAttributes","reservedModels","getReservedNames","models","attributes","isReservedModelName","name","snakeCaseName","snakeCase","includes","filter","key","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName"],"mappings":";;;;AAEA;MACaA,kBAAqB,GAAA;;;AAIhC,IAAA,IAAA;AACA,IAAA,aAAA;;AAGA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA
|
|
1
|
+
{"version":3,"file":"builder.js","sources":["../../../server/src/services/builder.ts"],"sourcesContent":["import { snakeCase } from 'lodash/fp';\n\n// use snake_case\nexport const reservedAttributes = [\n // TODO: these need to come from a centralized place so we don't break things accidentally in the future and can share them outside the CTB, for example on Strapi bootstrap prior to schema db sync\n\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n // V6: we will need to add first_published_at when it becomes the default behaviour\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'status',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n// use snake_case\nexport const reservedModels = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nexport const getReservedNames = () => {\n return {\n models: reservedModels,\n attributes: reservedAttributes,\n };\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedModelName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedModels.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedModels\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedAttributeName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedAttributes.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedAttributes\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n"],"names":["reservedAttributes","reservedModels","getReservedNames","models","attributes","isReservedModelName","name","snakeCaseName","snakeCase","includes","filter","key","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName"],"mappings":";;;;AAEA;MACaA,kBAAqB,GAAA;;;AAIhC,IAAA,IAAA;AACA,IAAA,aAAA;;AAGA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA;;AAEA,IAAA,eAAA;AACA,IAAA,eAAA;;AAEA,IAAA,YAAA;AACA,IAAA,YAAA;;AAGA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,eAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,aAAA;AACA,IAAA,eAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;;AAGF;MACaC,cAAiB,GAAA;AAC5B,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,WAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,UAAA;AACA,IAAA,MAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;;MAGWC,gBAAmB,GAAA,IAAA;IAC9B,OAAO;QACLC,MAAQF,EAAAA,cAAAA;QACRG,UAAYJ,EAAAA;AACd,KAAA;AACF;AAEA;AACO,MAAMK,sBAAsB,CAACC,IAAAA,GAAAA;AAClC,IAAA,MAAMC,gBAAgBC,YAAUF,CAAAA,IAAAA,CAAAA;IAChC,IAAIL,cAAAA,CAAeQ,QAAQ,CAACF,aAAgB,CAAA,EAAA;QAC1C,OAAO,IAAA;AACT;IAEA,IACEN,cAAAA,CACGS,MAAM,CAAC,CAACC,GAAAA,GAAQA,GAAIC,CAAAA,QAAQ,CAAC,GAAA,CAAA,CAAA,CAC7BC,GAAG,CAAC,CAACF,GAAAA,GAAQA,IAAIG,KAAK,CAAC,CAAG,EAAA,CAAC,CAC3BC,CAAAA,CAAAA,CAAAA,IAAI,CAAC,CAACC,MAAWT,GAAAA,aAAAA,CAAcU,UAAU,CAACD,MAC7C,CAAA,CAAA,EAAA;QACA,OAAO,IAAA;AACT;IAEA,OAAO,KAAA;AACT;AAEA;AACO,MAAME,0BAA0B,CAACZ,IAAAA,GAAAA;AACtC,IAAA,MAAMC,gBAAgBC,YAAUF,CAAAA,IAAAA,CAAAA;IAChC,IAAIN,kBAAAA,CAAmBS,QAAQ,CAACF,aAAgB,CAAA,EAAA;QAC9C,OAAO,IAAA;AACT;IAEA,IACEP,kBAAAA,CACGU,MAAM,CAAC,CAACC,GAAAA,GAAQA,GAAIC,CAAAA,QAAQ,CAAC,GAAA,CAAA,CAAA,CAC7BC,GAAG,CAAC,CAACF,GAAAA,GAAQA,IAAIG,KAAK,CAAC,CAAG,EAAA,CAAC,CAC3BC,CAAAA,CAAAA,CAAAA,IAAI,CAAC,CAACC,MAAWT,GAAAA,aAAAA,CAAcU,UAAU,CAACD,MAC7C,CAAA,CAAA,EAAA;QACA,OAAO,IAAA;AACT;IAEA,OAAO,KAAA;AACT;;;;;;;;"}
|
|
@@ -10,6 +10,7 @@ const reservedAttributes = [
|
|
|
10
10
|
'created_at',
|
|
11
11
|
'updated_at',
|
|
12
12
|
'published_at',
|
|
13
|
+
// V6: we will need to add first_published_at when it becomes the default behaviour
|
|
13
14
|
'created_by_id',
|
|
14
15
|
'updated_by_id',
|
|
15
16
|
// does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.mjs","sources":["../../../server/src/services/builder.ts"],"sourcesContent":["import { snakeCase } from 'lodash/fp';\n\n// use snake_case\nexport const reservedAttributes = [\n // TODO: these need to come from a centralized place so we don't break things accidentally in the future and can share them outside the CTB, for example on Strapi bootstrap prior to schema db sync\n\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'status',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n// use snake_case\nexport const reservedModels = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nexport const getReservedNames = () => {\n return {\n models: reservedModels,\n attributes: reservedAttributes,\n };\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedModelName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedModels.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedModels\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedAttributeName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedAttributes.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedAttributes\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n"],"names":["reservedAttributes","reservedModels","getReservedNames","models","attributes","isReservedModelName","name","snakeCaseName","snakeCase","includes","filter","key","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName"],"mappings":";;AAEA;MACaA,kBAAqB,GAAA;;;AAIhC,IAAA,IAAA;AACA,IAAA,aAAA;;AAGA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA
|
|
1
|
+
{"version":3,"file":"builder.mjs","sources":["../../../server/src/services/builder.ts"],"sourcesContent":["import { snakeCase } from 'lodash/fp';\n\n// use snake_case\nexport const reservedAttributes = [\n // TODO: these need to come from a centralized place so we don't break things accidentally in the future and can share them outside the CTB, for example on Strapi bootstrap prior to schema db sync\n\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n // V6: we will need to add first_published_at when it becomes the default behaviour\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'status',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n// use snake_case\nexport const reservedModels = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nexport const getReservedNames = () => {\n return {\n models: reservedModels,\n attributes: reservedAttributes,\n };\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedModelName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedModels.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedModels\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedAttributeName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedAttributes.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedAttributes\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n"],"names":["reservedAttributes","reservedModels","getReservedNames","models","attributes","isReservedModelName","name","snakeCaseName","snakeCase","includes","filter","key","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName"],"mappings":";;AAEA;MACaA,kBAAqB,GAAA;;;AAIhC,IAAA,IAAA;AACA,IAAA,aAAA;;AAGA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA;;AAEA,IAAA,eAAA;AACA,IAAA,eAAA;;AAEA,IAAA,YAAA;AACA,IAAA,YAAA;;AAGA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,eAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,aAAA;AACA,IAAA,eAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;;AAGF;MACaC,cAAiB,GAAA;AAC5B,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,WAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,UAAA;AACA,IAAA,MAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;;MAGWC,gBAAmB,GAAA,IAAA;IAC9B,OAAO;QACLC,MAAQF,EAAAA,cAAAA;QACRG,UAAYJ,EAAAA;AACd,KAAA;AACF;AAEA;AACO,MAAMK,sBAAsB,CAACC,IAAAA,GAAAA;AAClC,IAAA,MAAMC,gBAAgBC,SAAUF,CAAAA,IAAAA,CAAAA;IAChC,IAAIL,cAAAA,CAAeQ,QAAQ,CAACF,aAAgB,CAAA,EAAA;QAC1C,OAAO,IAAA;AACT;IAEA,IACEN,cAAAA,CACGS,MAAM,CAAC,CAACC,GAAAA,GAAQA,GAAIC,CAAAA,QAAQ,CAAC,GAAA,CAAA,CAAA,CAC7BC,GAAG,CAAC,CAACF,GAAAA,GAAQA,IAAIG,KAAK,CAAC,CAAG,EAAA,CAAC,CAC3BC,CAAAA,CAAAA,CAAAA,IAAI,CAAC,CAACC,MAAWT,GAAAA,aAAAA,CAAcU,UAAU,CAACD,MAC7C,CAAA,CAAA,EAAA;QACA,OAAO,IAAA;AACT;IAEA,OAAO,KAAA;AACT;AAEA;AACO,MAAME,0BAA0B,CAACZ,IAAAA,GAAAA;AACtC,IAAA,MAAMC,gBAAgBC,SAAUF,CAAAA,IAAAA,CAAAA;IAChC,IAAIN,kBAAAA,CAAmBS,QAAQ,CAACF,aAAgB,CAAA,EAAA;QAC9C,OAAO,IAAA;AACT;IAEA,IACEP,kBAAAA,CACGU,MAAM,CAAC,CAACC,GAAAA,GAAQA,GAAIC,CAAAA,QAAQ,CAAC,GAAA,CAAA,CAAA,CAC7BC,GAAG,CAAC,CAACF,GAAAA,GAAQA,IAAIG,KAAK,CAAC,CAAG,EAAA,CAAC,CAC3BC,CAAAA,CAAAA,CAAAA,IAAI,CAAC,CAACC,MAAWT,GAAAA,aAAAA,CAAcU,UAAU,CAACD,MAC7C,CAAA,CAAA,EAAA;QACA,OAAO,IAAA;AACT;IAEA,OAAO,KAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../server/src/services/builder.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../server/src/services/builder.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,UA+B9B,CAAC;AAGF,eAAO,MAAM,cAAc,UAa1B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;CAK5B,CAAC;AAGF,eAAO,MAAM,mBAAmB,SAAU,MAAM,YAgB/C,CAAC;AAGF,eAAO,MAAM,uBAAuB,SAAU,MAAM,YAgBnD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/content-type-builder",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.21.0",
|
|
4
4
|
"description": "Create and manage content types",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -67,9 +67,9 @@
|
|
|
67
67
|
"@reduxjs/toolkit": "1.9.7",
|
|
68
68
|
"@sindresorhus/slugify": "1.1.0",
|
|
69
69
|
"@strapi/design-system": "2.0.0-rc.29",
|
|
70
|
-
"@strapi/generators": "5.
|
|
70
|
+
"@strapi/generators": "5.21.0",
|
|
71
71
|
"@strapi/icons": "2.0.0-rc.29",
|
|
72
|
-
"@strapi/utils": "5.
|
|
72
|
+
"@strapi/utils": "5.21.0",
|
|
73
73
|
"date-fns": "2.30.0",
|
|
74
74
|
"fs-extra": "11.2.0",
|
|
75
75
|
"immer": "9.0.21",
|
|
@@ -82,8 +82,8 @@
|
|
|
82
82
|
"zod": "3.25.67"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
|
-
"@strapi/admin": "5.
|
|
86
|
-
"@strapi/types": "5.
|
|
85
|
+
"@strapi/admin": "5.21.0",
|
|
86
|
+
"@strapi/types": "5.21.0",
|
|
87
87
|
"@testing-library/dom": "10.1.0",
|
|
88
88
|
"@testing-library/react": "15.0.7",
|
|
89
89
|
"@testing-library/user-event": "14.5.2",
|