@strapi/content-type-builder 5.56.0 → 5.58.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/AIChat/lib/transforms/schemas/toCTB.js +117 -13
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +118 -13
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.js +31 -19
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +31 -19
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.js +166 -6
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +165 -7
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/RenameMigrationModal.js +285 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.js.map +1 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs +257 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs.map +1 -0
- package/dist/admin/components/DataManager/reducer.js +129 -2
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +128 -2
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.js +8 -1
- package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs +8 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/groupRenameChains.js +86 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.js.map +1 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.mjs +84 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js +29 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js.map +1 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs +27 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js +35 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js.map +1 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs +33 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js +48 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js.map +1 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs +45 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs.map +1 -0
- package/dist/admin/components/FormModal/FormModal.js +178 -70
- package/dist/admin/components/FormModal/FormModal.js.map +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs +179 -71
- package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.js +6 -5
- package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.js +10 -7
- package/dist/admin/components/FormModal/component/createComponentSchema.js.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js +24 -21
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js +3 -2
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.js +73 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.js.map +1 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs +70 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs.map +1 -0
- package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +4 -3
- package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +6 -1
- package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +28 -2
- package/dist/admin/src/components/DataManager/RenameMigrationModal.d.ts +73 -0
- package/dist/admin/src/components/DataManager/reducer.d.ts +17 -2
- package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +24 -8
- package/dist/admin/src/components/DataManager/utils/groupRenameChains.d.ts +31 -0
- package/dist/admin/src/components/DataManager/utils/isStorageCompatibleRename.d.ts +10 -0
- package/dist/admin/src/components/DataManager/utils/resolveAfterEditRenameConsent.d.ts +24 -0
- package/dist/admin/src/components/DataManager/utils/splitChainsByInheritedConsent.d.ts +26 -0
- package/dist/admin/src/components/FormModal/utils/getRenameStorageChange.d.ts +40 -0
- package/dist/admin/src/types.d.ts +23 -0
- package/dist/admin/translations/cs.json.js +0 -2
- package/dist/admin/translations/cs.json.js.map +1 -1
- package/dist/admin/translations/cs.json.mjs +0 -2
- package/dist/admin/translations/cs.json.mjs.map +1 -1
- package/dist/admin/translations/de.json.js +0 -2
- package/dist/admin/translations/de.json.js.map +1 -1
- package/dist/admin/translations/de.json.mjs +0 -2
- package/dist/admin/translations/de.json.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +12 -2
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +12 -2
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/ja.json.js +0 -2
- package/dist/admin/translations/ja.json.js.map +1 -1
- package/dist/admin/translations/ja.json.mjs +0 -2
- package/dist/admin/translations/ja.json.mjs.map +1 -1
- package/dist/admin/translations/ko.json.js +0 -2
- package/dist/admin/translations/ko.json.js.map +1 -1
- package/dist/admin/translations/ko.json.mjs +0 -2
- package/dist/admin/translations/ko.json.mjs.map +1 -1
- package/dist/admin/translations/nl.json.js +0 -2
- package/dist/admin/translations/nl.json.js.map +1 -1
- package/dist/admin/translations/nl.json.mjs +0 -2
- package/dist/admin/translations/nl.json.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +0 -2
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +0 -2
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/dist/admin/translations/ru.json.js +0 -2
- package/dist/admin/translations/ru.json.js.map +1 -1
- package/dist/admin/translations/ru.json.mjs +0 -2
- package/dist/admin/translations/ru.json.mjs.map +1 -1
- package/dist/admin/translations/sk.json.js +0 -2
- package/dist/admin/translations/sk.json.js.map +1 -1
- package/dist/admin/translations/sk.json.mjs +0 -2
- package/dist/admin/translations/sk.json.mjs.map +1 -1
- package/dist/server/config.js +24 -3
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +21 -3
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/controllers/schema.js +2 -2
- package/dist/server/controllers/schema.js.map +1 -1
- package/dist/server/controllers/schema.mjs +1 -1
- package/dist/server/controllers/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/content-type.js +9 -11
- package/dist/server/controllers/validation/content-type.js.map +1 -1
- package/dist/server/controllers/validation/content-type.mjs +7 -9
- package/dist/server/controllers/validation/content-type.mjs.map +1 -1
- package/dist/server/controllers/validation/model-schema.js +2 -3
- package/dist/server/controllers/validation/model-schema.js.map +1 -1
- package/dist/server/controllers/validation/model-schema.mjs +1 -2
- package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
- package/dist/server/controllers/validation/relations.js +1 -2
- package/dist/server/controllers/validation/relations.js.map +1 -1
- package/dist/server/controllers/validation/relations.mjs +1 -2
- package/dist/server/controllers/validation/relations.mjs.map +1 -1
- package/dist/server/controllers/validation/schema.js +42 -23
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +43 -24
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/services/content-types.js +1 -2
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +2 -3
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/migration-builder/index.js +580 -0
- package/dist/server/services/migration-builder/index.js.map +1 -0
- package/dist/server/services/migration-builder/index.mjs +573 -0
- package/dist/server/services/migration-builder/index.mjs.map +1 -0
- package/dist/server/services/schema-builder/content-type-builder.js +31 -1
- package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs +31 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
- package/dist/server/services/schema-mutation.js +30 -2
- package/dist/server/services/schema-mutation.js.map +1 -1
- package/dist/server/services/schema-mutation.mjs +10 -2
- package/dist/server/services/schema-mutation.mjs.map +1 -1
- package/dist/server/services/schema.js +312 -15
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +305 -9
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/src/config.d.ts +23 -2
- package/dist/server/src/config.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-type.d.ts +0 -1
- package/dist/server/src/controllers/validation/content-type.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/schema.d.ts +28 -0
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +10 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/migration-builder/index.d.ts +83 -0
- package/dist/server/src/services/migration-builder/index.d.ts.map +1 -0
- package/dist/server/src/services/schema-builder/content-type-builder.d.ts.map +1 -1
- package/dist/server/src/services/schema-mutation.d.ts +4 -2
- package/dist/server/src/services/schema-mutation.d.ts.map +1 -1
- package/dist/server/src/services/schema.d.ts +19 -0
- package/dist/server/src/services/schema.d.ts.map +1 -1
- package/package.json +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataManagerProvider.mjs","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\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';\nimport { useLocation } from 'react-router-dom';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useCTBTracking } from '../CTBSession/ctbSession';\nimport { useCTBSession } from '../CTBSession/useCTBSession';\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 { fromServerFile, generateGroupId } from './utils/contentStructure';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { AnyAttribute, ContentTypes, ContentType, Components } from '../../types';\nimport type { FolderSelection } from './utils/contentStructure';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal, Modules } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Including the new folder state in the same payload as create/edit transactions ensures the\n * folder assignment is subject to the same undo/redo operations as the content type mutation\n */\nconst toFolderAssignment = (folder?: FolderSelection) => {\n if (!folder) {\n return undefined;\n }\n\n if ('newFolderName' in folder) {\n return { newFolderId: generateGroupId(), newFolderName: folder.newFolderName };\n }\n\n return { targetGroupId: folder.targetGroupId };\n};\n\ntype SchemaResponse = {\n data: {\n components: Components;\n contentTypes: ContentTypes;\n contentStructure?: Modules.ContentStructure.ContentStructureFile | null;\n };\n};\n\ntype ReservedNamesResponse = DataManagerContextValue['reservedNames'];\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\n/**\n * Tag types registered on the shared `adminApi` instance at runtime by\n * `@strapi/content-manager` via `enhanceEndpoints({ addTagTypes: [...] })`\n * (see packages/core/content-manager/admin/src/services/api.ts).\n *\n * The cast is only required because adminApi's compile-time tag union doesn't see\n * tags added downstream from this side of the dependency graph.\n */\nconst CONTENT_MANAGER_SCHEMA_CACHE_TAGS = [\n 'InitialData',\n 'ContentTypesConfiguration',\n 'ContentTypeSettings',\n 'ComponentConfiguration',\n] as const;\n\nconst invalidateContentManagerSchemaCaches = () =>\n adminApi.util.invalidateTags(CONTENT_MANAGER_SCHEMA_CACHE_TAGS as never);\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n const dispatchGuidedTour = useGuidedTour('DataManagerProvider', (s) => s.dispatch);\n const location = useLocation();\n const { sessionId: ctbSessionId, regenerateSessionId } = useCTBSession();\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n contentStructure,\n initialContentStructure,\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 } = useCTBTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n const previousLocationRef = React.useRef<string | null>(null);\n\n const isModified = React.useMemo(() => {\n return !(\n isEqual(components, initialComponents) &&\n isEqual(contentTypes, initialContentTypes) &&\n isEqual(contentStructure, initialContentStructure)\n );\n }, [\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n contentStructure,\n initialContentStructure,\n ]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<() => Promise<void>>(async () => undefined);\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get<SchemaResponse>(`/content-type-builder/schema`),\n fetchClient.get<ReservedNamesResponse>(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes, contentStructure } = 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 contentStructure: fromServerFile(contentStructure),\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 previousLocationRef.current = location.pathname;\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 // Detect navigation away and back to CTB to regenerate session\n React.useEffect(() => {\n const currentPath = location.pathname;\n const previousPath = previousLocationRef.current;\n const CTB_PATH = '/plugins/content-type-builder';\n\n if (previousPath) {\n const isCTBPath = currentPath.includes(CTB_PATH);\n const wasCTBPath = previousPath.includes(CTB_PATH);\n\n // Regenerate session when returning to CTB after navigating away\n if (!wasCTBPath && isCTBPath) {\n regenerateSessionId();\n }\n }\n\n previousLocationRef.current = currentPath;\n }, [location.pathname, regenerateSessionId]);\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 contentStructure: state.current.contentStructure,\n initialContentStructure: state.current.initialContentStructure,\n });\n\n // Track that the save button was clicked (includes session ID via useCTBTracking)\n trackUsage('willUpdateCTBSchema', {\n ...trackingEventProperties,\n ctbSessionId,\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 // Note: didCreateGuidedTourCollectionType doesn't accept properties\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Generate new session ID after server restart\n regenerateSessionId();\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 // Refresh content-manager caches that depend on the CT/component schema.\n dispatch(invalidateContentManagerSchemaCaches());\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', {\n ...trackingEventProperties,\n success: false,\n ctbSessionId,\n });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: true,\n ctbSessionId,\n });\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 contentStructure,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(\n actions.addAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n editAttribute(payload) {\n dispatch(\n actions.editAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n addCustomFieldAttribute(payload) {\n dispatch(\n actions.addCustomFieldAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n editCustomFieldAttribute(payload) {\n dispatch(\n actions.editCustomFieldAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n const { folder, ...rest } = payload;\n dispatch(actions.createSchema({ ...rest, folder: toFolderAssignment(folder) }));\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 // Note: willDeleteFieldOfContentType doesn't accept properties\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 createFolder({ section, name, parentId }) {\n dispatch(actions.createFolder({ section, name, parentId, id: generateGroupId() }));\n },\n renameFolder(payload) {\n dispatch(actions.renameFolder(payload));\n },\n moveFolder(payload) {\n dispatch(actions.moveFolder(payload));\n },\n deleteFolderOnly(payload) {\n dispatch(actions.deleteFolderOnly(payload));\n },\n deleteFolderAndContent({ section, id, contentTypeUids }) {\n dispatch(actions.deleteFolderAndContent({ section, id, contentTypeUids }));\n },\n assignContentTypeToFolder(payload) {\n dispatch(actions.assignContentTypeToFolder(payload));\n },\n reorderFolderChildren(payload) {\n dispatch(actions.reorderFolderChildren(payload));\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 const { folder, ...rest } = args;\n dispatch(actions.updateSchema({ ...rest, folder: toFolderAssignment(folder) }));\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":["toFolderAssignment","folder","undefined","newFolderId","generateGroupId","newFolderName","targetGroupId","selectState","state","initialState","CONTENT_MANAGER_SCHEMA_CACHE_TAGS","invalidateContentManagerSchemaCaches","adminApi","util","invalidateTags","DataManagerProvider","children","dispatch","useDispatch","useSelector","dispatchGuidedTour","useGuidedTour","s","location","useLocation","sessionId","ctbSessionId","regenerateSessionId","useCTBSession","components","contentTypes","reservedNames","initialComponents","initialContentTypes","contentStructure","initialContentStructure","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useCTBTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","previousLocationRef","useRef","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","fromServerFile","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","pathname","reloadPlugin","currentPath","previousPath","CTB_PATH","isCTBPath","includes","wasCTBPath","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","success","payload","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","createSchema","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","attributeToSet","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","rest","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","createFolder","section","name","parentId","renameFolder","moveFolder","deleteFolderOnly","deleteFolderAndContent","contentTypeUids","assignContentTypeToFolder","reorderFolderChildren","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 useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport omit from 'lodash/omit';\nimport uniq from 'lodash/uniq';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useCTBTracking } from '../CTBSession/ctbSession';\nimport { useCTBSession } from '../CTBSession/useCTBSession';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport {\n RenameMigrationModal,\n applyRenameDecisions,\n collectPendingRenames,\n filterRenamesByAcceptedChains,\n shouldPromptForRenamesBeforeSave,\n toPendingRename,\n type AttributeRenameMigrationMode,\n type PendingRename,\n} from './RenameMigrationModal';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { fromServerFile, generateGroupId } from './utils/contentStructure';\nimport { groupRenameChains } from './utils/groupRenameChains';\nimport { resolveAfterEditRenameConsent } from './utils/resolveAfterEditRenameConsent';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\nimport {\n namesOfChains,\n splitChainsByInheritedConsent,\n} from './utils/splitChainsByInheritedConsent';\n\nimport type { AnyAttribute, Component, ContentTypes, ContentType, Components } from '../../types';\nimport type { FolderSelection } from './utils/contentStructure';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal, Modules } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Including the new folder state in the same payload as create/edit transactions ensures the\n * folder assignment is subject to the same undo/redo operations as the content type mutation\n */\nconst toFolderAssignment = (folder?: FolderSelection) => {\n if (!folder) {\n return undefined;\n }\n\n if ('newFolderName' in folder) {\n return { newFolderId: generateGroupId(), newFolderName: folder.newFolderName };\n }\n\n return { targetGroupId: folder.targetGroupId };\n};\n\ntype SchemaResponse = {\n data: {\n components: Components;\n contentTypes: ContentTypes;\n contentStructure?: Modules.ContentStructure.ContentStructureFile | null;\n settings?: {\n renameMigrations?: {\n attributes?: AttributeRenameMigrationMode;\n };\n };\n };\n};\n\ntype ReservedNamesResponse = DataManagerContextValue['reservedNames'];\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\n/**\n * Tag types registered on the shared `adminApi` instance at runtime by\n * `@strapi/content-manager` via `enhanceEndpoints({ addTagTypes: [...] })`\n * (see packages/core/content-manager/admin/src/services/api.ts).\n *\n * The cast is only required because adminApi's compile-time tag union doesn't see\n * tags added downstream from this side of the dependency graph.\n */\nconst CONTENT_MANAGER_SCHEMA_CACHE_TAGS = [\n 'InitialData',\n 'ContentTypesConfiguration',\n 'ContentTypeSettings',\n 'ComponentConfiguration',\n // Existing cached documents still use the pre-change field names.\n 'Document',\n] as const;\n\nconst invalidateContentManagerSchemaCaches = () =>\n adminApi.util.invalidateTags(CONTENT_MANAGER_SCHEMA_CACHE_TAGS as never);\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n const dispatchGuidedTour = useGuidedTour('DataManagerProvider', (s) => s.dispatch);\n const location = useLocation();\n const { sessionId: ctbSessionId, regenerateSessionId } = useCTBSession();\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n contentStructure,\n initialContentStructure,\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 } = useCTBTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n const previousLocationRef = React.useRef<string | null>(null);\n\n const renameMigrationModeRef = React.useRef<AttributeRenameMigrationMode>('prompt-before-save');\n\n // When `modal` mode prompts the user, we hold the pending renames plus the\n // promise resolver here so `saveSchema` can await the decision.\n const [renameModal, setRenameModal] = React.useState<{\n renames: PendingRename[];\n resolve: (_acceptedKeys: Set<string> | null) => void;\n } | null>(null);\n\n const isModified = React.useMemo(() => {\n return !(\n isEqual(components, initialComponents) &&\n isEqual(contentTypes, initialContentTypes) &&\n isEqual(contentStructure, initialContentStructure)\n );\n }, [\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n contentStructure,\n initialContentStructure,\n ]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<() => Promise<void>>(async () => undefined);\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get<SchemaResponse>(`/content-type-builder/schema`),\n fetchClient.get<ReservedNamesResponse>(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes, contentStructure, settings } = schemaResponse.data.data;\n\n if (settings?.renameMigrations?.attributes) {\n renameMigrationModeRef.current = settings.renameMigrations.attributes;\n }\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 contentStructure: fromServerFile(contentStructure),\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 previousLocationRef.current = location.pathname;\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 // Detect navigation away and back to CTB to regenerate session\n React.useEffect(() => {\n const currentPath = location.pathname;\n const previousPath = previousLocationRef.current;\n const CTB_PATH = '/plugins/content-type-builder';\n\n if (previousPath) {\n const isCTBPath = currentPath.includes(CTB_PATH);\n const wasCTBPath = previousPath.includes(CTB_PATH);\n\n // Regenerate session when returning to CTB after navigating away\n if (!wasCTBPath && isCTBPath) {\n regenerateSessionId();\n }\n }\n\n previousLocationRef.current = currentPath;\n }, [location.pathname, regenerateSessionId]);\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 requestRenameDecision = async (renames: PendingRename[]) => {\n const acceptedKeys = await new Promise<Set<string> | null>((resolve) => {\n setRenameModal({ renames, resolve });\n });\n setRenameModal(null);\n\n return acceptedKeys;\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 contentStructure: state.current.contentStructure,\n initialContentStructure: state.current.initialContentStructure,\n });\n\n if (shouldPromptForRenamesBeforeSave(renameMigrationModeRef.current)) {\n const pendingRenames = collectPendingRenames(requestData);\n\n if (pendingRenames.length > 0) {\n const acceptedKeys = await requestRenameDecision(pendingRenames);\n\n // The user cancelled the whole save — return to editing untouched.\n if (acceptedKeys === null) {\n setIsSaving(false);\n return;\n }\n\n applyRenameDecisions(requestData, acceptedKeys);\n }\n }\n\n // Track that the save button was clicked (includes session ID via useCTBTracking)\n trackUsage('willUpdateCTBSchema', {\n ...trackingEventProperties,\n ctbSessionId,\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 // Note: didCreateGuidedTourCollectionType doesn't accept properties\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Generate new session ID after server restart\n regenerateSessionId();\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n\n // Update the app's permissions\n await updatePermissions();\n // Refresh content-manager caches that depend on the CT/component schema.\n dispatch(invalidateContentManagerSchemaCaches());\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', {\n ...trackingEventProperties,\n success: false,\n ctbSessionId,\n });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: true,\n ctbSessionId,\n });\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 contentStructure,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n attributeRenameMigrationMode: renameMigrationModeRef.current,\n addAttribute(payload) {\n dispatch(\n actions.addAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n editAttribute(payload) {\n dispatch(\n actions.editAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n addCustomFieldAttribute(payload) {\n dispatch(\n actions.addCustomFieldAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n editCustomFieldAttribute(payload) {\n dispatch(\n actions.editCustomFieldAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n async confirmAttributeRenameMigration({ forTarget, uid, oldName, newName }) {\n if (oldName === newName) {\n return true;\n }\n\n const schema =\n forTarget === 'contentType'\n ? contentTypes[uid as Internal.UID.ContentType]\n : components[uid as Internal.UID.Component];\n\n // A field that was never saved has no data to preserve: accept without\n // prompting so neither name ends up in `declinedRenameNames`.\n const initialAttribute = schema?.attributes.find((attribute) => attribute.name === oldName);\n if (initialAttribute?.status === 'NEW') {\n return true;\n }\n\n // Consent inherits along a chain: a hop joining an accepted chain is\n // accepted, one touching a declined name is declined, neither prompts.\n const consent = resolveAfterEditRenameConsent({\n renames: schema?.renames ?? [],\n declinedRenameNames: schema?.declinedRenameNames ?? [],\n oldName,\n newName,\n mode: renameMigrationModeRef.current,\n });\n\n if (consent !== 'prompt') {\n return consent === 'accept';\n }\n\n const key = `${uid}:edit`;\n const acceptedKeys = await requestRenameDecision([\n {\n key,\n uid,\n typeName: schema?.info.displayName ?? uid,\n pairs: [{ oldName, newName }],\n via: [],\n },\n ]);\n\n if (acceptedKeys === null) {\n return null;\n }\n\n return acceptedKeys.has(key);\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n const { folder, ...rest } = payload;\n dispatch(actions.createSchema({ ...rest, folder: toFolderAssignment(folder) }));\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 // Note: willDeleteFieldOfContentType doesn't accept properties\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 createFolder({ section, name, parentId }) {\n dispatch(actions.createFolder({ section, name, parentId, id: generateGroupId() }));\n },\n renameFolder(payload) {\n dispatch(actions.renameFolder(payload));\n },\n moveFolder(payload) {\n dispatch(actions.moveFolder(payload));\n },\n deleteFolderOnly(payload) {\n dispatch(actions.deleteFolderOnly(payload));\n },\n deleteFolderAndContent({ section, id, contentTypeUids }) {\n dispatch(actions.deleteFolderAndContent({ section, id, contentTypeUids }));\n },\n assignContentTypeToFolder(payload) {\n dispatch(actions.assignContentTypeToFolder(payload));\n },\n reorderFolderChildren(payload) {\n dispatch(actions.reorderFolderChildren(payload));\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 const { folder, ...rest } = args;\n dispatch(actions.updateSchema({ ...rest, folder: toFolderAssignment(folder) }));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n async applyChange({ action, schema }) {\n const renames = schema.renames ?? [];\n\n if (action !== 'update' || renames.length === 0) {\n dispatch(actions.applyChange({ action, schema }));\n return true;\n }\n\n const mode = renameMigrationModeRef.current;\n\n if (mode === 'never') {\n dispatch(\n actions.applyChange({\n action,\n schema: omit(schema, ['renames']) as ContentType | Component,\n })\n );\n return true;\n }\n\n // 'always' | 'prompt-before-save': the before-save modal decides per chain.\n if (mode !== 'prompt-after-edit') {\n dispatch(actions.applyChange({ action, schema }));\n return true;\n }\n\n // 'prompt-after-edit': decide per chain now, inheriting consent already\n // given (or refused) for the hops recorded on the type.\n const existing =\n schema.modelType === 'contentType'\n ? contentTypes[schema.uid as Internal.UID.ContentType]\n : components[schema.uid as Internal.UID.Component];\n const chains = groupRenameChains(schema.uid, renames);\n const { keep, prompt } = splitChainsByInheritedConsent({\n recorded: existing?.renames ?? [],\n declinedRenameNames: existing?.declinedRenameNames ?? [],\n chains,\n renames,\n });\n\n const accepted = new Set(keep.map((chain) => chain.id));\n if (prompt.length > 0) {\n const typeName = schema.info?.displayName ?? schema.uid;\n const decision = await requestRenameDecision(\n prompt.map((chain) => toPendingRename(chain, renames, { uid: schema.uid, typeName }))\n );\n\n // The user cancelled: apply nothing.\n if (decision === null) {\n return false;\n }\n\n decision.forEach((id) => accepted.add(id));\n }\n\n const declinedChains = chains.filter((chain) => !accepted.has(chain.id));\n const keptRenames = filterRenamesByAcceptedChains(schema.uid, renames, accepted);\n const declinedRenameNames = uniq([\n ...(schema.declinedRenameNames ?? []),\n ...namesOfChains(declinedChains, renames),\n ]);\n\n dispatch(\n actions.applyChange({\n action,\n schema: {\n ...omit(schema, ['renames', 'declinedRenameNames']),\n ...(keptRenames.length > 0 ? { renames: keptRenames } : {}),\n ...(declinedRenameNames.length > 0 ? { declinedRenameNames } : {}),\n } as ContentType | Component,\n })\n );\n return true;\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 (\n <DataManagerContext.Provider value={context}>\n {children}\n {renameModal && (\n <RenameMigrationModal\n renames={renameModal.renames}\n onConfirm={(acceptedKeys) => renameModal.resolve(acceptedKeys)}\n onCancel={() => renameModal.resolve(null)}\n />\n )}\n </DataManagerContext.Provider>\n );\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["toFolderAssignment","folder","undefined","newFolderId","generateGroupId","newFolderName","targetGroupId","selectState","state","initialState","CONTENT_MANAGER_SCHEMA_CACHE_TAGS","invalidateContentManagerSchemaCaches","adminApi","util","invalidateTags","DataManagerProvider","children","dispatch","useDispatch","useSelector","dispatchGuidedTour","useGuidedTour","s","location","useLocation","sessionId","ctbSessionId","regenerateSessionId","useCTBSession","components","contentTypes","reservedNames","initialComponents","initialContentTypes","contentStructure","initialContentStructure","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useCTBTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","previousLocationRef","useRef","renameMigrationModeRef","renameModal","setRenameModal","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","schemaResponse","reservedNamesResponse","Promise","all","get","settings","data","renameMigrations","attributes","actions","init","mapValues","component","status","contentType","fromServerFile","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","pathname","reloadPlugin","currentPath","previousPath","CTB_PATH","isCTBPath","includes","wasCTBPath","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","requestRenameDecision","renames","acceptedKeys","resolve","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","shouldPromptForRenamesBeforeSave","pendingRenames","collectPendingRenames","length","applyRenameDecisions","isSendingContentTypes","keys","post","success","payload","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","createSchema","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","attributeRenameMigrationMode","addAttribute","attributeToSet","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","confirmAttributeRenameMigration","forTarget","oldName","newName","schema","initialAttribute","find","attribute","name","consent","resolveAfterEditRenameConsent","declinedRenameNames","mode","key","typeName","info","displayName","pairs","via","has","addCreatedComponentToDynamicZone","rest","createComponentSchema","componentCategory","changeDynamicZoneComponents","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","createFolder","section","parentId","renameFolder","moveFolder","deleteFolderOnly","deleteFolderAndContent","contentTypeUids","assignContentTypeToFolder","reorderFolderChildren","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","action","omit","existing","modelType","chains","groupRenameChains","keep","prompt","splitChainsByInheritedConsent","recorded","accepted","Set","map","chain","decision","toPendingRename","forEach","add","declinedChains","filter","keptRenames","filterRenamesByAcceptedChains","uniq","namesOfChains","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsxs","DataManagerContext","Provider","value","_jsx","RenameMigrationModal","onConfirm","onCancel"],"mappings":"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"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var designSystem = require('@strapi/design-system');
|
|
6
|
+
var Icons = require('@strapi/icons');
|
|
7
|
+
var reactIntl = require('react-intl');
|
|
8
|
+
var getTrad = require('../../utils/getTrad.js');
|
|
9
|
+
var groupRenameChains = require('./utils/groupRenameChains.js');
|
|
10
|
+
|
|
11
|
+
function _interopNamespace(e) {
|
|
12
|
+
if (e && e.__esModule) return e;
|
|
13
|
+
var n = Object.create(null);
|
|
14
|
+
if (e) {
|
|
15
|
+
Object.keys(e).forEach(function (k) {
|
|
16
|
+
if (k !== 'default') {
|
|
17
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return e[k]; }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
n.default = e;
|
|
26
|
+
return Object.freeze(n);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
30
|
+
|
|
31
|
+
const getAttributeRenameDecision = (mode)=>{
|
|
32
|
+
if (mode === 'never') {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (mode === 'prompt-after-edit') {
|
|
36
|
+
return 'prompt';
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
};
|
|
40
|
+
const shouldPromptForRenamesBeforeSave = (mode)=>mode === 'prompt-before-save';
|
|
41
|
+
const RenameMigrationModal = ({ renames, onConfirm, onCancel })=>{
|
|
42
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
43
|
+
const descriptionId = React__namespace.useId();
|
|
44
|
+
const [checkedKeys, setCheckedKeys] = React__namespace.useState(()=>new Set(renames.map((rename)=>rename.key)));
|
|
45
|
+
const chainNames = (rename)=>rename.pairs.map((pair)=>pair.oldName).join(', ');
|
|
46
|
+
const toggle = (key, checked)=>{
|
|
47
|
+
setCheckedKeys((previous)=>{
|
|
48
|
+
const next = new Set(previous);
|
|
49
|
+
if (checked) {
|
|
50
|
+
next.add(key);
|
|
51
|
+
} else {
|
|
52
|
+
next.delete(key);
|
|
53
|
+
}
|
|
54
|
+
return next;
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Root, {
|
|
58
|
+
open: true,
|
|
59
|
+
onOpenChange: (open)=>!open && onCancel(),
|
|
60
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Content, {
|
|
61
|
+
"aria-describedby": descriptionId,
|
|
62
|
+
children: [
|
|
63
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
|
|
64
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Title, {
|
|
65
|
+
children: formatMessage({
|
|
66
|
+
id: getTrad.getTrad('migration.confirmation.title'),
|
|
67
|
+
defaultMessage: 'Preserve data for renamed fields?'
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
}),
|
|
71
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
|
|
72
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
73
|
+
direction: "column",
|
|
74
|
+
alignItems: "stretch",
|
|
75
|
+
gap: 4,
|
|
76
|
+
children: [
|
|
77
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
78
|
+
id: descriptionId,
|
|
79
|
+
variant: "omega",
|
|
80
|
+
textColor: "neutral600",
|
|
81
|
+
children: formatMessage({
|
|
82
|
+
id: getTrad.getTrad('migration.confirmation.description'),
|
|
83
|
+
defaultMessage: 'You renamed the fields below. Strapi can generate a migration to preserve existing data by renaming the underlying database columns. Untick a rename to let those fields start empty instead.'
|
|
84
|
+
})
|
|
85
|
+
}),
|
|
86
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
87
|
+
direction: "column",
|
|
88
|
+
alignItems: "stretch",
|
|
89
|
+
gap: 2,
|
|
90
|
+
children: renames.map((rename)=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
91
|
+
justifyContent: "space-between",
|
|
92
|
+
alignItems: "center",
|
|
93
|
+
hasRadius: true,
|
|
94
|
+
borderColor: "neutral200",
|
|
95
|
+
padding: 3,
|
|
96
|
+
gap: 3,
|
|
97
|
+
children: [
|
|
98
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
99
|
+
direction: "column",
|
|
100
|
+
alignItems: "start",
|
|
101
|
+
gap: 1,
|
|
102
|
+
children: [
|
|
103
|
+
rename.pairs.map((pair)=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
104
|
+
gap: 2,
|
|
105
|
+
alignItems: "center",
|
|
106
|
+
children: [
|
|
107
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
108
|
+
variant: "omega",
|
|
109
|
+
fontWeight: "bold",
|
|
110
|
+
children: pair.oldName
|
|
111
|
+
}),
|
|
112
|
+
/*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowRight, {
|
|
113
|
+
width: "1.2rem",
|
|
114
|
+
height: "1.2rem",
|
|
115
|
+
fill: "neutral500"
|
|
116
|
+
}),
|
|
117
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
118
|
+
variant: "omega",
|
|
119
|
+
fontWeight: "bold",
|
|
120
|
+
children: pair.newName
|
|
121
|
+
})
|
|
122
|
+
]
|
|
123
|
+
}, `${pair.oldName}->${pair.newName}`)),
|
|
124
|
+
rename.isSwapBack && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
125
|
+
variant: "pi",
|
|
126
|
+
textColor: "neutral600",
|
|
127
|
+
children: formatMessage({
|
|
128
|
+
id: getTrad.getTrad('migration.confirmation.field.swap'),
|
|
129
|
+
defaultMessage: 'Fields swapped back to their original names; data still moves.'
|
|
130
|
+
})
|
|
131
|
+
}),
|
|
132
|
+
rename.via.length > 0 && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
133
|
+
variant: "pi",
|
|
134
|
+
textColor: "neutral600",
|
|
135
|
+
children: formatMessage({
|
|
136
|
+
id: getTrad.getTrad('migration.confirmation.field.via'),
|
|
137
|
+
defaultMessage: 'via {names}'
|
|
138
|
+
}, {
|
|
139
|
+
names: rename.via.join(', ')
|
|
140
|
+
})
|
|
141
|
+
}),
|
|
142
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
143
|
+
variant: "pi",
|
|
144
|
+
textColor: "neutral600",
|
|
145
|
+
children: formatMessage({
|
|
146
|
+
id: getTrad.getTrad('migration.confirmation.field.in'),
|
|
147
|
+
defaultMessage: 'in {typeName}'
|
|
148
|
+
}, {
|
|
149
|
+
typeName: rename.typeName
|
|
150
|
+
})
|
|
151
|
+
})
|
|
152
|
+
]
|
|
153
|
+
}),
|
|
154
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
|
|
155
|
+
"aria-label": formatMessage({
|
|
156
|
+
id: getTrad.getTrad('migration.confirmation.field.preserve'),
|
|
157
|
+
defaultMessage: 'Preserve data of {names} in {typeName}'
|
|
158
|
+
}, {
|
|
159
|
+
names: chainNames(rename),
|
|
160
|
+
typeName: rename.typeName
|
|
161
|
+
}),
|
|
162
|
+
checked: checkedKeys.has(rename.key),
|
|
163
|
+
onCheckedChange: (checked)=>toggle(rename.key, checked === true)
|
|
164
|
+
})
|
|
165
|
+
]
|
|
166
|
+
}, rename.key))
|
|
167
|
+
})
|
|
168
|
+
]
|
|
169
|
+
})
|
|
170
|
+
}),
|
|
171
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
|
|
172
|
+
children: [
|
|
173
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Close, {
|
|
174
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
175
|
+
variant: "tertiary",
|
|
176
|
+
onClick: onCancel,
|
|
177
|
+
children: formatMessage({
|
|
178
|
+
id: getTrad.getTrad('migration.confirmation.cancel'),
|
|
179
|
+
defaultMessage: 'Cancel'
|
|
180
|
+
})
|
|
181
|
+
})
|
|
182
|
+
}),
|
|
183
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
184
|
+
variant: "danger-light",
|
|
185
|
+
onClick: ()=>onConfirm(new Set()),
|
|
186
|
+
children: formatMessage({
|
|
187
|
+
id: getTrad.getTrad('migration.confirmation.decline'),
|
|
188
|
+
defaultMessage: "Don't preserve data"
|
|
189
|
+
})
|
|
190
|
+
}),
|
|
191
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
192
|
+
disabled: checkedKeys.size === 0,
|
|
193
|
+
onClick: ()=>onConfirm(checkedKeys),
|
|
194
|
+
children: formatMessage({
|
|
195
|
+
id: getTrad.getTrad('migration.confirmation.confirm'),
|
|
196
|
+
defaultMessage: 'Preserve data'
|
|
197
|
+
})
|
|
198
|
+
})
|
|
199
|
+
]
|
|
200
|
+
})
|
|
201
|
+
]
|
|
202
|
+
})
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
const getTypeName = (entry)=>entry.displayName ?? entry.uid;
|
|
206
|
+
/**
|
|
207
|
+
* Builds the modal row for one chain. A chain whose net effect is empty (the
|
|
208
|
+
* user renamed fields back to their original names through a swap) still has
|
|
209
|
+
* to run every hop, so its raw hops are shown instead of an empty row.
|
|
210
|
+
*/ const toPendingRename = (chain, renames, { uid, typeName })=>{
|
|
211
|
+
const isSwapBack = chain.pairs.length === 0;
|
|
212
|
+
return {
|
|
213
|
+
key: chain.id,
|
|
214
|
+
uid,
|
|
215
|
+
typeName,
|
|
216
|
+
pairs: isSwapBack ? chain.hopIndexes.map((index)=>renames[index]) : chain.pairs,
|
|
217
|
+
via: chain.via,
|
|
218
|
+
...isSwapBack ? {
|
|
219
|
+
isSwapBack: true
|
|
220
|
+
} : {}
|
|
221
|
+
};
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* Groups the ordered per-type `renames` arrays in a request payload into
|
|
225
|
+
* chains for display, one `PendingRename` per chain, preserving order.
|
|
226
|
+
*/ const collectPendingRenames = (requestData)=>{
|
|
227
|
+
const items = [];
|
|
228
|
+
const visit = (entries)=>{
|
|
229
|
+
entries.forEach((entry)=>{
|
|
230
|
+
if (entry.action === 'update' && Array.isArray(entry.renames)) {
|
|
231
|
+
const { renames } = entry;
|
|
232
|
+
groupRenameChains.groupRenameChains(entry.uid, renames).forEach((chain)=>{
|
|
233
|
+
items.push(toPendingRename(chain, renames, {
|
|
234
|
+
uid: entry.uid,
|
|
235
|
+
typeName: getTypeName(entry)
|
|
236
|
+
}));
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
};
|
|
241
|
+
visit(requestData.contentTypes ?? []);
|
|
242
|
+
visit(requestData.components ?? []);
|
|
243
|
+
return items;
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* Keeps only the hops of `renames` that belong to an accepted chain. Filtering
|
|
247
|
+
* by index preserves the original order, and a chain is always kept or dropped
|
|
248
|
+
* as a whole, so the result can never be a truncated chain.
|
|
249
|
+
*/ const filterRenamesByAcceptedChains = (uid, renames, acceptedChainIds)=>{
|
|
250
|
+
const keptIndexes = new Set();
|
|
251
|
+
groupRenameChains.groupRenameChains(uid, renames).forEach((chain)=>{
|
|
252
|
+
if (acceptedChainIds.has(chain.id)) {
|
|
253
|
+
chain.hopIndexes.forEach((index)=>keptIndexes.add(index));
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
return renames.filter((_, index)=>keptIndexes.has(index));
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* Mutates the request payload so each type keeps only the rename chains the
|
|
260
|
+
* user accepted; types left with no accepted hops drop their `renames` entirely.
|
|
261
|
+
*/ const applyRenameDecisions = (requestData, acceptedKeys)=>{
|
|
262
|
+
const apply = (entries)=>{
|
|
263
|
+
entries.forEach((entry)=>{
|
|
264
|
+
if (entry.action === 'update' && Array.isArray(entry.renames)) {
|
|
265
|
+
const kept = filterRenamesByAcceptedChains(entry.uid, entry.renames, acceptedKeys);
|
|
266
|
+
if (kept.length > 0) {
|
|
267
|
+
entry.renames = kept;
|
|
268
|
+
} else {
|
|
269
|
+
delete entry.renames;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
};
|
|
274
|
+
apply(requestData.contentTypes ?? []);
|
|
275
|
+
apply(requestData.components ?? []);
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
exports.RenameMigrationModal = RenameMigrationModal;
|
|
279
|
+
exports.applyRenameDecisions = applyRenameDecisions;
|
|
280
|
+
exports.collectPendingRenames = collectPendingRenames;
|
|
281
|
+
exports.filterRenamesByAcceptedChains = filterRenamesByAcceptedChains;
|
|
282
|
+
exports.getAttributeRenameDecision = getAttributeRenameDecision;
|
|
283
|
+
exports.shouldPromptForRenamesBeforeSave = shouldPromptForRenamesBeforeSave;
|
|
284
|
+
exports.toPendingRename = toPendingRename;
|
|
285
|
+
//# sourceMappingURL=RenameMigrationModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenameMigrationModal.js","sources":["../../../../admin/src/components/DataManager/RenameMigrationModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Checkbox, Flex, Modal, Typography } from '@strapi/design-system';\nimport { ArrowRight } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils/getTrad';\n\nimport { groupRenameChains, type RenameChain, type RenamePair } from './utils/groupRenameChains';\n\nimport type { RenameHop } from '../../types';\n\nexport type AttributeRenameMigrationMode =\n | 'always'\n | 'never'\n | 'prompt-after-edit'\n | 'prompt-before-save';\n\nexport type AttributeRenameDecision = boolean | 'prompt';\n\nexport const getAttributeRenameDecision = (\n mode: AttributeRenameMigrationMode\n): AttributeRenameDecision => {\n if (mode === 'never') {\n return false;\n }\n\n if (mode === 'prompt-after-edit') {\n return 'prompt';\n }\n\n return true;\n};\n\nexport const shouldPromptForRenamesBeforeSave = (mode: AttributeRenameMigrationMode): boolean =>\n mode === 'prompt-before-save';\n\n/**\n * One rename *chain* on an existing type, shown as a single row in the\n * confirmation modal. Consent is given per chain, never per hop: replaying a\n * partial chain either fails or silently skips hops whose target column still\n * exists. `key` is the chain id (`${uid}:chain:${firstHopIndex}`) so a decision\n * maps back to every hop of that chain in the type's ordered `renames` array.\n */\nexport interface PendingRename {\n key: string;\n uid: string;\n typeName: string;\n /** Net effect of the chain (`old -> new`); the raw hops for a pure swap-back. */\n pairs: RenamePair[];\n /** Intermediate names the chain routes through (e.g. `tmp`). */\n via: string[];\n /** True when the chain's net effect is empty (fields swapped back) but data still moves. */\n isSwapBack?: boolean;\n}\n\ninterface RenameMigrationModalProps {\n renames: PendingRename[];\n /**\n * Resolves with the keys of the hops the user chose to preserve (every row\n * is checked by default), or an empty set for \"don't preserve data\".\n */\n onConfirm: (acceptedKeys: Set<string>) => void;\n /** Aborts the current edit or save and returns to editing. */\n onCancel: () => void;\n}\n\nconst RenameMigrationModal = ({ renames, onConfirm, onCancel }: RenameMigrationModalProps) => {\n const { formatMessage } = useIntl();\n const descriptionId = React.useId();\n\n const [checkedKeys, setCheckedKeys] = React.useState<Set<string>>(\n () => new Set(renames.map((rename) => rename.key))\n );\n\n const chainNames = (rename: PendingRename) => rename.pairs.map((pair) => pair.oldName).join(', ');\n\n const toggle = (key: string, checked: boolean) => {\n setCheckedKeys((previous) => {\n const next = new Set(previous);\n if (checked) {\n next.add(key);\n } else {\n next.delete(key);\n }\n return next;\n });\n };\n\n return (\n <Modal.Root open onOpenChange={(open) => !open && onCancel()}>\n <Modal.Content aria-describedby={descriptionId}>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('migration.confirmation.title'),\n defaultMessage: 'Preserve data for renamed fields?',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography id={descriptionId} variant=\"omega\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('migration.confirmation.description'),\n defaultMessage:\n 'You renamed the fields below. Strapi can generate a migration to preserve existing data by renaming the underlying database columns. Untick a rename to let those fields start empty instead.',\n })}\n </Typography>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {renames.map((rename) => (\n <Flex\n key={rename.key}\n justifyContent=\"space-between\"\n alignItems=\"center\"\n hasRadius\n borderColor=\"neutral200\"\n padding={3}\n gap={3}\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1}>\n {rename.pairs.map((pair) => (\n <Flex key={`${pair.oldName}->${pair.newName}`} gap={2} alignItems=\"center\">\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {pair.oldName}\n </Typography>\n <ArrowRight width=\"1.2rem\" height=\"1.2rem\" fill=\"neutral500\" />\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {pair.newName}\n </Typography>\n </Flex>\n ))}\n {rename.isSwapBack && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('migration.confirmation.field.swap'),\n defaultMessage:\n 'Fields swapped back to their original names; data still moves.',\n })}\n </Typography>\n )}\n {rename.via.length > 0 && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: getTrad('migration.confirmation.field.via'),\n defaultMessage: 'via {names}',\n },\n { names: rename.via.join(', ') }\n )}\n </Typography>\n )}\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: getTrad('migration.confirmation.field.in'),\n defaultMessage: 'in {typeName}',\n },\n { typeName: rename.typeName }\n )}\n </Typography>\n </Flex>\n <Checkbox\n aria-label={formatMessage(\n {\n id: getTrad('migration.confirmation.field.preserve'),\n defaultMessage: 'Preserve data of {names} in {typeName}',\n },\n { names: chainNames(rename), typeName: rename.typeName }\n )}\n checked={checkedKeys.has(rename.key)}\n onCheckedChange={(checked) => toggle(rename.key, checked === true)}\n />\n </Flex>\n ))}\n </Flex>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" onClick={onCancel}>\n {formatMessage({\n id: getTrad('migration.confirmation.cancel'),\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Modal.Close>\n <Button variant=\"danger-light\" onClick={() => onConfirm(new Set())}>\n {formatMessage({\n id: getTrad('migration.confirmation.decline'),\n defaultMessage: \"Don't preserve data\",\n })}\n </Button>\n <Button disabled={checkedKeys.size === 0} onClick={() => onConfirm(checkedKeys)}>\n {formatMessage({\n id: getTrad('migration.confirmation.confirm'),\n defaultMessage: 'Preserve data',\n })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nexport { RenameMigrationModal };\n\nconst getTypeName = (entry: { displayName?: string; uid: string }): string =>\n entry.displayName ?? entry.uid;\n\ntype RenameAwareEntry = {\n action?: string;\n uid: string;\n displayName?: string;\n renames?: RenameHop[];\n};\n\n/**\n * Builds the modal row for one chain. A chain whose net effect is empty (the\n * user renamed fields back to their original names through a swap) still has\n * to run every hop, so its raw hops are shown instead of an empty row.\n */\nexport const toPendingRename = (\n chain: RenameChain,\n renames: RenameHop[],\n { uid, typeName }: { uid: string; typeName: string }\n): PendingRename => {\n const isSwapBack = chain.pairs.length === 0;\n\n return {\n key: chain.id,\n uid,\n typeName,\n pairs: isSwapBack ? chain.hopIndexes.map((index) => renames[index]) : chain.pairs,\n via: chain.via,\n ...(isSwapBack ? { isSwapBack: true } : {}),\n };\n};\n\n/**\n * Groups the ordered per-type `renames` arrays in a request payload into\n * chains for display, one `PendingRename` per chain, preserving order.\n */\nexport const collectPendingRenames = (requestData: {\n contentTypes: RenameAwareEntry[];\n components: RenameAwareEntry[];\n}): PendingRename[] => {\n const items: PendingRename[] = [];\n\n const visit = (entries: RenameAwareEntry[]) => {\n entries.forEach((entry) => {\n if (entry.action === 'update' && Array.isArray(entry.renames)) {\n const { renames } = entry;\n groupRenameChains(entry.uid, renames).forEach((chain) => {\n items.push(\n toPendingRename(chain, renames, { uid: entry.uid, typeName: getTypeName(entry) })\n );\n });\n }\n });\n };\n\n visit(requestData.contentTypes ?? []);\n visit(requestData.components ?? []);\n\n return items;\n};\n\n/**\n * Keeps only the hops of `renames` that belong to an accepted chain. Filtering\n * by index preserves the original order, and a chain is always kept or dropped\n * as a whole, so the result can never be a truncated chain.\n */\nexport const filterRenamesByAcceptedChains = (\n uid: string,\n renames: RenameHop[],\n acceptedChainIds: Set<string>\n): RenameHop[] => {\n const keptIndexes = new Set<number>();\n groupRenameChains(uid, renames).forEach((chain) => {\n if (acceptedChainIds.has(chain.id)) {\n chain.hopIndexes.forEach((index) => keptIndexes.add(index));\n }\n });\n\n return renames.filter((_, index) => keptIndexes.has(index));\n};\n\n/**\n * Mutates the request payload so each type keeps only the rename chains the\n * user accepted; types left with no accepted hops drop their `renames` entirely.\n */\nexport const applyRenameDecisions = (\n requestData: { contentTypes: RenameAwareEntry[]; components: RenameAwareEntry[] },\n acceptedKeys: Set<string>\n): void => {\n const apply = (entries: RenameAwareEntry[]) => {\n entries.forEach((entry) => {\n if (entry.action === 'update' && Array.isArray(entry.renames)) {\n const kept = filterRenamesByAcceptedChains(entry.uid, entry.renames, acceptedKeys);\n if (kept.length > 0) {\n entry.renames = kept;\n } else {\n delete entry.renames;\n }\n }\n });\n };\n\n apply(requestData.contentTypes ?? []);\n apply(requestData.components ?? []);\n};\n"],"names":["getAttributeRenameDecision","mode","shouldPromptForRenamesBeforeSave","RenameMigrationModal","renames","onConfirm","onCancel","formatMessage","useIntl","descriptionId","React","useId","checkedKeys","setCheckedKeys","useState","Set","map","rename","key","chainNames","pairs","pair","oldName","join","toggle","checked","previous","next","add","delete","_jsx","Modal","Root","open","onOpenChange","_jsxs","Content","aria-describedby","Header","Title","id","getTrad","defaultMessage","Body","Flex","direction","alignItems","gap","Typography","variant","textColor","justifyContent","hasRadius","borderColor","padding","fontWeight","ArrowRight","width","height","fill","newName","isSwapBack","via","length","names","typeName","Checkbox","aria-label","has","onCheckedChange","Footer","Close","Button","onClick","disabled","size","getTypeName","entry","displayName","uid","toPendingRename","chain","hopIndexes","index","collectPendingRenames","requestData","items","visit","entries","forEach","action","Array","isArray","groupRenameChains","push","contentTypes","components","filterRenamesByAcceptedChains","acceptedChainIds","keptIndexes","filter","_","applyRenameDecisions","acceptedKeys","apply","kept"],"mappings":"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"}
|