@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.mjs","sources":["../../../../admin/src/components/DataManager/reducer.ts"],"sourcesContent":["import { PayloadAction } from '@reduxjs/toolkit';\nimport merge from 'lodash/merge';\nimport omit from 'lodash/omit';\nimport uniq from 'lodash/uniq';\n\nimport { applyPrivateSearchDefault } from '../../utils/applyPrivateSearchDefault';\nimport { 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.mjs","sources":["../../../../admin/src/components/DataManager/reducer.ts"],"sourcesContent":["import { PayloadAction } from '@reduxjs/toolkit';\nimport merge from 'lodash/merge';\nimport omit from 'lodash/omit';\nimport uniq from 'lodash/uniq';\n\nimport { applyPrivateSearchDefault } from '../../utils/applyPrivateSearchDefault';\nimport { 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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"}
@@ -12,6 +12,7 @@ var ComponentList = require('./ComponentList.js');
12
12
  var ComponentRow = require('./ComponentRow.js');
13
13
  var useDataManager = require('./DataManager/useDataManager.js');
14
14
 
15
+ const EMPTY_COMPONENTS = [];
15
16
  const StyledAddIcon = styledComponents.styled(Icons.Plus)`
16
17
  width: 3.2rem;
17
18
  height: 3.2rem;
@@ -29,7 +30,7 @@ const ComponentStack = styledComponents.styled(designSystem.Flex)`
29
30
  justify-content: center;
30
31
  align-items: center;
31
32
  `;
32
- const DynamicZoneList = ({ components = [], addComponent, name, forTarget, targetUid, disabled = false })=>{
33
+ const DynamicZoneList = ({ components = EMPTY_COMPONENTS, addComponent, name, forTarget, targetUid, disabled = false })=>{
33
34
  const { isInDevelopmentMode } = useDataManager.useDataManager();
34
35
  const [activeTab, setActiveTab] = React.useState(0);
35
36
  const { formatMessage } = reactIntl.useIntl();
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicZoneList.js","sources":["../../../admin/src/components/DynamicZoneList.tsx"],"sourcesContent":["import { type ComponentType, useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../utils/getTrad';\n\nimport { ComponentCard } from './ComponentCard';\nimport { ComponentList } from './ComponentList';\nimport { ComponentRow } from './ComponentRow';\nimport { useDataManager } from './DataManager/useDataManager';\n\nimport type { Internal, Struct } from '@strapi/types';\n\ninterface DynamicZoneListProps {\n addComponent: (name?: string) => void;\n components: Array<Internal.UID.Component>;\n customRowComponent?: ComponentType<Record<string, unknown>>;\n name?: string;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n disabled?: boolean;\n}\n\nconst StyledAddIcon = styled(Plus)<{ disabled?: boolean }>`\n width: 3.2rem;\n height: 3.2rem;\n padding: 0.9rem;\n border-radius: 6.4rem;\n background: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral100 : theme.colors.primary100};\n path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.primary600};\n }\n`;\n\nconst ComponentStack = styled(Flex)`\n flex-shrink: 0;\n width: 14rem;\n height: 8rem;\n justify-content: center;\n align-items: center;\n`;\n\nexport const DynamicZoneList = ({\n components = [],\n addComponent,\n name,\n forTarget,\n targetUid,\n disabled = false,\n}: DynamicZoneListProps) => {\n const { isInDevelopmentMode } = useDataManager();\n const [activeTab, setActiveTab] = useState(0);\n const { formatMessage } = useIntl();\n\n const toggle = (tab: number) => {\n if (activeTab !== tab) {\n setActiveTab(tab);\n }\n };\n\n const handleClickAdd = () => {\n addComponent(name);\n };\n\n return (\n <ComponentRow className=\"dynamiczone-row\" $isFromDynamicZone>\n <Box>\n <Box padding={2} paddingLeft=\"104px\">\n <Flex role=\"tablist\" gap={2} wrap=\"wrap\">\n {isInDevelopmentMode && (\n <button\n type=\"button\"\n onClick={handleClickAdd}\n disabled={disabled}\n style={{\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <ComponentStack direction=\"column\" alignItems=\"stretch\" gap={1}>\n <StyledAddIcon disabled={disabled} />\n <Typography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor={disabled ? 'neutral600' : 'primary600'}\n >\n {formatMessage({\n id: getTrad('button.component.add'),\n defaultMessage: 'Add a component',\n })}\n </Typography>\n </ComponentStack>\n </button>\n )}\n {components.map((component, index) => {\n return (\n <ComponentCard\n key={component}\n dzName={name || ''}\n index={index}\n component={component}\n isActive={activeTab === index}\n isInDevelopmentMode={isInDevelopmentMode}\n onClick={() => toggle(index)}\n forTarget={forTarget}\n targetUid={targetUid}\n disabled={disabled}\n />\n );\n })}\n </Flex>\n </Box>\n <Box>\n {components.map((component, index) => {\n return (\n <Box\n id={`dz-${name}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`dz-${name}-tab-${index}`}\n key={component}\n style={{ display: activeTab === index ? 'block' : 'none' }}\n >\n <ComponentList isFromDynamicZone component={component} key={component} />\n </Box>\n );\n })}\n </Box>\n </Box>\n </ComponentRow>\n );\n};\n"],"names":["StyledAddIcon","styled","Plus","theme","disabled","colors","neutral100","primary100","neutral600","primary600","ComponentStack","Flex","DynamicZoneList","components","addComponent","name","forTarget","targetUid","isInDevelopmentMode","useDataManager","activeTab","setActiveTab","useState","formatMessage","useIntl","toggle","tab","handleClickAdd","_jsx","ComponentRow","className","$isFromDynamicZone","_jsxs","Box","padding","paddingLeft","role","gap","wrap","button","type","onClick","style","cursor","direction","alignItems","Typography","variant","fontWeight","textColor","id","getTrad","defaultMessage","map","component","index","ComponentCard","dzName","isActive","aria-labelledby","display","ComponentList","isFromDynamicZone"],"mappings":"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"}
1
+ {"version":3,"file":"DynamicZoneList.js","sources":["../../../admin/src/components/DynamicZoneList.tsx"],"sourcesContent":["import { type ComponentType, useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../utils/getTrad';\n\nimport { ComponentCard } from './ComponentCard';\nimport { ComponentList } from './ComponentList';\nimport { ComponentRow } from './ComponentRow';\nimport { useDataManager } from './DataManager/useDataManager';\n\nimport type { Internal, Struct } from '@strapi/types';\n\nconst EMPTY_COMPONENTS: NonNullable<DynamicZoneListProps['components']> = [];\n\ninterface DynamicZoneListProps {\n addComponent: (name?: string) => void;\n components: Array<Internal.UID.Component>;\n customRowComponent?: ComponentType<Record<string, unknown>>;\n name?: string;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n disabled?: boolean;\n}\n\nconst StyledAddIcon = styled(Plus)<{ disabled?: boolean }>`\n width: 3.2rem;\n height: 3.2rem;\n padding: 0.9rem;\n border-radius: 6.4rem;\n background: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral100 : theme.colors.primary100};\n path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.primary600};\n }\n`;\n\nconst ComponentStack = styled(Flex)`\n flex-shrink: 0;\n width: 14rem;\n height: 8rem;\n justify-content: center;\n align-items: center;\n`;\n\nexport const DynamicZoneList = ({\n components = EMPTY_COMPONENTS,\n addComponent,\n name,\n forTarget,\n targetUid,\n disabled = false,\n}: DynamicZoneListProps) => {\n const { isInDevelopmentMode } = useDataManager();\n const [activeTab, setActiveTab] = useState(0);\n const { formatMessage } = useIntl();\n\n const toggle = (tab: number) => {\n if (activeTab !== tab) {\n setActiveTab(tab);\n }\n };\n\n const handleClickAdd = () => {\n addComponent(name);\n };\n\n return (\n <ComponentRow className=\"dynamiczone-row\" $isFromDynamicZone>\n <Box>\n <Box padding={2} paddingLeft=\"104px\">\n <Flex role=\"tablist\" gap={2} wrap=\"wrap\">\n {isInDevelopmentMode && (\n <button\n type=\"button\"\n onClick={handleClickAdd}\n disabled={disabled}\n style={{\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <ComponentStack direction=\"column\" alignItems=\"stretch\" gap={1}>\n <StyledAddIcon disabled={disabled} />\n <Typography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor={disabled ? 'neutral600' : 'primary600'}\n >\n {formatMessage({\n id: getTrad('button.component.add'),\n defaultMessage: 'Add a component',\n })}\n </Typography>\n </ComponentStack>\n </button>\n )}\n {components.map((component, index) => {\n return (\n <ComponentCard\n key={component}\n dzName={name || ''}\n index={index}\n component={component}\n isActive={activeTab === index}\n isInDevelopmentMode={isInDevelopmentMode}\n onClick={() => toggle(index)}\n forTarget={forTarget}\n targetUid={targetUid}\n disabled={disabled}\n />\n );\n })}\n </Flex>\n </Box>\n <Box>\n {components.map((component, index) => {\n return (\n <Box\n id={`dz-${name}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`dz-${name}-tab-${index}`}\n key={component}\n style={{ display: activeTab === index ? 'block' : 'none' }}\n >\n <ComponentList isFromDynamicZone component={component} key={component} />\n </Box>\n );\n })}\n </Box>\n </Box>\n </ComponentRow>\n );\n};\n"],"names":["EMPTY_COMPONENTS","StyledAddIcon","styled","Plus","theme","disabled","colors","neutral100","primary100","neutral600","primary600","ComponentStack","Flex","DynamicZoneList","components","addComponent","name","forTarget","targetUid","isInDevelopmentMode","useDataManager","activeTab","setActiveTab","useState","formatMessage","useIntl","toggle","tab","handleClickAdd","_jsx","ComponentRow","className","$isFromDynamicZone","_jsxs","Box","padding","paddingLeft","role","gap","wrap","button","type","onClick","style","cursor","direction","alignItems","Typography","variant","fontWeight","textColor","id","getTrad","defaultMessage","map","component","index","ComponentCard","dzName","isActive","aria-labelledby","display","ComponentList","isFromDynamicZone"],"mappings":"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"}
@@ -10,6 +10,7 @@ import { ComponentList } from './ComponentList.mjs';
10
10
  import { ComponentRow } from './ComponentRow.mjs';
11
11
  import { useDataManager } from './DataManager/useDataManager.mjs';
12
12
 
13
+ const EMPTY_COMPONENTS = [];
13
14
  const StyledAddIcon = styled(Plus)`
14
15
  width: 3.2rem;
15
16
  height: 3.2rem;
@@ -27,7 +28,7 @@ const ComponentStack = styled(Flex)`
27
28
  justify-content: center;
28
29
  align-items: center;
29
30
  `;
30
- const DynamicZoneList = ({ components = [], addComponent, name, forTarget, targetUid, disabled = false })=>{
31
+ const DynamicZoneList = ({ components = EMPTY_COMPONENTS, addComponent, name, forTarget, targetUid, disabled = false })=>{
31
32
  const { isInDevelopmentMode } = useDataManager();
32
33
  const [activeTab, setActiveTab] = useState(0);
33
34
  const { formatMessage } = useIntl();
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicZoneList.mjs","sources":["../../../admin/src/components/DynamicZoneList.tsx"],"sourcesContent":["import { type ComponentType, useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../utils/getTrad';\n\nimport { ComponentCard } from './ComponentCard';\nimport { ComponentList } from './ComponentList';\nimport { ComponentRow } from './ComponentRow';\nimport { useDataManager } from './DataManager/useDataManager';\n\nimport type { Internal, Struct } from '@strapi/types';\n\ninterface DynamicZoneListProps {\n addComponent: (name?: string) => void;\n components: Array<Internal.UID.Component>;\n customRowComponent?: ComponentType<Record<string, unknown>>;\n name?: string;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n disabled?: boolean;\n}\n\nconst StyledAddIcon = styled(Plus)<{ disabled?: boolean }>`\n width: 3.2rem;\n height: 3.2rem;\n padding: 0.9rem;\n border-radius: 6.4rem;\n background: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral100 : theme.colors.primary100};\n path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.primary600};\n }\n`;\n\nconst ComponentStack = styled(Flex)`\n flex-shrink: 0;\n width: 14rem;\n height: 8rem;\n justify-content: center;\n align-items: center;\n`;\n\nexport const DynamicZoneList = ({\n components = [],\n addComponent,\n name,\n forTarget,\n targetUid,\n disabled = false,\n}: DynamicZoneListProps) => {\n const { isInDevelopmentMode } = useDataManager();\n const [activeTab, setActiveTab] = useState(0);\n const { formatMessage } = useIntl();\n\n const toggle = (tab: number) => {\n if (activeTab !== tab) {\n setActiveTab(tab);\n }\n };\n\n const handleClickAdd = () => {\n addComponent(name);\n };\n\n return (\n <ComponentRow className=\"dynamiczone-row\" $isFromDynamicZone>\n <Box>\n <Box padding={2} paddingLeft=\"104px\">\n <Flex role=\"tablist\" gap={2} wrap=\"wrap\">\n {isInDevelopmentMode && (\n <button\n type=\"button\"\n onClick={handleClickAdd}\n disabled={disabled}\n style={{\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <ComponentStack direction=\"column\" alignItems=\"stretch\" gap={1}>\n <StyledAddIcon disabled={disabled} />\n <Typography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor={disabled ? 'neutral600' : 'primary600'}\n >\n {formatMessage({\n id: getTrad('button.component.add'),\n defaultMessage: 'Add a component',\n })}\n </Typography>\n </ComponentStack>\n </button>\n )}\n {components.map((component, index) => {\n return (\n <ComponentCard\n key={component}\n dzName={name || ''}\n index={index}\n component={component}\n isActive={activeTab === index}\n isInDevelopmentMode={isInDevelopmentMode}\n onClick={() => toggle(index)}\n forTarget={forTarget}\n targetUid={targetUid}\n disabled={disabled}\n />\n );\n })}\n </Flex>\n </Box>\n <Box>\n {components.map((component, index) => {\n return (\n <Box\n id={`dz-${name}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`dz-${name}-tab-${index}`}\n key={component}\n style={{ display: activeTab === index ? 'block' : 'none' }}\n >\n <ComponentList isFromDynamicZone component={component} key={component} />\n </Box>\n );\n })}\n </Box>\n </Box>\n </ComponentRow>\n );\n};\n"],"names":["StyledAddIcon","styled","Plus","theme","disabled","colors","neutral100","primary100","neutral600","primary600","ComponentStack","Flex","DynamicZoneList","components","addComponent","name","forTarget","targetUid","isInDevelopmentMode","useDataManager","activeTab","setActiveTab","useState","formatMessage","useIntl","toggle","tab","handleClickAdd","_jsx","ComponentRow","className","$isFromDynamicZone","_jsxs","Box","padding","paddingLeft","role","gap","wrap","button","type","onClick","style","cursor","direction","alignItems","Typography","variant","fontWeight","textColor","id","getTrad","defaultMessage","map","component","index","ComponentCard","dzName","isActive","aria-labelledby","display","ComponentList","isFromDynamicZone"],"mappings":"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"}
1
+ {"version":3,"file":"DynamicZoneList.mjs","sources":["../../../admin/src/components/DynamicZoneList.tsx"],"sourcesContent":["import { type ComponentType, useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../utils/getTrad';\n\nimport { ComponentCard } from './ComponentCard';\nimport { ComponentList } from './ComponentList';\nimport { ComponentRow } from './ComponentRow';\nimport { useDataManager } from './DataManager/useDataManager';\n\nimport type { Internal, Struct } from '@strapi/types';\n\nconst EMPTY_COMPONENTS: NonNullable<DynamicZoneListProps['components']> = [];\n\ninterface DynamicZoneListProps {\n addComponent: (name?: string) => void;\n components: Array<Internal.UID.Component>;\n customRowComponent?: ComponentType<Record<string, unknown>>;\n name?: string;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n disabled?: boolean;\n}\n\nconst StyledAddIcon = styled(Plus)<{ disabled?: boolean }>`\n width: 3.2rem;\n height: 3.2rem;\n padding: 0.9rem;\n border-radius: 6.4rem;\n background: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral100 : theme.colors.primary100};\n path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.primary600};\n }\n`;\n\nconst ComponentStack = styled(Flex)`\n flex-shrink: 0;\n width: 14rem;\n height: 8rem;\n justify-content: center;\n align-items: center;\n`;\n\nexport const DynamicZoneList = ({\n components = EMPTY_COMPONENTS,\n addComponent,\n name,\n forTarget,\n targetUid,\n disabled = false,\n}: DynamicZoneListProps) => {\n const { isInDevelopmentMode } = useDataManager();\n const [activeTab, setActiveTab] = useState(0);\n const { formatMessage } = useIntl();\n\n const toggle = (tab: number) => {\n if (activeTab !== tab) {\n setActiveTab(tab);\n }\n };\n\n const handleClickAdd = () => {\n addComponent(name);\n };\n\n return (\n <ComponentRow className=\"dynamiczone-row\" $isFromDynamicZone>\n <Box>\n <Box padding={2} paddingLeft=\"104px\">\n <Flex role=\"tablist\" gap={2} wrap=\"wrap\">\n {isInDevelopmentMode && (\n <button\n type=\"button\"\n onClick={handleClickAdd}\n disabled={disabled}\n style={{\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <ComponentStack direction=\"column\" alignItems=\"stretch\" gap={1}>\n <StyledAddIcon disabled={disabled} />\n <Typography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor={disabled ? 'neutral600' : 'primary600'}\n >\n {formatMessage({\n id: getTrad('button.component.add'),\n defaultMessage: 'Add a component',\n })}\n </Typography>\n </ComponentStack>\n </button>\n )}\n {components.map((component, index) => {\n return (\n <ComponentCard\n key={component}\n dzName={name || ''}\n index={index}\n component={component}\n isActive={activeTab === index}\n isInDevelopmentMode={isInDevelopmentMode}\n onClick={() => toggle(index)}\n forTarget={forTarget}\n targetUid={targetUid}\n disabled={disabled}\n />\n );\n })}\n </Flex>\n </Box>\n <Box>\n {components.map((component, index) => {\n return (\n <Box\n id={`dz-${name}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`dz-${name}-tab-${index}`}\n key={component}\n style={{ display: activeTab === index ? 'block' : 'none' }}\n >\n <ComponentList isFromDynamicZone component={component} key={component} />\n </Box>\n );\n })}\n </Box>\n </Box>\n </ComponentRow>\n );\n};\n"],"names":["EMPTY_COMPONENTS","StyledAddIcon","styled","Plus","theme","disabled","colors","neutral100","primary100","neutral600","primary600","ComponentStack","Flex","DynamicZoneList","components","addComponent","name","forTarget","targetUid","isInDevelopmentMode","useDataManager","activeTab","setActiveTab","useState","formatMessage","useIntl","toggle","tab","handleClickAdd","_jsx","ComponentRow","className","$isFromDynamicZone","_jsxs","Box","padding","paddingLeft","role","gap","wrap","button","type","onClick","style","cursor","direction","alignItems","Typography","variant","fontWeight","textColor","id","getTrad","defaultMessage","map","component","index","ComponentCard","dzName","isActive","aria-labelledby","display","ComponentList","isFromDynamicZone"],"mappings":"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"}