@strapi/content-type-builder 5.55.1 → 5.57.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.
Files changed (152) hide show
  1. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js +117 -13
  2. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
  3. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +118 -13
  4. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/providers/SchemaProvider.js +31 -19
  6. package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
  7. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +31 -19
  8. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
  9. package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
  10. package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
  11. package/dist/admin/components/DataManager/DataManagerProvider.js +166 -6
  12. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  13. package/dist/admin/components/DataManager/DataManagerProvider.mjs +165 -7
  14. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  15. package/dist/admin/components/DataManager/RenameMigrationModal.js +285 -0
  16. package/dist/admin/components/DataManager/RenameMigrationModal.js.map +1 -0
  17. package/dist/admin/components/DataManager/RenameMigrationModal.mjs +257 -0
  18. package/dist/admin/components/DataManager/RenameMigrationModal.mjs.map +1 -0
  19. package/dist/admin/components/DataManager/reducer.js +107 -2
  20. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  21. package/dist/admin/components/DataManager/reducer.mjs +106 -2
  22. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  23. package/dist/admin/components/DataManager/utils/cleanData.js +8 -1
  24. package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
  25. package/dist/admin/components/DataManager/utils/cleanData.mjs +8 -1
  26. package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
  27. package/dist/admin/components/DataManager/utils/groupRenameChains.js +86 -0
  28. package/dist/admin/components/DataManager/utils/groupRenameChains.js.map +1 -0
  29. package/dist/admin/components/DataManager/utils/groupRenameChains.mjs +84 -0
  30. package/dist/admin/components/DataManager/utils/groupRenameChains.mjs.map +1 -0
  31. package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js +29 -0
  32. package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js.map +1 -0
  33. package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs +27 -0
  34. package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs.map +1 -0
  35. package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js +35 -0
  36. package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js.map +1 -0
  37. package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs +33 -0
  38. package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs.map +1 -0
  39. package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js +48 -0
  40. package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js.map +1 -0
  41. package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs +45 -0
  42. package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs.map +1 -0
  43. package/dist/admin/components/FormModal/FormModal.js +143 -9
  44. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  45. package/dist/admin/components/FormModal/FormModal.mjs +144 -10
  46. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  47. package/dist/admin/components/FormModal/attributes/validation/common.js +6 -5
  48. package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
  49. package/dist/admin/components/FormModal/attributes/validation/common.mjs +1 -1
  50. package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
  51. package/dist/admin/components/FormModal/component/createComponentSchema.js +10 -7
  52. package/dist/admin/components/FormModal/component/createComponentSchema.js.map +1 -1
  53. package/dist/admin/components/FormModal/component/createComponentSchema.mjs +1 -1
  54. package/dist/admin/components/FormModal/component/createComponentSchema.mjs.map +1 -1
  55. package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js +24 -21
  56. package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js.map +1 -1
  57. package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs +1 -1
  58. package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs.map +1 -1
  59. package/dist/admin/components/FormModal/forms/utils/createCollectionName.js +3 -2
  60. package/dist/admin/components/FormModal/forms/utils/createCollectionName.js.map +1 -1
  61. package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs +1 -1
  62. package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs.map +1 -1
  63. package/dist/admin/components/FormModal/utils/getRenameStorageChange.js +73 -0
  64. package/dist/admin/components/FormModal/utils/getRenameStorageChange.js.map +1 -0
  65. package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs +70 -0
  66. package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs.map +1 -0
  67. package/dist/admin/src/components/AIChat/components/AnimatedBox.d.ts +2 -2
  68. package/dist/admin/src/components/AIChat/components/Input.d.ts +2 -2
  69. package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +4 -3
  70. package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +6 -1
  71. package/dist/admin/src/components/AttributeOptions/OptionBoxWrapper.d.ts +2 -2
  72. package/dist/admin/src/components/ComponentRow.d.ts +2 -2
  73. package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +28 -2
  74. package/dist/admin/src/components/DataManager/RenameMigrationModal.d.ts +73 -0
  75. package/dist/admin/src/components/DataManager/reducer.d.ts +17 -2
  76. package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +16 -0
  77. package/dist/admin/src/components/DataManager/utils/groupRenameChains.d.ts +31 -0
  78. package/dist/admin/src/components/DataManager/utils/isStorageCompatibleRename.d.ts +10 -0
  79. package/dist/admin/src/components/DataManager/utils/resolveAfterEditRenameConsent.d.ts +24 -0
  80. package/dist/admin/src/components/DataManager/utils/splitChainsByInheritedConsent.d.ts +26 -0
  81. package/dist/admin/src/components/FormModal/utils/getRenameStorageChange.d.ts +40 -0
  82. package/dist/admin/src/components/List.d.ts +2 -2
  83. package/dist/admin/src/components/Relation/RelationNaturePicker/Components.d.ts +4 -4
  84. package/dist/admin/src/types.d.ts +23 -0
  85. package/dist/admin/translations/en.json.js +12 -0
  86. package/dist/admin/translations/en.json.js.map +1 -1
  87. package/dist/admin/translations/en.json.mjs +12 -0
  88. package/dist/admin/translations/en.json.mjs.map +1 -1
  89. package/dist/server/config.js +24 -3
  90. package/dist/server/config.js.map +1 -1
  91. package/dist/server/config.mjs +21 -3
  92. package/dist/server/config.mjs.map +1 -1
  93. package/dist/server/controllers/schema.js +2 -2
  94. package/dist/server/controllers/schema.js.map +1 -1
  95. package/dist/server/controllers/schema.mjs +1 -1
  96. package/dist/server/controllers/schema.mjs.map +1 -1
  97. package/dist/server/controllers/validation/content-type.js +9 -11
  98. package/dist/server/controllers/validation/content-type.js.map +1 -1
  99. package/dist/server/controllers/validation/content-type.mjs +7 -9
  100. package/dist/server/controllers/validation/content-type.mjs.map +1 -1
  101. package/dist/server/controllers/validation/model-schema.js +2 -3
  102. package/dist/server/controllers/validation/model-schema.js.map +1 -1
  103. package/dist/server/controllers/validation/model-schema.mjs +1 -2
  104. package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
  105. package/dist/server/controllers/validation/relations.js +1 -2
  106. package/dist/server/controllers/validation/relations.js.map +1 -1
  107. package/dist/server/controllers/validation/relations.mjs +1 -2
  108. package/dist/server/controllers/validation/relations.mjs.map +1 -1
  109. package/dist/server/controllers/validation/schema.js +42 -23
  110. package/dist/server/controllers/validation/schema.js.map +1 -1
  111. package/dist/server/controllers/validation/schema.mjs +43 -24
  112. package/dist/server/controllers/validation/schema.mjs.map +1 -1
  113. package/dist/server/index.js +1 -1
  114. package/dist/server/index.js.map +1 -1
  115. package/dist/server/services/content-types.js +1 -2
  116. package/dist/server/services/content-types.js.map +1 -1
  117. package/dist/server/services/content-types.mjs +2 -3
  118. package/dist/server/services/content-types.mjs.map +1 -1
  119. package/dist/server/services/migration-builder/index.js +580 -0
  120. package/dist/server/services/migration-builder/index.js.map +1 -0
  121. package/dist/server/services/migration-builder/index.mjs +573 -0
  122. package/dist/server/services/migration-builder/index.mjs.map +1 -0
  123. package/dist/server/services/schema-builder/content-type-builder.js +31 -1
  124. package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
  125. package/dist/server/services/schema-builder/content-type-builder.mjs +31 -1
  126. package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
  127. package/dist/server/services/schema-mutation.js +30 -2
  128. package/dist/server/services/schema-mutation.js.map +1 -1
  129. package/dist/server/services/schema-mutation.mjs +10 -2
  130. package/dist/server/services/schema-mutation.mjs.map +1 -1
  131. package/dist/server/services/schema.js +259 -15
  132. package/dist/server/services/schema.js.map +1 -1
  133. package/dist/server/services/schema.mjs +252 -9
  134. package/dist/server/services/schema.mjs.map +1 -1
  135. package/dist/server/src/config.d.ts +23 -2
  136. package/dist/server/src/config.d.ts.map +1 -1
  137. package/dist/server/src/controllers/validation/content-type.d.ts +0 -1
  138. package/dist/server/src/controllers/validation/content-type.d.ts.map +1 -1
  139. package/dist/server/src/controllers/validation/relations.d.ts.map +1 -1
  140. package/dist/server/src/controllers/validation/schema.d.ts +28 -0
  141. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
  142. package/dist/server/src/index.d.ts +10 -2
  143. package/dist/server/src/index.d.ts.map +1 -1
  144. package/dist/server/src/services/content-types.d.ts.map +1 -1
  145. package/dist/server/src/services/migration-builder/index.d.ts +83 -0
  146. package/dist/server/src/services/migration-builder/index.d.ts.map +1 -0
  147. package/dist/server/src/services/schema-builder/content-type-builder.d.ts.map +1 -1
  148. package/dist/server/src/services/schema-mutation.d.ts +4 -2
  149. package/dist/server/src/services/schema-mutation.d.ts.map +1 -1
  150. package/dist/server/src/services/schema.d.ts +19 -0
  151. package/dist/server/src/services/schema.d.ts.map +1 -1
  152. package/package.json +11 -10
@@ -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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"}