@strapi/content-type-builder 5.55.1 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js +117 -13
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +118 -13
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.js +31 -19
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +31 -19
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.js +166 -6
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +165 -7
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/RenameMigrationModal.js +285 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.js.map +1 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs +257 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs.map +1 -0
- package/dist/admin/components/DataManager/reducer.js +107 -2
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +106 -2
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.js +8 -1
- package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs +8 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/groupRenameChains.js +86 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.js.map +1 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.mjs +84 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js +29 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js.map +1 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs +27 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js +35 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js.map +1 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs +33 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js +48 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js.map +1 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs +45 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs.map +1 -0
- package/dist/admin/components/FormModal/FormModal.js +143 -9
- package/dist/admin/components/FormModal/FormModal.js.map +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs +144 -10
- package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.js +6 -5
- package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.js +10 -7
- package/dist/admin/components/FormModal/component/createComponentSchema.js.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js +24 -21
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js +3 -2
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.js +73 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.js.map +1 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs +70 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs.map +1 -0
- package/dist/admin/src/components/AIChat/components/AnimatedBox.d.ts +2 -2
- package/dist/admin/src/components/AIChat/components/Input.d.ts +2 -2
- package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +4 -3
- package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +6 -1
- package/dist/admin/src/components/AttributeOptions/OptionBoxWrapper.d.ts +2 -2
- package/dist/admin/src/components/ComponentRow.d.ts +2 -2
- package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +28 -2
- package/dist/admin/src/components/DataManager/RenameMigrationModal.d.ts +73 -0
- package/dist/admin/src/components/DataManager/reducer.d.ts +17 -2
- package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +16 -0
- package/dist/admin/src/components/DataManager/utils/groupRenameChains.d.ts +31 -0
- package/dist/admin/src/components/DataManager/utils/isStorageCompatibleRename.d.ts +10 -0
- package/dist/admin/src/components/DataManager/utils/resolveAfterEditRenameConsent.d.ts +24 -0
- package/dist/admin/src/components/DataManager/utils/splitChainsByInheritedConsent.d.ts +26 -0
- package/dist/admin/src/components/FormModal/utils/getRenameStorageChange.d.ts +40 -0
- package/dist/admin/src/components/List.d.ts +2 -2
- package/dist/admin/src/components/Relation/RelationNaturePicker/Components.d.ts +4 -4
- package/dist/admin/src/types.d.ts +23 -0
- package/dist/admin/translations/en.json.js +12 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +12 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/config.js +24 -3
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +21 -3
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/controllers/schema.js +2 -2
- package/dist/server/controllers/schema.js.map +1 -1
- package/dist/server/controllers/schema.mjs +1 -1
- package/dist/server/controllers/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/content-type.js +9 -11
- package/dist/server/controllers/validation/content-type.js.map +1 -1
- package/dist/server/controllers/validation/content-type.mjs +7 -9
- package/dist/server/controllers/validation/content-type.mjs.map +1 -1
- package/dist/server/controllers/validation/model-schema.js +2 -3
- package/dist/server/controllers/validation/model-schema.js.map +1 -1
- package/dist/server/controllers/validation/model-schema.mjs +1 -2
- package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
- package/dist/server/controllers/validation/relations.js +1 -2
- package/dist/server/controllers/validation/relations.js.map +1 -1
- package/dist/server/controllers/validation/relations.mjs +1 -2
- package/dist/server/controllers/validation/relations.mjs.map +1 -1
- package/dist/server/controllers/validation/schema.js +42 -23
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +43 -24
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/services/content-types.js +1 -2
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +2 -3
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/migration-builder/index.js +580 -0
- package/dist/server/services/migration-builder/index.js.map +1 -0
- package/dist/server/services/migration-builder/index.mjs +573 -0
- package/dist/server/services/migration-builder/index.mjs.map +1 -0
- package/dist/server/services/schema-builder/content-type-builder.js +31 -1
- package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs +31 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
- package/dist/server/services/schema-mutation.js +30 -2
- package/dist/server/services/schema-mutation.js.map +1 -1
- package/dist/server/services/schema-mutation.mjs +10 -2
- package/dist/server/services/schema-mutation.mjs.map +1 -1
- package/dist/server/services/schema.js +259 -15
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +252 -9
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/src/config.d.ts +23 -2
- package/dist/server/src/config.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-type.d.ts +0 -1
- package/dist/server/src/controllers/validation/content-type.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/schema.d.ts +28 -0
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +10 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/migration-builder/index.d.ts +83 -0
- package/dist/server/src/services/migration-builder/index.d.ts.map +1 -0
- package/dist/server/src/services/schema-builder/content-type-builder.d.ts.map +1 -1
- package/dist/server/src/services/schema-mutation.d.ts +4 -2
- package/dist/server/src/services/schema-mutation.d.ts.map +1 -1
- package/dist/server/src/services/schema.d.ts +19 -0
- package/dist/server/src/services/schema.d.ts.map +1 -1
- package/package.json +11 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.mjs","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.mjs","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 { 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\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\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 },\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","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","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","recordTargetRename","declineTargetRename","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","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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"}
|
|
@@ -140,10 +140,17 @@ const formatTypeForRequest = (type)=>{
|
|
|
140
140
|
'options',
|
|
141
141
|
'visible',
|
|
142
142
|
'uid',
|
|
143
|
-
'restrictRelationsTo'
|
|
143
|
+
'restrictRelationsTo',
|
|
144
|
+
'renames',
|
|
145
|
+
'declinedRenameNames'
|
|
144
146
|
]),
|
|
145
147
|
...type.options,
|
|
146
148
|
...type.info,
|
|
149
|
+
// Forward the ordered rename path (existing fields only) so the server can
|
|
150
|
+
// generate a data-preserving migration that replays each hop verbatim.
|
|
151
|
+
...action === 'update' && Array.isArray(type.renames) && type.renames.length > 0 ? {
|
|
152
|
+
renames: type.renames
|
|
153
|
+
} : {},
|
|
147
154
|
attributes: type.attributes.map((attr)=>{
|
|
148
155
|
let action;
|
|
149
156
|
switch(attr.status){
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanData.js","sources":["../../../../../admin/src/components/DataManager/utils/cleanData.ts"],"sourcesContent":["import camelCase from 'lodash/camelCase';\nimport omit from 'lodash/omit';\nimport sortBy from 'lodash/sortBy';\n\nimport { pluginId } from '../../../pluginId';\n\nimport {\n createEmptyContentStructure,\n hasContentStructureChanged,\n toServerFile,\n} from './contentStructure';\n\nimport type { ContentStructure } from './contentStructure';\nimport type {\n Component,\n Components,\n ContentTypes,\n ContentType,\n AnyAttribute,\n} from '../../../types';\nimport type { UID } from '@strapi/types';\n\nconst sortContentType = (types: ContentTypes) => {\n return sortBy(\n Object.keys(types)\n .map((uid) => ({\n visible: types[uid].visible,\n name: uid as UID.ContentType,\n title: types[uid].info.displayName,\n plugin: types[uid].plugin,\n uid: uid as UID.ContentType,\n to: `/plugins/${pluginId}/content-types/${uid}`,\n kind: types[uid].kind,\n restrictRelationsTo: types[uid].restrictRelationsTo,\n status: types[uid].status,\n }))\n .filter((obj) => obj !== null),\n (obj) => camelCase(obj.title)\n );\n};\n\ntype TrackingEventProperties = {\n newContentTypes: number;\n editedContentTypes: number;\n deletedContentTypes: number;\n newComponents: number;\n editedComponents: number;\n deletedComponents: number;\n newFields: number;\n editedFields: number;\n deletedFields: number;\n};\n\nconst stateToRequestData = ({\n components,\n contentTypes,\n contentStructure = createEmptyContentStructure(),\n initialContentStructure = createEmptyContentStructure(),\n}: {\n components: Components;\n contentTypes: ContentTypes;\n contentStructure?: ContentStructure;\n initialContentStructure?: ContentStructure;\n}) => {\n const trackingEventProperties: TrackingEventProperties = {\n newContentTypes: 0,\n editedContentTypes: 0,\n deletedContentTypes: 0,\n newComponents: 0,\n editedComponents: 0,\n deletedComponents: 0,\n newFields: 0,\n editedFields: 0,\n deletedFields: 0,\n };\n\n const formattedComponents = Object.values(components)\n .filter((compo) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(compo.status);\n })\n .map((component) => {\n const requestFormattedComponent = formatTypeForRequest(component);\n\n const eventAction = requestFormattedComponent.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...component, action: eventAction },\n trackingEventProperties,\n 'component'\n );\n\n return requestFormattedComponent;\n });\n\n const formattedContentTypes = Object.values(contentTypes)\n .filter((contentType) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(contentType.status);\n })\n .map((contentType) => {\n const requestFormattedContentType = formatTypeForRequest(contentType);\n\n const eventAction = requestFormattedContentType.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...contentType, action: eventAction },\n trackingEventProperties,\n 'contentType'\n );\n\n return requestFormattedContentType;\n });\n\n // Folder changes occur in the same operation as schema changes.\n // Attach the draft structure only when a change has occurred, as the server-side\n // ZOD schema for this payload specifies that the contentStructure property is optional.\n const structureChanged = hasContentStructureChanged(contentStructure, initialContentStructure);\n const contentStructureRequestPayload = structureChanged\n ? { contentStructure: toServerFile(contentStructure) }\n : undefined;\n\n return {\n requestData: {\n components: formattedComponents,\n contentTypes: formattedContentTypes,\n ...contentStructureRequestPayload,\n },\n trackingEventProperties,\n };\n};\n\nconst removeNullKeys = (obj: Record<string, unknown>) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length > 0;\n }\n return value !== null && value !== undefined;\n })\n );\n};\n\nconst formatAttribute = (attr: AnyAttribute) => {\n if ('customField' in attr) {\n return { ...attr, type: 'customField' };\n }\n\n if ('targetAttribute' in attr) {\n return {\n ...attr,\n targetAttribute: attr.targetAttribute === '-' ? null : attr.targetAttribute,\n // Explicitly preserve conditions for relations\n ...(attr.conditions && { conditions: attr.conditions }),\n };\n }\n\n return attr;\n};\n\nconst formatTypeForRequest = (type: ContentType | Component) => {\n let action;\n // should we do a diff with the initial data instead of trusting the state status ??\n switch (type.status) {\n case 'NEW':\n action = 'create';\n break;\n case 'CHANGED':\n action = 'update';\n break;\n case 'REMOVED':\n return { action: 'delete', uid: type.uid };\n default:\n throw new Error('Invalid status');\n }\n\n return {\n action,\n uid: type.uid,\n category: 'category' in type ? type.category : undefined,\n ...omit(type, ['info', 'options', 'visible', 'uid', 'restrictRelationsTo']),\n ...type.options,\n ...type.info,\n attributes: type.attributes.map((attr) => {\n let action;\n\n switch (attr.status) {\n // NOTE: we want to always send the full data to preserve the order\n\n case 'NEW':\n action = 'create';\n break;\n case 'REMOVED':\n return { action: 'delete', name: attr.name };\n case 'UNCHANGED':\n case 'CHANGED':\n default:\n action = 'update';\n }\n\n return {\n action,\n name: attr.name,\n properties: removeNullKeys(omit(formatAttribute(attr), ['status', 'name'])),\n };\n }),\n };\n};\n\nconst updateEventCounts = (\n type: (ContentType | Component) & { action?: 'create' | 'update' | 'delete' },\n counts: TrackingEventProperties,\n entityType: 'component' | 'contentType'\n) => {\n if (!type || typeof type.action !== 'string') {\n return;\n }\n\n const isContentType = entityType === 'contentType';\n\n switch (type.action) {\n case 'create':\n if (isContentType) {\n counts.newContentTypes++;\n } else {\n counts.newComponents++;\n }\n break;\n case 'update':\n if (isContentType) {\n counts.editedContentTypes++;\n } else {\n counts.editedComponents++;\n }\n break;\n case 'delete':\n if (isContentType) {\n counts.deletedContentTypes++;\n } else {\n counts.deletedComponents++;\n }\n break;\n default:\n break;\n }\n\n if (Array.isArray(type.attributes)) {\n if (type.action === 'delete') {\n counts.deletedFields += type.attributes.length;\n } else {\n type.attributes.forEach((attribute) => {\n if (!attribute || typeof attribute.status !== 'string') {\n return;\n }\n\n switch (attribute.status) {\n case 'NEW':\n counts.newFields++;\n break;\n case 'CHANGED':\n counts.editedFields++;\n break;\n case 'REMOVED':\n counts.deletedFields++;\n break;\n case 'UNCHANGED':\n default:\n break;\n }\n });\n }\n }\n};\n\nexport { stateToRequestData, sortContentType };\n"],"names":["sortContentType","types","sortBy","Object","keys","map","uid","visible","name","title","info","displayName","plugin","to","pluginId","kind","restrictRelationsTo","status","filter","obj","camelCase","stateToRequestData","components","contentTypes","contentStructure","createEmptyContentStructure","initialContentStructure","trackingEventProperties","newContentTypes","editedContentTypes","deletedContentTypes","newComponents","editedComponents","deletedComponents","newFields","editedFields","deletedFields","formattedComponents","values","compo","includes","component","requestFormattedComponent","formatTypeForRequest","eventAction","action","updateEventCounts","formattedContentTypes","contentType","requestFormattedContentType","structureChanged","hasContentStructureChanged","contentStructureRequestPayload","toServerFile","undefined","requestData","removeNullKeys","fromEntries","entries","_","value","Array","isArray","length","formatAttribute","attr","type","targetAttribute","conditions","Error","category","omit","options","attributes","properties","counts","entityType","isContentType","forEach","attribute"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cleanData.js","sources":["../../../../../admin/src/components/DataManager/utils/cleanData.ts"],"sourcesContent":["import camelCase from 'lodash/camelCase';\nimport omit from 'lodash/omit';\nimport sortBy from 'lodash/sortBy';\n\nimport { pluginId } from '../../../pluginId';\n\nimport {\n createEmptyContentStructure,\n hasContentStructureChanged,\n toServerFile,\n} from './contentStructure';\n\nimport type { ContentStructure } from './contentStructure';\nimport type {\n Component,\n Components,\n ContentTypes,\n ContentType,\n AnyAttribute,\n} from '../../../types';\nimport type { UID } from '@strapi/types';\n\nconst sortContentType = (types: ContentTypes) => {\n return sortBy(\n Object.keys(types)\n .map((uid) => ({\n visible: types[uid].visible,\n name: uid as UID.ContentType,\n title: types[uid].info.displayName,\n plugin: types[uid].plugin,\n uid: uid as UID.ContentType,\n to: `/plugins/${pluginId}/content-types/${uid}`,\n kind: types[uid].kind,\n restrictRelationsTo: types[uid].restrictRelationsTo,\n status: types[uid].status,\n }))\n .filter((obj) => obj !== null),\n (obj) => camelCase(obj.title)\n );\n};\n\ntype TrackingEventProperties = {\n newContentTypes: number;\n editedContentTypes: number;\n deletedContentTypes: number;\n newComponents: number;\n editedComponents: number;\n deletedComponents: number;\n newFields: number;\n editedFields: number;\n deletedFields: number;\n};\n\nconst stateToRequestData = ({\n components,\n contentTypes,\n contentStructure = createEmptyContentStructure(),\n initialContentStructure = createEmptyContentStructure(),\n}: {\n components: Components;\n contentTypes: ContentTypes;\n contentStructure?: ContentStructure;\n initialContentStructure?: ContentStructure;\n}) => {\n const trackingEventProperties: TrackingEventProperties = {\n newContentTypes: 0,\n editedContentTypes: 0,\n deletedContentTypes: 0,\n newComponents: 0,\n editedComponents: 0,\n deletedComponents: 0,\n newFields: 0,\n editedFields: 0,\n deletedFields: 0,\n };\n\n const formattedComponents = Object.values(components)\n .filter((compo) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(compo.status);\n })\n .map((component) => {\n const requestFormattedComponent = formatTypeForRequest(component);\n\n const eventAction = requestFormattedComponent.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...component, action: eventAction },\n trackingEventProperties,\n 'component'\n );\n\n return requestFormattedComponent;\n });\n\n const formattedContentTypes = Object.values(contentTypes)\n .filter((contentType) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(contentType.status);\n })\n .map((contentType) => {\n const requestFormattedContentType = formatTypeForRequest(contentType);\n\n const eventAction = requestFormattedContentType.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...contentType, action: eventAction },\n trackingEventProperties,\n 'contentType'\n );\n\n return requestFormattedContentType;\n });\n\n // Folder changes occur in the same operation as schema changes.\n // Attach the draft structure only when a change has occurred, as the server-side\n // ZOD schema for this payload specifies that the contentStructure property is optional.\n const structureChanged = hasContentStructureChanged(contentStructure, initialContentStructure);\n const contentStructureRequestPayload = structureChanged\n ? { contentStructure: toServerFile(contentStructure) }\n : undefined;\n\n return {\n requestData: {\n components: formattedComponents,\n contentTypes: formattedContentTypes,\n ...contentStructureRequestPayload,\n },\n trackingEventProperties,\n };\n};\n\nconst removeNullKeys = (obj: Record<string, unknown>) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length > 0;\n }\n return value !== null && value !== undefined;\n })\n );\n};\n\nconst formatAttribute = (attr: AnyAttribute) => {\n if ('customField' in attr) {\n return { ...attr, type: 'customField' };\n }\n\n if ('targetAttribute' in attr) {\n return {\n ...attr,\n targetAttribute: attr.targetAttribute === '-' ? null : attr.targetAttribute,\n // Explicitly preserve conditions for relations\n ...(attr.conditions && { conditions: attr.conditions }),\n };\n }\n\n return attr;\n};\n\nconst formatTypeForRequest = (type: ContentType | Component) => {\n let action;\n // should we do a diff with the initial data instead of trusting the state status ??\n switch (type.status) {\n case 'NEW':\n action = 'create';\n break;\n case 'CHANGED':\n action = 'update';\n break;\n case 'REMOVED':\n return { action: 'delete', uid: type.uid };\n default:\n throw new Error('Invalid status');\n }\n\n return {\n action,\n uid: type.uid,\n category: 'category' in type ? type.category : undefined,\n ...omit(type, [\n 'info',\n 'options',\n 'visible',\n 'uid',\n 'restrictRelationsTo',\n 'renames',\n 'declinedRenameNames',\n ]),\n ...type.options,\n ...type.info,\n // Forward the ordered rename path (existing fields only) so the server can\n // generate a data-preserving migration that replays each hop verbatim.\n ...(action === 'update' && Array.isArray(type.renames) && type.renames.length > 0\n ? { renames: type.renames }\n : {}),\n attributes: type.attributes.map((attr) => {\n let action;\n\n switch (attr.status) {\n // NOTE: we want to always send the full data to preserve the order\n\n case 'NEW':\n action = 'create';\n break;\n case 'REMOVED':\n return { action: 'delete', name: attr.name };\n case 'UNCHANGED':\n case 'CHANGED':\n default:\n action = 'update';\n }\n\n return {\n action,\n name: attr.name,\n properties: removeNullKeys(omit(formatAttribute(attr), ['status', 'name'])),\n };\n }),\n };\n};\n\nconst updateEventCounts = (\n type: (ContentType | Component) & { action?: 'create' | 'update' | 'delete' },\n counts: TrackingEventProperties,\n entityType: 'component' | 'contentType'\n) => {\n if (!type || typeof type.action !== 'string') {\n return;\n }\n\n const isContentType = entityType === 'contentType';\n\n switch (type.action) {\n case 'create':\n if (isContentType) {\n counts.newContentTypes++;\n } else {\n counts.newComponents++;\n }\n break;\n case 'update':\n if (isContentType) {\n counts.editedContentTypes++;\n } else {\n counts.editedComponents++;\n }\n break;\n case 'delete':\n if (isContentType) {\n counts.deletedContentTypes++;\n } else {\n counts.deletedComponents++;\n }\n break;\n default:\n break;\n }\n\n if (Array.isArray(type.attributes)) {\n if (type.action === 'delete') {\n counts.deletedFields += type.attributes.length;\n } else {\n type.attributes.forEach((attribute) => {\n if (!attribute || typeof attribute.status !== 'string') {\n return;\n }\n\n switch (attribute.status) {\n case 'NEW':\n counts.newFields++;\n break;\n case 'CHANGED':\n counts.editedFields++;\n break;\n case 'REMOVED':\n counts.deletedFields++;\n break;\n case 'UNCHANGED':\n default:\n break;\n }\n });\n }\n }\n};\n\nexport { stateToRequestData, sortContentType };\n"],"names":["sortContentType","types","sortBy","Object","keys","map","uid","visible","name","title","info","displayName","plugin","to","pluginId","kind","restrictRelationsTo","status","filter","obj","camelCase","stateToRequestData","components","contentTypes","contentStructure","createEmptyContentStructure","initialContentStructure","trackingEventProperties","newContentTypes","editedContentTypes","deletedContentTypes","newComponents","editedComponents","deletedComponents","newFields","editedFields","deletedFields","formattedComponents","values","compo","includes","component","requestFormattedComponent","formatTypeForRequest","eventAction","action","updateEventCounts","formattedContentTypes","contentType","requestFormattedContentType","structureChanged","hasContentStructureChanged","contentStructureRequestPayload","toServerFile","undefined","requestData","removeNullKeys","fromEntries","entries","_","value","Array","isArray","length","formatAttribute","attr","type","targetAttribute","conditions","Error","category","omit","options","renames","attributes","properties","counts","entityType","isContentType","forEach","attribute"],"mappings":"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"}
|
|
@@ -132,10 +132,17 @@ const formatTypeForRequest = (type)=>{
|
|
|
132
132
|
'options',
|
|
133
133
|
'visible',
|
|
134
134
|
'uid',
|
|
135
|
-
'restrictRelationsTo'
|
|
135
|
+
'restrictRelationsTo',
|
|
136
|
+
'renames',
|
|
137
|
+
'declinedRenameNames'
|
|
136
138
|
]),
|
|
137
139
|
...type.options,
|
|
138
140
|
...type.info,
|
|
141
|
+
// Forward the ordered rename path (existing fields only) so the server can
|
|
142
|
+
// generate a data-preserving migration that replays each hop verbatim.
|
|
143
|
+
...action === 'update' && Array.isArray(type.renames) && type.renames.length > 0 ? {
|
|
144
|
+
renames: type.renames
|
|
145
|
+
} : {},
|
|
139
146
|
attributes: type.attributes.map((attr)=>{
|
|
140
147
|
let action;
|
|
141
148
|
switch(attr.status){
|