@strapi/content-type-builder 5.58.0 → 5.60.0

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