@strapi/content-type-builder 5.53.0 → 5.55.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 (208) hide show
  1. package/dist/admin/components/AIChat/hooks/useAIFetch.js +6 -2
  2. package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -1
  3. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs +7 -3
  4. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.js +20 -0
  6. package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.js.map +1 -0
  7. package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.mjs +18 -0
  8. package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.mjs.map +1 -0
  9. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js +83 -59
  10. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
  11. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +86 -62
  12. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
  13. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.js +112 -0
  14. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.js.map +1 -0
  15. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.mjs +110 -0
  16. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.mjs.map +1 -0
  17. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.js +159 -0
  18. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.js.map +1 -0
  19. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.mjs +157 -0
  20. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.mjs.map +1 -0
  21. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.js +311 -0
  22. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.js.map +1 -0
  23. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.mjs +309 -0
  24. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.mjs.map +1 -0
  25. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.js +379 -0
  26. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.js.map +1 -0
  27. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.mjs +376 -0
  28. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.mjs.map +1 -0
  29. package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.js +172 -0
  30. package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.js.map +1 -0
  31. package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.mjs +166 -0
  32. package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.mjs.map +1 -0
  33. package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.js +62 -0
  34. package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.js.map +1 -0
  35. package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.mjs +60 -0
  36. package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.mjs.map +1 -0
  37. package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.js +145 -0
  38. package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.js.map +1 -0
  39. package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.mjs +143 -0
  40. package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.mjs.map +1 -0
  41. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js +176 -0
  42. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js.map +1 -0
  43. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs +169 -0
  44. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs.map +1 -0
  45. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js +277 -0
  46. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js.map +1 -0
  47. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs +273 -0
  48. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs.map +1 -0
  49. package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.js +62 -0
  50. package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.js.map +1 -0
  51. package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.mjs +58 -0
  52. package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.mjs.map +1 -0
  53. package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
  54. package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
  55. package/dist/admin/components/DataManager/DataManagerProvider.js +70 -8
  56. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  57. package/dist/admin/components/DataManager/DataManagerProvider.mjs +70 -8
  58. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  59. package/dist/admin/components/DataManager/reducer.js +411 -33
  60. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  61. package/dist/admin/components/DataManager/reducer.mjs +411 -33
  62. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  63. package/dist/admin/components/DataManager/utils/cleanData.js +11 -2
  64. package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
  65. package/dist/admin/components/DataManager/utils/cleanData.mjs +11 -2
  66. package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
  67. package/dist/admin/components/DataManager/utils/contentStructure.js +150 -0
  68. package/dist/admin/components/DataManager/utils/contentStructure.js.map +1 -0
  69. package/dist/admin/components/DataManager/utils/contentStructure.mjs +133 -0
  70. package/dist/admin/components/DataManager/utils/contentStructure.mjs.map +1 -0
  71. package/dist/admin/components/FolderSelect.js +200 -0
  72. package/dist/admin/components/FolderSelect.js.map +1 -0
  73. package/dist/admin/components/FolderSelect.mjs +198 -0
  74. package/dist/admin/components/FolderSelect.mjs.map +1 -0
  75. package/dist/admin/components/FormModal/FormModal.js +23 -2
  76. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  77. package/dist/admin/components/FormModal/FormModal.mjs +23 -2
  78. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  79. package/dist/admin/components/FormModal/contentType/contentTypeForm.js +15 -18
  80. package/dist/admin/components/FormModal/contentType/contentTypeForm.js.map +1 -1
  81. package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs +15 -18
  82. package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs.map +1 -1
  83. package/dist/admin/components/FormModal/reducer.js +6 -0
  84. package/dist/admin/components/FormModal/reducer.js.map +1 -1
  85. package/dist/admin/components/FormModal/reducer.mjs +6 -0
  86. package/dist/admin/components/FormModal/reducer.mjs.map +1 -1
  87. package/dist/admin/pages/App/index.js +2 -5
  88. package/dist/admin/pages/App/index.js.map +1 -1
  89. package/dist/admin/pages/App/index.mjs +2 -5
  90. package/dist/admin/pages/App/index.mjs.map +1 -1
  91. package/dist/admin/src/components/AIChat/hooks/usePrefetchAIToken.d.ts +1 -0
  92. package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.d.ts +16 -0
  93. package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.d.ts +12 -0
  94. package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.d.ts +14 -0
  95. package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.d.ts +38 -0
  96. package/dist/admin/src/components/ContentTypeBuilderNav/{useContentTypeBuilderMenu.d.ts → hooks/useContentTypeBuilderMenu.d.ts} +17 -7
  97. package/dist/admin/src/components/ContentTypeBuilderNav/hooks/useFolderActions.d.ts +42 -0
  98. package/dist/admin/src/components/ContentTypeBuilderNav/hooks/useSortableTree.d.ts +53 -0
  99. package/dist/admin/src/components/ContentTypeBuilderNav/lib/buildFolderTree.d.ts +42 -0
  100. package/dist/admin/src/components/ContentTypeBuilderNav/lib/dropProjection.d.ts +58 -0
  101. package/dist/admin/src/components/ContentTypeBuilderNav/lib/flatModel.d.ts +18 -0
  102. package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +41 -0
  103. package/dist/admin/src/components/DataManager/reducer.d.ts +105 -1
  104. package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +5 -1
  105. package/dist/admin/src/components/DataManager/utils/contentStructure.d.ts +68 -0
  106. package/dist/admin/src/components/FolderSelect.d.ts +18 -0
  107. package/dist/admin/src/components/FormModal/contentType/contentTypeForm.d.ts +0 -21
  108. package/dist/admin/src/components/FormModal/forms/forms.d.ts +0 -10
  109. package/dist/admin/src/components/FormModal/reducer.d.ts +7 -0
  110. package/dist/admin/src/utils/folderTelemetry.d.ts +5 -0
  111. package/dist/admin/translations/en.json.js +23 -0
  112. package/dist/admin/translations/en.json.js.map +1 -1
  113. package/dist/admin/translations/en.json.mjs +23 -0
  114. package/dist/admin/translations/en.json.mjs.map +1 -1
  115. package/dist/admin/utils/folderTelemetry.js +19 -0
  116. package/dist/admin/utils/folderTelemetry.js.map +1 -0
  117. package/dist/admin/utils/folderTelemetry.mjs +16 -0
  118. package/dist/admin/utils/folderTelemetry.mjs.map +1 -0
  119. package/dist/server/controllers/schema.js +1 -1
  120. package/dist/server/controllers/schema.js.map +1 -1
  121. package/dist/server/controllers/schema.mjs +1 -1
  122. package/dist/server/controllers/schema.mjs.map +1 -1
  123. package/dist/server/controllers/validation/common.js +3 -0
  124. package/dist/server/controllers/validation/common.js.map +1 -1
  125. package/dist/server/controllers/validation/common.mjs +3 -1
  126. package/dist/server/controllers/validation/common.mjs.map +1 -1
  127. package/dist/server/controllers/validation/content-structure.js +177 -0
  128. package/dist/server/controllers/validation/content-structure.js.map +1 -0
  129. package/dist/server/controllers/validation/content-structure.mjs +173 -0
  130. package/dist/server/controllers/validation/content-structure.mjs.map +1 -0
  131. package/dist/server/controllers/validation/schema.js +3 -1
  132. package/dist/server/controllers/validation/schema.js.map +1 -1
  133. package/dist/server/controllers/validation/schema.mjs +3 -1
  134. package/dist/server/controllers/validation/schema.mjs.map +1 -1
  135. package/dist/server/register.js +1 -1
  136. package/dist/server/register.js.map +1 -1
  137. package/dist/server/register.mjs +1 -1
  138. package/dist/server/register.mjs.map +1 -1
  139. package/dist/server/routes/content-api.js +4 -4
  140. package/dist/server/routes/content-api.js.map +1 -1
  141. package/dist/server/routes/content-api.mjs +4 -4
  142. package/dist/server/routes/content-api.mjs.map +1 -1
  143. package/dist/server/services/api-handler.js +37 -4
  144. package/dist/server/services/api-handler.js.map +1 -1
  145. package/dist/server/services/api-handler.mjs +36 -5
  146. package/dist/server/services/api-handler.mjs.map +1 -1
  147. package/dist/server/services/content-structure.js +174 -0
  148. package/dist/server/services/content-structure.js.map +1 -0
  149. package/dist/server/services/content-structure.mjs +172 -0
  150. package/dist/server/services/content-structure.mjs.map +1 -0
  151. package/dist/server/services/content-types.js +196 -44
  152. package/dist/server/services/content-types.js.map +1 -1
  153. package/dist/server/services/content-types.mjs +195 -45
  154. package/dist/server/services/content-types.mjs.map +1 -1
  155. package/dist/server/services/index.js +3 -1
  156. package/dist/server/services/index.js.map +1 -1
  157. package/dist/server/services/index.mjs +3 -1
  158. package/dist/server/services/index.mjs.map +1 -1
  159. package/dist/server/services/schema-builder/index.js +4 -2
  160. package/dist/server/services/schema-builder/index.js.map +1 -1
  161. package/dist/server/services/schema-builder/index.mjs +4 -2
  162. package/dist/server/services/schema-builder/index.mjs.map +1 -1
  163. package/dist/server/services/schema-builder/schema-handler.js +19 -17
  164. package/dist/server/services/schema-builder/schema-handler.js.map +1 -1
  165. package/dist/server/services/schema-builder/schema-handler.mjs +19 -17
  166. package/dist/server/services/schema-builder/schema-handler.mjs.map +1 -1
  167. package/dist/server/services/schema-mutation.js +46 -0
  168. package/dist/server/services/schema-mutation.js.map +1 -0
  169. package/dist/server/services/schema-mutation.mjs +43 -0
  170. package/dist/server/services/schema-mutation.mjs.map +1 -0
  171. package/dist/server/services/schema.js +134 -79
  172. package/dist/server/services/schema.js.map +1 -1
  173. package/dist/server/services/schema.mjs +135 -80
  174. package/dist/server/services/schema.mjs.map +1 -1
  175. package/dist/server/src/controllers/schema.d.ts.map +1 -1
  176. package/dist/server/src/controllers/validation/common.d.ts +1 -0
  177. package/dist/server/src/controllers/validation/common.d.ts.map +1 -1
  178. package/dist/server/src/controllers/validation/content-structure.d.ts +56 -0
  179. package/dist/server/src/controllers/validation/content-structure.d.ts.map +1 -0
  180. package/dist/server/src/controllers/validation/schema.d.ts +35 -0
  181. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
  182. package/dist/server/src/index.d.ts +3 -0
  183. package/dist/server/src/index.d.ts.map +1 -1
  184. package/dist/server/src/routes/content-api.d.ts.map +1 -1
  185. package/dist/server/src/services/api-handler.d.ts +13 -1
  186. package/dist/server/src/services/api-handler.d.ts.map +1 -1
  187. package/dist/server/src/services/content-structure.d.ts +37 -0
  188. package/dist/server/src/services/content-structure.d.ts.map +1 -0
  189. package/dist/server/src/services/content-types.d.ts +4 -0
  190. package/dist/server/src/services/content-types.d.ts.map +1 -1
  191. package/dist/server/src/services/index.d.ts +4 -0
  192. package/dist/server/src/services/index.d.ts.map +1 -1
  193. package/dist/server/src/services/schema-builder/index.d.ts +3 -1
  194. package/dist/server/src/services/schema-builder/index.d.ts.map +1 -1
  195. package/dist/server/src/services/schema-builder/schema-handler.d.ts.map +1 -1
  196. package/dist/server/src/services/schema-mutation.d.ts +26 -0
  197. package/dist/server/src/services/schema-mutation.d.ts.map +1 -0
  198. package/dist/server/src/services/schema.d.ts +1 -0
  199. package/dist/server/src/services/schema.d.ts.map +1 -1
  200. package/dist/server/src/utils/index.d.ts +2 -0
  201. package/dist/server/src/utils/index.d.ts.map +1 -1
  202. package/dist/server/utils/index.js.map +1 -1
  203. package/dist/server/utils/index.mjs.map +1 -1
  204. package/package.json +8 -8
  205. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +0 -157
  206. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +0 -1
  207. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs +0 -151
  208. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.mjs","sources":["../../../../admin/src/components/DataManager/reducer.ts"],"sourcesContent":["import { PayloadAction } from '@reduxjs/toolkit';\nimport merge from 'lodash/merge';\nimport omit from 'lodash/omit';\n\nimport { applyPrivateSearchDefault } from '../../utils/applyPrivateSearchDefault';\nimport { getRelationType } from '../../utils/getRelationType';\nimport { makeUnique } from '../../utils/makeUnique';\n\nimport { createUndoRedoSlice } from './undoRedo';\n\nimport type {\n Components,\n ContentTypes,\n ContentType,\n Component,\n Status,\n AnyAttribute,\n} from '../../types';\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 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 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};\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 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};\n\ntype EditAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype EditCustomFieldAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype RemoveComponentFromDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dzName: string;\n componentToRemoveIndex: number;\n};\n\ntype RemoveFieldPayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n attributeToRemoveName: string;\n};\n\ntype UpdateComponentSchemaPayload = {\n data: {\n icon?: string;\n displayName: string;\n };\n uid: Internal.UID.Component;\n};\n\ntype UpdateComponentUIDPayload = {\n uid: Internal.UID.Component;\n newComponentUID: Internal.UID.Component;\n};\n\ntype UpdateSchemaPayload = {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n uid: string;\n};\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 setAttributeStatus = (attribute: { status?: Status }, status: Status) => {\n attribute.status = getNewStatus(attribute.status, status);\n};\n\nconst createAttribute = (properties: Record<string, unknown>): AnyAttribute => {\n return {\n ...applyPrivateSearchDefault(properties),\n status: 'NEW',\n } as AnyAttribute;\n};\n\nconst setAttributeAt = (type: ContentType | Component, index: number, attribute: AnyAttribute) => {\n const previousAttribute = type.attributes[index];\n\n const newStatus = getNewStatus(previousAttribute.status, 'CHANGED');\n\n type.attributes[index] = {\n ...applyPrivateSearchDefault(attribute),\n status: newStatus,\n };\n\n setStatus(type, 'CHANGED');\n};\n\nconst pushAttribute = (type: ContentType | Component, attribute: AnyAttribute) => {\n type.attributes.push(attribute);\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeAt = (type: ContentType | Component, index: number) => {\n const attr = type.attributes[index];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(index, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\nconst replaceAttributeAt = (\n type: ContentType | Component,\n index: number,\n attribute: AnyAttribute\n) => {\n type.attributes[index] = attribute;\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeByName = (type: ContentType | Component, name: string) => {\n const idx = type.attributes.findIndex((attr) => attr.name === name);\n\n const attr = type.attributes[idx];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(idx, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\nconst updateType = (type: ContentType | Component, data: Record<string, unknown>) => {\n merge(type, data);\n setStatus(type, 'CHANGED');\n};\n\nconst slice = createUndoRedoSlice(\n {\n name: 'data-manager',\n initialState,\n reducers: {\n init: (state, action: PayloadAction<InitPayload>) => {\n const { components, contentTypes, reservedNames } = action.payload;\n\n state.components = components;\n state.initialComponents = components;\n state.initialContentTypes = contentTypes;\n state.contentTypes = contentTypes;\n state.reservedNames = reservedNames;\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 } = 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 addAttribute: (state, action: PayloadAction<AddAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = createAttribute(omit(attributeToSet, 'createComponent'));\n\n if (attribute.type === 'relation') {\n const target = attribute.target;\n const targetAttribute = attribute.targetAttribute || null;\n const relation = attribute.relation;\n const relationType = getRelationType(relation, targetAttribute);\n\n const isBidirectionalRelation =\n relationType !== undefined && !['oneWay', 'manyWay'].includes(relationType);\n\n if (isBidirectionalRelation) {\n const oppositeAttribute = createAttribute({\n name: targetAttribute,\n relation: getOppositeRelation(relationType),\n target: type.uid,\n targetAttribute: attribute.name,\n type: 'relation',\n private: attribute.private,\n });\n\n const targetType = getType(state, { forTarget, targetUid: target });\n pushAttribute(targetType, oppositeAttribute);\n }\n }\n\n pushAttribute(type, attribute);\n setStatus(type, 'CHANGED');\n },\n moveAttribute: (state, action: PayloadAction<MoveAttributePayload>) => {\n const { forTarget, targetUid, from, to } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = type.attributes[from];\n type.attributes.splice(from, 1);\n type.attributes.splice(to, 0, attribute);\n setStatus(type, 'CHANGED');\n },\n addCustomFieldAttribute: (state, action: PayloadAction<AddCustomFieldAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n pushAttribute(type, createAttribute(attributeToSet));\n },\n addCreatedComponentToDynamicZone: (\n state,\n action: PayloadAction<AddCreateComponentToDynamicZonePayload>\n ) => {\n const { dynamicZoneTarget, componentsToAdd, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n componentsToAdd.forEach((componentUid: Internal.UID.Component) => {\n attr.components.push(componentUid);\n });\n\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n setStatus(type, 'CHANGED');\n },\n changeDynamicZoneComponents: (\n state,\n action: PayloadAction<ChangeDynamicZoneComponentsPayload>\n ) => {\n const { dynamicZoneTarget, newComponents, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n const currentDZComponents = attr.components;\n\n const updatedComponents = makeUnique([...currentDZComponents, ...newComponents]);\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components = updatedComponents;\n },\n editAttribute: (state, action: PayloadAction<EditAttributePayload>) => {\n const { name, attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, name);\n\n if (initialAttributeIndex === -1) {\n return;\n }\n\n const previousAttribute = type.attributes[initialAttributeIndex];\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n\n if (previousAttribute.type !== attributeToSet.type) {\n return;\n }\n\n if (previousAttribute.type !== 'relation' || attributeToSet.type !== 'relation') {\n return;\n }\n\n const previousTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: previousAttribute.target,\n });\n const newTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: attributeToSet.target,\n });\n\n const previousTargetAttributeIndex = findAttributeIndex(\n previousTarget,\n previousAttribute.targetAttribute ?? ''\n );\n const previousTargetAttribute =\n previousTargetAttributeIndex !== -1\n ? previousTarget.attributes[previousTargetAttributeIndex]\n : undefined;\n\n // remove old targetAttribute\n if (previousAttribute.targetAttribute) {\n removeAttributeByName(previousTarget, previousAttribute.targetAttribute);\n }\n\n const newRelationType = getRelationType(\n attributeToSet.relation,\n attributeToSet.targetAttribute\n );\n const isBidirectionnal =\n newRelationType !== undefined && !ONE_SIDE_RELATIONS.includes(newRelationType);\n\n if (isBidirectionnal) {\n const newTargetAttribute = {\n name: attributeToSet.targetAttribute,\n type: 'relation',\n relation: getOppositeRelation(attributeToSet.relation),\n targetAttribute: attributeToSet.name,\n target: type.uid,\n private: previousAttribute.private ?? attributeToSet.private,\n pluginOptions: previousAttribute.pluginOptions ?? attributeToSet.pluginOptions,\n ...(previousTarget.uid === newTarget.uid && previousTargetAttribute?.conditions\n ? { conditions: previousTargetAttribute.conditions }\n : {}),\n status: 'CHANGED',\n } as AnyAttribute;\n\n // create or recreate(at old index) targetAttribute\n if (previousTargetAttributeIndex !== -1 && previousTarget.uid === newTarget.uid) {\n // re-create at previousIdx if possible\n replaceAttributeAt(newTarget, previousTargetAttributeIndex, newTargetAttribute);\n } else {\n pushAttribute(newTarget, {\n ...newTargetAttribute,\n status: 'NEW',\n });\n }\n }\n },\n editCustomFieldAttribute: (state, action: PayloadAction<EditCustomFieldAttributePayload>) => {\n const { forTarget, targetUid, name, attributeToSet } = action.payload;\n\n const initialAttributeName = name;\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, initialAttributeName);\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n },\n reloadPlugin: () => {\n return initialState;\n },\n removeComponentFromDynamicZone: (\n state,\n action: PayloadAction<RemoveComponentFromDynamicZonePayload>\n ) => {\n const { dzName, componentToRemoveIndex, forTarget, targetUid } = action.payload;\n\n const type =\n forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n\n if (!type) {\n return;\n }\n\n const dzAttributeIndex = findAttributeIndex(type, dzName);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components.splice(componentToRemoveIndex, 1);\n },\n removeField: (state, action: PayloadAction<RemoveFieldPayload>) => {\n const { forTarget, targetUid, attributeToRemoveName } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attributeToRemoveIndex = findAttributeIndex(type, attributeToRemoveName);\n const attribute = type.attributes[attributeToRemoveIndex];\n\n if (attribute.type === 'relation') {\n const { target, relation, targetAttribute: targetAttributeName } = attribute;\n const relationType = getRelationType(relation, targetAttributeName);\n\n const isBidirectionnal = !ONE_SIDE_RELATIONS.includes(relationType!);\n\n if (isBidirectionnal && targetAttributeName) {\n const targetContentType = getType(state, { forTarget, targetUid: target });\n const targetAttributeIndex = findAttributeIndex(targetContentType, targetAttributeName);\n\n removeAttributeAt(targetContentType, targetAttributeIndex);\n }\n }\n\n // Find all uid fields that have the targetField set to the field we are removing\n type.attributes.forEach((attribute) => {\n if (attribute.type === 'uid') {\n if (attribute.targetField === attributeToRemoveName) {\n delete attribute.targetField;\n }\n }\n });\n\n removeAttributeAt(type, attributeToRemoveIndex);\n },\n // only edits a component in practice\n updateComponentSchema: (state, action: PayloadAction<UpdateComponentSchemaPayload>) => {\n const { data, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type) {\n return;\n }\n\n updateType(type, {\n info: {\n displayName: data.displayName,\n icon: data.icon,\n },\n });\n },\n updateComponentUid: (state, action: PayloadAction<UpdateComponentUIDPayload>) => {\n const { newComponentUID, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type || type.status !== 'NEW') {\n return;\n }\n\n if (newComponentUID !== uid) {\n const newType = { ...type, uid: newComponentUID };\n state.components[newComponentUID] = newType;\n delete state.components[uid];\n\n // update the uid in the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.map((component: UID.Component) => {\n if (component === uid) {\n return newComponentUID;\n }\n\n return component;\n });\n\n attribute.components = newComponents;\n }\n });\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n\n // update the uid in the other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n component.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n }\n },\n updateSchema: (state, action: PayloadAction<UpdateSchemaPayload>) => {\n const { data, uid } = 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 updateType(type, {\n info: {\n displayName,\n },\n kind,\n options: {\n draftAndPublish,\n },\n pluginOptions,\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 contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n removeAttributeByName(contentType, attribute.name);\n }\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 component.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n removeAttributeByName(component, attribute.name);\n }\n });\n });\n },\n deleteContentType: (state, action: PayloadAction<Internal.UID.ContentType>) => {\n const uid = action.payload;\n const type = state.contentTypes[uid];\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 components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n component.attributes.forEach((attribute) => {\n if (attribute.type === 'relation' && attribute.target === uid) {\n removeAttributeByName(component, attribute.name);\n }\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 contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'relation' && attribute.target === uid) {\n removeAttributeByName(contentType, attribute.name);\n }\n });\n });\n },\n\n applyChange(\n state,\n reducerAction: PayloadAction<{\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }>\n ) {\n const { action, schema } = reducerAction.payload;\n\n switch (action) {\n case 'add':\n {\n const uid = schema.uid;\n\n if (schema.modelType === 'component') {\n state.components[uid] = schema;\n } else {\n state.contentTypes[uid] = schema;\n }\n }\n break;\n case 'update':\n {\n const uid = schema.uid;\n\n // Find the schema, if the state was \"create\", we should keep it as it was before\n\n if (schema.modelType === 'component') {\n const component = state.components[uid];\n state.components[uid] = {\n ...schema,\n status: component?.status === 'NEW' ? 'NEW' : schema.status,\n };\n } else {\n const contentType = state.contentTypes[uid];\n state.contentTypes[uid] = {\n ...schema,\n status: contentType?.status === 'NEW' ? 'NEW' : schema.status,\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\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 };\n },\n discard: (state) => {\n state.components = state.initialComponents;\n state.contentTypes = state.initialContentTypes;\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","reservedNames","models","attributes","isLoading","ONE_SIDE_RELATIONS","getOppositeRelation","originalRelation","findAttributeIndex","type","attributeToFind","findIndex","name","getType","state","forTarget","targetUid","setStatus","status","getNewStatus","oldStatus","newStatus","setAttributeStatus","attribute","createAttribute","properties","applyPrivateSearchDefault","setAttributeAt","index","previousAttribute","pushAttribute","push","removeAttributeAt","attr","splice","replaceAttributeAt","removeAttributeByName","idx","updateType","data","merge","slice","createUndoRedoSlice","reducers","init","action","payload","createComponentSchema","uid","componentCategory","newSchema","category","modelName","displayName","globalId","info","icon","modelType","createSchema","singularName","pluralName","kind","draftAndPublish","pluginOptions","visible","restrictRelationsTo","options","addAttribute","attributeToSet","omit","target","targetAttribute","relation","relationType","getRelationType","isBidirectionalRelation","undefined","includes","oppositeAttribute","private","targetType","moveAttribute","from","to","addCustomFieldAttribute","addCreatedComponentToDynamicZone","dynamicZoneTarget","componentsToAdd","dzAttributeIndex","forEach","componentUid","changeDynamicZoneComponents","newComponents","currentDZComponents","updatedComponents","makeUnique","editAttribute","initialAttributeIndex","previousTarget","newTarget","previousTargetAttributeIndex","previousTargetAttribute","newRelationType","isBidirectionnal","newTargetAttribute","conditions","editCustomFieldAttribute","initialAttributeName","reloadPlugin","removeComponentFromDynamicZone","dzName","componentToRemoveIndex","removeField","attributeToRemoveName","attributeToRemoveIndex","targetAttributeName","targetContentType","targetAttributeIndex","targetField","updateComponentSchema","updateComponentUid","newComponentUID","newType","Object","keys","contentTypeUid","contentType","map","component","updateSchema","deleteComponent","filter","deleteContentType","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';\n\nimport { applyPrivateSearchDefault } from '../../utils/applyPrivateSearchDefault';\nimport { getRelationType } from '../../utils/getRelationType';\nimport { makeUnique } from '../../utils/makeUnique';\n\nimport { createUndoRedoSlice } from './undoRedo';\nimport {\n createEmptyContentStructure,\n findSiblingFolderByName,\n getDeleteFolderOnlySiblingNameCollisions,\n isFolderNameTakenBySibling,\n MAX_FOLDER_DEPTH,\n sectionKeyForKind,\n} from './utils/contentStructure';\n\nimport type {\n Components,\n ContentTypes,\n ContentType,\n Component,\n Status,\n AnyAttribute,\n} from '../../types';\nimport type {\n ContentStructure,\n ContentStructureGroup,\n ContentStructureSection,\n GroupStatus,\n SectionKey,\n} from './utils/contentStructure';\nimport type { Internal, Schema, Struct, UID } from '@strapi/types';\n\nexport interface DataManagerStateType {\n components: Components;\n initialComponents: Components;\n contentTypes: ContentTypes;\n initialContentTypes: ContentTypes;\n contentStructure: ContentStructure;\n initialContentStructure: ContentStructure;\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n isLoading: boolean;\n [key: string]: unknown;\n}\n\nconst initialState: DataManagerStateType = {\n components: {},\n contentTypes: {},\n initialComponents: {},\n initialContentTypes: {},\n contentStructure: createEmptyContentStructure(),\n initialContentStructure: createEmptyContentStructure(),\n reservedNames: {\n models: [],\n attributes: [],\n },\n isLoading: true,\n};\n\nconst ONE_SIDE_RELATIONS = ['oneWay', 'manyWay'];\n\ntype AttributeMutation = AnyAttribute & {\n createComponent?: unknown;\n};\n\ntype PluginOptions = Record<string, unknown>;\n\nconst getOppositeRelation = (originalRelation?: Schema.Attribute.RelationKind.Any) => {\n if (originalRelation === 'manyToOne') {\n return 'oneToMany';\n }\n\n if (originalRelation === 'oneToMany') {\n return 'manyToOne';\n }\n\n return originalRelation;\n};\n\nconst findAttributeIndex = (type: ContentType | Component, attributeToFind?: string) => {\n return type.attributes.findIndex(({ name }: { name: string }) => name === attributeToFind);\n};\n\ntype InitPayload = {\n components: Record<string, Component>;\n contentTypes: Record<string, ContentType>;\n reservedNames: DataManagerStateType['reservedNames'];\n contentStructure?: ContentStructure;\n};\n\ntype CreateFolderPayload = {\n parentId: string | null;\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype RenameFolderPayload = {\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype MoveFolderPayload = {\n newParentId: string | null;\n section: SectionKey;\n index?: number;\n id: string;\n};\n\ntype DeleteFolderPayload = {\n section: SectionKey;\n id: string;\n};\n\ntype DeleteFolderAndContentPayload = DeleteFolderPayload & {\n contentTypeUids: Internal.UID.ContentType[];\n};\n\ntype AssignContentTypeToFolderPayload = {\n targetGroupId: string | null;\n uid: UID.ContentType;\n section: SectionKey;\n index?: number;\n};\n\ntype ReorderFolderChildrenPayload = {\n section: SectionKey;\n groupId: string;\n from: number;\n to: number;\n};\n\ntype AddAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype AddCreateComponentToDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dynamicZoneTarget: string;\n componentsToAdd: Internal.UID.Component[];\n};\n\ntype AddCustomFieldAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype ChangeDynamicZoneComponentsPayload = {\n dynamicZoneTarget: string;\n newComponents: Internal.UID.Component[];\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype CreateComponentSchemaPayload = {\n uid: string;\n data: {\n icon?: string;\n displayName: string;\n };\n componentCategory: string;\n};\n\ntype FolderAssignmentPayload =\n | { targetGroupId: string | null }\n | { newFolderId: string; newFolderName: string };\n\ntype CreateSchemaPayload = {\n uid: string;\n data: {\n displayName: string;\n singularName: string;\n pluralName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n folder?: FolderAssignmentPayload;\n};\n\ntype EditAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype EditCustomFieldAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype RemoveComponentFromDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dzName: string;\n componentToRemoveIndex: number;\n};\n\ntype RemoveFieldPayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n attributeToRemoveName: string;\n};\n\ntype UpdateComponentSchemaPayload = {\n data: {\n icon?: string;\n displayName: string;\n };\n uid: Internal.UID.Component;\n};\n\ntype UpdateComponentUIDPayload = {\n uid: Internal.UID.Component;\n newComponentUID: Internal.UID.Component;\n};\n\ntype UpdateSchemaPayload = {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n uid: string;\n folder?: FolderAssignmentPayload;\n};\n\ntype MoveAttributePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n from: number;\n to: number;\n};\n\nconst getType = (\n state: DataManagerStateType,\n {\n forTarget,\n targetUid,\n }: {\n forTarget: Struct.ModelType;\n targetUid: string;\n }\n) => {\n return forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n};\n\n// TODO: use initial state when chnaging back to the initial state without knowing\nconst setStatus = (type: ContentType | Component, status: Status) => {\n switch (type.status) {\n case 'NEW':\n case 'REMOVED': {\n break;\n }\n default: {\n type.status = status;\n }\n }\n};\n\nconst getNewStatus = (oldStatus: Status | undefined, newStatus: Status) => {\n if (oldStatus === 'NEW' || oldStatus === 'REMOVED') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst getNewGroupStatus = (oldStatus: GroupStatus, newStatus: GroupStatus): GroupStatus => {\n if (oldStatus === 'NEW') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst setAttributeStatus = (attribute: { status?: Status }, status: Status) => {\n attribute.status = getNewStatus(attribute.status, status);\n};\n\nconst createAttribute = (properties: Record<string, unknown>): AnyAttribute => {\n return {\n ...applyPrivateSearchDefault(properties),\n status: 'NEW',\n } as AnyAttribute;\n};\n\nconst setAttributeAt = (type: ContentType | Component, index: number, attribute: AnyAttribute) => {\n const previousAttribute = type.attributes[index];\n\n const newStatus = getNewStatus(previousAttribute.status, 'CHANGED');\n\n type.attributes[index] = {\n ...applyPrivateSearchDefault(attribute),\n status: newStatus,\n };\n\n setStatus(type, 'CHANGED');\n};\n\nconst pushAttribute = (type: ContentType | Component, attribute: AnyAttribute) => {\n type.attributes.push(attribute);\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeAt = (type: ContentType | Component, index: number) => {\n const attr = type.attributes[index];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(index, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\nconst replaceAttributeAt = (\n type: ContentType | Component,\n index: number,\n attribute: AnyAttribute\n) => {\n type.attributes[index] = attribute;\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeByName = (type: ContentType | Component, name: string) => {\n const idx = type.attributes.findIndex((attr) => attr.name === name);\n\n if (idx === -1) {\n return;\n }\n\n const attr = type.attributes[idx];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(idx, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\nconst updateType = (type: ContentType | Component, data: Record<string, unknown>) => {\n merge(type, data);\n setStatus(type, 'CHANGED');\n};\n\nconst findGroup = (groups: ContentStructureGroup[], id: string) => {\n return groups.find((group) => group.id === id);\n};\n\nconst setGroupStatus = (group: ContentStructureGroup, status: GroupStatus): void => {\n group.status = getNewGroupStatus(group.status, status);\n};\n\n/**\n * Remove a content type reference from every group of a section, mark the group as changed if a reference was removed.\n * @returns true if a reference was removed, false otherwise.\n */\nconst removeContentTypeChild = (groups: ContentStructureGroup[], uid: string): boolean => {\n let removed = false;\n\n for (const group of groups) {\n const groupIndex = group.children.findIndex((child) => {\n return child.type === 'contentType' && child.uid === uid;\n });\n\n if (groupIndex !== -1) {\n group.children.splice(groupIndex, 1);\n setGroupStatus(group, 'CHANGED');\n removed = true;\n }\n }\n\n return removed;\n};\n\n/**\n * Assign a content type to a folder within a single section, optionally creating\n * a new root folder first.\n *\n * Detaches the content type from any current folder then files it under the target group.\n * This is also used by the create/edit content-type modal's folder picker via\n * createSchema/updateSchema.\n */\nconst applyFolderAssignment = (\n section: ContentStructureSection,\n uid: UID.ContentType,\n folder: FolderAssignmentPayload\n): void => {\n const { groups } = section;\n\n removeContentTypeChild(groups, uid);\n\n let targetGroupId: string | null;\n\n if ('newFolderId' in folder) {\n // Reuse an existing root folder of the same name instead of creating a\n // duplicate. The modal picker can only ever makes root folders, so\n // this makes the assumption that a same-named root folder means the\n // user wants to insert into that folder.\n const existing = findSiblingFolderByName(groups, null, folder.newFolderName);\n\n if (existing) {\n targetGroupId = existing.id;\n } else {\n groups.push({\n name: folder.newFolderName.trim(),\n id: folder.newFolderId,\n parent: null,\n children: [],\n status: 'NEW',\n });\n\n targetGroupId = folder.newFolderId;\n }\n } else {\n targetGroupId = folder.targetGroupId;\n }\n\n if (!targetGroupId) {\n return;\n }\n\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n targetGroup.children.push({ type: 'contentType', uid });\n setGroupStatus(targetGroup, 'CHANGED');\n }\n};\n\n/**\n * Determines whether `potentialDescendantId` is nested somewhere inside `ancestorId`'s subtree\n */\nconst isDescendantGroup = (\n groups: ContentStructureGroup[],\n ancestorId: string,\n potentialDescendantId: string\n): boolean => {\n let current = findGroup(groups, potentialDescendantId);\n\n while (current && current.parent !== null) {\n if (current.parent === ancestorId) {\n return true;\n }\n\n current = findGroup(groups, current.parent);\n }\n\n return false;\n};\n\nconst getGroupDepth = (groups: ContentStructureGroup[], id: string): number => {\n let depth = 1;\n let current = findGroup(groups, id);\n\n while (current && current.parent !== null) {\n current = findGroup(groups, current.parent);\n depth += 1;\n }\n\n return depth;\n};\n\n/**\n * Number of folder levels below a group e.g. a group with no sub-folders has height 0.\n */\nconst getSubtreeHeight = (groups: ContentStructureGroup[], id: string): number => {\n const group = findGroup(groups, id);\n\n if (!group) {\n return 0;\n }\n\n let height = 0;\n\n for (const child of group.children) {\n if (child.type !== 'group') continue;\n height = Math.max(height, 1 + getSubtreeHeight(groups, child.id));\n }\n\n return height;\n};\n\nconst applyDeleteContentType = (state: DataManagerStateType, uid: Internal.UID.ContentType) => {\n const type = state.contentTypes[uid];\n\n // Only application schemas belong to CTB. Folder actions can be crafted outside the UI,\n // so this guard must live at the mutation boundary rather than in the dialog alone.\n if (!type || !type.uid.startsWith('api::') || type.plugin) {\n return;\n }\n\n // just drop new content types\n if (type.status === 'NEW') {\n delete state.contentTypes[uid];\n } else {\n setStatus(type, 'REMOVED');\n }\n\n // remove the content type from the content structure tree\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n\n // remove the content type from the components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n\n // remove the content type from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n};\n\nconst slice = createUndoRedoSlice(\n {\n name: 'data-manager',\n initialState,\n reducers: {\n init: (state, action: PayloadAction<InitPayload>) => {\n const { components, contentTypes, reservedNames, contentStructure } = action.payload;\n\n state.components = components;\n state.initialComponents = components;\n state.initialContentTypes = contentTypes;\n state.contentTypes = contentTypes;\n state.reservedNames = reservedNames;\n\n const structure = contentStructure ?? createEmptyContentStructure();\n state.initialContentStructure = structure;\n state.contentStructure = structure;\n\n state.isLoading = false;\n },\n createComponentSchema: (state, action: PayloadAction<CreateComponentSchemaPayload>) => {\n const { uid, data, componentCategory } = action.payload;\n\n const newSchema: Component = {\n uid: uid as Internal.UID.Component,\n status: 'NEW',\n category: componentCategory,\n modelName: data.displayName,\n globalId: data.displayName,\n info: {\n icon: data.icon,\n displayName: data.displayName,\n },\n attributes: [],\n modelType: 'component',\n };\n\n state.components[uid as string] = newSchema;\n },\n createSchema: (state, action: PayloadAction<CreateSchemaPayload>) => {\n const { uid, data, folder } = action.payload;\n\n const { displayName, singularName, pluralName, kind, draftAndPublish, pluginOptions } =\n data;\n\n const newSchema: ContentType = {\n uid: uid as Internal.UID.ContentType,\n status: 'NEW',\n visible: true,\n modelType: 'contentType',\n restrictRelationsTo: null,\n attributes: [],\n kind,\n modelName: displayName,\n globalId: displayName,\n options: {\n draftAndPublish,\n },\n info: {\n displayName,\n singularName,\n pluralName,\n },\n pluginOptions,\n };\n\n state.contentTypes[uid] = newSchema;\n\n // File the new content type into a folder in the same transaction it is created,\n // so both are subject to the same undo/redo operatiion.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n addAttribute: (state, action: PayloadAction<AddAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = createAttribute(omit(attributeToSet, 'createComponent'));\n\n if (attribute.type === 'relation') {\n const target = attribute.target;\n const targetAttribute = attribute.targetAttribute || null;\n const relation = attribute.relation;\n const relationType = getRelationType(relation, targetAttribute);\n\n const isBidirectionalRelation =\n relationType !== undefined && !['oneWay', 'manyWay'].includes(relationType);\n\n if (isBidirectionalRelation) {\n const oppositeAttribute = createAttribute({\n name: targetAttribute,\n relation: getOppositeRelation(relationType),\n target: type.uid,\n targetAttribute: attribute.name,\n type: 'relation',\n private: attribute.private,\n });\n\n const targetType = getType(state, { forTarget, targetUid: target });\n pushAttribute(targetType, oppositeAttribute);\n }\n }\n\n pushAttribute(type, attribute);\n setStatus(type, 'CHANGED');\n },\n moveAttribute: (state, action: PayloadAction<MoveAttributePayload>) => {\n const { forTarget, targetUid, from, to } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = type.attributes[from];\n type.attributes.splice(from, 1);\n type.attributes.splice(to, 0, attribute);\n setStatus(type, 'CHANGED');\n },\n addCustomFieldAttribute: (state, action: PayloadAction<AddCustomFieldAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n pushAttribute(type, createAttribute(attributeToSet));\n },\n addCreatedComponentToDynamicZone: (\n state,\n action: PayloadAction<AddCreateComponentToDynamicZonePayload>\n ) => {\n const { dynamicZoneTarget, componentsToAdd, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n componentsToAdd.forEach((componentUid: Internal.UID.Component) => {\n attr.components.push(componentUid);\n });\n\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n setStatus(type, 'CHANGED');\n },\n changeDynamicZoneComponents: (\n state,\n action: PayloadAction<ChangeDynamicZoneComponentsPayload>\n ) => {\n const { dynamicZoneTarget, newComponents, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n const currentDZComponents = attr.components;\n\n const updatedComponents = makeUnique([...currentDZComponents, ...newComponents]);\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components = updatedComponents;\n },\n editAttribute: (state, action: PayloadAction<EditAttributePayload>) => {\n const { name, attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, name);\n\n if (initialAttributeIndex === -1) {\n return;\n }\n\n const previousAttribute = type.attributes[initialAttributeIndex];\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n\n if (previousAttribute.type !== attributeToSet.type) {\n return;\n }\n\n if (previousAttribute.type !== 'relation' || attributeToSet.type !== 'relation') {\n return;\n }\n\n const previousTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: previousAttribute.target,\n });\n const newTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: attributeToSet.target,\n });\n\n const previousTargetAttributeIndex = findAttributeIndex(\n previousTarget,\n previousAttribute.targetAttribute ?? ''\n );\n const previousTargetAttribute =\n previousTargetAttributeIndex !== -1\n ? previousTarget.attributes[previousTargetAttributeIndex]\n : undefined;\n\n // remove old targetAttribute\n if (previousAttribute.targetAttribute) {\n removeAttributeByName(previousTarget, previousAttribute.targetAttribute);\n }\n\n const newRelationType = getRelationType(\n attributeToSet.relation,\n attributeToSet.targetAttribute\n );\n const isBidirectionnal =\n newRelationType !== undefined && !ONE_SIDE_RELATIONS.includes(newRelationType);\n\n if (isBidirectionnal) {\n const newTargetAttribute = {\n name: attributeToSet.targetAttribute,\n type: 'relation',\n relation: getOppositeRelation(attributeToSet.relation),\n targetAttribute: attributeToSet.name,\n target: type.uid,\n private: previousAttribute.private ?? attributeToSet.private,\n pluginOptions: previousAttribute.pluginOptions ?? attributeToSet.pluginOptions,\n ...(previousTarget.uid === newTarget.uid && previousTargetAttribute?.conditions\n ? { conditions: previousTargetAttribute.conditions }\n : {}),\n status: 'CHANGED',\n } as AnyAttribute;\n\n // create or recreate(at old index) targetAttribute\n if (previousTargetAttributeIndex !== -1 && previousTarget.uid === newTarget.uid) {\n // re-create at previousIdx if possible\n replaceAttributeAt(newTarget, previousTargetAttributeIndex, newTargetAttribute);\n } else {\n pushAttribute(newTarget, {\n ...newTargetAttribute,\n status: 'NEW',\n });\n }\n }\n },\n editCustomFieldAttribute: (state, action: PayloadAction<EditCustomFieldAttributePayload>) => {\n const { forTarget, targetUid, name, attributeToSet } = action.payload;\n\n const initialAttributeName = name;\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, initialAttributeName);\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n },\n reloadPlugin: () => {\n return initialState;\n },\n removeComponentFromDynamicZone: (\n state,\n action: PayloadAction<RemoveComponentFromDynamicZonePayload>\n ) => {\n const { dzName, componentToRemoveIndex, forTarget, targetUid } = action.payload;\n\n const type =\n forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n\n if (!type) {\n return;\n }\n\n const dzAttributeIndex = findAttributeIndex(type, dzName);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components.splice(componentToRemoveIndex, 1);\n },\n removeField: (state, action: PayloadAction<RemoveFieldPayload>) => {\n const { forTarget, targetUid, attributeToRemoveName } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attributeToRemoveIndex = findAttributeIndex(type, attributeToRemoveName);\n const attribute = type.attributes[attributeToRemoveIndex];\n\n if (attribute.type === 'relation') {\n const { target, relation, targetAttribute: targetAttributeName } = attribute;\n const relationType = getRelationType(relation, targetAttributeName);\n\n const isBidirectionnal = !ONE_SIDE_RELATIONS.includes(relationType!);\n\n if (isBidirectionnal && targetAttributeName) {\n const targetContentType = getType(state, { forTarget, targetUid: target });\n const targetAttributeIndex = findAttributeIndex(targetContentType, targetAttributeName);\n\n removeAttributeAt(targetContentType, targetAttributeIndex);\n }\n }\n\n // Find all uid fields that have the targetField set to the field we are removing\n type.attributes.forEach((attribute) => {\n if (attribute.type === 'uid') {\n if (attribute.targetField === attributeToRemoveName) {\n delete attribute.targetField;\n }\n }\n });\n\n removeAttributeAt(type, attributeToRemoveIndex);\n },\n // only edits a component in practice\n updateComponentSchema: (state, action: PayloadAction<UpdateComponentSchemaPayload>) => {\n const { data, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type) {\n return;\n }\n\n updateType(type, {\n info: {\n displayName: data.displayName,\n icon: data.icon,\n },\n });\n },\n updateComponentUid: (state, action: PayloadAction<UpdateComponentUIDPayload>) => {\n const { newComponentUID, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type || type.status !== 'NEW') {\n return;\n }\n\n if (newComponentUID !== uid) {\n const newType = { ...type, uid: newComponentUID };\n state.components[newComponentUID] = newType;\n delete state.components[uid];\n\n // update the uid in the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.map((component: UID.Component) => {\n if (component === uid) {\n return newComponentUID;\n }\n\n return component;\n });\n\n attribute.components = newComponents;\n }\n });\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n\n // update the uid in the other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n component.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n }\n },\n updateSchema: (state, action: PayloadAction<UpdateSchemaPayload>) => {\n const { data, uid, folder } = action.payload;\n\n const { displayName, kind, draftAndPublish, pluginOptions } = data;\n\n const type = state.contentTypes[uid];\n if (!type) {\n return;\n }\n\n const previousKind = type.kind;\n\n updateType(type, {\n info: {\n displayName,\n },\n kind,\n options: {\n draftAndPublish,\n },\n pluginOptions,\n });\n\n if (kind && kind !== previousKind) {\n const oldSection = state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n\n // Apply the folder picker's choice after any kind relocation, so the\n // assignment lands in the content type's (possibly new) section.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n deleteComponent: (state, action: PayloadAction<Internal.UID.Component>) => {\n const uid = action.payload;\n\n // remove the compo from the components\n if (state.components[uid].status === 'NEW') {\n delete state.components[uid];\n } else {\n setStatus(state.components[uid], 'REMOVED');\n }\n\n // remove the compo from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n // remove from dynamic zones\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.filter(\n (component: unknown) => component !== uid\n );\n\n attribute.components = newComponents;\n }\n });\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n\n // remove the compo from other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n },\n deleteContentType: (state, action: PayloadAction<Internal.UID.ContentType>) => {\n applyDeleteContentType(state, action.payload);\n },\n\n createFolder: (state, action: PayloadAction<CreateFolderPayload>) => {\n const { section, id, name: rawName, parentId } = action.payload;\n const name = rawName.trim();\n const { groups } = state.contentStructure.sections[section];\n\n if (parentId && getGroupDepth(groups, parentId) + 1 > MAX_FOLDER_DEPTH) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, parentId, name)) {\n return;\n }\n\n groups.push({ id, name, parent: parentId, children: [], status: 'NEW' });\n\n if (parentId) {\n const parent = findGroup(groups, parentId);\n\n if (parent) {\n parent.children.push({ type: 'group', id });\n setGroupStatus(parent, 'CHANGED');\n }\n }\n },\n renameFolder: (state, action: PayloadAction<RenameFolderPayload>) => {\n const { section, id, name: rawName } = action.payload;\n const name = rawName.trim();\n\n const { groups } = state.contentStructure.sections[section];\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n if (group.name === name) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, group.parent, name, id)) {\n return;\n }\n\n group.name = name;\n setGroupStatus(group, 'CHANGED');\n },\n moveFolder: (state, action: PayloadAction<MoveFolderPayload>) => {\n const { section, id, newParentId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n // Reject no-ops and cyclic moves\n if (newParentId === id || (newParentId && isDescendantGroup(groups, id, newParentId))) {\n return;\n }\n\n // Refuse moves that would exceed the maximum allowed depth.\n const newTopDepth = newParentId ? getGroupDepth(groups, newParentId) + 1 : 1;\n if (newTopDepth + getSubtreeHeight(groups, id) > MAX_FOLDER_DEPTH) {\n return;\n }\n\n // Refuse a move that would collide with an identically named sibling.\n if (isFolderNameTakenBySibling(groups, newParentId, group.name, id)) {\n return;\n }\n\n if (group.parent) {\n const oldParent = findGroup(groups, group.parent);\n\n if (oldParent) {\n // Remove from the old parent's list of children.\n const idx = oldParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === id;\n });\n\n if (idx !== -1) {\n oldParent.children.splice(idx, 1);\n }\n\n setGroupStatus(oldParent, 'CHANGED');\n }\n }\n\n group.parent = newParentId;\n setGroupStatus(group, 'CHANGED');\n\n if (newParentId) {\n const newParent = findGroup(groups, newParentId);\n\n if (newParent) {\n const entry = { type: 'group' as const, id };\n\n if (typeof index === 'number' && index >= 0 && index <= newParent.children.length) {\n newParent.children.splice(index, 0, entry);\n } else {\n newParent.children.push(entry);\n }\n\n setGroupStatus(newParent, 'CHANGED');\n }\n } else if (typeof index === 'number') {\n // If a content type is dropped into the root:\n // The root display order follows the array order of the\n // section's root-level groups because there's no root level\n // customization yet, so reposition the moved group among them.\n const currentIndex = groups.findIndex((candidate) => candidate.id === id);\n\n if (currentIndex !== -1) {\n const [moved] = groups.splice(currentIndex, 1);\n const rootIds = groups\n .filter((candidate) => candidate.parent === null)\n .map((candidate) => candidate.id);\n const anchorId = rootIds[index];\n const insertAt = anchorId\n ? groups.findIndex((candidate) => candidate.id === anchorId)\n : groups.length;\n\n groups.splice(insertAt === -1 ? groups.length : insertAt, 0, moved);\n }\n }\n },\n deleteFolderOnly: (state, action: PayloadAction<DeleteFolderPayload>) => {\n const { section, id: groupToDeleteId } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const groupToDeleteParentId = groupToDelete.parent;\n\n // Reparenting a child folder into its grandparent must preserve the same sibling-name\n // invariant as create, rename, and move. Do this before mutating any group state.\n if (getDeleteFolderOnlySiblingNameCollisions(groups, groupToDeleteId).length > 0) {\n return;\n }\n\n // It is necessary to clone the children because we must subsequently mutate the original group.children array when we splice it out of its parent.\n const children = groupToDelete.children.map((child) => ({ ...child }));\n\n // Children of a deleted folder inherit the deleted folder's parent.\n children.forEach((child) => {\n if (child.type === 'group') {\n const childGroup = findGroup(groups, child.id);\n\n if (childGroup) {\n childGroup.parent = groupToDeleteParentId;\n }\n }\n });\n\n if (groupToDeleteParentId) {\n const groupToDeleteParent = findGroup(groups, groupToDeleteParentId);\n\n if (groupToDeleteParent) {\n // Splice the deleted folder's children of the deleted folder into their new parent at the position of the deleted folder.\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1, ...children);\n } else {\n groupToDeleteParent.children.push(...children);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Finally, remove the deleted folder from its section's list of groups.\n const groupIndex = groups.findIndex((candidate) => {\n return candidate.id === groupToDeleteId;\n });\n\n if (groupIndex !== -1) {\n groups.splice(groupIndex, 1);\n }\n },\n deleteFolderAndContent: (state, action: PayloadAction<DeleteFolderAndContentPayload>) => {\n const { section, id: groupToDeleteId, contentTypeUids } = action.payload;\n\n contentTypeUids.forEach((uid) => {\n applyDeleteContentType(state, uid);\n });\n\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const toRemove = new Set<string>();\n const collect = (currentGroupId: string) => {\n toRemove.add(currentGroupId);\n\n const currentGroup = findGroup(groups, currentGroupId);\n\n for (const child of currentGroup?.children ?? []) {\n if (child.type !== 'group') continue;\n collect(child.id);\n }\n };\n\n collect(groupToDeleteId);\n\n if (groupToDelete.parent) {\n const groupToDeleteParent = findGroup(groups, groupToDelete.parent);\n\n if (groupToDeleteParent) {\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Removes the group entry and all its descendants from the contentStructure.\n state.contentStructure.sections[section].groups = groups.filter((candidate) => {\n return !toRemove.has(candidate.id);\n });\n },\n assignContentTypeToFolder: (\n state,\n action: PayloadAction<AssignContentTypeToFolderPayload>\n ) => {\n const { section, uid, targetGroupId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n removeContentTypeChild(groups, uid);\n\n if (targetGroupId) {\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n const entry = { type: 'contentType' as const, uid };\n\n if (typeof index === 'number' && index >= 0 && index <= targetGroup.children.length) {\n targetGroup.children.splice(index, 0, entry);\n } else {\n targetGroup.children.push(entry);\n }\n\n setGroupStatus(targetGroup, 'CHANGED');\n }\n }\n },\n reorderFolderChildren: (state, action: PayloadAction<ReorderFolderChildrenPayload>) => {\n const { section, groupId, from, to } = action.payload;\n\n const group = findGroup(state.contentStructure.sections[section].groups, groupId);\n if (!group) {\n return;\n }\n\n const child = group.children[from];\n if (!child) {\n return;\n }\n\n group.children.splice(from, 1);\n group.children.splice(to, 0, child);\n\n setGroupStatus(group, 'CHANGED');\n },\n\n applyChange(\n state,\n reducerAction: PayloadAction<{\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }>\n ) {\n const { action, schema } = reducerAction.payload;\n\n switch (action) {\n case 'add':\n {\n const uid = schema.uid;\n\n if (schema.modelType === 'component') {\n state.components[uid] = schema;\n } else {\n state.contentTypes[uid] = schema;\n }\n }\n break;\n case 'update':\n {\n const uid = schema.uid;\n\n // Find the schema, if the state was \"create\", we should keep it as it was before\n\n if (schema.modelType === 'component') {\n const component = state.components[uid];\n state.components[uid] = {\n ...schema,\n status: component?.status === 'NEW' ? 'NEW' : schema.status,\n };\n } else {\n const contentType = state.contentTypes[uid];\n const previousKind = contentType?.kind;\n\n state.contentTypes[uid] = {\n ...schema,\n status: contentType?.status === 'NEW' ? 'NEW' : schema.status,\n };\n\n if (previousKind && schema.kind && schema.kind !== previousKind) {\n const oldSection =\n state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n }\n }\n break;\n case 'delete': {\n const uid = schema.uid;\n const isComponent = schema.modelType === 'component';\n // It's a component that has yet not been added\n if (isComponent) {\n const exists = state.components[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.components[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.components[uid];\n } else {\n state.components[uid].status = 'REMOVED';\n }\n } else {\n const exists = state.contentTypes[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.contentTypes[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.contentTypes[uid];\n } else {\n state.contentTypes[uid].status = 'REMOVED';\n }\n\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n }\n\n break;\n }\n }\n },\n },\n },\n\n {\n limit: 50,\n excludeActionsFromHistory: ['reloadPlugin', 'init'],\n stateSelector: (state) => {\n if (!state) {\n return {};\n }\n\n return {\n components: state.components,\n contentTypes: state.contentTypes,\n contentStructure: state.contentStructure,\n };\n },\n discard: (state) => {\n state.components = state.initialComponents;\n state.contentTypes = state.initialContentTypes;\n state.contentStructure = state.initialContentStructure;\n },\n }\n);\n\nexport type State = ReturnType<typeof slice.reducer>;\nexport const { reducer, actions } = slice;\nexport { initialState };\n"],"names":["initialState","components","contentTypes","initialComponents","initialContentTypes","contentStructure","createEmptyContentStructure","initialContentStructure","reservedNames","models","attributes","isLoading","ONE_SIDE_RELATIONS","getOppositeRelation","originalRelation","findAttributeIndex","type","attributeToFind","findIndex","name","getType","state","forTarget","targetUid","setStatus","status","getNewStatus","oldStatus","newStatus","getNewGroupStatus","setAttributeStatus","attribute","createAttribute","properties","applyPrivateSearchDefault","setAttributeAt","index","previousAttribute","pushAttribute","push","removeAttributeAt","attr","splice","replaceAttributeAt","removeAttributeByName","idx","updateType","data","merge","findGroup","groups","id","find","group","setGroupStatus","removeContentTypeChild","uid","removed","groupIndex","children","child","applyFolderAssignment","section","folder","targetGroupId","existing","findSiblingFolderByName","newFolderName","trim","newFolderId","parent","targetGroup","isDescendantGroup","ancestorId","potentialDescendantId","current","getGroupDepth","depth","getSubtreeHeight","height","Math","max","applyDeleteContentType","startsWith","plugin","Object","values","sections","forEach","keys","componentUid","component","namesToRemove","filter","target","map","contentTypeUid","contentType","slice","createUndoRedoSlice","reducers","init","action","payload","structure","createComponentSchema","componentCategory","newSchema","category","modelName","displayName","globalId","info","icon","modelType","createSchema","singularName","pluralName","kind","draftAndPublish","pluginOptions","visible","restrictRelationsTo","options","sectionKeyForKind","addAttribute","attributeToSet","omit","targetAttribute","relation","relationType","getRelationType","isBidirectionalRelation","undefined","includes","oppositeAttribute","private","targetType","moveAttribute","from","to","addCustomFieldAttribute","addCreatedComponentToDynamicZone","dynamicZoneTarget","componentsToAdd","dzAttributeIndex","changeDynamicZoneComponents","newComponents","currentDZComponents","updatedComponents","makeUnique","editAttribute","initialAttributeIndex","previousTarget","newTarget","previousTargetAttributeIndex","previousTargetAttribute","newRelationType","isBidirectionnal","newTargetAttribute","conditions","editCustomFieldAttribute","initialAttributeName","reloadPlugin","removeComponentFromDynamicZone","dzName","componentToRemoveIndex","removeField","attributeToRemoveName","attributeToRemoveIndex","targetAttributeName","targetContentType","targetAttributeIndex","targetField","updateComponentSchema","updateComponentUid","newComponentUID","newType","updateSchema","previousKind","oldSection","deleteComponent","deleteContentType","createFolder","rawName","parentId","MAX_FOLDER_DEPTH","isFolderNameTakenBySibling","renameFolder","moveFolder","newParentId","newTopDepth","oldParent","newParent","entry","length","currentIndex","candidate","moved","rootIds","anchorId","insertAt","deleteFolderOnly","groupToDeleteId","groupToDelete","groupToDeleteParentId","getDeleteFolderOnlySiblingNameCollisions","childGroup","groupToDeleteParent","groupToDeleteIndex","deleteFolderAndContent","contentTypeUids","toRemove","Set","collect","currentGroupId","add","currentGroup","has","assignContentTypeToFolder","reorderFolderChildren","groupId","applyChange","reducerAction","schema","isComponent","exists","isUnsaved","limit","excludeActionsFromHistory","stateSelector","discard","reducer","actions"],"mappings":"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"}
@@ -4,6 +4,7 @@ var camelCase = require('lodash/camelCase');
4
4
  var omit = require('lodash/omit');
5
5
  var sortBy = require('lodash/sortBy');
6
6
  var pluginId = require('../../../pluginId.js');
7
+ var contentStructure = require('./contentStructure.js');
7
8
 
8
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
10
 
@@ -24,7 +25,7 @@ const sortContentType = (types)=>{
24
25
  status: types[uid].status
25
26
  })).filter((obj)=>obj !== null), (obj)=>camelCase__default.default(obj.title));
26
27
  };
27
- const stateToRequestData = ({ components, contentTypes })=>{
28
+ const stateToRequestData = ({ components, contentTypes, contentStructure: contentStructure$1 = contentStructure.createEmptyContentStructure(), initialContentStructure = contentStructure.createEmptyContentStructure() })=>{
28
29
  const trackingEventProperties = {
29
30
  newContentTypes: 0,
30
31
  editedContentTypes: 0,
@@ -66,10 +67,18 @@ const stateToRequestData = ({ components, contentTypes })=>{
66
67
  }, trackingEventProperties, 'contentType');
67
68
  return requestFormattedContentType;
68
69
  });
70
+ // Folder changes occur in the same operation as schema changes.
71
+ // Attach the draft structure only when a change has occurred, as the server-side
72
+ // ZOD schema for this payload specifies that the contentStructure property is optional.
73
+ const structureChanged = contentStructure.hasContentStructureChanged(contentStructure$1, initialContentStructure);
74
+ const contentStructureRequestPayload = structureChanged ? {
75
+ contentStructure: contentStructure.toServerFile(contentStructure$1)
76
+ } : undefined;
69
77
  return {
70
78
  requestData: {
71
79
  components: formattedComponents,
72
- contentTypes: formattedContentTypes
80
+ contentTypes: formattedContentTypes,
81
+ ...contentStructureRequestPayload
73
82
  },
74
83
  trackingEventProperties
75
84
  };
@@ -1 +1 @@
1
- {"version":3,"file":"cleanData.js","sources":["../../../../../admin/src/components/DataManager/utils/cleanData.ts"],"sourcesContent":["import camelCase from 'lodash/camelCase';\nimport omit from 'lodash/omit';\nimport sortBy from 'lodash/sortBy';\n\nimport { pluginId } from '../../../pluginId';\n\nimport type {\n Component,\n Components,\n ContentTypes,\n ContentType,\n AnyAttribute,\n} from '../../../types';\nimport type { UID } from '@strapi/types';\n\nconst sortContentType = (types: ContentTypes) => {\n return sortBy(\n Object.keys(types)\n .map((uid) => ({\n visible: types[uid].visible,\n name: uid as UID.ContentType,\n title: types[uid].info.displayName,\n plugin: types[uid].plugin,\n uid: uid as UID.ContentType,\n to: `/plugins/${pluginId}/content-types/${uid}`,\n kind: types[uid].kind,\n restrictRelationsTo: types[uid].restrictRelationsTo,\n status: types[uid].status,\n }))\n .filter((obj) => obj !== null),\n (obj) => camelCase(obj.title)\n );\n};\n\ntype TrackingEventProperties = {\n newContentTypes: number;\n editedContentTypes: number;\n deletedContentTypes: number;\n newComponents: number;\n editedComponents: number;\n deletedComponents: number;\n newFields: number;\n editedFields: number;\n deletedFields: number;\n};\n\nconst stateToRequestData = ({\n components,\n contentTypes,\n}: {\n components: Components;\n contentTypes: ContentTypes;\n}) => {\n const trackingEventProperties: TrackingEventProperties = {\n newContentTypes: 0,\n editedContentTypes: 0,\n deletedContentTypes: 0,\n newComponents: 0,\n editedComponents: 0,\n deletedComponents: 0,\n newFields: 0,\n editedFields: 0,\n deletedFields: 0,\n };\n\n const formattedComponents = Object.values(components)\n .filter((compo) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(compo.status);\n })\n .map((component) => {\n const requestFormattedComponent = formatTypeForRequest(component);\n\n const eventAction = requestFormattedComponent.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...component, action: eventAction },\n trackingEventProperties,\n 'component'\n );\n\n return requestFormattedComponent;\n });\n\n const formattedContentTypes = Object.values(contentTypes)\n .filter((contentType) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(contentType.status);\n })\n .map((contentType) => {\n const requestFormattedContentType = formatTypeForRequest(contentType);\n\n const eventAction = requestFormattedContentType.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...contentType, action: eventAction },\n trackingEventProperties,\n 'contentType'\n );\n\n return requestFormattedContentType;\n });\n\n return {\n requestData: {\n components: formattedComponents,\n contentTypes: formattedContentTypes,\n },\n trackingEventProperties,\n };\n};\n\nconst removeNullKeys = (obj: Record<string, unknown>) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length > 0;\n }\n return value !== null && value !== undefined;\n })\n );\n};\n\nconst formatAttribute = (attr: AnyAttribute) => {\n if ('customField' in attr) {\n return { ...attr, type: 'customField' };\n }\n\n if ('targetAttribute' in attr) {\n return {\n ...attr,\n targetAttribute: attr.targetAttribute === '-' ? null : attr.targetAttribute,\n // Explicitly preserve conditions for relations\n ...(attr.conditions && { conditions: attr.conditions }),\n };\n }\n\n return attr;\n};\n\nconst formatTypeForRequest = (type: ContentType | Component) => {\n let action;\n // should we do a diff with the initial data instead of trusting the state status ??\n switch (type.status) {\n case 'NEW':\n action = 'create';\n break;\n case 'CHANGED':\n action = 'update';\n break;\n case 'REMOVED':\n return { action: 'delete', uid: type.uid };\n default:\n throw new Error('Invalid status');\n }\n\n return {\n action,\n uid: type.uid,\n category: 'category' in type ? type.category : undefined,\n ...omit(type, ['info', 'options', 'visible', 'uid', 'restrictRelationsTo']),\n ...type.options,\n ...type.info,\n attributes: type.attributes.map((attr) => {\n let action;\n\n switch (attr.status) {\n // NOTE: we want to always send the full data to preserve the order\n\n case 'NEW':\n action = 'create';\n break;\n case 'REMOVED':\n return { action: 'delete', name: attr.name };\n case 'UNCHANGED':\n case 'CHANGED':\n default:\n action = 'update';\n }\n\n return {\n action,\n name: attr.name,\n properties: removeNullKeys(omit(formatAttribute(attr), ['status', 'name'])),\n };\n }),\n };\n};\n\nconst updateEventCounts = (\n type: (ContentType | Component) & { action?: 'create' | 'update' | 'delete' },\n counts: TrackingEventProperties,\n entityType: 'component' | 'contentType'\n) => {\n if (!type || typeof type.action !== 'string') {\n return;\n }\n\n const isContentType = entityType === 'contentType';\n\n switch (type.action) {\n case 'create':\n if (isContentType) {\n counts.newContentTypes++;\n } else {\n counts.newComponents++;\n }\n break;\n case 'update':\n if (isContentType) {\n counts.editedContentTypes++;\n } else {\n counts.editedComponents++;\n }\n break;\n case 'delete':\n if (isContentType) {\n counts.deletedContentTypes++;\n } else {\n counts.deletedComponents++;\n }\n break;\n default:\n break;\n }\n\n if (Array.isArray(type.attributes)) {\n if (type.action === 'delete') {\n counts.deletedFields += type.attributes.length;\n } else {\n type.attributes.forEach((attribute) => {\n if (!attribute || typeof attribute.status !== 'string') {\n return;\n }\n\n switch (attribute.status) {\n case 'NEW':\n counts.newFields++;\n break;\n case 'CHANGED':\n counts.editedFields++;\n break;\n case 'REMOVED':\n counts.deletedFields++;\n break;\n case 'UNCHANGED':\n default:\n break;\n }\n });\n }\n }\n};\n\nexport { stateToRequestData, sortContentType };\n"],"names":["sortContentType","types","sortBy","Object","keys","map","uid","visible","name","title","info","displayName","plugin","to","pluginId","kind","restrictRelationsTo","status","filter","obj","camelCase","stateToRequestData","components","contentTypes","trackingEventProperties","newContentTypes","editedContentTypes","deletedContentTypes","newComponents","editedComponents","deletedComponents","newFields","editedFields","deletedFields","formattedComponents","values","compo","includes","component","requestFormattedComponent","formatTypeForRequest","eventAction","action","updateEventCounts","formattedContentTypes","contentType","requestFormattedContentType","requestData","removeNullKeys","fromEntries","entries","_","value","Array","isArray","length","undefined","formatAttribute","attr","type","targetAttribute","conditions","Error","category","omit","options","attributes","properties","counts","entityType","isContentType","forEach","attribute"],"mappings":"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"}
1
+ {"version":3,"file":"cleanData.js","sources":["../../../../../admin/src/components/DataManager/utils/cleanData.ts"],"sourcesContent":["import camelCase from 'lodash/camelCase';\nimport omit from 'lodash/omit';\nimport sortBy from 'lodash/sortBy';\n\nimport { pluginId } from '../../../pluginId';\n\nimport {\n createEmptyContentStructure,\n hasContentStructureChanged,\n toServerFile,\n} from './contentStructure';\n\nimport type { ContentStructure } from './contentStructure';\nimport type {\n Component,\n Components,\n ContentTypes,\n ContentType,\n AnyAttribute,\n} from '../../../types';\nimport type { UID } from '@strapi/types';\n\nconst sortContentType = (types: ContentTypes) => {\n return sortBy(\n Object.keys(types)\n .map((uid) => ({\n visible: types[uid].visible,\n name: uid as UID.ContentType,\n title: types[uid].info.displayName,\n plugin: types[uid].plugin,\n uid: uid as UID.ContentType,\n to: `/plugins/${pluginId}/content-types/${uid}`,\n kind: types[uid].kind,\n restrictRelationsTo: types[uid].restrictRelationsTo,\n status: types[uid].status,\n }))\n .filter((obj) => obj !== null),\n (obj) => camelCase(obj.title)\n );\n};\n\ntype TrackingEventProperties = {\n newContentTypes: number;\n editedContentTypes: number;\n deletedContentTypes: number;\n newComponents: number;\n editedComponents: number;\n deletedComponents: number;\n newFields: number;\n editedFields: number;\n deletedFields: number;\n};\n\nconst stateToRequestData = ({\n components,\n contentTypes,\n contentStructure = createEmptyContentStructure(),\n initialContentStructure = createEmptyContentStructure(),\n}: {\n components: Components;\n contentTypes: ContentTypes;\n contentStructure?: ContentStructure;\n initialContentStructure?: ContentStructure;\n}) => {\n const trackingEventProperties: TrackingEventProperties = {\n newContentTypes: 0,\n editedContentTypes: 0,\n deletedContentTypes: 0,\n newComponents: 0,\n editedComponents: 0,\n deletedComponents: 0,\n newFields: 0,\n editedFields: 0,\n deletedFields: 0,\n };\n\n const formattedComponents = Object.values(components)\n .filter((compo) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(compo.status);\n })\n .map((component) => {\n const requestFormattedComponent = formatTypeForRequest(component);\n\n const eventAction = requestFormattedComponent.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...component, action: eventAction },\n trackingEventProperties,\n 'component'\n );\n\n return requestFormattedComponent;\n });\n\n const formattedContentTypes = Object.values(contentTypes)\n .filter((contentType) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(contentType.status);\n })\n .map((contentType) => {\n const requestFormattedContentType = formatTypeForRequest(contentType);\n\n const eventAction = requestFormattedContentType.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...contentType, action: eventAction },\n trackingEventProperties,\n 'contentType'\n );\n\n return requestFormattedContentType;\n });\n\n // Folder changes occur in the same operation as schema changes.\n // Attach the draft structure only when a change has occurred, as the server-side\n // ZOD schema for this payload specifies that the contentStructure property is optional.\n const structureChanged = hasContentStructureChanged(contentStructure, initialContentStructure);\n const contentStructureRequestPayload = structureChanged\n ? { contentStructure: toServerFile(contentStructure) }\n : undefined;\n\n return {\n requestData: {\n components: formattedComponents,\n contentTypes: formattedContentTypes,\n ...contentStructureRequestPayload,\n },\n trackingEventProperties,\n };\n};\n\nconst removeNullKeys = (obj: Record<string, unknown>) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length > 0;\n }\n return value !== null && value !== undefined;\n })\n );\n};\n\nconst formatAttribute = (attr: AnyAttribute) => {\n if ('customField' in attr) {\n return { ...attr, type: 'customField' };\n }\n\n if ('targetAttribute' in attr) {\n return {\n ...attr,\n targetAttribute: attr.targetAttribute === '-' ? null : attr.targetAttribute,\n // Explicitly preserve conditions for relations\n ...(attr.conditions && { conditions: attr.conditions }),\n };\n }\n\n return attr;\n};\n\nconst formatTypeForRequest = (type: ContentType | Component) => {\n let action;\n // should we do a diff with the initial data instead of trusting the state status ??\n switch (type.status) {\n case 'NEW':\n action = 'create';\n break;\n case 'CHANGED':\n action = 'update';\n break;\n case 'REMOVED':\n return { action: 'delete', uid: type.uid };\n default:\n throw new Error('Invalid status');\n }\n\n return {\n action,\n uid: type.uid,\n category: 'category' in type ? type.category : undefined,\n ...omit(type, ['info', 'options', 'visible', 'uid', 'restrictRelationsTo']),\n ...type.options,\n ...type.info,\n attributes: type.attributes.map((attr) => {\n let action;\n\n switch (attr.status) {\n // NOTE: we want to always send the full data to preserve the order\n\n case 'NEW':\n action = 'create';\n break;\n case 'REMOVED':\n return { action: 'delete', name: attr.name };\n case 'UNCHANGED':\n case 'CHANGED':\n default:\n action = 'update';\n }\n\n return {\n action,\n name: attr.name,\n properties: removeNullKeys(omit(formatAttribute(attr), ['status', 'name'])),\n };\n }),\n };\n};\n\nconst updateEventCounts = (\n type: (ContentType | Component) & { action?: 'create' | 'update' | 'delete' },\n counts: TrackingEventProperties,\n entityType: 'component' | 'contentType'\n) => {\n if (!type || typeof type.action !== 'string') {\n return;\n }\n\n const isContentType = entityType === 'contentType';\n\n switch (type.action) {\n case 'create':\n if (isContentType) {\n counts.newContentTypes++;\n } else {\n counts.newComponents++;\n }\n break;\n case 'update':\n if (isContentType) {\n counts.editedContentTypes++;\n } else {\n counts.editedComponents++;\n }\n break;\n case 'delete':\n if (isContentType) {\n counts.deletedContentTypes++;\n } else {\n counts.deletedComponents++;\n }\n break;\n default:\n break;\n }\n\n if (Array.isArray(type.attributes)) {\n if (type.action === 'delete') {\n counts.deletedFields += type.attributes.length;\n } else {\n type.attributes.forEach((attribute) => {\n if (!attribute || typeof attribute.status !== 'string') {\n return;\n }\n\n switch (attribute.status) {\n case 'NEW':\n counts.newFields++;\n break;\n case 'CHANGED':\n counts.editedFields++;\n break;\n case 'REMOVED':\n counts.deletedFields++;\n break;\n case 'UNCHANGED':\n default:\n break;\n }\n });\n }\n }\n};\n\nexport { stateToRequestData, sortContentType };\n"],"names":["sortContentType","types","sortBy","Object","keys","map","uid","visible","name","title","info","displayName","plugin","to","pluginId","kind","restrictRelationsTo","status","filter","obj","camelCase","stateToRequestData","components","contentTypes","contentStructure","createEmptyContentStructure","initialContentStructure","trackingEventProperties","newContentTypes","editedContentTypes","deletedContentTypes","newComponents","editedComponents","deletedComponents","newFields","editedFields","deletedFields","formattedComponents","values","compo","includes","component","requestFormattedComponent","formatTypeForRequest","eventAction","action","updateEventCounts","formattedContentTypes","contentType","requestFormattedContentType","structureChanged","hasContentStructureChanged","contentStructureRequestPayload","toServerFile","undefined","requestData","removeNullKeys","fromEntries","entries","_","value","Array","isArray","length","formatAttribute","attr","type","targetAttribute","conditions","Error","category","omit","options","attributes","properties","counts","entityType","isContentType","forEach","attribute"],"mappings":"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"}
@@ -2,6 +2,7 @@ import camelCase from 'lodash/camelCase';
2
2
  import omit from 'lodash/omit';
3
3
  import sortBy from 'lodash/sortBy';
4
4
  import { pluginId } from '../../../pluginId.mjs';
5
+ import { hasContentStructureChanged, toServerFile, createEmptyContentStructure } from './contentStructure.mjs';
5
6
 
6
7
  const sortContentType = (types)=>{
7
8
  return sortBy(Object.keys(types).map((uid)=>({
@@ -16,7 +17,7 @@ const sortContentType = (types)=>{
16
17
  status: types[uid].status
17
18
  })).filter((obj)=>obj !== null), (obj)=>camelCase(obj.title));
18
19
  };
19
- const stateToRequestData = ({ components, contentTypes })=>{
20
+ const stateToRequestData = ({ components, contentTypes, contentStructure = createEmptyContentStructure(), initialContentStructure = createEmptyContentStructure() })=>{
20
21
  const trackingEventProperties = {
21
22
  newContentTypes: 0,
22
23
  editedContentTypes: 0,
@@ -58,10 +59,18 @@ const stateToRequestData = ({ components, contentTypes })=>{
58
59
  }, trackingEventProperties, 'contentType');
59
60
  return requestFormattedContentType;
60
61
  });
62
+ // Folder changes occur in the same operation as schema changes.
63
+ // Attach the draft structure only when a change has occurred, as the server-side
64
+ // ZOD schema for this payload specifies that the contentStructure property is optional.
65
+ const structureChanged = hasContentStructureChanged(contentStructure, initialContentStructure);
66
+ const contentStructureRequestPayload = structureChanged ? {
67
+ contentStructure: toServerFile(contentStructure)
68
+ } : undefined;
61
69
  return {
62
70
  requestData: {
63
71
  components: formattedComponents,
64
- contentTypes: formattedContentTypes
72
+ contentTypes: formattedContentTypes,
73
+ ...contentStructureRequestPayload
65
74
  },
66
75
  trackingEventProperties
67
76
  };
@@ -1 +1 @@
1
- {"version":3,"file":"cleanData.mjs","sources":["../../../../../admin/src/components/DataManager/utils/cleanData.ts"],"sourcesContent":["import camelCase from 'lodash/camelCase';\nimport omit from 'lodash/omit';\nimport sortBy from 'lodash/sortBy';\n\nimport { pluginId } from '../../../pluginId';\n\nimport type {\n Component,\n Components,\n ContentTypes,\n ContentType,\n AnyAttribute,\n} from '../../../types';\nimport type { UID } from '@strapi/types';\n\nconst sortContentType = (types: ContentTypes) => {\n return sortBy(\n Object.keys(types)\n .map((uid) => ({\n visible: types[uid].visible,\n name: uid as UID.ContentType,\n title: types[uid].info.displayName,\n plugin: types[uid].plugin,\n uid: uid as UID.ContentType,\n to: `/plugins/${pluginId}/content-types/${uid}`,\n kind: types[uid].kind,\n restrictRelationsTo: types[uid].restrictRelationsTo,\n status: types[uid].status,\n }))\n .filter((obj) => obj !== null),\n (obj) => camelCase(obj.title)\n );\n};\n\ntype TrackingEventProperties = {\n newContentTypes: number;\n editedContentTypes: number;\n deletedContentTypes: number;\n newComponents: number;\n editedComponents: number;\n deletedComponents: number;\n newFields: number;\n editedFields: number;\n deletedFields: number;\n};\n\nconst stateToRequestData = ({\n components,\n contentTypes,\n}: {\n components: Components;\n contentTypes: ContentTypes;\n}) => {\n const trackingEventProperties: TrackingEventProperties = {\n newContentTypes: 0,\n editedContentTypes: 0,\n deletedContentTypes: 0,\n newComponents: 0,\n editedComponents: 0,\n deletedComponents: 0,\n newFields: 0,\n editedFields: 0,\n deletedFields: 0,\n };\n\n const formattedComponents = Object.values(components)\n .filter((compo) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(compo.status);\n })\n .map((component) => {\n const requestFormattedComponent = formatTypeForRequest(component);\n\n const eventAction = requestFormattedComponent.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...component, action: eventAction },\n trackingEventProperties,\n 'component'\n );\n\n return requestFormattedComponent;\n });\n\n const formattedContentTypes = Object.values(contentTypes)\n .filter((contentType) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(contentType.status);\n })\n .map((contentType) => {\n const requestFormattedContentType = formatTypeForRequest(contentType);\n\n const eventAction = requestFormattedContentType.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...contentType, action: eventAction },\n trackingEventProperties,\n 'contentType'\n );\n\n return requestFormattedContentType;\n });\n\n return {\n requestData: {\n components: formattedComponents,\n contentTypes: formattedContentTypes,\n },\n trackingEventProperties,\n };\n};\n\nconst removeNullKeys = (obj: Record<string, unknown>) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length > 0;\n }\n return value !== null && value !== undefined;\n })\n );\n};\n\nconst formatAttribute = (attr: AnyAttribute) => {\n if ('customField' in attr) {\n return { ...attr, type: 'customField' };\n }\n\n if ('targetAttribute' in attr) {\n return {\n ...attr,\n targetAttribute: attr.targetAttribute === '-' ? null : attr.targetAttribute,\n // Explicitly preserve conditions for relations\n ...(attr.conditions && { conditions: attr.conditions }),\n };\n }\n\n return attr;\n};\n\nconst formatTypeForRequest = (type: ContentType | Component) => {\n let action;\n // should we do a diff with the initial data instead of trusting the state status ??\n switch (type.status) {\n case 'NEW':\n action = 'create';\n break;\n case 'CHANGED':\n action = 'update';\n break;\n case 'REMOVED':\n return { action: 'delete', uid: type.uid };\n default:\n throw new Error('Invalid status');\n }\n\n return {\n action,\n uid: type.uid,\n category: 'category' in type ? type.category : undefined,\n ...omit(type, ['info', 'options', 'visible', 'uid', 'restrictRelationsTo']),\n ...type.options,\n ...type.info,\n attributes: type.attributes.map((attr) => {\n let action;\n\n switch (attr.status) {\n // NOTE: we want to always send the full data to preserve the order\n\n case 'NEW':\n action = 'create';\n break;\n case 'REMOVED':\n return { action: 'delete', name: attr.name };\n case 'UNCHANGED':\n case 'CHANGED':\n default:\n action = 'update';\n }\n\n return {\n action,\n name: attr.name,\n properties: removeNullKeys(omit(formatAttribute(attr), ['status', 'name'])),\n };\n }),\n };\n};\n\nconst updateEventCounts = (\n type: (ContentType | Component) & { action?: 'create' | 'update' | 'delete' },\n counts: TrackingEventProperties,\n entityType: 'component' | 'contentType'\n) => {\n if (!type || typeof type.action !== 'string') {\n return;\n }\n\n const isContentType = entityType === 'contentType';\n\n switch (type.action) {\n case 'create':\n if (isContentType) {\n counts.newContentTypes++;\n } else {\n counts.newComponents++;\n }\n break;\n case 'update':\n if (isContentType) {\n counts.editedContentTypes++;\n } else {\n counts.editedComponents++;\n }\n break;\n case 'delete':\n if (isContentType) {\n counts.deletedContentTypes++;\n } else {\n counts.deletedComponents++;\n }\n break;\n default:\n break;\n }\n\n if (Array.isArray(type.attributes)) {\n if (type.action === 'delete') {\n counts.deletedFields += type.attributes.length;\n } else {\n type.attributes.forEach((attribute) => {\n if (!attribute || typeof attribute.status !== 'string') {\n return;\n }\n\n switch (attribute.status) {\n case 'NEW':\n counts.newFields++;\n break;\n case 'CHANGED':\n counts.editedFields++;\n break;\n case 'REMOVED':\n counts.deletedFields++;\n break;\n case 'UNCHANGED':\n default:\n break;\n }\n });\n }\n }\n};\n\nexport { stateToRequestData, sortContentType };\n"],"names":["sortContentType","types","sortBy","Object","keys","map","uid","visible","name","title","info","displayName","plugin","to","pluginId","kind","restrictRelationsTo","status","filter","obj","camelCase","stateToRequestData","components","contentTypes","trackingEventProperties","newContentTypes","editedContentTypes","deletedContentTypes","newComponents","editedComponents","deletedComponents","newFields","editedFields","deletedFields","formattedComponents","values","compo","includes","component","requestFormattedComponent","formatTypeForRequest","eventAction","action","updateEventCounts","formattedContentTypes","contentType","requestFormattedContentType","requestData","removeNullKeys","fromEntries","entries","_","value","Array","isArray","length","undefined","formatAttribute","attr","type","targetAttribute","conditions","Error","category","omit","options","attributes","properties","counts","entityType","isContentType","forEach","attribute"],"mappings":";;;;;AAeA,MAAMA,kBAAkB,CAACC,KAAAA,GAAAA;IACvB,OAAOC,MAAAA,CACLC,OAAOC,IAAI,CAACH,OACTI,GAAG,CAAC,CAACC,GAAAA,IAAS;AACbC,YAAAA,OAAAA,EAASN,KAAK,CAACK,GAAAA,CAAI,CAACC,OAAO;YAC3BC,IAAAA,EAAMF,GAAAA;AACNG,YAAAA,KAAAA,EAAOR,KAAK,CAACK,GAAAA,CAAI,CAACI,IAAI,CAACC,WAAW;AAClCC,YAAAA,MAAAA,EAAQX,KAAK,CAACK,GAAAA,CAAI,CAACM,MAAM;YACzBN,GAAAA,EAAKA,GAAAA;AACLO,YAAAA,EAAAA,EAAI,CAAC,SAAS,EAAEC,QAAAA,CAAS,eAAe,EAAER,GAAAA,CAAAA,CAAK;AAC/CS,YAAAA,IAAAA,EAAMd,KAAK,CAACK,GAAAA,CAAI,CAACS,IAAI;AACrBC,YAAAA,mBAAAA,EAAqBf,KAAK,CAACK,GAAAA,CAAI,CAACU,mBAAmB;AACnDC,YAAAA,MAAAA,EAAQhB,KAAK,CAACK,GAAAA,CAAI,CAACW;SACrB,CAAA,CAAA,CACCC,MAAM,CAAC,CAACC,GAAAA,GAAQA,GAAAA,KAAQ,IAAA,CAAA,EAC3B,CAACA,GAAAA,GAAQC,SAAAA,CAAUD,GAAAA,CAAIV,KAAK,CAAA,CAAA;AAEhC;AAcA,MAAMY,qBAAqB,CAAC,EAC1BC,UAAU,EACVC,YAAY,EAIb,GAAA;AACC,IAAA,MAAMC,uBAAAA,GAAmD;QACvDC,eAAAA,EAAiB,CAAA;QACjBC,kBAAAA,EAAoB,CAAA;QACpBC,mBAAAA,EAAqB,CAAA;QACrBC,aAAAA,EAAe,CAAA;QACfC,gBAAAA,EAAkB,CAAA;QAClBC,iBAAAA,EAAmB,CAAA;QACnBC,SAAAA,EAAW,CAAA;QACXC,YAAAA,EAAc,CAAA;QACdC,aAAAA,EAAe;AACjB,KAAA;AAEA,IAAA,MAAMC,sBAAsB/B,MAAAA,CAAOgC,MAAM,CAACb,UAAAA,CAAAA,CACvCJ,MAAM,CAAC,CAACkB,KAAAA,GAAAA;QACP,OAAO;AAAC,YAAA,KAAA;AAAO,YAAA,SAAA;AAAW,YAAA;SAAU,CAACC,QAAQ,CAACD,KAAAA,CAAMnB,MAAM,CAAA;IAC5D,CAAA,CAAA,CACCZ,GAAG,CAAC,CAACiC,SAAAA,GAAAA;AACJ,QAAA,MAAMC,4BAA4BC,oBAAAA,CAAqBF,SAAAA,CAAAA;QAEvD,MAAMG,WAAAA,GAAcF,0BAA0BG,MAAM;QACpDC,iBAAAA,CACE;AAAE,YAAA,GAAGL,SAAS;YAAEI,MAAAA,EAAQD;AAAY,SAAA,EACpCjB,uBAAAA,EACA,WAAA,CAAA;QAGF,OAAOe,yBAAAA;AACT,IAAA,CAAA,CAAA;AAEF,IAAA,MAAMK,wBAAwBzC,MAAAA,CAAOgC,MAAM,CAACZ,YAAAA,CAAAA,CACzCL,MAAM,CAAC,CAAC2B,WAAAA,GAAAA;QACP,OAAO;AAAC,YAAA,KAAA;AAAO,YAAA,SAAA;AAAW,YAAA;SAAU,CAACR,QAAQ,CAACQ,WAAAA,CAAY5B,MAAM,CAAA;IAClE,CAAA,CAAA,CACCZ,GAAG,CAAC,CAACwC,WAAAA,GAAAA;AACJ,QAAA,MAAMC,8BAA8BN,oBAAAA,CAAqBK,WAAAA,CAAAA;QAEzD,MAAMJ,WAAAA,GAAcK,4BAA4BJ,MAAM;QACtDC,iBAAAA,CACE;AAAE,YAAA,GAAGE,WAAW;YAAEH,MAAAA,EAAQD;AAAY,SAAA,EACtCjB,uBAAAA,EACA,aAAA,CAAA;QAGF,OAAOsB,2BAAAA;AACT,IAAA,CAAA,CAAA;IAEF,OAAO;QACLC,WAAAA,EAAa;YACXzB,UAAAA,EAAYY,mBAAAA;YACZX,YAAAA,EAAcqB;AAChB,SAAA;AACApB,QAAAA;AACF,KAAA;AACF;AAEA,MAAMwB,iBAAiB,CAAC7B,GAAAA,GAAAA;AACtB,IAAA,OAAOhB,MAAAA,CAAO8C,WAAW,CACvB9C,MAAAA,CAAO+C,OAAO,CAAC/B,GAAAA,CAAAA,CAAKD,MAAM,CAAC,CAAC,CAACiC,CAAAA,EAAGC,KAAAA,CAAM,GAAA;QACpC,IAAIC,KAAAA,CAAMC,OAAO,CAACF,KAAAA,CAAAA,EAAQ;YACxB,OAAOA,KAAAA,CAAMG,MAAM,GAAG,CAAA;AACxB,QAAA;AACA,QAAA,IAAI,OAAOH,KAAAA,KAAU,QAAA,IAAYA,KAAAA,KAAU,IAAA,EAAM;AAC/C,YAAA,OAAOjD,MAAAA,CAAOC,IAAI,CAACgD,KAAAA,CAAAA,CAAOG,MAAM,GAAG,CAAA;AACrC,QAAA;QACA,OAAOH,KAAAA,KAAU,QAAQA,KAAAA,KAAUI,SAAAA;AACrC,IAAA,CAAA,CAAA,CAAA;AAEJ,CAAA;AAEA,MAAMC,kBAAkB,CAACC,IAAAA,GAAAA;AACvB,IAAA,IAAI,iBAAiBA,IAAAA,EAAM;QACzB,OAAO;AAAE,YAAA,GAAGA,IAAI;YAAEC,IAAAA,EAAM;AAAc,SAAA;AACxC,IAAA;AAEA,IAAA,IAAI,qBAAqBD,IAAAA,EAAM;QAC7B,OAAO;AACL,YAAA,GAAGA,IAAI;AACPE,YAAAA,eAAAA,EAAiBF,KAAKE,eAAe,KAAK,GAAA,GAAM,IAAA,GAAOF,KAAKE,eAAe;;YAE3E,GAAIF,IAAAA,CAAKG,UAAU,IAAI;AAAEA,gBAAAA,UAAAA,EAAYH,KAAKG;;AAC5C,SAAA;AACF,IAAA;IAEA,OAAOH,IAAAA;AACT,CAAA;AAEA,MAAMlB,uBAAuB,CAACmB,IAAAA,GAAAA;IAC5B,IAAIjB,MAAAA;;AAEJ,IAAA,OAAQiB,KAAK1C,MAAM;QACjB,KAAK,KAAA;YACHyB,MAAAA,GAAS,QAAA;AACT,YAAA;QACF,KAAK,SAAA;YACHA,MAAAA,GAAS,QAAA;AACT,YAAA;QACF,KAAK,SAAA;YACH,OAAO;gBAAEA,MAAAA,EAAQ,QAAA;AAAUpC,gBAAAA,GAAAA,EAAKqD,KAAKrD;AAAI,aAAA;AAC3C,QAAA;AACE,YAAA,MAAM,IAAIwD,KAAAA,CAAM,gBAAA,CAAA;AACpB;IAEA,OAAO;AACLpB,QAAAA,MAAAA;AACApC,QAAAA,GAAAA,EAAKqD,KAAKrD,GAAG;AACbyD,QAAAA,QAAAA,EAAU,UAAA,IAAcJ,IAAAA,GAAOA,IAAAA,CAAKI,QAAQ,GAAGP,SAAAA;AAC/C,QAAA,GAAGQ,KAAKL,IAAAA,EAAM;AAAC,YAAA,MAAA;AAAQ,YAAA,SAAA;AAAW,YAAA,SAAA;AAAW,YAAA,KAAA;AAAO,YAAA;SAAsB,CAAC;AAC3E,QAAA,GAAGA,KAAKM,OAAO;AACf,QAAA,GAAGN,KAAKjD,IAAI;AACZwD,QAAAA,UAAAA,EAAYP,IAAAA,CAAKO,UAAU,CAAC7D,GAAG,CAAC,CAACqD,IAAAA,GAAAA;YAC/B,IAAIhB,MAAAA;AAEJ,YAAA,OAAQgB,KAAKzC,MAAM;;gBAGjB,KAAK,KAAA;oBACHyB,MAAAA,GAAS,QAAA;AACT,oBAAA;gBACF,KAAK,SAAA;oBACH,OAAO;wBAAEA,MAAAA,EAAQ,QAAA;AAAUlC,wBAAAA,IAAAA,EAAMkD,KAAKlD;AAAK,qBAAA;gBAC7C,KAAK,WAAA;gBACL,KAAK,SAAA;AACL,gBAAA;oBACEkC,MAAAA,GAAS,QAAA;AACb;YAEA,OAAO;AACLA,gBAAAA,MAAAA;AACAlC,gBAAAA,IAAAA,EAAMkD,KAAKlD,IAAI;gBACf2D,UAAAA,EAAYnB,cAAAA,CAAegB,IAAAA,CAAKP,eAAAA,CAAgBC,IAAAA,CAAAA,EAAO;AAAC,oBAAA,QAAA;AAAU,oBAAA;AAAO,iBAAA,CAAA;AAC3E,aAAA;AACF,QAAA,CAAA;AACF,KAAA;AACF,CAAA;AAEA,MAAMf,iBAAAA,GAAoB,CACxBgB,IAAAA,EACAS,MAAAA,EACAC,UAAAA,GAAAA;AAEA,IAAA,IAAI,CAACV,IAAAA,IAAQ,OAAOA,IAAAA,CAAKjB,MAAM,KAAK,QAAA,EAAU;AAC5C,QAAA;AACF,IAAA;AAEA,IAAA,MAAM4B,gBAAgBD,UAAAA,KAAe,aAAA;AAErC,IAAA,OAAQV,KAAKjB,MAAM;QACjB,KAAK,QAAA;AACH,YAAA,IAAI4B,aAAAA,EAAe;AACjBF,gBAAAA,MAAAA,CAAO3C,eAAe,EAAA;YACxB,CAAA,MAAO;AACL2C,gBAAAA,MAAAA,CAAOxC,aAAa,EAAA;AACtB,YAAA;AACA,YAAA;QACF,KAAK,QAAA;AACH,YAAA,IAAI0C,aAAAA,EAAe;AACjBF,gBAAAA,MAAAA,CAAO1C,kBAAkB,EAAA;YAC3B,CAAA,MAAO;AACL0C,gBAAAA,MAAAA,CAAOvC,gBAAgB,EAAA;AACzB,YAAA;AACA,YAAA;QACF,KAAK,QAAA;AACH,YAAA,IAAIyC,aAAAA,EAAe;AACjBF,gBAAAA,MAAAA,CAAOzC,mBAAmB,EAAA;YAC5B,CAAA,MAAO;AACLyC,gBAAAA,MAAAA,CAAOtC,iBAAiB,EAAA;AAC1B,YAAA;AACA,YAAA;AAGJ;AAEA,IAAA,IAAIuB,KAAAA,CAAMC,OAAO,CAACK,IAAAA,CAAKO,UAAU,CAAA,EAAG;QAClC,IAAIP,IAAAA,CAAKjB,MAAM,KAAK,QAAA,EAAU;AAC5B0B,YAAAA,MAAAA,CAAOnC,aAAa,IAAI0B,IAAAA,CAAKO,UAAU,CAACX,MAAM;QAChD,CAAA,MAAO;AACLI,YAAAA,IAAAA,CAAKO,UAAU,CAACK,OAAO,CAAC,CAACC,SAAAA,GAAAA;AACvB,gBAAA,IAAI,CAACA,SAAAA,IAAa,OAAOA,SAAAA,CAAUvD,MAAM,KAAK,QAAA,EAAU;AACtD,oBAAA;AACF,gBAAA;AAEA,gBAAA,OAAQuD,UAAUvD,MAAM;oBACtB,KAAK,KAAA;AACHmD,wBAAAA,MAAAA,CAAOrC,SAAS,EAAA;AAChB,wBAAA;oBACF,KAAK,SAAA;AACHqC,wBAAAA,MAAAA,CAAOpC,YAAY,EAAA;AACnB,wBAAA;oBACF,KAAK,SAAA;AACHoC,wBAAAA,MAAAA,CAAOnC,aAAa,EAAA;AACpB,wBAAA;AAIJ;AACF,YAAA,CAAA,CAAA;AACF,QAAA;AACF,IAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"cleanData.mjs","sources":["../../../../../admin/src/components/DataManager/utils/cleanData.ts"],"sourcesContent":["import camelCase from 'lodash/camelCase';\nimport omit from 'lodash/omit';\nimport sortBy from 'lodash/sortBy';\n\nimport { pluginId } from '../../../pluginId';\n\nimport {\n createEmptyContentStructure,\n hasContentStructureChanged,\n toServerFile,\n} from './contentStructure';\n\nimport type { ContentStructure } from './contentStructure';\nimport type {\n Component,\n Components,\n ContentTypes,\n ContentType,\n AnyAttribute,\n} from '../../../types';\nimport type { UID } from '@strapi/types';\n\nconst sortContentType = (types: ContentTypes) => {\n return sortBy(\n Object.keys(types)\n .map((uid) => ({\n visible: types[uid].visible,\n name: uid as UID.ContentType,\n title: types[uid].info.displayName,\n plugin: types[uid].plugin,\n uid: uid as UID.ContentType,\n to: `/plugins/${pluginId}/content-types/${uid}`,\n kind: types[uid].kind,\n restrictRelationsTo: types[uid].restrictRelationsTo,\n status: types[uid].status,\n }))\n .filter((obj) => obj !== null),\n (obj) => camelCase(obj.title)\n );\n};\n\ntype TrackingEventProperties = {\n newContentTypes: number;\n editedContentTypes: number;\n deletedContentTypes: number;\n newComponents: number;\n editedComponents: number;\n deletedComponents: number;\n newFields: number;\n editedFields: number;\n deletedFields: number;\n};\n\nconst stateToRequestData = ({\n components,\n contentTypes,\n contentStructure = createEmptyContentStructure(),\n initialContentStructure = createEmptyContentStructure(),\n}: {\n components: Components;\n contentTypes: ContentTypes;\n contentStructure?: ContentStructure;\n initialContentStructure?: ContentStructure;\n}) => {\n const trackingEventProperties: TrackingEventProperties = {\n newContentTypes: 0,\n editedContentTypes: 0,\n deletedContentTypes: 0,\n newComponents: 0,\n editedComponents: 0,\n deletedComponents: 0,\n newFields: 0,\n editedFields: 0,\n deletedFields: 0,\n };\n\n const formattedComponents = Object.values(components)\n .filter((compo) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(compo.status);\n })\n .map((component) => {\n const requestFormattedComponent = formatTypeForRequest(component);\n\n const eventAction = requestFormattedComponent.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...component, action: eventAction },\n trackingEventProperties,\n 'component'\n );\n\n return requestFormattedComponent;\n });\n\n const formattedContentTypes = Object.values(contentTypes)\n .filter((contentType) => {\n return ['NEW', 'CHANGED', 'REMOVED'].includes(contentType.status);\n })\n .map((contentType) => {\n const requestFormattedContentType = formatTypeForRequest(contentType);\n\n const eventAction = requestFormattedContentType.action as 'create' | 'update' | 'delete';\n updateEventCounts(\n { ...contentType, action: eventAction },\n trackingEventProperties,\n 'contentType'\n );\n\n return requestFormattedContentType;\n });\n\n // Folder changes occur in the same operation as schema changes.\n // Attach the draft structure only when a change has occurred, as the server-side\n // ZOD schema for this payload specifies that the contentStructure property is optional.\n const structureChanged = hasContentStructureChanged(contentStructure, initialContentStructure);\n const contentStructureRequestPayload = structureChanged\n ? { contentStructure: toServerFile(contentStructure) }\n : undefined;\n\n return {\n requestData: {\n components: formattedComponents,\n contentTypes: formattedContentTypes,\n ...contentStructureRequestPayload,\n },\n trackingEventProperties,\n };\n};\n\nconst removeNullKeys = (obj: Record<string, unknown>) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length > 0;\n }\n return value !== null && value !== undefined;\n })\n );\n};\n\nconst formatAttribute = (attr: AnyAttribute) => {\n if ('customField' in attr) {\n return { ...attr, type: 'customField' };\n }\n\n if ('targetAttribute' in attr) {\n return {\n ...attr,\n targetAttribute: attr.targetAttribute === '-' ? null : attr.targetAttribute,\n // Explicitly preserve conditions for relations\n ...(attr.conditions && { conditions: attr.conditions }),\n };\n }\n\n return attr;\n};\n\nconst formatTypeForRequest = (type: ContentType | Component) => {\n let action;\n // should we do a diff with the initial data instead of trusting the state status ??\n switch (type.status) {\n case 'NEW':\n action = 'create';\n break;\n case 'CHANGED':\n action = 'update';\n break;\n case 'REMOVED':\n return { action: 'delete', uid: type.uid };\n default:\n throw new Error('Invalid status');\n }\n\n return {\n action,\n uid: type.uid,\n category: 'category' in type ? type.category : undefined,\n ...omit(type, ['info', 'options', 'visible', 'uid', 'restrictRelationsTo']),\n ...type.options,\n ...type.info,\n attributes: type.attributes.map((attr) => {\n let action;\n\n switch (attr.status) {\n // NOTE: we want to always send the full data to preserve the order\n\n case 'NEW':\n action = 'create';\n break;\n case 'REMOVED':\n return { action: 'delete', name: attr.name };\n case 'UNCHANGED':\n case 'CHANGED':\n default:\n action = 'update';\n }\n\n return {\n action,\n name: attr.name,\n properties: removeNullKeys(omit(formatAttribute(attr), ['status', 'name'])),\n };\n }),\n };\n};\n\nconst updateEventCounts = (\n type: (ContentType | Component) & { action?: 'create' | 'update' | 'delete' },\n counts: TrackingEventProperties,\n entityType: 'component' | 'contentType'\n) => {\n if (!type || typeof type.action !== 'string') {\n return;\n }\n\n const isContentType = entityType === 'contentType';\n\n switch (type.action) {\n case 'create':\n if (isContentType) {\n counts.newContentTypes++;\n } else {\n counts.newComponents++;\n }\n break;\n case 'update':\n if (isContentType) {\n counts.editedContentTypes++;\n } else {\n counts.editedComponents++;\n }\n break;\n case 'delete':\n if (isContentType) {\n counts.deletedContentTypes++;\n } else {\n counts.deletedComponents++;\n }\n break;\n default:\n break;\n }\n\n if (Array.isArray(type.attributes)) {\n if (type.action === 'delete') {\n counts.deletedFields += type.attributes.length;\n } else {\n type.attributes.forEach((attribute) => {\n if (!attribute || typeof attribute.status !== 'string') {\n return;\n }\n\n switch (attribute.status) {\n case 'NEW':\n counts.newFields++;\n break;\n case 'CHANGED':\n counts.editedFields++;\n break;\n case 'REMOVED':\n counts.deletedFields++;\n break;\n case 'UNCHANGED':\n default:\n break;\n }\n });\n }\n }\n};\n\nexport { stateToRequestData, sortContentType };\n"],"names":["sortContentType","types","sortBy","Object","keys","map","uid","visible","name","title","info","displayName","plugin","to","pluginId","kind","restrictRelationsTo","status","filter","obj","camelCase","stateToRequestData","components","contentTypes","contentStructure","createEmptyContentStructure","initialContentStructure","trackingEventProperties","newContentTypes","editedContentTypes","deletedContentTypes","newComponents","editedComponents","deletedComponents","newFields","editedFields","deletedFields","formattedComponents","values","compo","includes","component","requestFormattedComponent","formatTypeForRequest","eventAction","action","updateEventCounts","formattedContentTypes","contentType","requestFormattedContentType","structureChanged","hasContentStructureChanged","contentStructureRequestPayload","toServerFile","undefined","requestData","removeNullKeys","fromEntries","entries","_","value","Array","isArray","length","formatAttribute","attr","type","targetAttribute","conditions","Error","category","omit","options","attributes","properties","counts","entityType","isContentType","forEach","attribute"],"mappings":"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"}