@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.
Files changed (178) 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 +129 -2
  20. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  21. package/dist/admin/components/DataManager/reducer.mjs +128 -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 +178 -70
  44. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  45. package/dist/admin/components/FormModal/FormModal.mjs +179 -71
  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/lib/transforms/schemas/toCTB.d.ts +4 -3
  68. package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +6 -1
  69. package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +28 -2
  70. package/dist/admin/src/components/DataManager/RenameMigrationModal.d.ts +73 -0
  71. package/dist/admin/src/components/DataManager/reducer.d.ts +17 -2
  72. package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +24 -8
  73. package/dist/admin/src/components/DataManager/utils/groupRenameChains.d.ts +31 -0
  74. package/dist/admin/src/components/DataManager/utils/isStorageCompatibleRename.d.ts +10 -0
  75. package/dist/admin/src/components/DataManager/utils/resolveAfterEditRenameConsent.d.ts +24 -0
  76. package/dist/admin/src/components/DataManager/utils/splitChainsByInheritedConsent.d.ts +26 -0
  77. package/dist/admin/src/components/FormModal/utils/getRenameStorageChange.d.ts +40 -0
  78. package/dist/admin/src/types.d.ts +23 -0
  79. package/dist/admin/translations/cs.json.js +0 -2
  80. package/dist/admin/translations/cs.json.js.map +1 -1
  81. package/dist/admin/translations/cs.json.mjs +0 -2
  82. package/dist/admin/translations/cs.json.mjs.map +1 -1
  83. package/dist/admin/translations/de.json.js +0 -2
  84. package/dist/admin/translations/de.json.js.map +1 -1
  85. package/dist/admin/translations/de.json.mjs +0 -2
  86. package/dist/admin/translations/de.json.mjs.map +1 -1
  87. package/dist/admin/translations/en.json.js +12 -2
  88. package/dist/admin/translations/en.json.js.map +1 -1
  89. package/dist/admin/translations/en.json.mjs +12 -2
  90. package/dist/admin/translations/en.json.mjs.map +1 -1
  91. package/dist/admin/translations/ja.json.js +0 -2
  92. package/dist/admin/translations/ja.json.js.map +1 -1
  93. package/dist/admin/translations/ja.json.mjs +0 -2
  94. package/dist/admin/translations/ja.json.mjs.map +1 -1
  95. package/dist/admin/translations/ko.json.js +0 -2
  96. package/dist/admin/translations/ko.json.js.map +1 -1
  97. package/dist/admin/translations/ko.json.mjs +0 -2
  98. package/dist/admin/translations/ko.json.mjs.map +1 -1
  99. package/dist/admin/translations/nl.json.js +0 -2
  100. package/dist/admin/translations/nl.json.js.map +1 -1
  101. package/dist/admin/translations/nl.json.mjs +0 -2
  102. package/dist/admin/translations/nl.json.mjs.map +1 -1
  103. package/dist/admin/translations/pl.json.js +0 -2
  104. package/dist/admin/translations/pl.json.js.map +1 -1
  105. package/dist/admin/translations/pl.json.mjs +0 -2
  106. package/dist/admin/translations/pl.json.mjs.map +1 -1
  107. package/dist/admin/translations/ru.json.js +0 -2
  108. package/dist/admin/translations/ru.json.js.map +1 -1
  109. package/dist/admin/translations/ru.json.mjs +0 -2
  110. package/dist/admin/translations/ru.json.mjs.map +1 -1
  111. package/dist/admin/translations/sk.json.js +0 -2
  112. package/dist/admin/translations/sk.json.js.map +1 -1
  113. package/dist/admin/translations/sk.json.mjs +0 -2
  114. package/dist/admin/translations/sk.json.mjs.map +1 -1
  115. package/dist/server/config.js +24 -3
  116. package/dist/server/config.js.map +1 -1
  117. package/dist/server/config.mjs +21 -3
  118. package/dist/server/config.mjs.map +1 -1
  119. package/dist/server/controllers/schema.js +2 -2
  120. package/dist/server/controllers/schema.js.map +1 -1
  121. package/dist/server/controllers/schema.mjs +1 -1
  122. package/dist/server/controllers/schema.mjs.map +1 -1
  123. package/dist/server/controllers/validation/content-type.js +9 -11
  124. package/dist/server/controllers/validation/content-type.js.map +1 -1
  125. package/dist/server/controllers/validation/content-type.mjs +7 -9
  126. package/dist/server/controllers/validation/content-type.mjs.map +1 -1
  127. package/dist/server/controllers/validation/model-schema.js +2 -3
  128. package/dist/server/controllers/validation/model-schema.js.map +1 -1
  129. package/dist/server/controllers/validation/model-schema.mjs +1 -2
  130. package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
  131. package/dist/server/controllers/validation/relations.js +1 -2
  132. package/dist/server/controllers/validation/relations.js.map +1 -1
  133. package/dist/server/controllers/validation/relations.mjs +1 -2
  134. package/dist/server/controllers/validation/relations.mjs.map +1 -1
  135. package/dist/server/controllers/validation/schema.js +42 -23
  136. package/dist/server/controllers/validation/schema.js.map +1 -1
  137. package/dist/server/controllers/validation/schema.mjs +43 -24
  138. package/dist/server/controllers/validation/schema.mjs.map +1 -1
  139. package/dist/server/index.js +1 -1
  140. package/dist/server/index.js.map +1 -1
  141. package/dist/server/services/content-types.js +1 -2
  142. package/dist/server/services/content-types.js.map +1 -1
  143. package/dist/server/services/content-types.mjs +2 -3
  144. package/dist/server/services/content-types.mjs.map +1 -1
  145. package/dist/server/services/migration-builder/index.js +580 -0
  146. package/dist/server/services/migration-builder/index.js.map +1 -0
  147. package/dist/server/services/migration-builder/index.mjs +573 -0
  148. package/dist/server/services/migration-builder/index.mjs.map +1 -0
  149. package/dist/server/services/schema-builder/content-type-builder.js +31 -1
  150. package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
  151. package/dist/server/services/schema-builder/content-type-builder.mjs +31 -1
  152. package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
  153. package/dist/server/services/schema-mutation.js +30 -2
  154. package/dist/server/services/schema-mutation.js.map +1 -1
  155. package/dist/server/services/schema-mutation.mjs +10 -2
  156. package/dist/server/services/schema-mutation.mjs.map +1 -1
  157. package/dist/server/services/schema.js +312 -15
  158. package/dist/server/services/schema.js.map +1 -1
  159. package/dist/server/services/schema.mjs +305 -9
  160. package/dist/server/services/schema.mjs.map +1 -1
  161. package/dist/server/src/config.d.ts +23 -2
  162. package/dist/server/src/config.d.ts.map +1 -1
  163. package/dist/server/src/controllers/validation/content-type.d.ts +0 -1
  164. package/dist/server/src/controllers/validation/content-type.d.ts.map +1 -1
  165. package/dist/server/src/controllers/validation/relations.d.ts.map +1 -1
  166. package/dist/server/src/controllers/validation/schema.d.ts +28 -0
  167. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
  168. package/dist/server/src/index.d.ts +10 -2
  169. package/dist/server/src/index.d.ts.map +1 -1
  170. package/dist/server/src/services/content-types.d.ts.map +1 -1
  171. package/dist/server/src/services/migration-builder/index.d.ts +83 -0
  172. package/dist/server/src/services/migration-builder/index.d.ts.map +1 -0
  173. package/dist/server/src/services/schema-builder/content-type-builder.d.ts.map +1 -1
  174. package/dist/server/src/services/schema-mutation.d.ts +4 -2
  175. package/dist/server/src/services/schema-mutation.d.ts.map +1 -1
  176. package/dist/server/src/services/schema.d.ts +19 -0
  177. package/dist/server/src/services/schema.d.ts.map +1 -1
  178. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.js","sources":["../../../../admin/src/components/DataManager/reducer.ts"],"sourcesContent":["import { PayloadAction } from '@reduxjs/toolkit';\nimport merge from 'lodash/merge';\nimport omit from 'lodash/omit';\n\nimport { applyPrivateSearchDefault } from '../../utils/applyPrivateSearchDefault';\nimport { getRelationType } from '../../utils/getRelationType';\nimport { makeUnique } from '../../utils/makeUnique';\n\nimport { createUndoRedoSlice } from './undoRedo';\nimport {\n createEmptyContentStructure,\n findSiblingFolderByName,\n getDeleteFolderOnlySiblingNameCollisions,\n isFolderNameTakenBySibling,\n MAX_FOLDER_DEPTH,\n sectionKeyForKind,\n} from './utils/contentStructure';\n\nimport type {\n Components,\n ContentTypes,\n ContentType,\n Component,\n Status,\n AnyAttribute,\n} from '../../types';\nimport type {\n ContentStructure,\n ContentStructureGroup,\n ContentStructureSection,\n GroupStatus,\n SectionKey,\n} from './utils/contentStructure';\nimport type { Internal, Schema, Struct, UID } from '@strapi/types';\n\nexport interface DataManagerStateType {\n components: Components;\n initialComponents: Components;\n contentTypes: ContentTypes;\n initialContentTypes: ContentTypes;\n contentStructure: ContentStructure;\n initialContentStructure: ContentStructure;\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n isLoading: boolean;\n [key: string]: unknown;\n}\n\nconst initialState: DataManagerStateType = {\n components: {},\n contentTypes: {},\n initialComponents: {},\n initialContentTypes: {},\n contentStructure: createEmptyContentStructure(),\n initialContentStructure: createEmptyContentStructure(),\n reservedNames: {\n models: [],\n attributes: [],\n },\n isLoading: true,\n};\n\nconst ONE_SIDE_RELATIONS = ['oneWay', 'manyWay'];\n\ntype AttributeMutation = AnyAttribute & {\n createComponent?: unknown;\n};\n\ntype PluginOptions = Record<string, unknown>;\n\nconst getOppositeRelation = (originalRelation?: Schema.Attribute.RelationKind.Any) => {\n if (originalRelation === 'manyToOne') {\n return 'oneToMany';\n }\n\n if (originalRelation === 'oneToMany') {\n return 'manyToOne';\n }\n\n return originalRelation;\n};\n\nconst findAttributeIndex = (type: ContentType | Component, attributeToFind?: string) => {\n return type.attributes.findIndex(({ name }: { name: string }) => name === attributeToFind);\n};\n\ntype InitPayload = {\n components: Record<string, Component>;\n contentTypes: Record<string, ContentType>;\n reservedNames: DataManagerStateType['reservedNames'];\n contentStructure?: ContentStructure;\n};\n\ntype CreateFolderPayload = {\n parentId: string | null;\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype RenameFolderPayload = {\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype MoveFolderPayload = {\n newParentId: string | null;\n section: SectionKey;\n index?: number;\n id: string;\n};\n\ntype DeleteFolderPayload = {\n section: SectionKey;\n id: string;\n};\n\ntype DeleteFolderAndContentPayload = DeleteFolderPayload & {\n contentTypeUids: Internal.UID.ContentType[];\n};\n\ntype AssignContentTypeToFolderPayload = {\n targetGroupId: string | null;\n uid: UID.ContentType;\n section: SectionKey;\n index?: number;\n};\n\ntype ReorderFolderChildrenPayload = {\n section: SectionKey;\n groupId: string;\n from: number;\n to: number;\n};\n\ntype AddAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype AddCreateComponentToDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dynamicZoneTarget: string;\n componentsToAdd: Internal.UID.Component[];\n};\n\ntype AddCustomFieldAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype ChangeDynamicZoneComponentsPayload = {\n dynamicZoneTarget: string;\n newComponents: Internal.UID.Component[];\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype CreateComponentSchemaPayload = {\n uid: string;\n data: {\n icon?: string;\n displayName: string;\n };\n componentCategory: string;\n};\n\ntype FolderAssignmentPayload =\n | { targetGroupId: string | null }\n | { newFolderId: string; newFolderName: string };\n\ntype CreateSchemaPayload = {\n uid: string;\n data: {\n displayName: string;\n singularName: string;\n pluralName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n folder?: FolderAssignmentPayload;\n};\n\ntype EditAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype EditCustomFieldAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype RemoveComponentFromDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dzName: string;\n componentToRemoveIndex: number;\n};\n\ntype RemoveFieldPayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n attributeToRemoveName: string;\n};\n\ntype UpdateComponentSchemaPayload = {\n data: {\n icon?: string;\n displayName: string;\n };\n uid: Internal.UID.Component;\n};\n\ntype UpdateComponentUIDPayload = {\n uid: Internal.UID.Component;\n newComponentUID: Internal.UID.Component;\n};\n\ntype UpdateSchemaPayload = {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n uid: string;\n folder?: FolderAssignmentPayload;\n};\n\ntype MoveAttributePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n from: number;\n to: number;\n};\n\nconst getType = (\n state: DataManagerStateType,\n {\n forTarget,\n targetUid,\n }: {\n forTarget: Struct.ModelType;\n targetUid: string;\n }\n) => {\n return forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n};\n\n// TODO: use initial state when chnaging back to the initial state without knowing\nconst setStatus = (type: ContentType | Component, status: Status) => {\n switch (type.status) {\n case 'NEW':\n case 'REMOVED': {\n break;\n }\n default: {\n type.status = status;\n }\n }\n};\n\nconst getNewStatus = (oldStatus: Status | undefined, newStatus: Status) => {\n if (oldStatus === 'NEW' || oldStatus === 'REMOVED') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst getNewGroupStatus = (oldStatus: GroupStatus, newStatus: GroupStatus): GroupStatus => {\n if (oldStatus === 'NEW') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst setAttributeStatus = (attribute: { status?: Status }, status: Status) => {\n attribute.status = getNewStatus(attribute.status, status);\n};\n\nconst createAttribute = (properties: Record<string, unknown>): AnyAttribute => {\n return {\n ...applyPrivateSearchDefault(properties),\n status: 'NEW',\n } as AnyAttribute;\n};\n\nconst setAttributeAt = (type: ContentType | Component, index: number, attribute: AnyAttribute) => {\n const previousAttribute = type.attributes[index];\n\n const newStatus = getNewStatus(previousAttribute.status, 'CHANGED');\n\n type.attributes[index] = {\n ...applyPrivateSearchDefault(attribute),\n status: newStatus,\n };\n\n setStatus(type, 'CHANGED');\n};\n\nconst pushAttribute = (type: ContentType | Component, attribute: AnyAttribute) => {\n type.attributes.push(attribute);\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeAt = (type: ContentType | Component, index: number) => {\n const attr = type.attributes[index];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(index, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\nconst replaceAttributeAt = (\n type: ContentType | Component,\n index: number,\n attribute: AnyAttribute\n) => {\n type.attributes[index] = attribute;\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeByName = (type: ContentType | Component, name: string) => {\n const idx = type.attributes.findIndex((attr) => attr.name === name);\n\n if (idx === -1) {\n return;\n }\n\n const attr = type.attributes[idx];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(idx, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\nconst updateType = (type: ContentType | Component, data: Record<string, unknown>) => {\n merge(type, data);\n setStatus(type, 'CHANGED');\n};\n\nconst findGroup = (groups: ContentStructureGroup[], id: string) => {\n return groups.find((group) => group.id === id);\n};\n\nconst setGroupStatus = (group: ContentStructureGroup, status: GroupStatus): void => {\n group.status = getNewGroupStatus(group.status, status);\n};\n\n/**\n * Remove a content type reference from every group of a section, mark the group as changed if a reference was removed.\n * @returns true if a reference was removed, false otherwise.\n */\nconst removeContentTypeChild = (groups: ContentStructureGroup[], uid: string): boolean => {\n let removed = false;\n\n for (const group of groups) {\n const groupIndex = group.children.findIndex((child) => {\n return child.type === 'contentType' && child.uid === uid;\n });\n\n if (groupIndex !== -1) {\n group.children.splice(groupIndex, 1);\n setGroupStatus(group, 'CHANGED');\n removed = true;\n }\n }\n\n return removed;\n};\n\n/**\n * Assign a content type to a folder within a single section, optionally creating\n * a new root folder first.\n *\n * Detaches the content type from any current folder then files it under the target group.\n * This is also used by the create/edit content-type modal's folder picker via\n * createSchema/updateSchema.\n */\nconst applyFolderAssignment = (\n section: ContentStructureSection,\n uid: UID.ContentType,\n folder: FolderAssignmentPayload\n): void => {\n const { groups } = section;\n\n removeContentTypeChild(groups, uid);\n\n let targetGroupId: string | null;\n\n if ('newFolderId' in folder) {\n // Reuse an existing root folder of the same name instead of creating a\n // duplicate. The modal picker can only ever makes root folders, so\n // this makes the assumption that a same-named root folder means the\n // user wants to insert into that folder.\n const existing = findSiblingFolderByName(groups, null, folder.newFolderName);\n\n if (existing) {\n targetGroupId = existing.id;\n } else {\n groups.push({\n name: folder.newFolderName.trim(),\n id: folder.newFolderId,\n parent: null,\n children: [],\n status: 'NEW',\n });\n\n targetGroupId = folder.newFolderId;\n }\n } else {\n targetGroupId = folder.targetGroupId;\n }\n\n if (!targetGroupId) {\n return;\n }\n\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n targetGroup.children.push({ type: 'contentType', uid });\n setGroupStatus(targetGroup, 'CHANGED');\n }\n};\n\n/**\n * Determines whether `potentialDescendantId` is nested somewhere inside `ancestorId`'s subtree\n */\nconst isDescendantGroup = (\n groups: ContentStructureGroup[],\n ancestorId: string,\n potentialDescendantId: string\n): boolean => {\n let current = findGroup(groups, potentialDescendantId);\n\n while (current && current.parent !== null) {\n if (current.parent === ancestorId) {\n return true;\n }\n\n current = findGroup(groups, current.parent);\n }\n\n return false;\n};\n\nconst getGroupDepth = (groups: ContentStructureGroup[], id: string): number => {\n let depth = 1;\n let current = findGroup(groups, id);\n\n while (current && current.parent !== null) {\n current = findGroup(groups, current.parent);\n depth += 1;\n }\n\n return depth;\n};\n\n/**\n * Number of folder levels below a group e.g. a group with no sub-folders has height 0.\n */\nconst getSubtreeHeight = (groups: ContentStructureGroup[], id: string): number => {\n const group = findGroup(groups, id);\n\n if (!group) {\n return 0;\n }\n\n let height = 0;\n\n for (const child of group.children) {\n if (child.type !== 'group') continue;\n height = Math.max(height, 1 + getSubtreeHeight(groups, child.id));\n }\n\n return height;\n};\n\nconst applyDeleteContentType = (state: DataManagerStateType, uid: Internal.UID.ContentType) => {\n const type = state.contentTypes[uid];\n\n // Only application schemas belong to CTB. Folder actions can be crafted outside the UI,\n // so this guard must live at the mutation boundary rather than in the dialog alone.\n if (!type || !type.uid.startsWith('api::') || type.plugin) {\n return;\n }\n\n // just drop new content types\n if (type.status === 'NEW') {\n delete state.contentTypes[uid];\n } else {\n setStatus(type, 'REMOVED');\n }\n\n // remove the content type from the content structure tree\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n\n // remove the content type from the components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n\n // remove the content type from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n};\n\nconst slice = createUndoRedoSlice(\n {\n name: 'data-manager',\n initialState,\n reducers: {\n init: (state, action: PayloadAction<InitPayload>) => {\n const { components, contentTypes, reservedNames, contentStructure } = action.payload;\n\n state.components = components;\n state.initialComponents = components;\n state.initialContentTypes = contentTypes;\n state.contentTypes = contentTypes;\n state.reservedNames = reservedNames;\n\n const structure = contentStructure ?? createEmptyContentStructure();\n state.initialContentStructure = structure;\n state.contentStructure = structure;\n\n state.isLoading = false;\n },\n createComponentSchema: (state, action: PayloadAction<CreateComponentSchemaPayload>) => {\n const { uid, data, componentCategory } = action.payload;\n\n const newSchema: Component = {\n uid: uid as Internal.UID.Component,\n status: 'NEW',\n category: componentCategory,\n modelName: data.displayName,\n globalId: data.displayName,\n info: {\n icon: data.icon,\n displayName: data.displayName,\n },\n attributes: [],\n modelType: 'component',\n };\n\n state.components[uid as string] = newSchema;\n },\n createSchema: (state, action: PayloadAction<CreateSchemaPayload>) => {\n const { uid, data, folder } = action.payload;\n\n const { displayName, singularName, pluralName, kind, draftAndPublish, pluginOptions } =\n data;\n\n const newSchema: ContentType = {\n uid: uid as Internal.UID.ContentType,\n status: 'NEW',\n visible: true,\n modelType: 'contentType',\n restrictRelationsTo: null,\n attributes: [],\n kind,\n modelName: displayName,\n globalId: displayName,\n options: {\n draftAndPublish,\n },\n info: {\n displayName,\n singularName,\n pluralName,\n },\n pluginOptions,\n };\n\n state.contentTypes[uid] = newSchema;\n\n // File the new content type into a folder in the same transaction it is created,\n // so both are subject to the same undo/redo operatiion.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n addAttribute: (state, action: PayloadAction<AddAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = createAttribute(omit(attributeToSet, 'createComponent'));\n\n if (attribute.type === 'relation') {\n const target = attribute.target;\n const targetAttribute = attribute.targetAttribute || null;\n const relation = attribute.relation;\n const relationType = getRelationType(relation, targetAttribute);\n\n const isBidirectionalRelation =\n relationType !== undefined && !['oneWay', 'manyWay'].includes(relationType);\n\n if (isBidirectionalRelation) {\n const oppositeAttribute = createAttribute({\n name: targetAttribute,\n relation: getOppositeRelation(relationType),\n target: type.uid,\n targetAttribute: attribute.name,\n type: 'relation',\n private: attribute.private,\n });\n\n const targetType = getType(state, { forTarget, targetUid: target });\n pushAttribute(targetType, oppositeAttribute);\n }\n }\n\n pushAttribute(type, attribute);\n setStatus(type, 'CHANGED');\n },\n moveAttribute: (state, action: PayloadAction<MoveAttributePayload>) => {\n const { forTarget, targetUid, from, to } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = type.attributes[from];\n type.attributes.splice(from, 1);\n type.attributes.splice(to, 0, attribute);\n setStatus(type, 'CHANGED');\n },\n addCustomFieldAttribute: (state, action: PayloadAction<AddCustomFieldAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n pushAttribute(type, createAttribute(attributeToSet));\n },\n addCreatedComponentToDynamicZone: (\n state,\n action: PayloadAction<AddCreateComponentToDynamicZonePayload>\n ) => {\n const { dynamicZoneTarget, componentsToAdd, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n componentsToAdd.forEach((componentUid: Internal.UID.Component) => {\n attr.components.push(componentUid);\n });\n\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n setStatus(type, 'CHANGED');\n },\n changeDynamicZoneComponents: (\n state,\n action: PayloadAction<ChangeDynamicZoneComponentsPayload>\n ) => {\n const { dynamicZoneTarget, newComponents, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n const currentDZComponents = attr.components;\n\n const updatedComponents = makeUnique([...currentDZComponents, ...newComponents]);\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components = updatedComponents;\n },\n editAttribute: (state, action: PayloadAction<EditAttributePayload>) => {\n const { name, attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, name);\n\n if (initialAttributeIndex === -1) {\n return;\n }\n\n const previousAttribute = type.attributes[initialAttributeIndex];\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n\n if (previousAttribute.type !== attributeToSet.type) {\n return;\n }\n\n if (previousAttribute.type !== 'relation' || attributeToSet.type !== 'relation') {\n return;\n }\n\n const previousTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: previousAttribute.target,\n });\n const newTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: attributeToSet.target,\n });\n\n const previousTargetAttributeIndex = findAttributeIndex(\n previousTarget,\n previousAttribute.targetAttribute ?? ''\n );\n const previousTargetAttribute =\n previousTargetAttributeIndex !== -1\n ? previousTarget.attributes[previousTargetAttributeIndex]\n : undefined;\n\n // remove old targetAttribute\n if (previousAttribute.targetAttribute) {\n removeAttributeByName(previousTarget, previousAttribute.targetAttribute);\n }\n\n const newRelationType = getRelationType(\n attributeToSet.relation,\n attributeToSet.targetAttribute\n );\n const isBidirectionnal =\n newRelationType !== undefined && !ONE_SIDE_RELATIONS.includes(newRelationType);\n\n if (isBidirectionnal) {\n const newTargetAttribute = {\n name: attributeToSet.targetAttribute,\n type: 'relation',\n relation: getOppositeRelation(attributeToSet.relation),\n targetAttribute: attributeToSet.name,\n target: type.uid,\n private: previousAttribute.private ?? attributeToSet.private,\n pluginOptions: previousAttribute.pluginOptions ?? attributeToSet.pluginOptions,\n ...(previousTarget.uid === newTarget.uid && previousTargetAttribute?.conditions\n ? { conditions: previousTargetAttribute.conditions }\n : {}),\n status: 'CHANGED',\n } as AnyAttribute;\n\n // create or recreate(at old index) targetAttribute\n if (previousTargetAttributeIndex !== -1 && previousTarget.uid === newTarget.uid) {\n // re-create at previousIdx if possible\n replaceAttributeAt(newTarget, previousTargetAttributeIndex, newTargetAttribute);\n } else {\n pushAttribute(newTarget, {\n ...newTargetAttribute,\n status: 'NEW',\n });\n }\n }\n },\n editCustomFieldAttribute: (state, action: PayloadAction<EditCustomFieldAttributePayload>) => {\n const { forTarget, targetUid, name, attributeToSet } = action.payload;\n\n const initialAttributeName = name;\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, initialAttributeName);\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n },\n reloadPlugin: () => {\n return initialState;\n },\n removeComponentFromDynamicZone: (\n state,\n action: PayloadAction<RemoveComponentFromDynamicZonePayload>\n ) => {\n const { dzName, componentToRemoveIndex, forTarget, targetUid } = action.payload;\n\n const type =\n forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n\n if (!type) {\n return;\n }\n\n const dzAttributeIndex = findAttributeIndex(type, dzName);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components.splice(componentToRemoveIndex, 1);\n },\n removeField: (state, action: PayloadAction<RemoveFieldPayload>) => {\n const { forTarget, targetUid, attributeToRemoveName } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attributeToRemoveIndex = findAttributeIndex(type, attributeToRemoveName);\n const attribute = type.attributes[attributeToRemoveIndex];\n\n if (attribute.type === 'relation') {\n const { target, relation, targetAttribute: targetAttributeName } = attribute;\n const relationType = getRelationType(relation, targetAttributeName);\n\n const isBidirectionnal = !ONE_SIDE_RELATIONS.includes(relationType!);\n\n if (isBidirectionnal && targetAttributeName) {\n const targetContentType = getType(state, { forTarget, targetUid: target });\n const targetAttributeIndex = findAttributeIndex(targetContentType, targetAttributeName);\n\n removeAttributeAt(targetContentType, targetAttributeIndex);\n }\n }\n\n // Find all uid fields that have the targetField set to the field we are removing\n type.attributes.forEach((attribute) => {\n if (attribute.type === 'uid') {\n if (attribute.targetField === attributeToRemoveName) {\n delete attribute.targetField;\n }\n }\n });\n\n removeAttributeAt(type, attributeToRemoveIndex);\n },\n // only edits a component in practice\n updateComponentSchema: (state, action: PayloadAction<UpdateComponentSchemaPayload>) => {\n const { data, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type) {\n return;\n }\n\n updateType(type, {\n info: {\n displayName: data.displayName,\n icon: data.icon,\n },\n });\n },\n updateComponentUid: (state, action: PayloadAction<UpdateComponentUIDPayload>) => {\n const { newComponentUID, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type || type.status !== 'NEW') {\n return;\n }\n\n if (newComponentUID !== uid) {\n const newType = { ...type, uid: newComponentUID };\n state.components[newComponentUID] = newType;\n delete state.components[uid];\n\n // update the uid in the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.map((component: UID.Component) => {\n if (component === uid) {\n return newComponentUID;\n }\n\n return component;\n });\n\n attribute.components = newComponents;\n }\n });\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n\n // update the uid in the other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n component.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n }\n },\n updateSchema: (state, action: PayloadAction<UpdateSchemaPayload>) => {\n const { data, uid, folder } = action.payload;\n\n const { displayName, kind, draftAndPublish, pluginOptions } = data;\n\n const type = state.contentTypes[uid];\n if (!type) {\n return;\n }\n\n const previousKind = type.kind;\n\n updateType(type, {\n info: {\n displayName,\n },\n kind,\n options: {\n draftAndPublish,\n },\n pluginOptions,\n });\n\n if (kind && kind !== previousKind) {\n const oldSection = state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n\n // Apply the folder picker's choice after any kind relocation, so the\n // assignment lands in the content type's (possibly new) section.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n deleteComponent: (state, action: PayloadAction<Internal.UID.Component>) => {\n const uid = action.payload;\n\n // remove the compo from the components\n if (state.components[uid].status === 'NEW') {\n delete state.components[uid];\n } else {\n setStatus(state.components[uid], 'REMOVED');\n }\n\n // remove the compo from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n // remove from dynamic zones\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.filter(\n (component: unknown) => component !== uid\n );\n\n attribute.components = newComponents;\n }\n });\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n\n // remove the compo from other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n },\n deleteContentType: (state, action: PayloadAction<Internal.UID.ContentType>) => {\n applyDeleteContentType(state, action.payload);\n },\n\n createFolder: (state, action: PayloadAction<CreateFolderPayload>) => {\n const { section, id, name: rawName, parentId } = action.payload;\n const name = rawName.trim();\n const { groups } = state.contentStructure.sections[section];\n\n if (parentId && getGroupDepth(groups, parentId) + 1 > MAX_FOLDER_DEPTH) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, parentId, name)) {\n return;\n }\n\n groups.push({ id, name, parent: parentId, children: [], status: 'NEW' });\n\n if (parentId) {\n const parent = findGroup(groups, parentId);\n\n if (parent) {\n parent.children.push({ type: 'group', id });\n setGroupStatus(parent, 'CHANGED');\n }\n }\n },\n renameFolder: (state, action: PayloadAction<RenameFolderPayload>) => {\n const { section, id, name: rawName } = action.payload;\n const name = rawName.trim();\n\n const { groups } = state.contentStructure.sections[section];\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n if (group.name === name) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, group.parent, name, id)) {\n return;\n }\n\n group.name = name;\n setGroupStatus(group, 'CHANGED');\n },\n moveFolder: (state, action: PayloadAction<MoveFolderPayload>) => {\n const { section, id, newParentId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n // Reject no-ops and cyclic moves\n if (newParentId === id || (newParentId && isDescendantGroup(groups, id, newParentId))) {\n return;\n }\n\n // Refuse moves that would exceed the maximum allowed depth.\n const newTopDepth = newParentId ? getGroupDepth(groups, newParentId) + 1 : 1;\n if (newTopDepth + getSubtreeHeight(groups, id) > MAX_FOLDER_DEPTH) {\n return;\n }\n\n // Refuse a move that would collide with an identically named sibling.\n if (isFolderNameTakenBySibling(groups, newParentId, group.name, id)) {\n return;\n }\n\n if (group.parent) {\n const oldParent = findGroup(groups, group.parent);\n\n if (oldParent) {\n // Remove from the old parent's list of children.\n const idx = oldParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === id;\n });\n\n if (idx !== -1) {\n oldParent.children.splice(idx, 1);\n }\n\n setGroupStatus(oldParent, 'CHANGED');\n }\n }\n\n group.parent = newParentId;\n setGroupStatus(group, 'CHANGED');\n\n if (newParentId) {\n const newParent = findGroup(groups, newParentId);\n\n if (newParent) {\n const entry = { type: 'group' as const, id };\n\n if (typeof index === 'number' && index >= 0 && index <= newParent.children.length) {\n newParent.children.splice(index, 0, entry);\n } else {\n newParent.children.push(entry);\n }\n\n setGroupStatus(newParent, 'CHANGED');\n }\n } else if (typeof index === 'number') {\n // If a content type is dropped into the root:\n // The root display order follows the array order of the\n // section's root-level groups because there's no root level\n // customization yet, so reposition the moved group among them.\n const currentIndex = groups.findIndex((candidate) => candidate.id === id);\n\n if (currentIndex !== -1) {\n const [moved] = groups.splice(currentIndex, 1);\n const rootIds = groups\n .filter((candidate) => candidate.parent === null)\n .map((candidate) => candidate.id);\n const anchorId = rootIds[index];\n const insertAt = anchorId\n ? groups.findIndex((candidate) => candidate.id === anchorId)\n : groups.length;\n\n groups.splice(insertAt === -1 ? groups.length : insertAt, 0, moved);\n }\n }\n },\n deleteFolderOnly: (state, action: PayloadAction<DeleteFolderPayload>) => {\n const { section, id: groupToDeleteId } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const groupToDeleteParentId = groupToDelete.parent;\n\n // Reparenting a child folder into its grandparent must preserve the same sibling-name\n // invariant as create, rename, and move. Do this before mutating any group state.\n if (getDeleteFolderOnlySiblingNameCollisions(groups, groupToDeleteId).length > 0) {\n return;\n }\n\n // It is necessary to clone the children because we must subsequently mutate the original group.children array when we splice it out of its parent.\n const children = groupToDelete.children.map((child) => ({ ...child }));\n\n // Children of a deleted folder inherit the deleted folder's parent.\n children.forEach((child) => {\n if (child.type === 'group') {\n const childGroup = findGroup(groups, child.id);\n\n if (childGroup) {\n childGroup.parent = groupToDeleteParentId;\n }\n }\n });\n\n if (groupToDeleteParentId) {\n const groupToDeleteParent = findGroup(groups, groupToDeleteParentId);\n\n if (groupToDeleteParent) {\n // Splice the deleted folder's children of the deleted folder into their new parent at the position of the deleted folder.\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1, ...children);\n } else {\n groupToDeleteParent.children.push(...children);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Finally, remove the deleted folder from its section's list of groups.\n const groupIndex = groups.findIndex((candidate) => {\n return candidate.id === groupToDeleteId;\n });\n\n if (groupIndex !== -1) {\n groups.splice(groupIndex, 1);\n }\n },\n deleteFolderAndContent: (state, action: PayloadAction<DeleteFolderAndContentPayload>) => {\n const { section, id: groupToDeleteId, contentTypeUids } = action.payload;\n\n contentTypeUids.forEach((uid) => {\n applyDeleteContentType(state, uid);\n });\n\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const toRemove = new Set<string>();\n const collect = (currentGroupId: string) => {\n toRemove.add(currentGroupId);\n\n const currentGroup = findGroup(groups, currentGroupId);\n\n for (const child of currentGroup?.children ?? []) {\n if (child.type !== 'group') continue;\n collect(child.id);\n }\n };\n\n collect(groupToDeleteId);\n\n if (groupToDelete.parent) {\n const groupToDeleteParent = findGroup(groups, groupToDelete.parent);\n\n if (groupToDeleteParent) {\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Removes the group entry and all its descendants from the contentStructure.\n state.contentStructure.sections[section].groups = groups.filter((candidate) => {\n return !toRemove.has(candidate.id);\n });\n },\n assignContentTypeToFolder: (\n state,\n action: PayloadAction<AssignContentTypeToFolderPayload>\n ) => {\n const { section, uid, targetGroupId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n removeContentTypeChild(groups, uid);\n\n if (targetGroupId) {\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n const entry = { type: 'contentType' as const, uid };\n\n if (typeof index === 'number' && index >= 0 && index <= targetGroup.children.length) {\n targetGroup.children.splice(index, 0, entry);\n } else {\n targetGroup.children.push(entry);\n }\n\n setGroupStatus(targetGroup, 'CHANGED');\n }\n }\n },\n reorderFolderChildren: (state, action: PayloadAction<ReorderFolderChildrenPayload>) => {\n const { section, groupId, from, to } = action.payload;\n\n const group = findGroup(state.contentStructure.sections[section].groups, groupId);\n if (!group) {\n return;\n }\n\n const child = group.children[from];\n if (!child) {\n return;\n }\n\n group.children.splice(from, 1);\n group.children.splice(to, 0, child);\n\n setGroupStatus(group, 'CHANGED');\n },\n\n applyChange(\n state,\n reducerAction: PayloadAction<{\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }>\n ) {\n const { action, schema } = reducerAction.payload;\n\n switch (action) {\n case 'add':\n {\n const uid = schema.uid;\n\n if (schema.modelType === 'component') {\n state.components[uid] = schema;\n } else {\n state.contentTypes[uid] = schema;\n }\n }\n break;\n case 'update':\n {\n const uid = schema.uid;\n\n // Find the schema, if the state was \"create\", we should keep it as it was before\n\n if (schema.modelType === 'component') {\n const component = state.components[uid];\n state.components[uid] = {\n ...schema,\n status: component?.status === 'NEW' ? 'NEW' : schema.status,\n };\n } else {\n const contentType = state.contentTypes[uid];\n const previousKind = contentType?.kind;\n\n state.contentTypes[uid] = {\n ...schema,\n status: contentType?.status === 'NEW' ? 'NEW' : schema.status,\n };\n\n if (previousKind && schema.kind && schema.kind !== previousKind) {\n const oldSection =\n state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n }\n }\n break;\n case 'delete': {\n const uid = schema.uid;\n const isComponent = schema.modelType === 'component';\n // It's a component that has yet not been added\n if (isComponent) {\n const exists = state.components[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.components[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.components[uid];\n } else {\n state.components[uid].status = 'REMOVED';\n }\n } else {\n const exists = state.contentTypes[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.contentTypes[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.contentTypes[uid];\n } else {\n state.contentTypes[uid].status = 'REMOVED';\n }\n\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n }\n\n break;\n }\n }\n },\n },\n },\n\n {\n limit: 50,\n excludeActionsFromHistory: ['reloadPlugin', 'init'],\n stateSelector: (state) => {\n if (!state) {\n return {};\n }\n\n return {\n components: state.components,\n contentTypes: state.contentTypes,\n contentStructure: state.contentStructure,\n };\n },\n discard: (state) => {\n state.components = state.initialComponents;\n state.contentTypes = state.initialContentTypes;\n state.contentStructure = state.initialContentStructure;\n },\n }\n);\n\nexport type State = ReturnType<typeof slice.reducer>;\nexport const { reducer, actions } = slice;\nexport { initialState };\n"],"names":["initialState","components","contentTypes","initialComponents","initialContentTypes","contentStructure","createEmptyContentStructure","initialContentStructure","reservedNames","models","attributes","isLoading","ONE_SIDE_RELATIONS","getOppositeRelation","originalRelation","findAttributeIndex","type","attributeToFind","findIndex","name","getType","state","forTarget","targetUid","setStatus","status","getNewStatus","oldStatus","newStatus","getNewGroupStatus","setAttributeStatus","attribute","createAttribute","properties","applyPrivateSearchDefault","setAttributeAt","index","previousAttribute","pushAttribute","push","removeAttributeAt","attr","splice","replaceAttributeAt","removeAttributeByName","idx","updateType","data","merge","findGroup","groups","id","find","group","setGroupStatus","removeContentTypeChild","uid","removed","groupIndex","children","child","applyFolderAssignment","section","folder","targetGroupId","existing","findSiblingFolderByName","newFolderName","trim","newFolderId","parent","targetGroup","isDescendantGroup","ancestorId","potentialDescendantId","current","getGroupDepth","depth","getSubtreeHeight","height","Math","max","applyDeleteContentType","startsWith","plugin","Object","values","sections","forEach","keys","componentUid","component","namesToRemove","filter","target","map","contentTypeUid","contentType","slice","createUndoRedoSlice","reducers","init","action","payload","structure","createComponentSchema","componentCategory","newSchema","category","modelName","displayName","globalId","info","icon","modelType","createSchema","singularName","pluralName","kind","draftAndPublish","pluginOptions","visible","restrictRelationsTo","options","sectionKeyForKind","addAttribute","attributeToSet","omit","targetAttribute","relation","relationType","getRelationType","isBidirectionalRelation","undefined","includes","oppositeAttribute","private","targetType","moveAttribute","from","to","addCustomFieldAttribute","addCreatedComponentToDynamicZone","dynamicZoneTarget","componentsToAdd","dzAttributeIndex","changeDynamicZoneComponents","newComponents","currentDZComponents","updatedComponents","makeUnique","editAttribute","initialAttributeIndex","previousTarget","newTarget","previousTargetAttributeIndex","previousTargetAttribute","newRelationType","isBidirectionnal","newTargetAttribute","conditions","editCustomFieldAttribute","initialAttributeName","reloadPlugin","removeComponentFromDynamicZone","dzName","componentToRemoveIndex","removeField","attributeToRemoveName","attributeToRemoveIndex","targetAttributeName","targetContentType","targetAttributeIndex","targetField","updateComponentSchema","updateComponentUid","newComponentUID","newType","updateSchema","previousKind","oldSection","deleteComponent","deleteContentType","createFolder","rawName","parentId","MAX_FOLDER_DEPTH","isFolderNameTakenBySibling","renameFolder","moveFolder","newParentId","newTopDepth","oldParent","newParent","entry","length","currentIndex","candidate","moved","rootIds","anchorId","insertAt","deleteFolderOnly","groupToDeleteId","groupToDelete","groupToDeleteParentId","getDeleteFolderOnlySiblingNameCollisions","childGroup","groupToDeleteParent","groupToDeleteIndex","deleteFolderAndContent","contentTypeUids","toRemove","Set","collect","currentGroupId","add","currentGroup","has","assignContentTypeToFolder","reorderFolderChildren","groupId","applyChange","reducerAction","schema","isComponent","exists","isUnsaved","limit","excludeActionsFromHistory","stateSelector","discard","reducer","actions"],"mappings":"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"}
1
+ {"version":3,"file":"reducer.js","sources":["../../../../admin/src/components/DataManager/reducer.ts"],"sourcesContent":["import { PayloadAction } from '@reduxjs/toolkit';\nimport merge from 'lodash/merge';\nimport omit from 'lodash/omit';\nimport uniq from 'lodash/uniq';\n\nimport { applyPrivateSearchDefault } from '../../utils/applyPrivateSearchDefault';\nimport { getVisibleConditionEntries } from '../../utils/conditions';\nimport { getRelationType } from '../../utils/getRelationType';\nimport { makeUnique } from '../../utils/makeUnique';\n\nimport { createUndoRedoSlice } from './undoRedo';\nimport {\n createEmptyContentStructure,\n findSiblingFolderByName,\n getDeleteFolderOnlySiblingNameCollisions,\n isFolderNameTakenBySibling,\n MAX_FOLDER_DEPTH,\n sectionKeyForKind,\n} from './utils/contentStructure';\nimport { isStorageCompatibleRename } from './utils/isStorageCompatibleRename';\n\nimport type {\n Components,\n ContentTypes,\n ContentType,\n Component,\n Status,\n AnyAttribute,\n} from '../../types';\nimport type {\n ContentStructure,\n ContentStructureGroup,\n ContentStructureSection,\n GroupStatus,\n SectionKey,\n} from './utils/contentStructure';\nimport type { Internal, Schema, Struct, UID } from '@strapi/types';\n\nexport interface DataManagerStateType {\n components: Components;\n initialComponents: Components;\n contentTypes: ContentTypes;\n initialContentTypes: ContentTypes;\n contentStructure: ContentStructure;\n initialContentStructure: ContentStructure;\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n isLoading: boolean;\n [key: string]: unknown;\n}\n\nconst initialState: DataManagerStateType = {\n components: {},\n contentTypes: {},\n initialComponents: {},\n initialContentTypes: {},\n contentStructure: createEmptyContentStructure(),\n initialContentStructure: createEmptyContentStructure(),\n reservedNames: {\n models: [],\n attributes: [],\n },\n isLoading: true,\n};\n\nconst ONE_SIDE_RELATIONS = ['oneWay', 'manyWay'];\n\ntype AttributeMutation = AnyAttribute & {\n createComponent?: unknown;\n};\n\ntype PluginOptions = Record<string, unknown>;\n\nconst getOppositeRelation = (originalRelation?: Schema.Attribute.RelationKind.Any) => {\n if (originalRelation === 'manyToOne') {\n return 'oneToMany';\n }\n\n if (originalRelation === 'oneToMany') {\n return 'manyToOne';\n }\n\n return originalRelation;\n};\n\nconst findAttributeIndex = (type: ContentType | Component, attributeToFind?: string) => {\n return type.attributes.findIndex(({ name }: { name: string }) => name === attributeToFind);\n};\n\ntype InitPayload = {\n components: Record<string, Component>;\n contentTypes: Record<string, ContentType>;\n reservedNames: DataManagerStateType['reservedNames'];\n contentStructure?: ContentStructure;\n};\n\ntype CreateFolderPayload = {\n parentId: string | null;\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype RenameFolderPayload = {\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype MoveFolderPayload = {\n newParentId: string | null;\n section: SectionKey;\n index?: number;\n id: string;\n};\n\ntype DeleteFolderPayload = {\n section: SectionKey;\n id: string;\n};\n\ntype DeleteFolderAndContentPayload = DeleteFolderPayload & {\n contentTypeUids: Internal.UID.ContentType[];\n};\n\ntype AssignContentTypeToFolderPayload = {\n targetGroupId: string | null;\n uid: UID.ContentType;\n section: SectionKey;\n index?: number;\n};\n\ntype ReorderFolderChildrenPayload = {\n section: SectionKey;\n groupId: string;\n from: number;\n to: number;\n};\n\ntype AddAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype AddCreateComponentToDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dynamicZoneTarget: string;\n componentsToAdd: Internal.UID.Component[];\n};\n\ntype AddCustomFieldAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype ChangeDynamicZoneComponentsPayload = {\n dynamicZoneTarget: string;\n newComponents: Internal.UID.Component[];\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype CreateComponentSchemaPayload = {\n uid: string;\n data: {\n icon?: string;\n displayName: string;\n };\n componentCategory: string;\n};\n\ntype FolderAssignmentPayload =\n | { targetGroupId: string | null }\n | { newFolderId: string; newFolderName: string };\n\ntype CreateSchemaPayload = {\n uid: string;\n data: {\n displayName: string;\n singularName: string;\n pluralName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n folder?: FolderAssignmentPayload;\n};\n\ntype RenameConsentPayload = {\n /** Record the hop so the server preserves data (default). */\n recordRename?: boolean;\n /**\n * The user declined to preserve data for this hop: remember both names so\n * later hops of the same chain are declined without another prompt.\n */\n declineRename?: boolean;\n /**\n * Same pair for the other side of a bidirectional relation, when the edit\n * renames it on the target type.\n */\n recordTargetRename?: boolean;\n declineTargetRename?: boolean;\n};\n\ntype EditAttributePayload = RenameConsentPayload & {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype EditCustomFieldAttributePayload = RenameConsentPayload & {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype RemoveComponentFromDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dzName: string;\n componentToRemoveIndex: number;\n};\n\ntype RemoveFieldPayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n attributeToRemoveName: string;\n};\n\ntype UpdateComponentSchemaPayload = {\n data: {\n icon?: string;\n displayName: string;\n };\n uid: Internal.UID.Component;\n};\n\ntype UpdateComponentUIDPayload = {\n uid: Internal.UID.Component;\n newComponentUID: Internal.UID.Component;\n};\n\ntype UpdateSchemaPayload = {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n uid: string;\n folder?: FolderAssignmentPayload;\n};\n\ntype MoveAttributePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n from: number;\n to: number;\n};\n\nconst getType = (\n state: DataManagerStateType,\n {\n forTarget,\n targetUid,\n }: {\n forTarget: Struct.ModelType;\n targetUid: string;\n }\n) => {\n return forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n};\n\n// TODO: use initial state when chnaging back to the initial state without knowing\nconst setStatus = (type: ContentType | Component, status: Status) => {\n switch (type.status) {\n case 'NEW':\n case 'REMOVED': {\n break;\n }\n default: {\n type.status = status;\n }\n }\n};\n\nconst getNewStatus = (oldStatus: Status | undefined, newStatus: Status) => {\n if (oldStatus === 'NEW' || oldStatus === 'REMOVED') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst getNewGroupStatus = (oldStatus: GroupStatus, newStatus: GroupStatus): GroupStatus => {\n if (oldStatus === 'NEW') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst setAttributeStatus = (attribute: { status?: Status }, status: Status) => {\n attribute.status = getNewStatus(attribute.status, status);\n};\n\nconst createAttribute = (properties: Record<string, unknown>): AnyAttribute => {\n return {\n ...applyPrivateSearchDefault(properties),\n status: 'NEW',\n } as AnyAttribute;\n};\n\n/**\n * Records an attribute rename hop in the order the user performed it, so the\n * server can replay the exact path as a data-preserving migration.\n *\n * - Only renames of fields that already exist in the database are recorded; a\n * brand-new field (status NEW) has no data yet, so its renames are ignored.\n * - A rename that also changes the field's type / relation / component is not\n * recorded (see `isStorageCompatibleRename`).\n * - Each hop (`previousName -> newName`) is appended verbatim. The recorded\n * sequence is inherently collision-free because the CTB never allows two\n * fields to share a name — a \"swap\" is expressed through the user's own\n * intermediate-name hop, so no synthetic temp column is ever needed.\n */\nconst recordRename = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute\n): void => {\n if (previousAttribute.status === 'NEW') {\n return;\n }\n\n const oldName = previousAttribute.name;\n const newName = newAttribute?.name;\n if (!newName || oldName === newName) {\n return;\n }\n\n if (!isStorageCompatibleRename(previousAttribute, newAttribute)) {\n return;\n }\n\n if (!type.renames) {\n type.renames = [];\n }\n\n type.renames.push({ oldName, newName });\n};\n\n/**\n * Remembers the names of a rename hop the user declined to preserve data for,\n * so the rest of that chain is declined without another prompt.\n */\nconst recordDeclinedRename = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute\n): void => {\n const oldName = previousAttribute.name;\n const newName = newAttribute?.name;\n if (!newName || oldName === newName) {\n return;\n }\n\n type.declinedRenameNames = uniq([...(type.declinedRenameNames ?? []), oldName, newName]);\n};\n\n/**\n * Applies the rename consent carried by an edit: either records the hop or\n * remembers it as declined. Never both.\n */\nconst applyRenameConsent = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute,\n {\n recordRename: shouldRecordRename = true,\n declineRename: shouldDecline = false,\n }: RenameConsentPayload\n): void => {\n if (shouldDecline) {\n recordDeclinedRename(type, previousAttribute, newAttribute);\n return;\n }\n\n if (shouldRecordRename) {\n recordRename(type, previousAttribute, newAttribute);\n }\n};\n\n/**\n * Points the conditions of the type's other fields at the new name of a renamed\n * field. Runs for every rename, recorded or not, so the conditions follow the\n * field whether or not its data is preserved.\n */\nconst renameConditionVars = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute\n): void => {\n const oldName = previousAttribute.name;\n const newName = newAttribute?.name;\n if (!newName || oldName === newName) {\n return;\n }\n\n type.attributes.forEach((attribute) => {\n getVisibleConditionEntries(attribute.conditions).forEach(({ fieldVar }) => {\n if (fieldVar.var === oldName) {\n fieldVar.var = newName;\n setAttributeStatus(attribute, 'CHANGED');\n }\n });\n });\n};\n\nconst setAttributeAt = (type: ContentType | Component, index: number, attribute: AnyAttribute) => {\n const previousAttribute = type.attributes[index];\n\n const newStatus = getNewStatus(previousAttribute.status, 'CHANGED');\n\n type.attributes[index] = {\n ...applyPrivateSearchDefault(attribute),\n status: newStatus,\n };\n\n setStatus(type, 'CHANGED');\n};\n\nconst pushAttribute = (type: ContentType | Component, attribute: AnyAttribute) => {\n type.attributes.push(attribute);\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeAt = (type: ContentType | Component, index: number) => {\n const attr = type.attributes[index];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(index, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\nconst replaceAttributeAt = (\n type: ContentType | Component,\n index: number,\n attribute: AnyAttribute\n) => {\n type.attributes[index] = attribute;\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeByName = (type: ContentType | Component, name: string) => {\n const idx = type.attributes.findIndex((attr) => attr.name === name);\n\n if (idx === -1) {\n return;\n }\n\n const attr = type.attributes[idx];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(idx, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\n/**\n * Carries the pending rename state of `existing` over to a full replacement of\n * the type (the AI chat's `applyChange`). Appending the incoming hops after the\n * existing ones is order-correct: the chat transform diffs against the current\n * reducer entry, whose attributes already carry the manual renames, so its hops\n * start from where the manual hops ended.\n */\nconst mergeRenameState = (\n existing: Pick<ContentType, 'renames' | 'declinedRenameNames'> | undefined,\n incoming: Pick<ContentType, 'renames' | 'declinedRenameNames'>\n): Pick<ContentType, 'renames' | 'declinedRenameNames'> => {\n const renames = [...(existing?.renames ?? []), ...(incoming.renames ?? [])];\n const declinedRenameNames = uniq([\n ...(existing?.declinedRenameNames ?? []),\n ...(incoming.declinedRenameNames ?? []),\n ]);\n\n return {\n ...(renames.length > 0 ? { renames } : {}),\n ...(declinedRenameNames.length > 0 ? { declinedRenameNames } : {}),\n };\n};\n\nconst updateType = (type: ContentType | Component, data: Record<string, unknown>) => {\n merge(type, data);\n setStatus(type, 'CHANGED');\n};\n\nconst findGroup = (groups: ContentStructureGroup[], id: string) => {\n return groups.find((group) => group.id === id);\n};\n\nconst setGroupStatus = (group: ContentStructureGroup, status: GroupStatus): void => {\n group.status = getNewGroupStatus(group.status, status);\n};\n\n/**\n * Remove a content type reference from every group of a section, mark the group as changed if a reference was removed.\n * @returns true if a reference was removed, false otherwise.\n */\nconst removeContentTypeChild = (groups: ContentStructureGroup[], uid: string): boolean => {\n let removed = false;\n\n for (const group of groups) {\n const groupIndex = group.children.findIndex((child) => {\n return child.type === 'contentType' && child.uid === uid;\n });\n\n if (groupIndex !== -1) {\n group.children.splice(groupIndex, 1);\n setGroupStatus(group, 'CHANGED');\n removed = true;\n }\n }\n\n return removed;\n};\n\n/**\n * Assign a content type to a folder within a single section, optionally creating\n * a new root folder first.\n *\n * Detaches the content type from any current folder then files it under the target group.\n * This is also used by the create/edit content-type modal's folder picker via\n * createSchema/updateSchema.\n */\nconst applyFolderAssignment = (\n section: ContentStructureSection,\n uid: UID.ContentType,\n folder: FolderAssignmentPayload\n): void => {\n const { groups } = section;\n\n removeContentTypeChild(groups, uid);\n\n let targetGroupId: string | null;\n\n if ('newFolderId' in folder) {\n // Reuse an existing root folder of the same name instead of creating a\n // duplicate. The modal picker can only ever makes root folders, so\n // this makes the assumption that a same-named root folder means the\n // user wants to insert into that folder.\n const existing = findSiblingFolderByName(groups, null, folder.newFolderName);\n\n if (existing) {\n targetGroupId = existing.id;\n } else {\n groups.push({\n name: folder.newFolderName.trim(),\n id: folder.newFolderId,\n parent: null,\n children: [],\n status: 'NEW',\n });\n\n targetGroupId = folder.newFolderId;\n }\n } else {\n targetGroupId = folder.targetGroupId;\n }\n\n if (!targetGroupId) {\n return;\n }\n\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n targetGroup.children.push({ type: 'contentType', uid });\n setGroupStatus(targetGroup, 'CHANGED');\n }\n};\n\n/**\n * Determines whether `potentialDescendantId` is nested somewhere inside `ancestorId`'s subtree\n */\nconst isDescendantGroup = (\n groups: ContentStructureGroup[],\n ancestorId: string,\n potentialDescendantId: string\n): boolean => {\n let current = findGroup(groups, potentialDescendantId);\n\n while (current && current.parent !== null) {\n if (current.parent === ancestorId) {\n return true;\n }\n\n current = findGroup(groups, current.parent);\n }\n\n return false;\n};\n\nconst getGroupDepth = (groups: ContentStructureGroup[], id: string): number => {\n let depth = 1;\n let current = findGroup(groups, id);\n\n while (current && current.parent !== null) {\n current = findGroup(groups, current.parent);\n depth += 1;\n }\n\n return depth;\n};\n\n/**\n * Number of folder levels below a group e.g. a group with no sub-folders has height 0.\n */\nconst getSubtreeHeight = (groups: ContentStructureGroup[], id: string): number => {\n const group = findGroup(groups, id);\n\n if (!group) {\n return 0;\n }\n\n let height = 0;\n\n for (const child of group.children) {\n if (child.type !== 'group') continue;\n height = Math.max(height, 1 + getSubtreeHeight(groups, child.id));\n }\n\n return height;\n};\n\nconst applyDeleteContentType = (state: DataManagerStateType, uid: Internal.UID.ContentType) => {\n const type = state.contentTypes[uid];\n\n // Only application schemas belong to CTB. Folder actions can be crafted outside the UI,\n // so this guard must live at the mutation boundary rather than in the dialog alone.\n if (!type || !type.uid.startsWith('api::') || type.plugin) {\n return;\n }\n\n // just drop new content types\n if (type.status === 'NEW') {\n delete state.contentTypes[uid];\n } else {\n setStatus(type, 'REMOVED');\n }\n\n // remove the content type from the content structure tree\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n\n // remove the content type from the components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n\n // remove the content type from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n};\n\nconst slice = createUndoRedoSlice(\n {\n name: 'data-manager',\n initialState,\n reducers: {\n init: (state, action: PayloadAction<InitPayload>) => {\n const { components, contentTypes, reservedNames, contentStructure } = action.payload;\n\n state.components = components;\n state.initialComponents = components;\n state.initialContentTypes = contentTypes;\n state.contentTypes = contentTypes;\n state.reservedNames = reservedNames;\n\n const structure = contentStructure ?? createEmptyContentStructure();\n state.initialContentStructure = structure;\n state.contentStructure = structure;\n\n state.isLoading = false;\n },\n createComponentSchema: (state, action: PayloadAction<CreateComponentSchemaPayload>) => {\n const { uid, data, componentCategory } = action.payload;\n\n const newSchema: Component = {\n uid: uid as Internal.UID.Component,\n status: 'NEW',\n category: componentCategory,\n modelName: data.displayName,\n globalId: data.displayName,\n info: {\n icon: data.icon,\n displayName: data.displayName,\n },\n attributes: [],\n modelType: 'component',\n };\n\n state.components[uid as string] = newSchema;\n },\n createSchema: (state, action: PayloadAction<CreateSchemaPayload>) => {\n const { uid, data, folder } = action.payload;\n\n const { displayName, singularName, pluralName, kind, draftAndPublish, pluginOptions } =\n data;\n\n const newSchema: ContentType = {\n uid: uid as Internal.UID.ContentType,\n status: 'NEW',\n visible: true,\n modelType: 'contentType',\n restrictRelationsTo: null,\n attributes: [],\n kind,\n modelName: displayName,\n globalId: displayName,\n options: {\n draftAndPublish,\n },\n info: {\n displayName,\n singularName,\n pluralName,\n },\n pluginOptions,\n };\n\n state.contentTypes[uid] = newSchema;\n\n // File the new content type into a folder in the same transaction it is created,\n // so both are subject to the same undo/redo operatiion.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n addAttribute: (state, action: PayloadAction<AddAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = createAttribute(omit(attributeToSet, 'createComponent'));\n\n if (attribute.type === 'relation') {\n const target = attribute.target;\n const targetAttribute = attribute.targetAttribute || null;\n const relation = attribute.relation;\n const relationType = getRelationType(relation, targetAttribute);\n\n const isBidirectionalRelation =\n relationType !== undefined && !['oneWay', 'manyWay'].includes(relationType);\n\n if (isBidirectionalRelation) {\n const oppositeAttribute = createAttribute({\n name: targetAttribute,\n relation: getOppositeRelation(relationType),\n target: type.uid,\n targetAttribute: attribute.name,\n type: 'relation',\n private: attribute.private,\n });\n\n const targetType = getType(state, { forTarget, targetUid: target });\n pushAttribute(targetType, oppositeAttribute);\n }\n }\n\n pushAttribute(type, attribute);\n setStatus(type, 'CHANGED');\n },\n moveAttribute: (state, action: PayloadAction<MoveAttributePayload>) => {\n const { forTarget, targetUid, from, to } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = type.attributes[from];\n type.attributes.splice(from, 1);\n type.attributes.splice(to, 0, attribute);\n setStatus(type, 'CHANGED');\n },\n addCustomFieldAttribute: (state, action: PayloadAction<AddCustomFieldAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n pushAttribute(type, createAttribute(attributeToSet));\n },\n addCreatedComponentToDynamicZone: (\n state,\n action: PayloadAction<AddCreateComponentToDynamicZonePayload>\n ) => {\n const { dynamicZoneTarget, componentsToAdd, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n componentsToAdd.forEach((componentUid: Internal.UID.Component) => {\n attr.components.push(componentUid);\n });\n\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n setStatus(type, 'CHANGED');\n },\n changeDynamicZoneComponents: (\n state,\n action: PayloadAction<ChangeDynamicZoneComponentsPayload>\n ) => {\n const { dynamicZoneTarget, newComponents, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n const currentDZComponents = attr.components;\n\n const updatedComponents = makeUnique([...currentDZComponents, ...newComponents]);\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components = updatedComponents;\n },\n editAttribute: (state, action: PayloadAction<EditAttributePayload>) => {\n const {\n name,\n attributeToSet,\n forTarget,\n targetUid,\n recordRename,\n declineRename,\n recordTargetRename,\n declineTargetRename,\n } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, name);\n\n if (initialAttributeIndex === -1) {\n return;\n }\n\n const previousAttribute = type.attributes[initialAttributeIndex];\n\n applyRenameConsent(type, previousAttribute, attributeToSet as AnyAttribute, {\n recordRename,\n declineRename,\n });\n renameConditionVars(type, previousAttribute, attributeToSet as AnyAttribute);\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n\n if (previousAttribute.type !== attributeToSet.type) {\n return;\n }\n\n if (previousAttribute.type !== 'relation' || attributeToSet.type !== 'relation') {\n return;\n }\n\n const previousTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: previousAttribute.target,\n });\n const newTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: attributeToSet.target,\n });\n\n const previousTargetAttributeIndex = findAttributeIndex(\n previousTarget,\n previousAttribute.targetAttribute ?? ''\n );\n const previousTargetAttribute =\n previousTargetAttributeIndex !== -1\n ? previousTarget.attributes[previousTargetAttributeIndex]\n : undefined;\n\n // remove old targetAttribute\n if (previousAttribute.targetAttribute) {\n removeAttributeByName(previousTarget, previousAttribute.targetAttribute);\n }\n\n const newRelationType = getRelationType(\n attributeToSet.relation,\n attributeToSet.targetAttribute\n );\n const isBidirectionnal =\n newRelationType !== undefined && !ONE_SIDE_RELATIONS.includes(newRelationType);\n\n if (isBidirectionnal) {\n const newTargetAttribute = {\n name: attributeToSet.targetAttribute,\n type: 'relation',\n relation: getOppositeRelation(attributeToSet.relation),\n targetAttribute: attributeToSet.name,\n target: type.uid,\n private: previousAttribute.private ?? attributeToSet.private,\n pluginOptions: previousAttribute.pluginOptions ?? attributeToSet.pluginOptions,\n ...(previousTarget.uid === newTarget.uid && previousTargetAttribute?.conditions\n ? { conditions: previousTargetAttribute.conditions }\n : {}),\n status: 'CHANGED',\n } as AnyAttribute;\n\n // create or recreate(at old index) targetAttribute\n if (previousTargetAttributeIndex !== -1 && previousTarget.uid === newTarget.uid) {\n // The counterpart is renamed on the target type: without a hop\n // there, the side owning the join table would lose its links.\n if (previousTargetAttribute) {\n applyRenameConsent(newTarget, previousTargetAttribute, newTargetAttribute, {\n recordRename: recordTargetRename,\n declineRename: declineTargetRename,\n });\n }\n\n // re-create at previousIdx if possible\n replaceAttributeAt(newTarget, previousTargetAttributeIndex, newTargetAttribute);\n } else {\n pushAttribute(newTarget, {\n ...newTargetAttribute,\n status: 'NEW',\n });\n }\n }\n },\n editCustomFieldAttribute: (state, action: PayloadAction<EditCustomFieldAttributePayload>) => {\n const { forTarget, targetUid, name, attributeToSet, recordRename, declineRename } =\n action.payload;\n\n const initialAttributeName = name;\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, initialAttributeName);\n const previousAttribute = type.attributes[initialAttributeIndex];\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n applyRenameConsent(type, previousAttribute, attributeToSet as AnyAttribute, {\n recordRename,\n declineRename,\n });\n renameConditionVars(type, previousAttribute, attributeToSet as AnyAttribute);\n },\n reloadPlugin: () => {\n return initialState;\n },\n removeComponentFromDynamicZone: (\n state,\n action: PayloadAction<RemoveComponentFromDynamicZonePayload>\n ) => {\n const { dzName, componentToRemoveIndex, forTarget, targetUid } = action.payload;\n\n const type =\n forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n\n if (!type) {\n return;\n }\n\n const dzAttributeIndex = findAttributeIndex(type, dzName);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components.splice(componentToRemoveIndex, 1);\n },\n removeField: (state, action: PayloadAction<RemoveFieldPayload>) => {\n const { forTarget, targetUid, attributeToRemoveName } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attributeToRemoveIndex = findAttributeIndex(type, attributeToRemoveName);\n const attribute = type.attributes[attributeToRemoveIndex];\n\n if (attribute.type === 'relation') {\n const { target, relation, targetAttribute: targetAttributeName } = attribute;\n const relationType = getRelationType(relation, targetAttributeName);\n\n const isBidirectionnal = !ONE_SIDE_RELATIONS.includes(relationType!);\n\n if (isBidirectionnal && targetAttributeName) {\n const targetContentType = getType(state, { forTarget, targetUid: target });\n const targetAttributeIndex = findAttributeIndex(targetContentType, targetAttributeName);\n\n removeAttributeAt(targetContentType, targetAttributeIndex);\n }\n }\n\n // Find all uid fields that have the targetField set to the field we are removing\n type.attributes.forEach((attribute) => {\n if (attribute.type === 'uid') {\n if (attribute.targetField === attributeToRemoveName) {\n delete attribute.targetField;\n }\n }\n });\n\n removeAttributeAt(type, attributeToRemoveIndex);\n },\n // only edits a component in practice\n updateComponentSchema: (state, action: PayloadAction<UpdateComponentSchemaPayload>) => {\n const { data, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type) {\n return;\n }\n\n updateType(type, {\n info: {\n displayName: data.displayName,\n icon: data.icon,\n },\n });\n },\n updateComponentUid: (state, action: PayloadAction<UpdateComponentUIDPayload>) => {\n const { newComponentUID, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type || type.status !== 'NEW') {\n return;\n }\n\n if (newComponentUID !== uid) {\n const newType = { ...type, uid: newComponentUID };\n state.components[newComponentUID] = newType;\n delete state.components[uid];\n\n // update the uid in the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.map((component: UID.Component) => {\n if (component === uid) {\n return newComponentUID;\n }\n\n return component;\n });\n\n attribute.components = newComponents;\n }\n });\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n\n // update the uid in the other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n component.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n }\n },\n updateSchema: (state, action: PayloadAction<UpdateSchemaPayload>) => {\n const { data, uid, folder } = action.payload;\n\n const { displayName, kind, draftAndPublish, pluginOptions } = data;\n\n const type = state.contentTypes[uid];\n if (!type) {\n return;\n }\n\n const previousKind = type.kind;\n\n updateType(type, {\n info: {\n displayName,\n },\n kind,\n options: {\n draftAndPublish,\n },\n pluginOptions,\n });\n\n if (kind && kind !== previousKind) {\n const oldSection = state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n\n // Apply the folder picker's choice after any kind relocation, so the\n // assignment lands in the content type's (possibly new) section.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n deleteComponent: (state, action: PayloadAction<Internal.UID.Component>) => {\n const uid = action.payload;\n\n // remove the compo from the components\n if (state.components[uid].status === 'NEW') {\n delete state.components[uid];\n } else {\n setStatus(state.components[uid], 'REMOVED');\n }\n\n // remove the compo from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n // remove from dynamic zones\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.filter(\n (component: unknown) => component !== uid\n );\n\n attribute.components = newComponents;\n }\n });\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n\n // remove the compo from other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n },\n deleteContentType: (state, action: PayloadAction<Internal.UID.ContentType>) => {\n applyDeleteContentType(state, action.payload);\n },\n\n createFolder: (state, action: PayloadAction<CreateFolderPayload>) => {\n const { section, id, name: rawName, parentId } = action.payload;\n const name = rawName.trim();\n const { groups } = state.contentStructure.sections[section];\n\n if (parentId && getGroupDepth(groups, parentId) + 1 > MAX_FOLDER_DEPTH) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, parentId, name)) {\n return;\n }\n\n groups.push({ id, name, parent: parentId, children: [], status: 'NEW' });\n\n if (parentId) {\n const parent = findGroup(groups, parentId);\n\n if (parent) {\n parent.children.push({ type: 'group', id });\n setGroupStatus(parent, 'CHANGED');\n }\n }\n },\n renameFolder: (state, action: PayloadAction<RenameFolderPayload>) => {\n const { section, id, name: rawName } = action.payload;\n const name = rawName.trim();\n\n const { groups } = state.contentStructure.sections[section];\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n if (group.name === name) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, group.parent, name, id)) {\n return;\n }\n\n group.name = name;\n setGroupStatus(group, 'CHANGED');\n },\n moveFolder: (state, action: PayloadAction<MoveFolderPayload>) => {\n const { section, id, newParentId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n // Reject no-ops and cyclic moves\n if (newParentId === id || (newParentId && isDescendantGroup(groups, id, newParentId))) {\n return;\n }\n\n // Refuse moves that would exceed the maximum allowed depth.\n const newTopDepth = newParentId ? getGroupDepth(groups, newParentId) + 1 : 1;\n if (newTopDepth + getSubtreeHeight(groups, id) > MAX_FOLDER_DEPTH) {\n return;\n }\n\n // Refuse a move that would collide with an identically named sibling.\n if (isFolderNameTakenBySibling(groups, newParentId, group.name, id)) {\n return;\n }\n\n if (group.parent) {\n const oldParent = findGroup(groups, group.parent);\n\n if (oldParent) {\n // Remove from the old parent's list of children.\n const idx = oldParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === id;\n });\n\n if (idx !== -1) {\n oldParent.children.splice(idx, 1);\n }\n\n setGroupStatus(oldParent, 'CHANGED');\n }\n }\n\n group.parent = newParentId;\n setGroupStatus(group, 'CHANGED');\n\n if (newParentId) {\n const newParent = findGroup(groups, newParentId);\n\n if (newParent) {\n const entry = { type: 'group' as const, id };\n\n if (typeof index === 'number' && index >= 0 && index <= newParent.children.length) {\n newParent.children.splice(index, 0, entry);\n } else {\n newParent.children.push(entry);\n }\n\n setGroupStatus(newParent, 'CHANGED');\n }\n } else if (typeof index === 'number') {\n // If a content type is dropped into the root:\n // The root display order follows the array order of the\n // section's root-level groups because there's no root level\n // customization yet, so reposition the moved group among them.\n const currentIndex = groups.findIndex((candidate) => candidate.id === id);\n\n if (currentIndex !== -1) {\n const [moved] = groups.splice(currentIndex, 1);\n const rootIds = groups\n .filter((candidate) => candidate.parent === null)\n .map((candidate) => candidate.id);\n const anchorId = rootIds[index];\n const insertAt = anchorId\n ? groups.findIndex((candidate) => candidate.id === anchorId)\n : groups.length;\n\n groups.splice(insertAt === -1 ? groups.length : insertAt, 0, moved);\n }\n }\n },\n deleteFolderOnly: (state, action: PayloadAction<DeleteFolderPayload>) => {\n const { section, id: groupToDeleteId } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const groupToDeleteParentId = groupToDelete.parent;\n\n // Reparenting a child folder into its grandparent must preserve the same sibling-name\n // invariant as create, rename, and move. Do this before mutating any group state.\n if (getDeleteFolderOnlySiblingNameCollisions(groups, groupToDeleteId).length > 0) {\n return;\n }\n\n // It is necessary to clone the children because we must subsequently mutate the original group.children array when we splice it out of its parent.\n const children = groupToDelete.children.map((child) => ({ ...child }));\n\n // Children of a deleted folder inherit the deleted folder's parent.\n children.forEach((child) => {\n if (child.type === 'group') {\n const childGroup = findGroup(groups, child.id);\n\n if (childGroup) {\n childGroup.parent = groupToDeleteParentId;\n }\n }\n });\n\n if (groupToDeleteParentId) {\n const groupToDeleteParent = findGroup(groups, groupToDeleteParentId);\n\n if (groupToDeleteParent) {\n // Splice the deleted folder's children of the deleted folder into their new parent at the position of the deleted folder.\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1, ...children);\n } else {\n groupToDeleteParent.children.push(...children);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Finally, remove the deleted folder from its section's list of groups.\n const groupIndex = groups.findIndex((candidate) => {\n return candidate.id === groupToDeleteId;\n });\n\n if (groupIndex !== -1) {\n groups.splice(groupIndex, 1);\n }\n },\n deleteFolderAndContent: (state, action: PayloadAction<DeleteFolderAndContentPayload>) => {\n const { section, id: groupToDeleteId, contentTypeUids } = action.payload;\n\n contentTypeUids.forEach((uid) => {\n applyDeleteContentType(state, uid);\n });\n\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const toRemove = new Set<string>();\n const collect = (currentGroupId: string) => {\n toRemove.add(currentGroupId);\n\n const currentGroup = findGroup(groups, currentGroupId);\n\n for (const child of currentGroup?.children ?? []) {\n if (child.type !== 'group') continue;\n collect(child.id);\n }\n };\n\n collect(groupToDeleteId);\n\n if (groupToDelete.parent) {\n const groupToDeleteParent = findGroup(groups, groupToDelete.parent);\n\n if (groupToDeleteParent) {\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Removes the group entry and all its descendants from the contentStructure.\n state.contentStructure.sections[section].groups = groups.filter((candidate) => {\n return !toRemove.has(candidate.id);\n });\n },\n assignContentTypeToFolder: (\n state,\n action: PayloadAction<AssignContentTypeToFolderPayload>\n ) => {\n const { section, uid, targetGroupId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n removeContentTypeChild(groups, uid);\n\n if (targetGroupId) {\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n const entry = { type: 'contentType' as const, uid };\n\n if (typeof index === 'number' && index >= 0 && index <= targetGroup.children.length) {\n targetGroup.children.splice(index, 0, entry);\n } else {\n targetGroup.children.push(entry);\n }\n\n setGroupStatus(targetGroup, 'CHANGED');\n }\n }\n },\n reorderFolderChildren: (state, action: PayloadAction<ReorderFolderChildrenPayload>) => {\n const { section, groupId, from, to } = action.payload;\n\n const group = findGroup(state.contentStructure.sections[section].groups, groupId);\n if (!group) {\n return;\n }\n\n const child = group.children[from];\n if (!child) {\n return;\n }\n\n group.children.splice(from, 1);\n group.children.splice(to, 0, child);\n\n setGroupStatus(group, 'CHANGED');\n },\n\n applyChange(\n state,\n reducerAction: PayloadAction<{\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }>\n ) {\n const { action, schema } = reducerAction.payload;\n\n switch (action) {\n case 'add':\n {\n const uid = schema.uid;\n\n if (schema.modelType === 'component') {\n state.components[uid] = schema;\n } else {\n state.contentTypes[uid] = schema;\n }\n }\n break;\n case 'update':\n {\n const uid = schema.uid;\n\n // Find the schema, if the state was \"create\", we should keep it as it was before\n\n if (schema.modelType === 'component') {\n const component = state.components[uid];\n state.components[uid] = {\n ...schema,\n ...mergeRenameState(component, schema),\n status: component?.status === 'NEW' ? 'NEW' : schema.status,\n };\n } else {\n const contentType = state.contentTypes[uid];\n const previousKind = contentType?.kind;\n\n state.contentTypes[uid] = {\n ...schema,\n ...mergeRenameState(contentType, schema),\n status: contentType?.status === 'NEW' ? 'NEW' : schema.status,\n };\n\n if (previousKind && schema.kind && schema.kind !== previousKind) {\n const oldSection =\n state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n }\n }\n break;\n case 'delete': {\n const uid = schema.uid;\n const isComponent = schema.modelType === 'component';\n // It's a component that has yet not been added\n if (isComponent) {\n const exists = state.components[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.components[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.components[uid];\n } else {\n state.components[uid].status = 'REMOVED';\n }\n } else {\n const exists = state.contentTypes[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.contentTypes[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.contentTypes[uid];\n } else {\n state.contentTypes[uid].status = 'REMOVED';\n }\n\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n }\n\n break;\n }\n }\n },\n },\n },\n\n {\n limit: 50,\n excludeActionsFromHistory: ['reloadPlugin', 'init'],\n stateSelector: (state) => {\n if (!state) {\n return {};\n }\n\n return {\n components: state.components,\n contentTypes: state.contentTypes,\n contentStructure: state.contentStructure,\n };\n },\n discard: (state) => {\n state.components = state.initialComponents;\n state.contentTypes = state.initialContentTypes;\n state.contentStructure = state.initialContentStructure;\n },\n }\n);\n\nexport type State = ReturnType<typeof slice.reducer>;\nexport const { reducer, actions } = slice;\nexport { initialState };\n"],"names":["initialState","components","contentTypes","initialComponents","initialContentTypes","contentStructure","createEmptyContentStructure","initialContentStructure","reservedNames","models","attributes","isLoading","ONE_SIDE_RELATIONS","getOppositeRelation","originalRelation","findAttributeIndex","type","attributeToFind","findIndex","name","getType","state","forTarget","targetUid","setStatus","status","getNewStatus","oldStatus","newStatus","getNewGroupStatus","setAttributeStatus","attribute","createAttribute","properties","applyPrivateSearchDefault","recordRename","previousAttribute","newAttribute","oldName","newName","isStorageCompatibleRename","renames","push","recordDeclinedRename","declinedRenameNames","uniq","applyRenameConsent","shouldRecordRename","declineRename","shouldDecline","renameConditionVars","forEach","getVisibleConditionEntries","conditions","fieldVar","var","setAttributeAt","index","pushAttribute","removeAttributeAt","attr","splice","replaceAttributeAt","removeAttributeByName","idx","mergeRenameState","existing","incoming","length","updateType","data","merge","findGroup","groups","id","find","group","setGroupStatus","removeContentTypeChild","uid","removed","groupIndex","children","child","applyFolderAssignment","section","folder","targetGroupId","findSiblingFolderByName","newFolderName","trim","newFolderId","parent","targetGroup","isDescendantGroup","ancestorId","potentialDescendantId","current","getGroupDepth","depth","getSubtreeHeight","height","Math","max","applyDeleteContentType","startsWith","plugin","Object","values","sections","keys","componentUid","component","namesToRemove","filter","target","map","contentTypeUid","contentType","slice","createUndoRedoSlice","reducers","init","action","payload","structure","createComponentSchema","componentCategory","newSchema","category","modelName","displayName","globalId","info","icon","modelType","createSchema","singularName","pluralName","kind","draftAndPublish","pluginOptions","visible","restrictRelationsTo","options","sectionKeyForKind","addAttribute","attributeToSet","omit","targetAttribute","relation","relationType","getRelationType","isBidirectionalRelation","undefined","includes","oppositeAttribute","private","targetType","moveAttribute","from","to","addCustomFieldAttribute","addCreatedComponentToDynamicZone","dynamicZoneTarget","componentsToAdd","dzAttributeIndex","changeDynamicZoneComponents","newComponents","currentDZComponents","updatedComponents","makeUnique","editAttribute","recordTargetRename","declineTargetRename","initialAttributeIndex","previousTarget","newTarget","previousTargetAttributeIndex","previousTargetAttribute","newRelationType","isBidirectionnal","newTargetAttribute","editCustomFieldAttribute","initialAttributeName","reloadPlugin","removeComponentFromDynamicZone","dzName","componentToRemoveIndex","removeField","attributeToRemoveName","attributeToRemoveIndex","targetAttributeName","targetContentType","targetAttributeIndex","targetField","updateComponentSchema","updateComponentUid","newComponentUID","newType","updateSchema","previousKind","oldSection","deleteComponent","deleteContentType","createFolder","rawName","parentId","MAX_FOLDER_DEPTH","isFolderNameTakenBySibling","renameFolder","moveFolder","newParentId","newTopDepth","oldParent","newParent","entry","currentIndex","candidate","moved","rootIds","anchorId","insertAt","deleteFolderOnly","groupToDeleteId","groupToDelete","groupToDeleteParentId","getDeleteFolderOnlySiblingNameCollisions","childGroup","groupToDeleteParent","groupToDeleteIndex","deleteFolderAndContent","contentTypeUids","toRemove","Set","collect","currentGroupId","add","currentGroup","has","assignContentTypeToFolder","reorderFolderChildren","groupId","applyChange","reducerAction","schema","isComponent","exists","isUnsaved","limit","excludeActionsFromHistory","stateSelector","discard","reducer","actions"],"mappings":"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"}