@strapi/content-type-builder 5.57.0 → 5.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/admin/components/DataManager/reducer.js +22 -0
  2. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  3. package/dist/admin/components/DataManager/reducer.mjs +22 -0
  4. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  5. package/dist/admin/components/FormModal/FormModal.js +36 -62
  6. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  7. package/dist/admin/components/FormModal/FormModal.mjs +36 -62
  8. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  9. package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +8 -8
  10. package/dist/admin/translations/cs.json.js +0 -2
  11. package/dist/admin/translations/cs.json.js.map +1 -1
  12. package/dist/admin/translations/cs.json.mjs +0 -2
  13. package/dist/admin/translations/cs.json.mjs.map +1 -1
  14. package/dist/admin/translations/de.json.js +0 -2
  15. package/dist/admin/translations/de.json.js.map +1 -1
  16. package/dist/admin/translations/de.json.mjs +0 -2
  17. package/dist/admin/translations/de.json.mjs.map +1 -1
  18. package/dist/admin/translations/en.json.js +0 -2
  19. package/dist/admin/translations/en.json.js.map +1 -1
  20. package/dist/admin/translations/en.json.mjs +0 -2
  21. package/dist/admin/translations/en.json.mjs.map +1 -1
  22. package/dist/admin/translations/ja.json.js +0 -2
  23. package/dist/admin/translations/ja.json.js.map +1 -1
  24. package/dist/admin/translations/ja.json.mjs +0 -2
  25. package/dist/admin/translations/ja.json.mjs.map +1 -1
  26. package/dist/admin/translations/ko.json.js +0 -2
  27. package/dist/admin/translations/ko.json.js.map +1 -1
  28. package/dist/admin/translations/ko.json.mjs +0 -2
  29. package/dist/admin/translations/ko.json.mjs.map +1 -1
  30. package/dist/admin/translations/nl.json.js +0 -2
  31. package/dist/admin/translations/nl.json.js.map +1 -1
  32. package/dist/admin/translations/nl.json.mjs +0 -2
  33. package/dist/admin/translations/nl.json.mjs.map +1 -1
  34. package/dist/admin/translations/pl.json.js +0 -2
  35. package/dist/admin/translations/pl.json.js.map +1 -1
  36. package/dist/admin/translations/pl.json.mjs +0 -2
  37. package/dist/admin/translations/pl.json.mjs.map +1 -1
  38. package/dist/admin/translations/ru.json.js +0 -2
  39. package/dist/admin/translations/ru.json.js.map +1 -1
  40. package/dist/admin/translations/ru.json.mjs +0 -2
  41. package/dist/admin/translations/ru.json.mjs.map +1 -1
  42. package/dist/admin/translations/sk.json.js +0 -2
  43. package/dist/admin/translations/sk.json.js.map +1 -1
  44. package/dist/admin/translations/sk.json.mjs +0 -2
  45. package/dist/admin/translations/sk.json.mjs.map +1 -1
  46. package/dist/server/services/schema.js +53 -0
  47. package/dist/server/services/schema.js.map +1 -1
  48. package/dist/server/services/schema.mjs +53 -0
  49. package/dist/server/services/schema.mjs.map +1 -1
  50. package/dist/server/src/services/schema.d.ts.map +1 -1
  51. package/package.json +6 -6
@@ -4,6 +4,7 @@ var merge = require('lodash/merge');
4
4
  var omit = require('lodash/omit');
5
5
  var uniq = require('lodash/uniq');
6
6
  var applyPrivateSearchDefault = require('../../utils/applyPrivateSearchDefault.js');
7
+ var conditions = require('../../utils/conditions.js');
7
8
  var getRelationType = require('../../utils/getRelationType.js');
8
9
  var makeUnique = require('../../utils/makeUnique.js');
9
10
  var undoRedo = require('./undoRedo.js');
@@ -142,6 +143,25 @@ const createAttribute = (properties)=>{
142
143
  recordRename(type, previousAttribute, newAttribute);
143
144
  }
144
145
  };
146
+ /**
147
+ * Points the conditions of the type's other fields at the new name of a renamed
148
+ * field. Runs for every rename, recorded or not, so the conditions follow the
149
+ * field whether or not its data is preserved.
150
+ */ const renameConditionVars = (type, previousAttribute, newAttribute)=>{
151
+ const oldName = previousAttribute.name;
152
+ const newName = newAttribute?.name;
153
+ if (!newName || oldName === newName) {
154
+ return;
155
+ }
156
+ type.attributes.forEach((attribute)=>{
157
+ conditions.getVisibleConditionEntries(attribute.conditions).forEach(({ fieldVar })=>{
158
+ if (fieldVar.var === oldName) {
159
+ fieldVar.var = newName;
160
+ setAttributeStatus(attribute, 'CHANGED');
161
+ }
162
+ });
163
+ });
164
+ };
145
165
  const setAttributeAt = (type, index, attribute)=>{
146
166
  const previousAttribute = type.attributes[index];
147
167
  const newStatus = getNewStatus(previousAttribute.status, 'CHANGED');
@@ -508,6 +528,7 @@ const slice = undoRedo.createUndoRedoSlice({
508
528
  recordRename,
509
529
  declineRename
510
530
  });
531
+ renameConditionVars(type, previousAttribute, attributeToSet);
511
532
  setAttributeAt(type, initialAttributeIndex, attributeToSet);
512
533
  if (previousAttribute.type !== attributeToSet.type) {
513
534
  return;
@@ -579,6 +600,7 @@ const slice = undoRedo.createUndoRedoSlice({
579
600
  recordRename,
580
601
  declineRename
581
602
  });
603
+ renameConditionVars(type, previousAttribute, attributeToSet);
582
604
  },
583
605
  reloadPlugin: ()=>{
584
606
  return initialState;
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.js","sources":["../../../../admin/src/components/DataManager/reducer.ts"],"sourcesContent":["import { PayloadAction } from '@reduxjs/toolkit';\nimport merge from 'lodash/merge';\nimport omit from 'lodash/omit';\nimport uniq from 'lodash/uniq';\n\nimport { applyPrivateSearchDefault } from '../../utils/applyPrivateSearchDefault';\nimport { getRelationType } from '../../utils/getRelationType';\nimport { makeUnique } from '../../utils/makeUnique';\n\nimport { createUndoRedoSlice } from './undoRedo';\nimport {\n createEmptyContentStructure,\n findSiblingFolderByName,\n getDeleteFolderOnlySiblingNameCollisions,\n isFolderNameTakenBySibling,\n MAX_FOLDER_DEPTH,\n sectionKeyForKind,\n} from './utils/contentStructure';\nimport { isStorageCompatibleRename } from './utils/isStorageCompatibleRename';\n\nimport type {\n Components,\n ContentTypes,\n ContentType,\n Component,\n Status,\n AnyAttribute,\n} from '../../types';\nimport type {\n ContentStructure,\n ContentStructureGroup,\n ContentStructureSection,\n GroupStatus,\n SectionKey,\n} from './utils/contentStructure';\nimport type { Internal, Schema, Struct, UID } from '@strapi/types';\n\nexport interface DataManagerStateType {\n components: Components;\n initialComponents: Components;\n contentTypes: ContentTypes;\n initialContentTypes: ContentTypes;\n contentStructure: ContentStructure;\n initialContentStructure: ContentStructure;\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n isLoading: boolean;\n [key: string]: unknown;\n}\n\nconst initialState: DataManagerStateType = {\n components: {},\n contentTypes: {},\n initialComponents: {},\n initialContentTypes: {},\n contentStructure: createEmptyContentStructure(),\n initialContentStructure: createEmptyContentStructure(),\n reservedNames: {\n models: [],\n attributes: [],\n },\n isLoading: true,\n};\n\nconst ONE_SIDE_RELATIONS = ['oneWay', 'manyWay'];\n\ntype AttributeMutation = AnyAttribute & {\n createComponent?: unknown;\n};\n\ntype PluginOptions = Record<string, unknown>;\n\nconst getOppositeRelation = (originalRelation?: Schema.Attribute.RelationKind.Any) => {\n if (originalRelation === 'manyToOne') {\n return 'oneToMany';\n }\n\n if (originalRelation === 'oneToMany') {\n return 'manyToOne';\n }\n\n return originalRelation;\n};\n\nconst findAttributeIndex = (type: ContentType | Component, attributeToFind?: string) => {\n return type.attributes.findIndex(({ name }: { name: string }) => name === attributeToFind);\n};\n\ntype InitPayload = {\n components: Record<string, Component>;\n contentTypes: Record<string, ContentType>;\n reservedNames: DataManagerStateType['reservedNames'];\n contentStructure?: ContentStructure;\n};\n\ntype CreateFolderPayload = {\n parentId: string | null;\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype RenameFolderPayload = {\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype MoveFolderPayload = {\n newParentId: string | null;\n section: SectionKey;\n index?: number;\n id: string;\n};\n\ntype DeleteFolderPayload = {\n section: SectionKey;\n id: string;\n};\n\ntype DeleteFolderAndContentPayload = DeleteFolderPayload & {\n contentTypeUids: Internal.UID.ContentType[];\n};\n\ntype AssignContentTypeToFolderPayload = {\n targetGroupId: string | null;\n uid: UID.ContentType;\n section: SectionKey;\n index?: number;\n};\n\ntype ReorderFolderChildrenPayload = {\n section: SectionKey;\n groupId: string;\n from: number;\n to: number;\n};\n\ntype AddAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype AddCreateComponentToDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dynamicZoneTarget: string;\n componentsToAdd: Internal.UID.Component[];\n};\n\ntype AddCustomFieldAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype ChangeDynamicZoneComponentsPayload = {\n dynamicZoneTarget: string;\n newComponents: Internal.UID.Component[];\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype CreateComponentSchemaPayload = {\n uid: string;\n data: {\n icon?: string;\n displayName: string;\n };\n componentCategory: string;\n};\n\ntype FolderAssignmentPayload =\n | { targetGroupId: string | null }\n | { newFolderId: string; newFolderName: string };\n\ntype CreateSchemaPayload = {\n uid: string;\n data: {\n displayName: string;\n singularName: string;\n pluralName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n folder?: FolderAssignmentPayload;\n};\n\ntype RenameConsentPayload = {\n /** Record the hop so the server preserves data (default). */\n recordRename?: boolean;\n /**\n * The user declined to preserve data for this hop: remember both names so\n * later hops of the same chain are declined without another prompt.\n */\n declineRename?: boolean;\n /**\n * Same pair for the other side of a bidirectional relation, when the edit\n * renames it on the target type.\n */\n recordTargetRename?: boolean;\n declineTargetRename?: boolean;\n};\n\ntype EditAttributePayload = RenameConsentPayload & {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype EditCustomFieldAttributePayload = RenameConsentPayload & {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype RemoveComponentFromDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dzName: string;\n componentToRemoveIndex: number;\n};\n\ntype RemoveFieldPayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n attributeToRemoveName: string;\n};\n\ntype UpdateComponentSchemaPayload = {\n data: {\n icon?: string;\n displayName: string;\n };\n uid: Internal.UID.Component;\n};\n\ntype UpdateComponentUIDPayload = {\n uid: Internal.UID.Component;\n newComponentUID: Internal.UID.Component;\n};\n\ntype UpdateSchemaPayload = {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n uid: string;\n folder?: FolderAssignmentPayload;\n};\n\ntype MoveAttributePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n from: number;\n to: number;\n};\n\nconst getType = (\n state: DataManagerStateType,\n {\n forTarget,\n targetUid,\n }: {\n forTarget: Struct.ModelType;\n targetUid: string;\n }\n) => {\n return forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n};\n\n// TODO: use initial state when chnaging back to the initial state without knowing\nconst setStatus = (type: ContentType | Component, status: Status) => {\n switch (type.status) {\n case 'NEW':\n case 'REMOVED': {\n break;\n }\n default: {\n type.status = status;\n }\n }\n};\n\nconst getNewStatus = (oldStatus: Status | undefined, newStatus: Status) => {\n if (oldStatus === 'NEW' || oldStatus === 'REMOVED') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst getNewGroupStatus = (oldStatus: GroupStatus, newStatus: GroupStatus): GroupStatus => {\n if (oldStatus === 'NEW') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst setAttributeStatus = (attribute: { status?: Status }, status: Status) => {\n attribute.status = getNewStatus(attribute.status, status);\n};\n\nconst createAttribute = (properties: Record<string, unknown>): AnyAttribute => {\n return {\n ...applyPrivateSearchDefault(properties),\n status: 'NEW',\n } as AnyAttribute;\n};\n\n/**\n * Records an attribute rename hop in the order the user performed it, so the\n * server can replay the exact path as a data-preserving migration.\n *\n * - Only renames of fields that already exist in the database are recorded; a\n * brand-new field (status NEW) has no data yet, so its renames are ignored.\n * - A rename that also changes the field's type / relation / component is not\n * recorded (see `isStorageCompatibleRename`).\n * - Each hop (`previousName -> newName`) is appended verbatim. The recorded\n * sequence is inherently collision-free because the CTB never allows two\n * fields to share a name — a \"swap\" is expressed through the user's own\n * intermediate-name hop, so no synthetic temp column is ever needed.\n */\nconst recordRename = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute\n): void => {\n if (previousAttribute.status === 'NEW') {\n return;\n }\n\n const oldName = previousAttribute.name;\n const newName = newAttribute?.name;\n if (!newName || oldName === newName) {\n return;\n }\n\n if (!isStorageCompatibleRename(previousAttribute, newAttribute)) {\n return;\n }\n\n if (!type.renames) {\n type.renames = [];\n }\n\n type.renames.push({ oldName, newName });\n};\n\n/**\n * Remembers the names of a rename hop the user declined to preserve data for,\n * so the rest of that chain is declined without another prompt.\n */\nconst recordDeclinedRename = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute\n): void => {\n const oldName = previousAttribute.name;\n const newName = newAttribute?.name;\n if (!newName || oldName === newName) {\n return;\n }\n\n type.declinedRenameNames = uniq([...(type.declinedRenameNames ?? []), oldName, newName]);\n};\n\n/**\n * Applies the rename consent carried by an edit: either records the hop or\n * remembers it as declined. Never both.\n */\nconst applyRenameConsent = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute,\n {\n recordRename: shouldRecordRename = true,\n declineRename: shouldDecline = false,\n }: RenameConsentPayload\n): void => {\n if (shouldDecline) {\n recordDeclinedRename(type, previousAttribute, newAttribute);\n return;\n }\n\n if (shouldRecordRename) {\n recordRename(type, previousAttribute, newAttribute);\n }\n};\n\nconst setAttributeAt = (type: ContentType | Component, index: number, attribute: AnyAttribute) => {\n const previousAttribute = type.attributes[index];\n\n const newStatus = getNewStatus(previousAttribute.status, 'CHANGED');\n\n type.attributes[index] = {\n ...applyPrivateSearchDefault(attribute),\n status: newStatus,\n };\n\n setStatus(type, 'CHANGED');\n};\n\nconst pushAttribute = (type: ContentType | Component, attribute: AnyAttribute) => {\n type.attributes.push(attribute);\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeAt = (type: ContentType | Component, index: number) => {\n const attr = type.attributes[index];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(index, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\nconst replaceAttributeAt = (\n type: ContentType | Component,\n index: number,\n attribute: AnyAttribute\n) => {\n type.attributes[index] = attribute;\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeByName = (type: ContentType | Component, name: string) => {\n const idx = type.attributes.findIndex((attr) => attr.name === name);\n\n if (idx === -1) {\n return;\n }\n\n const attr = type.attributes[idx];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(idx, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\n/**\n * Carries the pending rename state of `existing` over to a full replacement of\n * the type (the AI chat's `applyChange`). Appending the incoming hops after the\n * existing ones is order-correct: the chat transform diffs against the current\n * reducer entry, whose attributes already carry the manual renames, so its hops\n * start from where the manual hops ended.\n */\nconst mergeRenameState = (\n existing: Pick<ContentType, 'renames' | 'declinedRenameNames'> | undefined,\n incoming: Pick<ContentType, 'renames' | 'declinedRenameNames'>\n): Pick<ContentType, 'renames' | 'declinedRenameNames'> => {\n const renames = [...(existing?.renames ?? []), ...(incoming.renames ?? [])];\n const declinedRenameNames = uniq([\n ...(existing?.declinedRenameNames ?? []),\n ...(incoming.declinedRenameNames ?? []),\n ]);\n\n return {\n ...(renames.length > 0 ? { renames } : {}),\n ...(declinedRenameNames.length > 0 ? { declinedRenameNames } : {}),\n };\n};\n\nconst updateType = (type: ContentType | Component, data: Record<string, unknown>) => {\n merge(type, data);\n setStatus(type, 'CHANGED');\n};\n\nconst findGroup = (groups: ContentStructureGroup[], id: string) => {\n return groups.find((group) => group.id === id);\n};\n\nconst setGroupStatus = (group: ContentStructureGroup, status: GroupStatus): void => {\n group.status = getNewGroupStatus(group.status, status);\n};\n\n/**\n * Remove a content type reference from every group of a section, mark the group as changed if a reference was removed.\n * @returns true if a reference was removed, false otherwise.\n */\nconst removeContentTypeChild = (groups: ContentStructureGroup[], uid: string): boolean => {\n let removed = false;\n\n for (const group of groups) {\n const groupIndex = group.children.findIndex((child) => {\n return child.type === 'contentType' && child.uid === uid;\n });\n\n if (groupIndex !== -1) {\n group.children.splice(groupIndex, 1);\n setGroupStatus(group, 'CHANGED');\n removed = true;\n }\n }\n\n return removed;\n};\n\n/**\n * Assign a content type to a folder within a single section, optionally creating\n * a new root folder first.\n *\n * Detaches the content type from any current folder then files it under the target group.\n * This is also used by the create/edit content-type modal's folder picker via\n * createSchema/updateSchema.\n */\nconst applyFolderAssignment = (\n section: ContentStructureSection,\n uid: UID.ContentType,\n folder: FolderAssignmentPayload\n): void => {\n const { groups } = section;\n\n removeContentTypeChild(groups, uid);\n\n let targetGroupId: string | null;\n\n if ('newFolderId' in folder) {\n // Reuse an existing root folder of the same name instead of creating a\n // duplicate. The modal picker can only ever makes root folders, so\n // this makes the assumption that a same-named root folder means the\n // user wants to insert into that folder.\n const existing = findSiblingFolderByName(groups, null, folder.newFolderName);\n\n if (existing) {\n targetGroupId = existing.id;\n } else {\n groups.push({\n name: folder.newFolderName.trim(),\n id: folder.newFolderId,\n parent: null,\n children: [],\n status: 'NEW',\n });\n\n targetGroupId = folder.newFolderId;\n }\n } else {\n targetGroupId = folder.targetGroupId;\n }\n\n if (!targetGroupId) {\n return;\n }\n\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n targetGroup.children.push({ type: 'contentType', uid });\n setGroupStatus(targetGroup, 'CHANGED');\n }\n};\n\n/**\n * Determines whether `potentialDescendantId` is nested somewhere inside `ancestorId`'s subtree\n */\nconst isDescendantGroup = (\n groups: ContentStructureGroup[],\n ancestorId: string,\n potentialDescendantId: string\n): boolean => {\n let current = findGroup(groups, potentialDescendantId);\n\n while (current && current.parent !== null) {\n if (current.parent === ancestorId) {\n return true;\n }\n\n current = findGroup(groups, current.parent);\n }\n\n return false;\n};\n\nconst getGroupDepth = (groups: ContentStructureGroup[], id: string): number => {\n let depth = 1;\n let current = findGroup(groups, id);\n\n while (current && current.parent !== null) {\n current = findGroup(groups, current.parent);\n depth += 1;\n }\n\n return depth;\n};\n\n/**\n * Number of folder levels below a group e.g. a group with no sub-folders has height 0.\n */\nconst getSubtreeHeight = (groups: ContentStructureGroup[], id: string): number => {\n const group = findGroup(groups, id);\n\n if (!group) {\n return 0;\n }\n\n let height = 0;\n\n for (const child of group.children) {\n if (child.type !== 'group') continue;\n height = Math.max(height, 1 + getSubtreeHeight(groups, child.id));\n }\n\n return height;\n};\n\nconst applyDeleteContentType = (state: DataManagerStateType, uid: Internal.UID.ContentType) => {\n const type = state.contentTypes[uid];\n\n // Only application schemas belong to CTB. Folder actions can be crafted outside the UI,\n // so this guard must live at the mutation boundary rather than in the dialog alone.\n if (!type || !type.uid.startsWith('api::') || type.plugin) {\n return;\n }\n\n // just drop new content types\n if (type.status === 'NEW') {\n delete state.contentTypes[uid];\n } else {\n setStatus(type, 'REMOVED');\n }\n\n // remove the content type from the content structure tree\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n\n // remove the content type from the components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n\n // remove the content type from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n};\n\nconst slice = createUndoRedoSlice(\n {\n name: 'data-manager',\n initialState,\n reducers: {\n init: (state, action: PayloadAction<InitPayload>) => {\n const { components, contentTypes, reservedNames, contentStructure } = action.payload;\n\n state.components = components;\n state.initialComponents = components;\n state.initialContentTypes = contentTypes;\n state.contentTypes = contentTypes;\n state.reservedNames = reservedNames;\n\n const structure = contentStructure ?? createEmptyContentStructure();\n state.initialContentStructure = structure;\n state.contentStructure = structure;\n\n state.isLoading = false;\n },\n createComponentSchema: (state, action: PayloadAction<CreateComponentSchemaPayload>) => {\n const { uid, data, componentCategory } = action.payload;\n\n const newSchema: Component = {\n uid: uid as Internal.UID.Component,\n status: 'NEW',\n category: componentCategory,\n modelName: data.displayName,\n globalId: data.displayName,\n info: {\n icon: data.icon,\n displayName: data.displayName,\n },\n attributes: [],\n modelType: 'component',\n };\n\n state.components[uid as string] = newSchema;\n },\n createSchema: (state, action: PayloadAction<CreateSchemaPayload>) => {\n const { uid, data, folder } = action.payload;\n\n const { displayName, singularName, pluralName, kind, draftAndPublish, pluginOptions } =\n data;\n\n const newSchema: ContentType = {\n uid: uid as Internal.UID.ContentType,\n status: 'NEW',\n visible: true,\n modelType: 'contentType',\n restrictRelationsTo: null,\n attributes: [],\n kind,\n modelName: displayName,\n globalId: displayName,\n options: {\n draftAndPublish,\n },\n info: {\n displayName,\n singularName,\n pluralName,\n },\n pluginOptions,\n };\n\n state.contentTypes[uid] = newSchema;\n\n // File the new content type into a folder in the same transaction it is created,\n // so both are subject to the same undo/redo operatiion.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n addAttribute: (state, action: PayloadAction<AddAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = createAttribute(omit(attributeToSet, 'createComponent'));\n\n if (attribute.type === 'relation') {\n const target = attribute.target;\n const targetAttribute = attribute.targetAttribute || null;\n const relation = attribute.relation;\n const relationType = getRelationType(relation, targetAttribute);\n\n const isBidirectionalRelation =\n relationType !== undefined && !['oneWay', 'manyWay'].includes(relationType);\n\n if (isBidirectionalRelation) {\n const oppositeAttribute = createAttribute({\n name: targetAttribute,\n relation: getOppositeRelation(relationType),\n target: type.uid,\n targetAttribute: attribute.name,\n type: 'relation',\n private: attribute.private,\n });\n\n const targetType = getType(state, { forTarget, targetUid: target });\n pushAttribute(targetType, oppositeAttribute);\n }\n }\n\n pushAttribute(type, attribute);\n setStatus(type, 'CHANGED');\n },\n moveAttribute: (state, action: PayloadAction<MoveAttributePayload>) => {\n const { forTarget, targetUid, from, to } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = type.attributes[from];\n type.attributes.splice(from, 1);\n type.attributes.splice(to, 0, attribute);\n setStatus(type, 'CHANGED');\n },\n addCustomFieldAttribute: (state, action: PayloadAction<AddCustomFieldAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n pushAttribute(type, createAttribute(attributeToSet));\n },\n addCreatedComponentToDynamicZone: (\n state,\n action: PayloadAction<AddCreateComponentToDynamicZonePayload>\n ) => {\n const { dynamicZoneTarget, componentsToAdd, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n componentsToAdd.forEach((componentUid: Internal.UID.Component) => {\n attr.components.push(componentUid);\n });\n\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n setStatus(type, 'CHANGED');\n },\n changeDynamicZoneComponents: (\n state,\n action: PayloadAction<ChangeDynamicZoneComponentsPayload>\n ) => {\n const { dynamicZoneTarget, newComponents, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n const currentDZComponents = attr.components;\n\n const updatedComponents = makeUnique([...currentDZComponents, ...newComponents]);\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components = updatedComponents;\n },\n editAttribute: (state, action: PayloadAction<EditAttributePayload>) => {\n const {\n name,\n attributeToSet,\n forTarget,\n targetUid,\n recordRename,\n declineRename,\n recordTargetRename,\n declineTargetRename,\n } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, name);\n\n if (initialAttributeIndex === -1) {\n return;\n }\n\n const previousAttribute = type.attributes[initialAttributeIndex];\n\n applyRenameConsent(type, previousAttribute, attributeToSet as AnyAttribute, {\n recordRename,\n declineRename,\n });\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n\n if (previousAttribute.type !== attributeToSet.type) {\n return;\n }\n\n if (previousAttribute.type !== 'relation' || attributeToSet.type !== 'relation') {\n return;\n }\n\n const previousTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: previousAttribute.target,\n });\n const newTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: attributeToSet.target,\n });\n\n const previousTargetAttributeIndex = findAttributeIndex(\n previousTarget,\n previousAttribute.targetAttribute ?? ''\n );\n const previousTargetAttribute =\n previousTargetAttributeIndex !== -1\n ? previousTarget.attributes[previousTargetAttributeIndex]\n : undefined;\n\n // remove old targetAttribute\n if (previousAttribute.targetAttribute) {\n removeAttributeByName(previousTarget, previousAttribute.targetAttribute);\n }\n\n const newRelationType = getRelationType(\n attributeToSet.relation,\n attributeToSet.targetAttribute\n );\n const isBidirectionnal =\n newRelationType !== undefined && !ONE_SIDE_RELATIONS.includes(newRelationType);\n\n if (isBidirectionnal) {\n const newTargetAttribute = {\n name: attributeToSet.targetAttribute,\n type: 'relation',\n relation: getOppositeRelation(attributeToSet.relation),\n targetAttribute: attributeToSet.name,\n target: type.uid,\n private: previousAttribute.private ?? attributeToSet.private,\n pluginOptions: previousAttribute.pluginOptions ?? attributeToSet.pluginOptions,\n ...(previousTarget.uid === newTarget.uid && previousTargetAttribute?.conditions\n ? { conditions: previousTargetAttribute.conditions }\n : {}),\n status: 'CHANGED',\n } as AnyAttribute;\n\n // create or recreate(at old index) targetAttribute\n if (previousTargetAttributeIndex !== -1 && previousTarget.uid === newTarget.uid) {\n // The counterpart is renamed on the target type: without a hop\n // there, the side owning the join table would lose its links.\n if (previousTargetAttribute) {\n applyRenameConsent(newTarget, previousTargetAttribute, newTargetAttribute, {\n recordRename: recordTargetRename,\n declineRename: declineTargetRename,\n });\n }\n\n // re-create at previousIdx if possible\n replaceAttributeAt(newTarget, previousTargetAttributeIndex, newTargetAttribute);\n } else {\n pushAttribute(newTarget, {\n ...newTargetAttribute,\n status: 'NEW',\n });\n }\n }\n },\n editCustomFieldAttribute: (state, action: PayloadAction<EditCustomFieldAttributePayload>) => {\n const { forTarget, targetUid, name, attributeToSet, recordRename, declineRename } =\n action.payload;\n\n const initialAttributeName = name;\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, initialAttributeName);\n const previousAttribute = type.attributes[initialAttributeIndex];\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n applyRenameConsent(type, previousAttribute, attributeToSet as AnyAttribute, {\n recordRename,\n declineRename,\n });\n },\n reloadPlugin: () => {\n return initialState;\n },\n removeComponentFromDynamicZone: (\n state,\n action: PayloadAction<RemoveComponentFromDynamicZonePayload>\n ) => {\n const { dzName, componentToRemoveIndex, forTarget, targetUid } = action.payload;\n\n const type =\n forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n\n if (!type) {\n return;\n }\n\n const dzAttributeIndex = findAttributeIndex(type, dzName);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components.splice(componentToRemoveIndex, 1);\n },\n removeField: (state, action: PayloadAction<RemoveFieldPayload>) => {\n const { forTarget, targetUid, attributeToRemoveName } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attributeToRemoveIndex = findAttributeIndex(type, attributeToRemoveName);\n const attribute = type.attributes[attributeToRemoveIndex];\n\n if (attribute.type === 'relation') {\n const { target, relation, targetAttribute: targetAttributeName } = attribute;\n const relationType = getRelationType(relation, targetAttributeName);\n\n const isBidirectionnal = !ONE_SIDE_RELATIONS.includes(relationType!);\n\n if (isBidirectionnal && targetAttributeName) {\n const targetContentType = getType(state, { forTarget, targetUid: target });\n const targetAttributeIndex = findAttributeIndex(targetContentType, targetAttributeName);\n\n removeAttributeAt(targetContentType, targetAttributeIndex);\n }\n }\n\n // Find all uid fields that have the targetField set to the field we are removing\n type.attributes.forEach((attribute) => {\n if (attribute.type === 'uid') {\n if (attribute.targetField === attributeToRemoveName) {\n delete attribute.targetField;\n }\n }\n });\n\n removeAttributeAt(type, attributeToRemoveIndex);\n },\n // only edits a component in practice\n updateComponentSchema: (state, action: PayloadAction<UpdateComponentSchemaPayload>) => {\n const { data, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type) {\n return;\n }\n\n updateType(type, {\n info: {\n displayName: data.displayName,\n icon: data.icon,\n },\n });\n },\n updateComponentUid: (state, action: PayloadAction<UpdateComponentUIDPayload>) => {\n const { newComponentUID, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type || type.status !== 'NEW') {\n return;\n }\n\n if (newComponentUID !== uid) {\n const newType = { ...type, uid: newComponentUID };\n state.components[newComponentUID] = newType;\n delete state.components[uid];\n\n // update the uid in the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.map((component: UID.Component) => {\n if (component === uid) {\n return newComponentUID;\n }\n\n return component;\n });\n\n attribute.components = newComponents;\n }\n });\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n\n // update the uid in the other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n component.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n }\n },\n updateSchema: (state, action: PayloadAction<UpdateSchemaPayload>) => {\n const { data, uid, folder } = action.payload;\n\n const { displayName, kind, draftAndPublish, pluginOptions } = data;\n\n const type = state.contentTypes[uid];\n if (!type) {\n return;\n }\n\n const previousKind = type.kind;\n\n updateType(type, {\n info: {\n displayName,\n },\n kind,\n options: {\n draftAndPublish,\n },\n pluginOptions,\n });\n\n if (kind && kind !== previousKind) {\n const oldSection = state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n\n // Apply the folder picker's choice after any kind relocation, so the\n // assignment lands in the content type's (possibly new) section.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n deleteComponent: (state, action: PayloadAction<Internal.UID.Component>) => {\n const uid = action.payload;\n\n // remove the compo from the components\n if (state.components[uid].status === 'NEW') {\n delete state.components[uid];\n } else {\n setStatus(state.components[uid], 'REMOVED');\n }\n\n // remove the compo from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n // remove from dynamic zones\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.filter(\n (component: unknown) => component !== uid\n );\n\n attribute.components = newComponents;\n }\n });\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n\n // remove the compo from other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n },\n deleteContentType: (state, action: PayloadAction<Internal.UID.ContentType>) => {\n applyDeleteContentType(state, action.payload);\n },\n\n createFolder: (state, action: PayloadAction<CreateFolderPayload>) => {\n const { section, id, name: rawName, parentId } = action.payload;\n const name = rawName.trim();\n const { groups } = state.contentStructure.sections[section];\n\n if (parentId && getGroupDepth(groups, parentId) + 1 > MAX_FOLDER_DEPTH) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, parentId, name)) {\n return;\n }\n\n groups.push({ id, name, parent: parentId, children: [], status: 'NEW' });\n\n if (parentId) {\n const parent = findGroup(groups, parentId);\n\n if (parent) {\n parent.children.push({ type: 'group', id });\n setGroupStatus(parent, 'CHANGED');\n }\n }\n },\n renameFolder: (state, action: PayloadAction<RenameFolderPayload>) => {\n const { section, id, name: rawName } = action.payload;\n const name = rawName.trim();\n\n const { groups } = state.contentStructure.sections[section];\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n if (group.name === name) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, group.parent, name, id)) {\n return;\n }\n\n group.name = name;\n setGroupStatus(group, 'CHANGED');\n },\n moveFolder: (state, action: PayloadAction<MoveFolderPayload>) => {\n const { section, id, newParentId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n // Reject no-ops and cyclic moves\n if (newParentId === id || (newParentId && isDescendantGroup(groups, id, newParentId))) {\n return;\n }\n\n // Refuse moves that would exceed the maximum allowed depth.\n const newTopDepth = newParentId ? getGroupDepth(groups, newParentId) + 1 : 1;\n if (newTopDepth + getSubtreeHeight(groups, id) > MAX_FOLDER_DEPTH) {\n return;\n }\n\n // Refuse a move that would collide with an identically named sibling.\n if (isFolderNameTakenBySibling(groups, newParentId, group.name, id)) {\n return;\n }\n\n if (group.parent) {\n const oldParent = findGroup(groups, group.parent);\n\n if (oldParent) {\n // Remove from the old parent's list of children.\n const idx = oldParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === id;\n });\n\n if (idx !== -1) {\n oldParent.children.splice(idx, 1);\n }\n\n setGroupStatus(oldParent, 'CHANGED');\n }\n }\n\n group.parent = newParentId;\n setGroupStatus(group, 'CHANGED');\n\n if (newParentId) {\n const newParent = findGroup(groups, newParentId);\n\n if (newParent) {\n const entry = { type: 'group' as const, id };\n\n if (typeof index === 'number' && index >= 0 && index <= newParent.children.length) {\n newParent.children.splice(index, 0, entry);\n } else {\n newParent.children.push(entry);\n }\n\n setGroupStatus(newParent, 'CHANGED');\n }\n } else if (typeof index === 'number') {\n // If a content type is dropped into the root:\n // The root display order follows the array order of the\n // section's root-level groups because there's no root level\n // customization yet, so reposition the moved group among them.\n const currentIndex = groups.findIndex((candidate) => candidate.id === id);\n\n if (currentIndex !== -1) {\n const [moved] = groups.splice(currentIndex, 1);\n const rootIds = groups\n .filter((candidate) => candidate.parent === null)\n .map((candidate) => candidate.id);\n const anchorId = rootIds[index];\n const insertAt = anchorId\n ? groups.findIndex((candidate) => candidate.id === anchorId)\n : groups.length;\n\n groups.splice(insertAt === -1 ? groups.length : insertAt, 0, moved);\n }\n }\n },\n deleteFolderOnly: (state, action: PayloadAction<DeleteFolderPayload>) => {\n const { section, id: groupToDeleteId } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const groupToDeleteParentId = groupToDelete.parent;\n\n // Reparenting a child folder into its grandparent must preserve the same sibling-name\n // invariant as create, rename, and move. Do this before mutating any group state.\n if (getDeleteFolderOnlySiblingNameCollisions(groups, groupToDeleteId).length > 0) {\n return;\n }\n\n // It is necessary to clone the children because we must subsequently mutate the original group.children array when we splice it out of its parent.\n const children = groupToDelete.children.map((child) => ({ ...child }));\n\n // Children of a deleted folder inherit the deleted folder's parent.\n children.forEach((child) => {\n if (child.type === 'group') {\n const childGroup = findGroup(groups, child.id);\n\n if (childGroup) {\n childGroup.parent = groupToDeleteParentId;\n }\n }\n });\n\n if (groupToDeleteParentId) {\n const groupToDeleteParent = findGroup(groups, groupToDeleteParentId);\n\n if (groupToDeleteParent) {\n // Splice the deleted folder's children of the deleted folder into their new parent at the position of the deleted folder.\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1, ...children);\n } else {\n groupToDeleteParent.children.push(...children);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Finally, remove the deleted folder from its section's list of groups.\n const groupIndex = groups.findIndex((candidate) => {\n return candidate.id === groupToDeleteId;\n });\n\n if (groupIndex !== -1) {\n groups.splice(groupIndex, 1);\n }\n },\n deleteFolderAndContent: (state, action: PayloadAction<DeleteFolderAndContentPayload>) => {\n const { section, id: groupToDeleteId, contentTypeUids } = action.payload;\n\n contentTypeUids.forEach((uid) => {\n applyDeleteContentType(state, uid);\n });\n\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const toRemove = new Set<string>();\n const collect = (currentGroupId: string) => {\n toRemove.add(currentGroupId);\n\n const currentGroup = findGroup(groups, currentGroupId);\n\n for (const child of currentGroup?.children ?? []) {\n if (child.type !== 'group') continue;\n collect(child.id);\n }\n };\n\n collect(groupToDeleteId);\n\n if (groupToDelete.parent) {\n const groupToDeleteParent = findGroup(groups, groupToDelete.parent);\n\n if (groupToDeleteParent) {\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Removes the group entry and all its descendants from the contentStructure.\n state.contentStructure.sections[section].groups = groups.filter((candidate) => {\n return !toRemove.has(candidate.id);\n });\n },\n assignContentTypeToFolder: (\n state,\n action: PayloadAction<AssignContentTypeToFolderPayload>\n ) => {\n const { section, uid, targetGroupId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n removeContentTypeChild(groups, uid);\n\n if (targetGroupId) {\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n const entry = { type: 'contentType' as const, uid };\n\n if (typeof index === 'number' && index >= 0 && index <= targetGroup.children.length) {\n targetGroup.children.splice(index, 0, entry);\n } else {\n targetGroup.children.push(entry);\n }\n\n setGroupStatus(targetGroup, 'CHANGED');\n }\n }\n },\n reorderFolderChildren: (state, action: PayloadAction<ReorderFolderChildrenPayload>) => {\n const { section, groupId, from, to } = action.payload;\n\n const group = findGroup(state.contentStructure.sections[section].groups, groupId);\n if (!group) {\n return;\n }\n\n const child = group.children[from];\n if (!child) {\n return;\n }\n\n group.children.splice(from, 1);\n group.children.splice(to, 0, child);\n\n setGroupStatus(group, 'CHANGED');\n },\n\n applyChange(\n state,\n reducerAction: PayloadAction<{\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }>\n ) {\n const { action, schema } = reducerAction.payload;\n\n switch (action) {\n case 'add':\n {\n const uid = schema.uid;\n\n if (schema.modelType === 'component') {\n state.components[uid] = schema;\n } else {\n state.contentTypes[uid] = schema;\n }\n }\n break;\n case 'update':\n {\n const uid = schema.uid;\n\n // Find the schema, if the state was \"create\", we should keep it as it was before\n\n if (schema.modelType === 'component') {\n const component = state.components[uid];\n state.components[uid] = {\n ...schema,\n ...mergeRenameState(component, schema),\n status: component?.status === 'NEW' ? 'NEW' : schema.status,\n };\n } else {\n const contentType = state.contentTypes[uid];\n const previousKind = contentType?.kind;\n\n state.contentTypes[uid] = {\n ...schema,\n ...mergeRenameState(contentType, schema),\n status: contentType?.status === 'NEW' ? 'NEW' : schema.status,\n };\n\n if (previousKind && schema.kind && schema.kind !== previousKind) {\n const oldSection =\n state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n }\n }\n break;\n case 'delete': {\n const uid = schema.uid;\n const isComponent = schema.modelType === 'component';\n // It's a component that has yet not been added\n if (isComponent) {\n const exists = state.components[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.components[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.components[uid];\n } else {\n state.components[uid].status = 'REMOVED';\n }\n } else {\n const exists = state.contentTypes[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.contentTypes[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.contentTypes[uid];\n } else {\n state.contentTypes[uid].status = 'REMOVED';\n }\n\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n }\n\n break;\n }\n }\n },\n },\n },\n\n {\n limit: 50,\n excludeActionsFromHistory: ['reloadPlugin', 'init'],\n stateSelector: (state) => {\n if (!state) {\n return {};\n }\n\n return {\n components: state.components,\n contentTypes: state.contentTypes,\n contentStructure: state.contentStructure,\n };\n },\n discard: (state) => {\n state.components = state.initialComponents;\n state.contentTypes = state.initialContentTypes;\n state.contentStructure = state.initialContentStructure;\n },\n }\n);\n\nexport type State = ReturnType<typeof slice.reducer>;\nexport const { reducer, actions } = slice;\nexport { initialState };\n"],"names":["initialState","components","contentTypes","initialComponents","initialContentTypes","contentStructure","createEmptyContentStructure","initialContentStructure","reservedNames","models","attributes","isLoading","ONE_SIDE_RELATIONS","getOppositeRelation","originalRelation","findAttributeIndex","type","attributeToFind","findIndex","name","getType","state","forTarget","targetUid","setStatus","status","getNewStatus","oldStatus","newStatus","getNewGroupStatus","setAttributeStatus","attribute","createAttribute","properties","applyPrivateSearchDefault","recordRename","previousAttribute","newAttribute","oldName","newName","isStorageCompatibleRename","renames","push","recordDeclinedRename","declinedRenameNames","uniq","applyRenameConsent","shouldRecordRename","declineRename","shouldDecline","setAttributeAt","index","pushAttribute","removeAttributeAt","attr","splice","replaceAttributeAt","removeAttributeByName","idx","mergeRenameState","existing","incoming","length","updateType","data","merge","findGroup","groups","id","find","group","setGroupStatus","removeContentTypeChild","uid","removed","groupIndex","children","child","applyFolderAssignment","section","folder","targetGroupId","findSiblingFolderByName","newFolderName","trim","newFolderId","parent","targetGroup","isDescendantGroup","ancestorId","potentialDescendantId","current","getGroupDepth","depth","getSubtreeHeight","height","Math","max","applyDeleteContentType","startsWith","plugin","Object","values","sections","forEach","keys","componentUid","component","namesToRemove","filter","target","map","contentTypeUid","contentType","slice","createUndoRedoSlice","reducers","init","action","payload","structure","createComponentSchema","componentCategory","newSchema","category","modelName","displayName","globalId","info","icon","modelType","createSchema","singularName","pluralName","kind","draftAndPublish","pluginOptions","visible","restrictRelationsTo","options","sectionKeyForKind","addAttribute","attributeToSet","omit","targetAttribute","relation","relationType","getRelationType","isBidirectionalRelation","undefined","includes","oppositeAttribute","private","targetType","moveAttribute","from","to","addCustomFieldAttribute","addCreatedComponentToDynamicZone","dynamicZoneTarget","componentsToAdd","dzAttributeIndex","changeDynamicZoneComponents","newComponents","currentDZComponents","updatedComponents","makeUnique","editAttribute","recordTargetRename","declineTargetRename","initialAttributeIndex","previousTarget","newTarget","previousTargetAttributeIndex","previousTargetAttribute","newRelationType","isBidirectionnal","newTargetAttribute","conditions","editCustomFieldAttribute","initialAttributeName","reloadPlugin","removeComponentFromDynamicZone","dzName","componentToRemoveIndex","removeField","attributeToRemoveName","attributeToRemoveIndex","targetAttributeName","targetContentType","targetAttributeIndex","targetField","updateComponentSchema","updateComponentUid","newComponentUID","newType","updateSchema","previousKind","oldSection","deleteComponent","deleteContentType","createFolder","rawName","parentId","MAX_FOLDER_DEPTH","isFolderNameTakenBySibling","renameFolder","moveFolder","newParentId","newTopDepth","oldParent","newParent","entry","currentIndex","candidate","moved","rootIds","anchorId","insertAt","deleteFolderOnly","groupToDeleteId","groupToDelete","groupToDeleteParentId","getDeleteFolderOnlySiblingNameCollisions","childGroup","groupToDeleteParent","groupToDeleteIndex","deleteFolderAndContent","contentTypeUids","toRemove","Set","collect","currentGroupId","add","currentGroup","has","assignContentTypeToFolder","reorderFolderChildren","groupId","applyChange","reducerAction","schema","isComponent","exists","isUnsaved","limit","excludeActionsFromHistory","stateSelector","discard","reducer","actions"],"mappings":"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"}
1
+ {"version":3,"file":"reducer.js","sources":["../../../../admin/src/components/DataManager/reducer.ts"],"sourcesContent":["import { PayloadAction } from '@reduxjs/toolkit';\nimport merge from 'lodash/merge';\nimport omit from 'lodash/omit';\nimport uniq from 'lodash/uniq';\n\nimport { applyPrivateSearchDefault } from '../../utils/applyPrivateSearchDefault';\nimport { getVisibleConditionEntries } from '../../utils/conditions';\nimport { getRelationType } from '../../utils/getRelationType';\nimport { makeUnique } from '../../utils/makeUnique';\n\nimport { createUndoRedoSlice } from './undoRedo';\nimport {\n createEmptyContentStructure,\n findSiblingFolderByName,\n getDeleteFolderOnlySiblingNameCollisions,\n isFolderNameTakenBySibling,\n MAX_FOLDER_DEPTH,\n sectionKeyForKind,\n} from './utils/contentStructure';\nimport { isStorageCompatibleRename } from './utils/isStorageCompatibleRename';\n\nimport type {\n Components,\n ContentTypes,\n ContentType,\n Component,\n Status,\n AnyAttribute,\n} from '../../types';\nimport type {\n ContentStructure,\n ContentStructureGroup,\n ContentStructureSection,\n GroupStatus,\n SectionKey,\n} from './utils/contentStructure';\nimport type { Internal, Schema, Struct, UID } from '@strapi/types';\n\nexport interface DataManagerStateType {\n components: Components;\n initialComponents: Components;\n contentTypes: ContentTypes;\n initialContentTypes: ContentTypes;\n contentStructure: ContentStructure;\n initialContentStructure: ContentStructure;\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n isLoading: boolean;\n [key: string]: unknown;\n}\n\nconst initialState: DataManagerStateType = {\n components: {},\n contentTypes: {},\n initialComponents: {},\n initialContentTypes: {},\n contentStructure: createEmptyContentStructure(),\n initialContentStructure: createEmptyContentStructure(),\n reservedNames: {\n models: [],\n attributes: [],\n },\n isLoading: true,\n};\n\nconst ONE_SIDE_RELATIONS = ['oneWay', 'manyWay'];\n\ntype AttributeMutation = AnyAttribute & {\n createComponent?: unknown;\n};\n\ntype PluginOptions = Record<string, unknown>;\n\nconst getOppositeRelation = (originalRelation?: Schema.Attribute.RelationKind.Any) => {\n if (originalRelation === 'manyToOne') {\n return 'oneToMany';\n }\n\n if (originalRelation === 'oneToMany') {\n return 'manyToOne';\n }\n\n return originalRelation;\n};\n\nconst findAttributeIndex = (type: ContentType | Component, attributeToFind?: string) => {\n return type.attributes.findIndex(({ name }: { name: string }) => name === attributeToFind);\n};\n\ntype InitPayload = {\n components: Record<string, Component>;\n contentTypes: Record<string, ContentType>;\n reservedNames: DataManagerStateType['reservedNames'];\n contentStructure?: ContentStructure;\n};\n\ntype CreateFolderPayload = {\n parentId: string | null;\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype RenameFolderPayload = {\n section: SectionKey;\n name: string;\n id: string;\n};\n\ntype MoveFolderPayload = {\n newParentId: string | null;\n section: SectionKey;\n index?: number;\n id: string;\n};\n\ntype DeleteFolderPayload = {\n section: SectionKey;\n id: string;\n};\n\ntype DeleteFolderAndContentPayload = DeleteFolderPayload & {\n contentTypeUids: Internal.UID.ContentType[];\n};\n\ntype AssignContentTypeToFolderPayload = {\n targetGroupId: string | null;\n uid: UID.ContentType;\n section: SectionKey;\n index?: number;\n};\n\ntype ReorderFolderChildrenPayload = {\n section: SectionKey;\n groupId: string;\n from: number;\n to: number;\n};\n\ntype AddAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype AddCreateComponentToDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dynamicZoneTarget: string;\n componentsToAdd: Internal.UID.Component[];\n};\n\ntype AddCustomFieldAttributePayload = {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype ChangeDynamicZoneComponentsPayload = {\n dynamicZoneTarget: string;\n newComponents: Internal.UID.Component[];\n forTarget: Struct.ModelType;\n targetUid: string;\n};\n\ntype CreateComponentSchemaPayload = {\n uid: string;\n data: {\n icon?: string;\n displayName: string;\n };\n componentCategory: string;\n};\n\ntype FolderAssignmentPayload =\n | { targetGroupId: string | null }\n | { newFolderId: string; newFolderName: string };\n\ntype CreateSchemaPayload = {\n uid: string;\n data: {\n displayName: string;\n singularName: string;\n pluralName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n folder?: FolderAssignmentPayload;\n};\n\ntype RenameConsentPayload = {\n /** Record the hop so the server preserves data (default). */\n recordRename?: boolean;\n /**\n * The user declined to preserve data for this hop: remember both names so\n * later hops of the same chain are declined without another prompt.\n */\n declineRename?: boolean;\n /**\n * Same pair for the other side of a bidirectional relation, when the edit\n * renames it on the target type.\n */\n recordTargetRename?: boolean;\n declineTargetRename?: boolean;\n};\n\ntype EditAttributePayload = RenameConsentPayload & {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype EditCustomFieldAttributePayload = RenameConsentPayload & {\n attributeToSet: AttributeMutation;\n forTarget: Struct.ModelType;\n targetUid: string;\n name: string;\n};\n\ntype RemoveComponentFromDynamicZonePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n dzName: string;\n componentToRemoveIndex: number;\n};\n\ntype RemoveFieldPayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n attributeToRemoveName: string;\n};\n\ntype UpdateComponentSchemaPayload = {\n data: {\n icon?: string;\n displayName: string;\n };\n uid: Internal.UID.Component;\n};\n\ntype UpdateComponentUIDPayload = {\n uid: Internal.UID.Component;\n newComponentUID: Internal.UID.Component;\n};\n\ntype UpdateSchemaPayload = {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: PluginOptions;\n };\n uid: string;\n folder?: FolderAssignmentPayload;\n};\n\ntype MoveAttributePayload = {\n forTarget: Struct.ModelType;\n targetUid: string;\n from: number;\n to: number;\n};\n\nconst getType = (\n state: DataManagerStateType,\n {\n forTarget,\n targetUid,\n }: {\n forTarget: Struct.ModelType;\n targetUid: string;\n }\n) => {\n return forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n};\n\n// TODO: use initial state when chnaging back to the initial state without knowing\nconst setStatus = (type: ContentType | Component, status: Status) => {\n switch (type.status) {\n case 'NEW':\n case 'REMOVED': {\n break;\n }\n default: {\n type.status = status;\n }\n }\n};\n\nconst getNewStatus = (oldStatus: Status | undefined, newStatus: Status) => {\n if (oldStatus === 'NEW' || oldStatus === 'REMOVED') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst getNewGroupStatus = (oldStatus: GroupStatus, newStatus: GroupStatus): GroupStatus => {\n if (oldStatus === 'NEW') {\n return oldStatus;\n }\n\n return newStatus;\n};\n\nconst setAttributeStatus = (attribute: { status?: Status }, status: Status) => {\n attribute.status = getNewStatus(attribute.status, status);\n};\n\nconst createAttribute = (properties: Record<string, unknown>): AnyAttribute => {\n return {\n ...applyPrivateSearchDefault(properties),\n status: 'NEW',\n } as AnyAttribute;\n};\n\n/**\n * Records an attribute rename hop in the order the user performed it, so the\n * server can replay the exact path as a data-preserving migration.\n *\n * - Only renames of fields that already exist in the database are recorded; a\n * brand-new field (status NEW) has no data yet, so its renames are ignored.\n * - A rename that also changes the field's type / relation / component is not\n * recorded (see `isStorageCompatibleRename`).\n * - Each hop (`previousName -> newName`) is appended verbatim. The recorded\n * sequence is inherently collision-free because the CTB never allows two\n * fields to share a name — a \"swap\" is expressed through the user's own\n * intermediate-name hop, so no synthetic temp column is ever needed.\n */\nconst recordRename = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute\n): void => {\n if (previousAttribute.status === 'NEW') {\n return;\n }\n\n const oldName = previousAttribute.name;\n const newName = newAttribute?.name;\n if (!newName || oldName === newName) {\n return;\n }\n\n if (!isStorageCompatibleRename(previousAttribute, newAttribute)) {\n return;\n }\n\n if (!type.renames) {\n type.renames = [];\n }\n\n type.renames.push({ oldName, newName });\n};\n\n/**\n * Remembers the names of a rename hop the user declined to preserve data for,\n * so the rest of that chain is declined without another prompt.\n */\nconst recordDeclinedRename = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute\n): void => {\n const oldName = previousAttribute.name;\n const newName = newAttribute?.name;\n if (!newName || oldName === newName) {\n return;\n }\n\n type.declinedRenameNames = uniq([...(type.declinedRenameNames ?? []), oldName, newName]);\n};\n\n/**\n * Applies the rename consent carried by an edit: either records the hop or\n * remembers it as declined. Never both.\n */\nconst applyRenameConsent = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute,\n {\n recordRename: shouldRecordRename = true,\n declineRename: shouldDecline = false,\n }: RenameConsentPayload\n): void => {\n if (shouldDecline) {\n recordDeclinedRename(type, previousAttribute, newAttribute);\n return;\n }\n\n if (shouldRecordRename) {\n recordRename(type, previousAttribute, newAttribute);\n }\n};\n\n/**\n * Points the conditions of the type's other fields at the new name of a renamed\n * field. Runs for every rename, recorded or not, so the conditions follow the\n * field whether or not its data is preserved.\n */\nconst renameConditionVars = (\n type: ContentType | Component,\n previousAttribute: AnyAttribute,\n newAttribute: AnyAttribute\n): void => {\n const oldName = previousAttribute.name;\n const newName = newAttribute?.name;\n if (!newName || oldName === newName) {\n return;\n }\n\n type.attributes.forEach((attribute) => {\n getVisibleConditionEntries(attribute.conditions).forEach(({ fieldVar }) => {\n if (fieldVar.var === oldName) {\n fieldVar.var = newName;\n setAttributeStatus(attribute, 'CHANGED');\n }\n });\n });\n};\n\nconst setAttributeAt = (type: ContentType | Component, index: number, attribute: AnyAttribute) => {\n const previousAttribute = type.attributes[index];\n\n const newStatus = getNewStatus(previousAttribute.status, 'CHANGED');\n\n type.attributes[index] = {\n ...applyPrivateSearchDefault(attribute),\n status: newStatus,\n };\n\n setStatus(type, 'CHANGED');\n};\n\nconst pushAttribute = (type: ContentType | Component, attribute: AnyAttribute) => {\n type.attributes.push(attribute);\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeAt = (type: ContentType | Component, index: number) => {\n const attr = type.attributes[index];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(index, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\nconst replaceAttributeAt = (\n type: ContentType | Component,\n index: number,\n attribute: AnyAttribute\n) => {\n type.attributes[index] = attribute;\n setStatus(type, 'CHANGED');\n};\n\nconst removeAttributeByName = (type: ContentType | Component, name: string) => {\n const idx = type.attributes.findIndex((attr) => attr.name === name);\n\n if (idx === -1) {\n return;\n }\n\n const attr = type.attributes[idx];\n\n setStatus(type, 'CHANGED');\n\n if (attr.status === 'NEW') {\n type.attributes.splice(idx, 1);\n } else {\n setAttributeStatus(attr, 'REMOVED');\n }\n};\n\n/**\n * Carries the pending rename state of `existing` over to a full replacement of\n * the type (the AI chat's `applyChange`). Appending the incoming hops after the\n * existing ones is order-correct: the chat transform diffs against the current\n * reducer entry, whose attributes already carry the manual renames, so its hops\n * start from where the manual hops ended.\n */\nconst mergeRenameState = (\n existing: Pick<ContentType, 'renames' | 'declinedRenameNames'> | undefined,\n incoming: Pick<ContentType, 'renames' | 'declinedRenameNames'>\n): Pick<ContentType, 'renames' | 'declinedRenameNames'> => {\n const renames = [...(existing?.renames ?? []), ...(incoming.renames ?? [])];\n const declinedRenameNames = uniq([\n ...(existing?.declinedRenameNames ?? []),\n ...(incoming.declinedRenameNames ?? []),\n ]);\n\n return {\n ...(renames.length > 0 ? { renames } : {}),\n ...(declinedRenameNames.length > 0 ? { declinedRenameNames } : {}),\n };\n};\n\nconst updateType = (type: ContentType | Component, data: Record<string, unknown>) => {\n merge(type, data);\n setStatus(type, 'CHANGED');\n};\n\nconst findGroup = (groups: ContentStructureGroup[], id: string) => {\n return groups.find((group) => group.id === id);\n};\n\nconst setGroupStatus = (group: ContentStructureGroup, status: GroupStatus): void => {\n group.status = getNewGroupStatus(group.status, status);\n};\n\n/**\n * Remove a content type reference from every group of a section, mark the group as changed if a reference was removed.\n * @returns true if a reference was removed, false otherwise.\n */\nconst removeContentTypeChild = (groups: ContentStructureGroup[], uid: string): boolean => {\n let removed = false;\n\n for (const group of groups) {\n const groupIndex = group.children.findIndex((child) => {\n return child.type === 'contentType' && child.uid === uid;\n });\n\n if (groupIndex !== -1) {\n group.children.splice(groupIndex, 1);\n setGroupStatus(group, 'CHANGED');\n removed = true;\n }\n }\n\n return removed;\n};\n\n/**\n * Assign a content type to a folder within a single section, optionally creating\n * a new root folder first.\n *\n * Detaches the content type from any current folder then files it under the target group.\n * This is also used by the create/edit content-type modal's folder picker via\n * createSchema/updateSchema.\n */\nconst applyFolderAssignment = (\n section: ContentStructureSection,\n uid: UID.ContentType,\n folder: FolderAssignmentPayload\n): void => {\n const { groups } = section;\n\n removeContentTypeChild(groups, uid);\n\n let targetGroupId: string | null;\n\n if ('newFolderId' in folder) {\n // Reuse an existing root folder of the same name instead of creating a\n // duplicate. The modal picker can only ever makes root folders, so\n // this makes the assumption that a same-named root folder means the\n // user wants to insert into that folder.\n const existing = findSiblingFolderByName(groups, null, folder.newFolderName);\n\n if (existing) {\n targetGroupId = existing.id;\n } else {\n groups.push({\n name: folder.newFolderName.trim(),\n id: folder.newFolderId,\n parent: null,\n children: [],\n status: 'NEW',\n });\n\n targetGroupId = folder.newFolderId;\n }\n } else {\n targetGroupId = folder.targetGroupId;\n }\n\n if (!targetGroupId) {\n return;\n }\n\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n targetGroup.children.push({ type: 'contentType', uid });\n setGroupStatus(targetGroup, 'CHANGED');\n }\n};\n\n/**\n * Determines whether `potentialDescendantId` is nested somewhere inside `ancestorId`'s subtree\n */\nconst isDescendantGroup = (\n groups: ContentStructureGroup[],\n ancestorId: string,\n potentialDescendantId: string\n): boolean => {\n let current = findGroup(groups, potentialDescendantId);\n\n while (current && current.parent !== null) {\n if (current.parent === ancestorId) {\n return true;\n }\n\n current = findGroup(groups, current.parent);\n }\n\n return false;\n};\n\nconst getGroupDepth = (groups: ContentStructureGroup[], id: string): number => {\n let depth = 1;\n let current = findGroup(groups, id);\n\n while (current && current.parent !== null) {\n current = findGroup(groups, current.parent);\n depth += 1;\n }\n\n return depth;\n};\n\n/**\n * Number of folder levels below a group e.g. a group with no sub-folders has height 0.\n */\nconst getSubtreeHeight = (groups: ContentStructureGroup[], id: string): number => {\n const group = findGroup(groups, id);\n\n if (!group) {\n return 0;\n }\n\n let height = 0;\n\n for (const child of group.children) {\n if (child.type !== 'group') continue;\n height = Math.max(height, 1 + getSubtreeHeight(groups, child.id));\n }\n\n return height;\n};\n\nconst applyDeleteContentType = (state: DataManagerStateType, uid: Internal.UID.ContentType) => {\n const type = state.contentTypes[uid];\n\n // Only application schemas belong to CTB. Folder actions can be crafted outside the UI,\n // so this guard must live at the mutation boundary rather than in the dialog alone.\n if (!type || !type.uid.startsWith('api::') || type.plugin) {\n return;\n }\n\n // just drop new content types\n if (type.status === 'NEW') {\n delete state.contentTypes[uid];\n } else {\n setStatus(type, 'REMOVED');\n }\n\n // remove the content type from the content structure tree\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n\n // remove the content type from the components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n\n // remove the content type from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'relation' && attribute.target === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n};\n\nconst slice = createUndoRedoSlice(\n {\n name: 'data-manager',\n initialState,\n reducers: {\n init: (state, action: PayloadAction<InitPayload>) => {\n const { components, contentTypes, reservedNames, contentStructure } = action.payload;\n\n state.components = components;\n state.initialComponents = components;\n state.initialContentTypes = contentTypes;\n state.contentTypes = contentTypes;\n state.reservedNames = reservedNames;\n\n const structure = contentStructure ?? createEmptyContentStructure();\n state.initialContentStructure = structure;\n state.contentStructure = structure;\n\n state.isLoading = false;\n },\n createComponentSchema: (state, action: PayloadAction<CreateComponentSchemaPayload>) => {\n const { uid, data, componentCategory } = action.payload;\n\n const newSchema: Component = {\n uid: uid as Internal.UID.Component,\n status: 'NEW',\n category: componentCategory,\n modelName: data.displayName,\n globalId: data.displayName,\n info: {\n icon: data.icon,\n displayName: data.displayName,\n },\n attributes: [],\n modelType: 'component',\n };\n\n state.components[uid as string] = newSchema;\n },\n createSchema: (state, action: PayloadAction<CreateSchemaPayload>) => {\n const { uid, data, folder } = action.payload;\n\n const { displayName, singularName, pluralName, kind, draftAndPublish, pluginOptions } =\n data;\n\n const newSchema: ContentType = {\n uid: uid as Internal.UID.ContentType,\n status: 'NEW',\n visible: true,\n modelType: 'contentType',\n restrictRelationsTo: null,\n attributes: [],\n kind,\n modelName: displayName,\n globalId: displayName,\n options: {\n draftAndPublish,\n },\n info: {\n displayName,\n singularName,\n pluralName,\n },\n pluginOptions,\n };\n\n state.contentTypes[uid] = newSchema;\n\n // File the new content type into a folder in the same transaction it is created,\n // so both are subject to the same undo/redo operatiion.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n addAttribute: (state, action: PayloadAction<AddAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = createAttribute(omit(attributeToSet, 'createComponent'));\n\n if (attribute.type === 'relation') {\n const target = attribute.target;\n const targetAttribute = attribute.targetAttribute || null;\n const relation = attribute.relation;\n const relationType = getRelationType(relation, targetAttribute);\n\n const isBidirectionalRelation =\n relationType !== undefined && !['oneWay', 'manyWay'].includes(relationType);\n\n if (isBidirectionalRelation) {\n const oppositeAttribute = createAttribute({\n name: targetAttribute,\n relation: getOppositeRelation(relationType),\n target: type.uid,\n targetAttribute: attribute.name,\n type: 'relation',\n private: attribute.private,\n });\n\n const targetType = getType(state, { forTarget, targetUid: target });\n pushAttribute(targetType, oppositeAttribute);\n }\n }\n\n pushAttribute(type, attribute);\n setStatus(type, 'CHANGED');\n },\n moveAttribute: (state, action: PayloadAction<MoveAttributePayload>) => {\n const { forTarget, targetUid, from, to } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attribute = type.attributes[from];\n type.attributes.splice(from, 1);\n type.attributes.splice(to, 0, attribute);\n setStatus(type, 'CHANGED');\n },\n addCustomFieldAttribute: (state, action: PayloadAction<AddCustomFieldAttributePayload>) => {\n const { attributeToSet, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n pushAttribute(type, createAttribute(attributeToSet));\n },\n addCreatedComponentToDynamicZone: (\n state,\n action: PayloadAction<AddCreateComponentToDynamicZonePayload>\n ) => {\n const { dynamicZoneTarget, componentsToAdd, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n componentsToAdd.forEach((componentUid: Internal.UID.Component) => {\n attr.components.push(componentUid);\n });\n\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n setStatus(type, 'CHANGED');\n },\n changeDynamicZoneComponents: (\n state,\n action: PayloadAction<ChangeDynamicZoneComponentsPayload>\n ) => {\n const { dynamicZoneTarget, newComponents, forTarget, targetUid } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const dzAttributeIndex = findAttributeIndex(type, dynamicZoneTarget);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n const currentDZComponents = attr.components;\n\n const updatedComponents = makeUnique([...currentDZComponents, ...newComponents]);\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components = updatedComponents;\n },\n editAttribute: (state, action: PayloadAction<EditAttributePayload>) => {\n const {\n name,\n attributeToSet,\n forTarget,\n targetUid,\n recordRename,\n declineRename,\n recordTargetRename,\n declineTargetRename,\n } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, name);\n\n if (initialAttributeIndex === -1) {\n return;\n }\n\n const previousAttribute = type.attributes[initialAttributeIndex];\n\n applyRenameConsent(type, previousAttribute, attributeToSet as AnyAttribute, {\n recordRename,\n declineRename,\n });\n renameConditionVars(type, previousAttribute, attributeToSet as AnyAttribute);\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n\n if (previousAttribute.type !== attributeToSet.type) {\n return;\n }\n\n if (previousAttribute.type !== 'relation' || attributeToSet.type !== 'relation') {\n return;\n }\n\n const previousTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: previousAttribute.target,\n });\n const newTarget = getType(state, {\n forTarget: 'contentType',\n targetUid: attributeToSet.target,\n });\n\n const previousTargetAttributeIndex = findAttributeIndex(\n previousTarget,\n previousAttribute.targetAttribute ?? ''\n );\n const previousTargetAttribute =\n previousTargetAttributeIndex !== -1\n ? previousTarget.attributes[previousTargetAttributeIndex]\n : undefined;\n\n // remove old targetAttribute\n if (previousAttribute.targetAttribute) {\n removeAttributeByName(previousTarget, previousAttribute.targetAttribute);\n }\n\n const newRelationType = getRelationType(\n attributeToSet.relation,\n attributeToSet.targetAttribute\n );\n const isBidirectionnal =\n newRelationType !== undefined && !ONE_SIDE_RELATIONS.includes(newRelationType);\n\n if (isBidirectionnal) {\n const newTargetAttribute = {\n name: attributeToSet.targetAttribute,\n type: 'relation',\n relation: getOppositeRelation(attributeToSet.relation),\n targetAttribute: attributeToSet.name,\n target: type.uid,\n private: previousAttribute.private ?? attributeToSet.private,\n pluginOptions: previousAttribute.pluginOptions ?? attributeToSet.pluginOptions,\n ...(previousTarget.uid === newTarget.uid && previousTargetAttribute?.conditions\n ? { conditions: previousTargetAttribute.conditions }\n : {}),\n status: 'CHANGED',\n } as AnyAttribute;\n\n // create or recreate(at old index) targetAttribute\n if (previousTargetAttributeIndex !== -1 && previousTarget.uid === newTarget.uid) {\n // The counterpart is renamed on the target type: without a hop\n // there, the side owning the join table would lose its links.\n if (previousTargetAttribute) {\n applyRenameConsent(newTarget, previousTargetAttribute, newTargetAttribute, {\n recordRename: recordTargetRename,\n declineRename: declineTargetRename,\n });\n }\n\n // re-create at previousIdx if possible\n replaceAttributeAt(newTarget, previousTargetAttributeIndex, newTargetAttribute);\n } else {\n pushAttribute(newTarget, {\n ...newTargetAttribute,\n status: 'NEW',\n });\n }\n }\n },\n editCustomFieldAttribute: (state, action: PayloadAction<EditCustomFieldAttributePayload>) => {\n const { forTarget, targetUid, name, attributeToSet, recordRename, declineRename } =\n action.payload;\n\n const initialAttributeName = name;\n const type = getType(state, { forTarget, targetUid });\n\n const initialAttributeIndex = findAttributeIndex(type, initialAttributeName);\n const previousAttribute = type.attributes[initialAttributeIndex];\n\n setAttributeAt(type, initialAttributeIndex, attributeToSet as AnyAttribute);\n applyRenameConsent(type, previousAttribute, attributeToSet as AnyAttribute, {\n recordRename,\n declineRename,\n });\n renameConditionVars(type, previousAttribute, attributeToSet as AnyAttribute);\n },\n reloadPlugin: () => {\n return initialState;\n },\n removeComponentFromDynamicZone: (\n state,\n action: PayloadAction<RemoveComponentFromDynamicZonePayload>\n ) => {\n const { dzName, componentToRemoveIndex, forTarget, targetUid } = action.payload;\n\n const type =\n forTarget === 'contentType' ? state.contentTypes[targetUid] : state.components[targetUid];\n\n if (!type) {\n return;\n }\n\n const dzAttributeIndex = findAttributeIndex(type, dzName);\n const attr = type.attributes[dzAttributeIndex] as Schema.Attribute.DynamicZone;\n\n setStatus(type, 'CHANGED');\n setAttributeStatus(attr as AnyAttribute, 'CHANGED');\n attr.components.splice(componentToRemoveIndex, 1);\n },\n removeField: (state, action: PayloadAction<RemoveFieldPayload>) => {\n const { forTarget, targetUid, attributeToRemoveName } = action.payload;\n\n const type = getType(state, { forTarget, targetUid });\n\n const attributeToRemoveIndex = findAttributeIndex(type, attributeToRemoveName);\n const attribute = type.attributes[attributeToRemoveIndex];\n\n if (attribute.type === 'relation') {\n const { target, relation, targetAttribute: targetAttributeName } = attribute;\n const relationType = getRelationType(relation, targetAttributeName);\n\n const isBidirectionnal = !ONE_SIDE_RELATIONS.includes(relationType!);\n\n if (isBidirectionnal && targetAttributeName) {\n const targetContentType = getType(state, { forTarget, targetUid: target });\n const targetAttributeIndex = findAttributeIndex(targetContentType, targetAttributeName);\n\n removeAttributeAt(targetContentType, targetAttributeIndex);\n }\n }\n\n // Find all uid fields that have the targetField set to the field we are removing\n type.attributes.forEach((attribute) => {\n if (attribute.type === 'uid') {\n if (attribute.targetField === attributeToRemoveName) {\n delete attribute.targetField;\n }\n }\n });\n\n removeAttributeAt(type, attributeToRemoveIndex);\n },\n // only edits a component in practice\n updateComponentSchema: (state, action: PayloadAction<UpdateComponentSchemaPayload>) => {\n const { data, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type) {\n return;\n }\n\n updateType(type, {\n info: {\n displayName: data.displayName,\n icon: data.icon,\n },\n });\n },\n updateComponentUid: (state, action: PayloadAction<UpdateComponentUIDPayload>) => {\n const { newComponentUID, uid } = action.payload;\n\n const type = state.components[uid];\n if (!type || type.status !== 'NEW') {\n return;\n }\n\n if (newComponentUID !== uid) {\n const newType = { ...type, uid: newComponentUID };\n state.components[newComponentUID] = newType;\n delete state.components[uid];\n\n // update the uid in the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.map((component: UID.Component) => {\n if (component === uid) {\n return newComponentUID;\n }\n\n return component;\n });\n\n attribute.components = newComponents;\n }\n });\n\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n\n // update the uid in the other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n component.attributes.forEach((attribute) => {\n if (attribute.type === 'component' && attribute.component === uid) {\n attribute.component = newComponentUID;\n }\n });\n });\n }\n },\n updateSchema: (state, action: PayloadAction<UpdateSchemaPayload>) => {\n const { data, uid, folder } = action.payload;\n\n const { displayName, kind, draftAndPublish, pluginOptions } = data;\n\n const type = state.contentTypes[uid];\n if (!type) {\n return;\n }\n\n const previousKind = type.kind;\n\n updateType(type, {\n info: {\n displayName,\n },\n kind,\n options: {\n draftAndPublish,\n },\n pluginOptions,\n });\n\n if (kind && kind !== previousKind) {\n const oldSection = state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n\n // Apply the folder picker's choice after any kind relocation, so the\n // assignment lands in the content type's (possibly new) section.\n if (folder) {\n applyFolderAssignment(\n state.contentStructure.sections[sectionKeyForKind(kind)],\n uid as UID.ContentType,\n folder\n );\n }\n },\n deleteComponent: (state, action: PayloadAction<Internal.UID.Component>) => {\n const uid = action.payload;\n\n // remove the compo from the components\n if (state.components[uid].status === 'NEW') {\n delete state.components[uid];\n } else {\n setStatus(state.components[uid], 'REMOVED');\n }\n\n // remove the compo from the content types\n Object.keys(state.contentTypes).forEach((contentTypeUid) => {\n const contentType = state.contentTypes[contentTypeUid];\n\n // remove from dynamic zones\n contentType.attributes.forEach((attribute) => {\n if (attribute.type === 'dynamiczone') {\n const newComponents = attribute.components.filter(\n (component: unknown) => component !== uid\n );\n\n attribute.components = newComponents;\n }\n });\n\n const namesToRemove = contentType.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(contentType, name);\n });\n });\n\n // remove the compo from other components\n Object.keys(state.components).forEach((componentUid) => {\n const component = state.components[componentUid];\n\n const namesToRemove = component.attributes\n .filter((attribute) => attribute.type === 'component' && attribute.component === uid)\n .map((attribute) => attribute.name);\n\n namesToRemove.forEach((name) => {\n removeAttributeByName(component, name);\n });\n });\n },\n deleteContentType: (state, action: PayloadAction<Internal.UID.ContentType>) => {\n applyDeleteContentType(state, action.payload);\n },\n\n createFolder: (state, action: PayloadAction<CreateFolderPayload>) => {\n const { section, id, name: rawName, parentId } = action.payload;\n const name = rawName.trim();\n const { groups } = state.contentStructure.sections[section];\n\n if (parentId && getGroupDepth(groups, parentId) + 1 > MAX_FOLDER_DEPTH) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, parentId, name)) {\n return;\n }\n\n groups.push({ id, name, parent: parentId, children: [], status: 'NEW' });\n\n if (parentId) {\n const parent = findGroup(groups, parentId);\n\n if (parent) {\n parent.children.push({ type: 'group', id });\n setGroupStatus(parent, 'CHANGED');\n }\n }\n },\n renameFolder: (state, action: PayloadAction<RenameFolderPayload>) => {\n const { section, id, name: rawName } = action.payload;\n const name = rawName.trim();\n\n const { groups } = state.contentStructure.sections[section];\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n if (group.name === name) {\n return;\n }\n\n if (isFolderNameTakenBySibling(groups, group.parent, name, id)) {\n return;\n }\n\n group.name = name;\n setGroupStatus(group, 'CHANGED');\n },\n moveFolder: (state, action: PayloadAction<MoveFolderPayload>) => {\n const { section, id, newParentId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const group = findGroup(groups, id);\n if (!group) {\n return;\n }\n\n // Reject no-ops and cyclic moves\n if (newParentId === id || (newParentId && isDescendantGroup(groups, id, newParentId))) {\n return;\n }\n\n // Refuse moves that would exceed the maximum allowed depth.\n const newTopDepth = newParentId ? getGroupDepth(groups, newParentId) + 1 : 1;\n if (newTopDepth + getSubtreeHeight(groups, id) > MAX_FOLDER_DEPTH) {\n return;\n }\n\n // Refuse a move that would collide with an identically named sibling.\n if (isFolderNameTakenBySibling(groups, newParentId, group.name, id)) {\n return;\n }\n\n if (group.parent) {\n const oldParent = findGroup(groups, group.parent);\n\n if (oldParent) {\n // Remove from the old parent's list of children.\n const idx = oldParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === id;\n });\n\n if (idx !== -1) {\n oldParent.children.splice(idx, 1);\n }\n\n setGroupStatus(oldParent, 'CHANGED');\n }\n }\n\n group.parent = newParentId;\n setGroupStatus(group, 'CHANGED');\n\n if (newParentId) {\n const newParent = findGroup(groups, newParentId);\n\n if (newParent) {\n const entry = { type: 'group' as const, id };\n\n if (typeof index === 'number' && index >= 0 && index <= newParent.children.length) {\n newParent.children.splice(index, 0, entry);\n } else {\n newParent.children.push(entry);\n }\n\n setGroupStatus(newParent, 'CHANGED');\n }\n } else if (typeof index === 'number') {\n // If a content type is dropped into the root:\n // The root display order follows the array order of the\n // section's root-level groups because there's no root level\n // customization yet, so reposition the moved group among them.\n const currentIndex = groups.findIndex((candidate) => candidate.id === id);\n\n if (currentIndex !== -1) {\n const [moved] = groups.splice(currentIndex, 1);\n const rootIds = groups\n .filter((candidate) => candidate.parent === null)\n .map((candidate) => candidate.id);\n const anchorId = rootIds[index];\n const insertAt = anchorId\n ? groups.findIndex((candidate) => candidate.id === anchorId)\n : groups.length;\n\n groups.splice(insertAt === -1 ? groups.length : insertAt, 0, moved);\n }\n }\n },\n deleteFolderOnly: (state, action: PayloadAction<DeleteFolderPayload>) => {\n const { section, id: groupToDeleteId } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const groupToDeleteParentId = groupToDelete.parent;\n\n // Reparenting a child folder into its grandparent must preserve the same sibling-name\n // invariant as create, rename, and move. Do this before mutating any group state.\n if (getDeleteFolderOnlySiblingNameCollisions(groups, groupToDeleteId).length > 0) {\n return;\n }\n\n // It is necessary to clone the children because we must subsequently mutate the original group.children array when we splice it out of its parent.\n const children = groupToDelete.children.map((child) => ({ ...child }));\n\n // Children of a deleted folder inherit the deleted folder's parent.\n children.forEach((child) => {\n if (child.type === 'group') {\n const childGroup = findGroup(groups, child.id);\n\n if (childGroup) {\n childGroup.parent = groupToDeleteParentId;\n }\n }\n });\n\n if (groupToDeleteParentId) {\n const groupToDeleteParent = findGroup(groups, groupToDeleteParentId);\n\n if (groupToDeleteParent) {\n // Splice the deleted folder's children of the deleted folder into their new parent at the position of the deleted folder.\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1, ...children);\n } else {\n groupToDeleteParent.children.push(...children);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Finally, remove the deleted folder from its section's list of groups.\n const groupIndex = groups.findIndex((candidate) => {\n return candidate.id === groupToDeleteId;\n });\n\n if (groupIndex !== -1) {\n groups.splice(groupIndex, 1);\n }\n },\n deleteFolderAndContent: (state, action: PayloadAction<DeleteFolderAndContentPayload>) => {\n const { section, id: groupToDeleteId, contentTypeUids } = action.payload;\n\n contentTypeUids.forEach((uid) => {\n applyDeleteContentType(state, uid);\n });\n\n const { groups } = state.contentStructure.sections[section];\n\n const groupToDelete = findGroup(groups, groupToDeleteId);\n if (!groupToDelete) {\n return;\n }\n\n const toRemove = new Set<string>();\n const collect = (currentGroupId: string) => {\n toRemove.add(currentGroupId);\n\n const currentGroup = findGroup(groups, currentGroupId);\n\n for (const child of currentGroup?.children ?? []) {\n if (child.type !== 'group') continue;\n collect(child.id);\n }\n };\n\n collect(groupToDeleteId);\n\n if (groupToDelete.parent) {\n const groupToDeleteParent = findGroup(groups, groupToDelete.parent);\n\n if (groupToDeleteParent) {\n const groupToDeleteIndex = groupToDeleteParent.children.findIndex((child) => {\n return child.type === 'group' && child.id === groupToDeleteId;\n });\n\n if (groupToDeleteIndex !== -1) {\n groupToDeleteParent.children.splice(groupToDeleteIndex, 1);\n }\n\n setGroupStatus(groupToDeleteParent, 'CHANGED');\n }\n }\n\n // Removes the group entry and all its descendants from the contentStructure.\n state.contentStructure.sections[section].groups = groups.filter((candidate) => {\n return !toRemove.has(candidate.id);\n });\n },\n assignContentTypeToFolder: (\n state,\n action: PayloadAction<AssignContentTypeToFolderPayload>\n ) => {\n const { section, uid, targetGroupId, index } = action.payload;\n const { groups } = state.contentStructure.sections[section];\n\n removeContentTypeChild(groups, uid);\n\n if (targetGroupId) {\n const targetGroup = findGroup(groups, targetGroupId);\n\n if (targetGroup) {\n const entry = { type: 'contentType' as const, uid };\n\n if (typeof index === 'number' && index >= 0 && index <= targetGroup.children.length) {\n targetGroup.children.splice(index, 0, entry);\n } else {\n targetGroup.children.push(entry);\n }\n\n setGroupStatus(targetGroup, 'CHANGED');\n }\n }\n },\n reorderFolderChildren: (state, action: PayloadAction<ReorderFolderChildrenPayload>) => {\n const { section, groupId, from, to } = action.payload;\n\n const group = findGroup(state.contentStructure.sections[section].groups, groupId);\n if (!group) {\n return;\n }\n\n const child = group.children[from];\n if (!child) {\n return;\n }\n\n group.children.splice(from, 1);\n group.children.splice(to, 0, child);\n\n setGroupStatus(group, 'CHANGED');\n },\n\n applyChange(\n state,\n reducerAction: PayloadAction<{\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }>\n ) {\n const { action, schema } = reducerAction.payload;\n\n switch (action) {\n case 'add':\n {\n const uid = schema.uid;\n\n if (schema.modelType === 'component') {\n state.components[uid] = schema;\n } else {\n state.contentTypes[uid] = schema;\n }\n }\n break;\n case 'update':\n {\n const uid = schema.uid;\n\n // Find the schema, if the state was \"create\", we should keep it as it was before\n\n if (schema.modelType === 'component') {\n const component = state.components[uid];\n state.components[uid] = {\n ...schema,\n ...mergeRenameState(component, schema),\n status: component?.status === 'NEW' ? 'NEW' : schema.status,\n };\n } else {\n const contentType = state.contentTypes[uid];\n const previousKind = contentType?.kind;\n\n state.contentTypes[uid] = {\n ...schema,\n ...mergeRenameState(contentType, schema),\n status: contentType?.status === 'NEW' ? 'NEW' : schema.status,\n };\n\n if (previousKind && schema.kind && schema.kind !== previousKind) {\n const oldSection =\n state.contentStructure.sections[sectionKeyForKind(previousKind)];\n removeContentTypeChild(oldSection.groups, uid);\n }\n }\n }\n break;\n case 'delete': {\n const uid = schema.uid;\n const isComponent = schema.modelType === 'component';\n // It's a component that has yet not been added\n if (isComponent) {\n const exists = state.components[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.components[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.components[uid];\n } else {\n state.components[uid].status = 'REMOVED';\n }\n } else {\n const exists = state.contentTypes[uid];\n if (!exists) {\n return;\n }\n\n const isUnsaved = state.contentTypes[uid]?.status === 'NEW';\n if (isUnsaved) {\n delete state.contentTypes[uid];\n } else {\n state.contentTypes[uid].status = 'REMOVED';\n }\n\n Object.values(state.contentStructure.sections).forEach((section) => {\n removeContentTypeChild(section.groups, uid);\n });\n }\n\n break;\n }\n }\n },\n },\n },\n\n {\n limit: 50,\n excludeActionsFromHistory: ['reloadPlugin', 'init'],\n stateSelector: (state) => {\n if (!state) {\n return {};\n }\n\n return {\n components: state.components,\n contentTypes: state.contentTypes,\n contentStructure: state.contentStructure,\n };\n },\n discard: (state) => {\n state.components = state.initialComponents;\n state.contentTypes = state.initialContentTypes;\n state.contentStructure = state.initialContentStructure;\n },\n }\n);\n\nexport type State = ReturnType<typeof slice.reducer>;\nexport const { reducer, actions } = slice;\nexport { initialState };\n"],"names":["initialState","components","contentTypes","initialComponents","initialContentTypes","contentStructure","createEmptyContentStructure","initialContentStructure","reservedNames","models","attributes","isLoading","ONE_SIDE_RELATIONS","getOppositeRelation","originalRelation","findAttributeIndex","type","attributeToFind","findIndex","name","getType","state","forTarget","targetUid","setStatus","status","getNewStatus","oldStatus","newStatus","getNewGroupStatus","setAttributeStatus","attribute","createAttribute","properties","applyPrivateSearchDefault","recordRename","previousAttribute","newAttribute","oldName","newName","isStorageCompatibleRename","renames","push","recordDeclinedRename","declinedRenameNames","uniq","applyRenameConsent","shouldRecordRename","declineRename","shouldDecline","renameConditionVars","forEach","getVisibleConditionEntries","conditions","fieldVar","var","setAttributeAt","index","pushAttribute","removeAttributeAt","attr","splice","replaceAttributeAt","removeAttributeByName","idx","mergeRenameState","existing","incoming","length","updateType","data","merge","findGroup","groups","id","find","group","setGroupStatus","removeContentTypeChild","uid","removed","groupIndex","children","child","applyFolderAssignment","section","folder","targetGroupId","findSiblingFolderByName","newFolderName","trim","newFolderId","parent","targetGroup","isDescendantGroup","ancestorId","potentialDescendantId","current","getGroupDepth","depth","getSubtreeHeight","height","Math","max","applyDeleteContentType","startsWith","plugin","Object","values","sections","keys","componentUid","component","namesToRemove","filter","target","map","contentTypeUid","contentType","slice","createUndoRedoSlice","reducers","init","action","payload","structure","createComponentSchema","componentCategory","newSchema","category","modelName","displayName","globalId","info","icon","modelType","createSchema","singularName","pluralName","kind","draftAndPublish","pluginOptions","visible","restrictRelationsTo","options","sectionKeyForKind","addAttribute","attributeToSet","omit","targetAttribute","relation","relationType","getRelationType","isBidirectionalRelation","undefined","includes","oppositeAttribute","private","targetType","moveAttribute","from","to","addCustomFieldAttribute","addCreatedComponentToDynamicZone","dynamicZoneTarget","componentsToAdd","dzAttributeIndex","changeDynamicZoneComponents","newComponents","currentDZComponents","updatedComponents","makeUnique","editAttribute","recordTargetRename","declineTargetRename","initialAttributeIndex","previousTarget","newTarget","previousTargetAttributeIndex","previousTargetAttribute","newRelationType","isBidirectionnal","newTargetAttribute","editCustomFieldAttribute","initialAttributeName","reloadPlugin","removeComponentFromDynamicZone","dzName","componentToRemoveIndex","removeField","attributeToRemoveName","attributeToRemoveIndex","targetAttributeName","targetContentType","targetAttributeIndex","targetField","updateComponentSchema","updateComponentUid","newComponentUID","newType","updateSchema","previousKind","oldSection","deleteComponent","deleteContentType","createFolder","rawName","parentId","MAX_FOLDER_DEPTH","isFolderNameTakenBySibling","renameFolder","moveFolder","newParentId","newTopDepth","oldParent","newParent","entry","currentIndex","candidate","moved","rootIds","anchorId","insertAt","deleteFolderOnly","groupToDeleteId","groupToDelete","groupToDeleteParentId","getDeleteFolderOnlySiblingNameCollisions","childGroup","groupToDeleteParent","groupToDeleteIndex","deleteFolderAndContent","contentTypeUids","toRemove","Set","collect","currentGroupId","add","currentGroup","has","assignContentTypeToFolder","reorderFolderChildren","groupId","applyChange","reducerAction","schema","isComponent","exists","isUnsaved","limit","excludeActionsFromHistory","stateSelector","discard","reducer","actions"],"mappings":";;;;;;;;;;;;;;;;;;;AAqDA,MAAMA,YAAAA,GAAqC;AACzCC,IAAAA,UAAAA,EAAY,EAAC;AACbC,IAAAA,YAAAA,EAAc,EAAC;AACfC,IAAAA,iBAAAA,EAAmB,EAAC;AACpBC,IAAAA,mBAAAA,EAAqB,EAAC;IACtBC,gBAAAA,EAAkBC,4CAAAA,EAAAA;IAClBC,uBAAAA,EAAyBD,4CAAAA,EAAAA;IACzBE,aAAAA,EAAe;AACbC,QAAAA,MAAAA,EAAQ,EAAE;AACVC,QAAAA,UAAAA,EAAY;AACd,KAAA;IACAC,SAAAA,EAAW;AACb;AAEA,MAAMC,kBAAAA,GAAqB;AAAC,IAAA,QAAA;AAAU,IAAA;AAAU,CAAA;AAQhD,MAAMC,sBAAsB,CAACC,gBAAAA,GAAAA;AAC3B,IAAA,IAAIA,qBAAqB,WAAA,EAAa;QACpC,OAAO,WAAA;AACT,IAAA;AAEA,IAAA,IAAIA,qBAAqB,WAAA,EAAa;QACpC,OAAO,WAAA;AACT,IAAA;IAEA,OAAOA,gBAAAA;AACT,CAAA;AAEA,MAAMC,kBAAAA,GAAqB,CAACC,IAAAA,EAA+BC,eAAAA,GAAAA;IACzD,OAAOD,IAAAA,CAAKN,UAAU,CAACQ,SAAS,CAAC,CAAC,EAAEC,IAAI,EAAoB,GAAKA,IAAAA,KAASF,eAAAA,CAAAA;AAC5E,CAAA;AAkLA,MAAMG,UAAU,CACdC,KAAAA,EACA,EACEC,SAAS,EACTC,SAAS,EAIV,GAAA;IAED,OAAOD,SAAAA,KAAc,aAAA,GAAgBD,KAAAA,CAAMnB,YAAY,CAACqB,UAAU,GAAGF,KAAAA,CAAMpB,UAAU,CAACsB,SAAAA,CAAU;AAClG,CAAA;AAEA;AACA,MAAMC,SAAAA,GAAY,CAACR,IAAAA,EAA+BS,MAAAA,GAAAA;AAChD,IAAA,OAAQT,KAAKS,MAAM;QACjB,KAAK,KAAA;QACL,KAAK,SAAA;AAAW,YAAA;AACd,gBAAA;AACF,YAAA;AACA,QAAA;AAAS,YAAA;AACPT,gBAAAA,IAAAA,CAAKS,MAAM,GAAGA,MAAAA;AAChB,YAAA;AACF;AACF,CAAA;AAEA,MAAMC,YAAAA,GAAe,CAACC,SAAAA,EAA+BC,SAAAA,GAAAA;IACnD,IAAID,SAAAA,KAAc,KAAA,IAASA,SAAAA,KAAc,SAAA,EAAW;QAClD,OAAOA,SAAAA;AACT,IAAA;IAEA,OAAOC,SAAAA;AACT,CAAA;AAEA,MAAMC,iBAAAA,GAAoB,CAACF,SAAAA,EAAwBC,SAAAA,GAAAA;AACjD,IAAA,IAAID,cAAc,KAAA,EAAO;QACvB,OAAOA,SAAAA;AACT,IAAA;IAEA,OAAOC,SAAAA;AACT,CAAA;AAEA,MAAME,kBAAAA,GAAqB,CAACC,SAAAA,EAAgCN,MAAAA,GAAAA;AAC1DM,IAAAA,SAAAA,CAAUN,MAAM,GAAGC,YAAAA,CAAaK,SAAAA,CAAUN,MAAM,EAAEA,MAAAA,CAAAA;AACpD,CAAA;AAEA,MAAMO,kBAAkB,CAACC,UAAAA,GAAAA;IACvB,OAAO;AACL,QAAA,GAAGC,oDAA0BD,UAAAA,CAAW;QACxCR,MAAAA,EAAQ;AACV,KAAA;AACF,CAAA;AAEA;;;;;;;;;;;;AAYC,IACD,MAAMU,YAAAA,GAAe,CACnBnB,IAAAA,EACAoB,iBAAAA,EACAC,YAAAA,GAAAA;IAEA,IAAID,iBAAAA,CAAkBX,MAAM,KAAK,KAAA,EAAO;AACtC,QAAA;AACF,IAAA;IAEA,MAAMa,OAAAA,GAAUF,kBAAkBjB,IAAI;AACtC,IAAA,MAAMoB,UAAUF,YAAAA,EAAclB,IAAAA;IAC9B,IAAI,CAACoB,OAAAA,IAAWD,OAAAA,KAAYC,OAAAA,EAAS;AACnC,QAAA;AACF,IAAA;IAEA,IAAI,CAACC,mDAAAA,CAA0BJ,iBAAAA,EAAmBC,YAAAA,CAAAA,EAAe;AAC/D,QAAA;AACF,IAAA;IAEA,IAAI,CAACrB,IAAAA,CAAKyB,OAAO,EAAE;QACjBzB,IAAAA,CAAKyB,OAAO,GAAG,EAAE;AACnB,IAAA;IAEAzB,IAAAA,CAAKyB,OAAO,CAACC,IAAI,CAAC;AAAEJ,QAAAA,OAAAA;AAASC,QAAAA;AAAQ,KAAA,CAAA;AACvC,CAAA;AAEA;;;AAGC,IACD,MAAMI,oBAAAA,GAAuB,CAC3B3B,IAAAA,EACAoB,iBAAAA,EACAC,YAAAA,GAAAA;IAEA,MAAMC,OAAAA,GAAUF,kBAAkBjB,IAAI;AACtC,IAAA,MAAMoB,UAAUF,YAAAA,EAAclB,IAAAA;IAC9B,IAAI,CAACoB,OAAAA,IAAWD,OAAAA,KAAYC,OAAAA,EAAS;AACnC,QAAA;AACF,IAAA;IAEAvB,IAAAA,CAAK4B,mBAAmB,GAAGC,qBAAAA,CAAK;WAAK7B,IAAAA,CAAK4B,mBAAmB,IAAI,EAAE;AAAGN,QAAAA,OAAAA;AAASC,QAAAA;AAAQ,KAAA,CAAA;AACzF,CAAA;AAEA;;;AAGC,IACD,MAAMO,kBAAAA,GAAqB,CACzB9B,IAAAA,EACAoB,mBACAC,YAAAA,EACA,EACEF,YAAAA,EAAcY,kBAAAA,GAAqB,IAAI,EACvCC,aAAAA,EAAeC,aAAAA,GAAgB,KAAK,EACf,GAAA;AAEvB,IAAA,IAAIA,aAAAA,EAAe;AACjBN,QAAAA,oBAAAA,CAAqB3B,MAAMoB,iBAAAA,EAAmBC,YAAAA,CAAAA;AAC9C,QAAA;AACF,IAAA;AAEA,IAAA,IAAIU,kBAAAA,EAAoB;AACtBZ,QAAAA,YAAAA,CAAanB,MAAMoB,iBAAAA,EAAmBC,YAAAA,CAAAA;AACxC,IAAA;AACF,CAAA;AAEA;;;;AAIC,IACD,MAAMa,mBAAAA,GAAsB,CAC1BlC,IAAAA,EACAoB,iBAAAA,EACAC,YAAAA,GAAAA;IAEA,MAAMC,OAAAA,GAAUF,kBAAkBjB,IAAI;AACtC,IAAA,MAAMoB,UAAUF,YAAAA,EAAclB,IAAAA;IAC9B,IAAI,CAACoB,OAAAA,IAAWD,OAAAA,KAAYC,OAAAA,EAAS;AACnC,QAAA;AACF,IAAA;AAEAvB,IAAAA,IAAAA,CAAKN,UAAU,CAACyC,OAAO,CAAC,CAACpB,SAAAA,GAAAA;QACvBqB,qCAAAA,CAA2BrB,SAAAA,CAAUsB,UAAU,CAAA,CAAEF,OAAO,CAAC,CAAC,EAAEG,QAAQ,EAAE,GAAA;YACpE,IAAIA,QAAAA,CAASC,GAAG,KAAKjB,OAAAA,EAAS;AAC5BgB,gBAAAA,QAAAA,CAASC,GAAG,GAAGhB,OAAAA;AACfT,gBAAAA,kBAAAA,CAAmBC,SAAAA,EAAW,SAAA,CAAA;AAChC,YAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA,CAAA,CAAA;AACF,CAAA;AAEA,MAAMyB,cAAAA,GAAiB,CAACxC,IAAAA,EAA+ByC,KAAAA,EAAe1B,SAAAA,GAAAA;AACpE,IAAA,MAAMK,iBAAAA,GAAoBpB,IAAAA,CAAKN,UAAU,CAAC+C,KAAAA,CAAM;AAEhD,IAAA,MAAM7B,SAAAA,GAAYF,YAAAA,CAAaU,iBAAAA,CAAkBX,MAAM,EAAE,SAAA,CAAA;IAEzDT,IAAAA,CAAKN,UAAU,CAAC+C,KAAAA,CAAM,GAAG;AACvB,QAAA,GAAGvB,oDAA0BH,SAAAA,CAAU;QACvCN,MAAAA,EAAQG;AACV,KAAA;AAEAJ,IAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAClB,CAAA;AAEA,MAAM0C,aAAAA,GAAgB,CAAC1C,IAAAA,EAA+Be,SAAAA,GAAAA;IACpDf,IAAAA,CAAKN,UAAU,CAACgC,IAAI,CAACX,SAAAA,CAAAA;AACrBP,IAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAClB,CAAA;AAEA,MAAM2C,iBAAAA,GAAoB,CAAC3C,IAAAA,EAA+ByC,KAAAA,GAAAA;AACxD,IAAA,MAAMG,IAAAA,GAAO5C,IAAAA,CAAKN,UAAU,CAAC+C,KAAAA,CAAM;AAEnCjC,IAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;IAEhB,IAAI4C,IAAAA,CAAKnC,MAAM,KAAK,KAAA,EAAO;AACzBT,QAAAA,IAAAA,CAAKN,UAAU,CAACmD,MAAM,CAACJ,KAAAA,EAAO,CAAA,CAAA;IAChC,CAAA,MAAO;AACL3B,QAAAA,kBAAAA,CAAmB8B,IAAAA,EAAM,SAAA,CAAA;AAC3B,IAAA;AACF,CAAA;AAEA,MAAME,kBAAAA,GAAqB,CACzB9C,IAAAA,EACAyC,KAAAA,EACA1B,SAAAA,GAAAA;IAEAf,IAAAA,CAAKN,UAAU,CAAC+C,KAAAA,CAAM,GAAG1B,SAAAA;AACzBP,IAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAClB,CAAA;AAEA,MAAM+C,qBAAAA,GAAwB,CAAC/C,IAAAA,EAA+BG,IAAAA,GAAAA;IAC5D,MAAM6C,GAAAA,GAAMhD,IAAAA,CAAKN,UAAU,CAACQ,SAAS,CAAC,CAAC0C,IAAAA,GAASA,IAAAA,CAAKzC,IAAI,KAAKA,IAAAA,CAAAA;IAE9D,IAAI6C,GAAAA,KAAQ,EAAC,EAAG;AACd,QAAA;AACF,IAAA;AAEA,IAAA,MAAMJ,IAAAA,GAAO5C,IAAAA,CAAKN,UAAU,CAACsD,GAAAA,CAAI;AAEjCxC,IAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;IAEhB,IAAI4C,IAAAA,CAAKnC,MAAM,KAAK,KAAA,EAAO;AACzBT,QAAAA,IAAAA,CAAKN,UAAU,CAACmD,MAAM,CAACG,GAAAA,EAAK,CAAA,CAAA;IAC9B,CAAA,MAAO;AACLlC,QAAAA,kBAAAA,CAAmB8B,IAAAA,EAAM,SAAA,CAAA;AAC3B,IAAA;AACF,CAAA;AAEA;;;;;;IAOA,MAAMK,gBAAAA,GAAmB,CACvBC,QAAAA,EACAC,QAAAA,GAAAA;AAEA,IAAA,MAAM1B,OAAAA,GAAU;AAAKyB,QAAAA,GAAAA,QAAAA,EAAUzB,WAAW,EAAE;WAAO0B,QAAAA,CAAS1B,OAAO,IAAI;AAAI,KAAA;AAC3E,IAAA,MAAMG,sBAAsBC,qBAAAA,CAAK;AAC3BqB,QAAAA,GAAAA,QAAAA,EAAUtB,uBAAuB,EAAE;WACnCuB,QAAAA,CAASvB,mBAAmB,IAAI;AACrC,KAAA,CAAA;IAED,OAAO;QACL,GAAIH,OAAAA,CAAQ2B,MAAM,GAAG,CAAA,GAAI;AAAE3B,YAAAA;AAAQ,SAAA,GAAI,EAAE;QACzC,GAAIG,mBAAAA,CAAoBwB,MAAM,GAAG,CAAA,GAAI;AAAExB,YAAAA;AAAoB,SAAA,GAAI;AACjE,KAAA;AACF,CAAA;AAEA,MAAMyB,UAAAA,GAAa,CAACrD,IAAAA,EAA+BsD,IAAAA,GAAAA;AACjDC,IAAAA,sBAAAA,CAAMvD,IAAAA,EAAMsD,IAAAA,CAAAA;AACZ9C,IAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAClB,CAAA;AAEA,MAAMwD,SAAAA,GAAY,CAACC,MAAAA,EAAiCC,EAAAA,GAAAA;AAClD,IAAA,OAAOD,OAAOE,IAAI,CAAC,CAACC,KAAAA,GAAUA,KAAAA,CAAMF,EAAE,KAAKA,EAAAA,CAAAA;AAC7C,CAAA;AAEA,MAAMG,cAAAA,GAAiB,CAACD,KAAAA,EAA8BnD,MAAAA,GAAAA;AACpDmD,IAAAA,KAAAA,CAAMnD,MAAM,GAAGI,iBAAAA,CAAkB+C,KAAAA,CAAMnD,MAAM,EAAEA,MAAAA,CAAAA;AACjD,CAAA;AAEA;;;IAIA,MAAMqD,sBAAAA,GAAyB,CAACL,MAAAA,EAAiCM,GAAAA,GAAAA;AAC/D,IAAA,IAAIC,OAAAA,GAAU,KAAA;IAEd,KAAK,MAAMJ,SAASH,MAAAA,CAAQ;AAC1B,QAAA,MAAMQ,aAAaL,KAAAA,CAAMM,QAAQ,CAAChE,SAAS,CAAC,CAACiE,KAAAA,GAAAA;AAC3C,YAAA,OAAOA,MAAMnE,IAAI,KAAK,aAAA,IAAiBmE,KAAAA,CAAMJ,GAAG,KAAKA,GAAAA;AACvD,QAAA,CAAA,CAAA;QAEA,IAAIE,UAAAA,KAAe,EAAC,EAAG;AACrBL,YAAAA,KAAAA,CAAMM,QAAQ,CAACrB,MAAM,CAACoB,UAAAA,EAAY,CAAA,CAAA;AAClCJ,YAAAA,cAAAA,CAAeD,KAAAA,EAAO,SAAA,CAAA;YACtBI,OAAAA,GAAU,IAAA;AACZ,QAAA;AACF,IAAA;IAEA,OAAOA,OAAAA;AACT,CAAA;AAEA;;;;;;;AAOC,IACD,MAAMI,qBAAAA,GAAwB,CAC5BC,OAAAA,EACAN,GAAAA,EACAO,MAAAA,GAAAA;IAEA,MAAM,EAAEb,MAAM,EAAE,GAAGY,OAAAA;AAEnBP,IAAAA,sBAAAA,CAAuBL,MAAAA,EAAQM,GAAAA,CAAAA;IAE/B,IAAIQ,aAAAA;AAEJ,IAAA,IAAI,iBAAiBD,MAAAA,EAAQ;;;;;AAK3B,QAAA,MAAMpB,QAAAA,GAAWsB,wCAAAA,CAAwBf,MAAAA,EAAQ,IAAA,EAAMa,OAAOG,aAAa,CAAA;AAE3E,QAAA,IAAIvB,QAAAA,EAAU;AACZqB,YAAAA,aAAAA,GAAgBrB,SAASQ,EAAE;QAC7B,CAAA,MAAO;AACLD,YAAAA,MAAAA,CAAO/B,IAAI,CAAC;gBACVvB,IAAAA,EAAMmE,MAAAA,CAAOG,aAAa,CAACC,IAAI,EAAA;AAC/BhB,gBAAAA,EAAAA,EAAIY,OAAOK,WAAW;gBACtBC,MAAAA,EAAQ,IAAA;AACRV,gBAAAA,QAAAA,EAAU,EAAE;gBACZzD,MAAAA,EAAQ;AACV,aAAA,CAAA;AAEA8D,YAAAA,aAAAA,GAAgBD,OAAOK,WAAW;AACpC,QAAA;IACF,CAAA,MAAO;AACLJ,QAAAA,aAAAA,GAAgBD,OAAOC,aAAa;AACtC,IAAA;AAEA,IAAA,IAAI,CAACA,aAAAA,EAAe;AAClB,QAAA;AACF,IAAA;IAEA,MAAMM,WAAAA,GAAcrB,UAAUC,MAAAA,EAAQc,aAAAA,CAAAA;AAEtC,IAAA,IAAIM,WAAAA,EAAa;QACfA,WAAAA,CAAYX,QAAQ,CAACxC,IAAI,CAAC;YAAE1B,IAAAA,EAAM,aAAA;AAAe+D,YAAAA;AAAI,SAAA,CAAA;AACrDF,QAAAA,cAAAA,CAAegB,WAAAA,EAAa,SAAA,CAAA;AAC9B,IAAA;AACF,CAAA;AAEA;;AAEC,IACD,MAAMC,iBAAAA,GAAoB,CACxBrB,MAAAA,EACAsB,UAAAA,EACAC,qBAAAA,GAAAA;IAEA,IAAIC,OAAAA,GAAUzB,UAAUC,MAAAA,EAAQuB,qBAAAA,CAAAA;AAEhC,IAAA,MAAOC,OAAAA,IAAWA,OAAAA,CAAQL,MAAM,KAAK,IAAA,CAAM;QACzC,IAAIK,OAAAA,CAAQL,MAAM,KAAKG,UAAAA,EAAY;YACjC,OAAO,IAAA;AACT,QAAA;QAEAE,OAAAA,GAAUzB,SAAAA,CAAUC,MAAAA,EAAQwB,OAAAA,CAAQL,MAAM,CAAA;AAC5C,IAAA;IAEA,OAAO,KAAA;AACT,CAAA;AAEA,MAAMM,aAAAA,GAAgB,CAACzB,MAAAA,EAAiCC,EAAAA,GAAAA;AACtD,IAAA,IAAIyB,KAAAA,GAAQ,CAAA;IACZ,IAAIF,OAAAA,GAAUzB,UAAUC,MAAAA,EAAQC,EAAAA,CAAAA;AAEhC,IAAA,MAAOuB,OAAAA,IAAWA,OAAAA,CAAQL,MAAM,KAAK,IAAA,CAAM;QACzCK,OAAAA,GAAUzB,SAAAA,CAAUC,MAAAA,EAAQwB,OAAAA,CAAQL,MAAM,CAAA;QAC1CO,KAAAA,IAAS,CAAA;AACX,IAAA;IAEA,OAAOA,KAAAA;AACT,CAAA;AAEA;;IAGA,MAAMC,gBAAAA,GAAmB,CAAC3B,MAAAA,EAAiCC,EAAAA,GAAAA;IACzD,MAAME,KAAAA,GAAQJ,UAAUC,MAAAA,EAAQC,EAAAA,CAAAA;AAEhC,IAAA,IAAI,CAACE,KAAAA,EAAO;QACV,OAAO,CAAA;AACT,IAAA;AAEA,IAAA,IAAIyB,MAAAA,GAAS,CAAA;AAEb,IAAA,KAAK,MAAMlB,KAAAA,IAASP,KAAAA,CAAMM,QAAQ,CAAE;QAClC,IAAIC,KAAAA,CAAMnE,IAAI,KAAK,OAAA,EAAS;QAC5BqF,MAAAA,GAASC,IAAAA,CAAKC,GAAG,CAACF,MAAAA,EAAQ,IAAID,gBAAAA,CAAiB3B,MAAAA,EAAQU,MAAMT,EAAE,CAAA,CAAA;AACjE,IAAA;IAEA,OAAO2B,MAAAA;AACT,CAAA;AAEA,MAAMG,sBAAAA,GAAyB,CAACnF,KAAAA,EAA6B0D,GAAAA,GAAAA;AAC3D,IAAA,MAAM/D,IAAAA,GAAOK,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI;;;IAIpC,IAAI,CAAC/D,IAAAA,IAAQ,CAACA,IAAAA,CAAK+D,GAAG,CAAC0B,UAAU,CAAC,OAAA,CAAA,IAAYzF,IAAAA,CAAK0F,MAAM,EAAE;AACzD,QAAA;AACF,IAAA;;IAGA,IAAI1F,IAAAA,CAAKS,MAAM,KAAK,KAAA,EAAO;QACzB,OAAOJ,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI;IAChC,CAAA,MAAO;AACLvD,QAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAClB,IAAA;;IAGA2F,MAAAA,CAAOC,MAAM,CAACvF,KAAAA,CAAMhB,gBAAgB,CAACwG,QAAQ,CAAA,CAAE1D,OAAO,CAAC,CAACkC,OAAAA,GAAAA;QACtDP,sBAAAA,CAAuBO,OAAAA,CAAQZ,MAAM,EAAEM,GAAAA,CAAAA;AACzC,IAAA,CAAA,CAAA;;AAGA4B,IAAAA,MAAAA,CAAOG,IAAI,CAACzF,KAAAA,CAAMpB,UAAU,CAAA,CAAEkD,OAAO,CAAC,CAAC4D,YAAAA,GAAAA;AACrC,QAAA,MAAMC,SAAAA,GAAY3F,KAAAA,CAAMpB,UAAU,CAAC8G,YAAAA,CAAa;QAEhD,MAAME,aAAAA,GAAgBD,UAAUtG,UAAU,CACvCwG,MAAM,CAAC,CAACnF,YAAcA,SAAAA,CAAUf,IAAI,KAAK,UAAA,IAAce,SAAAA,CAAUoF,MAAM,KAAKpC,GAAAA,CAAAA,CAC5EqC,GAAG,CAAC,CAACrF,SAAAA,GAAcA,SAAAA,CAAUZ,IAAI,CAAA;QAEpC8F,aAAAA,CAAc9D,OAAO,CAAC,CAAChC,IAAAA,GAAAA;AACrB4C,YAAAA,qBAAAA,CAAsBiD,SAAAA,EAAW7F,IAAAA,CAAAA;AACnC,QAAA,CAAA,CAAA;AACF,IAAA,CAAA,CAAA;;AAGAwF,IAAAA,MAAAA,CAAOG,IAAI,CAACzF,KAAAA,CAAMnB,YAAY,CAAA,CAAEiD,OAAO,CAAC,CAACkE,cAAAA,GAAAA;AACvC,QAAA,MAAMC,WAAAA,GAAcjG,KAAAA,CAAMnB,YAAY,CAACmH,cAAAA,CAAe;QAEtD,MAAMJ,aAAAA,GAAgBK,YAAY5G,UAAU,CACzCwG,MAAM,CAAC,CAACnF,YAAcA,SAAAA,CAAUf,IAAI,KAAK,UAAA,IAAce,SAAAA,CAAUoF,MAAM,KAAKpC,GAAAA,CAAAA,CAC5EqC,GAAG,CAAC,CAACrF,SAAAA,GAAcA,SAAAA,CAAUZ,IAAI,CAAA;QAEpC8F,aAAAA,CAAc9D,OAAO,CAAC,CAAChC,IAAAA,GAAAA;AACrB4C,YAAAA,qBAAAA,CAAsBuD,WAAAA,EAAanG,IAAAA,CAAAA;AACrC,QAAA,CAAA,CAAA;AACF,IAAA,CAAA,CAAA;AACF,CAAA;AAEA,MAAMoG,QAAQC,4BAAAA,CACZ;IACErG,IAAAA,EAAM,cAAA;AACNnB,IAAAA,YAAAA;IACAyH,QAAAA,EAAU;AACRC,QAAAA,IAAAA,EAAM,CAACrG,KAAAA,EAAOsG,MAAAA,GAAAA;YACZ,MAAM,EAAE1H,UAAU,EAAEC,YAAY,EAAEM,aAAa,oBAAEH,kBAAgB,EAAE,GAAGsH,MAAAA,CAAOC,OAAO;AAEpFvG,YAAAA,KAAAA,CAAMpB,UAAU,GAAGA,UAAAA;AACnBoB,YAAAA,KAAAA,CAAMlB,iBAAiB,GAAGF,UAAAA;AAC1BoB,YAAAA,KAAAA,CAAMjB,mBAAmB,GAAGF,YAAAA;AAC5BmB,YAAAA,KAAAA,CAAMnB,YAAY,GAAGA,YAAAA;AACrBmB,YAAAA,KAAAA,CAAMb,aAAa,GAAGA,aAAAA;AAEtB,YAAA,MAAMqH,YAAYxH,kBAAAA,IAAoBC,4CAAAA,EAAAA;AACtCe,YAAAA,KAAAA,CAAMd,uBAAuB,GAAGsH,SAAAA;AAChCxG,YAAAA,KAAAA,CAAMhB,gBAAgB,GAAGwH,SAAAA;AAEzBxG,YAAAA,KAAAA,CAAMV,SAAS,GAAG,KAAA;AACpB,QAAA,CAAA;AACAmH,QAAAA,qBAAAA,EAAuB,CAACzG,KAAAA,EAAOsG,MAAAA,GAAAA;YAC7B,MAAM,EAAE5C,GAAG,EAAET,IAAI,EAAEyD,iBAAiB,EAAE,GAAGJ,MAAAA,CAAOC,OAAO;AAEvD,YAAA,MAAMI,SAAAA,GAAuB;gBAC3BjD,GAAAA,EAAKA,GAAAA;gBACLtD,MAAAA,EAAQ,KAAA;gBACRwG,QAAAA,EAAUF,iBAAAA;AACVG,gBAAAA,SAAAA,EAAW5D,KAAK6D,WAAW;AAC3BC,gBAAAA,QAAAA,EAAU9D,KAAK6D,WAAW;gBAC1BE,IAAAA,EAAM;AACJC,oBAAAA,IAAAA,EAAMhE,KAAKgE,IAAI;AACfH,oBAAAA,WAAAA,EAAa7D,KAAK6D;AACpB,iBAAA;AACAzH,gBAAAA,UAAAA,EAAY,EAAE;gBACd6H,SAAAA,EAAW;AACb,aAAA;YAEAlH,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAc,GAAGiD,SAAAA;AACpC,QAAA,CAAA;AACAQ,QAAAA,YAAAA,EAAc,CAACnH,KAAAA,EAAOsG,MAAAA,GAAAA;YACpB,MAAM,EAAE5C,GAAG,EAAET,IAAI,EAAEgB,MAAM,EAAE,GAAGqC,MAAAA,CAAOC,OAAO;AAE5C,YAAA,MAAM,EAAEO,WAAW,EAAEM,YAAY,EAAEC,UAAU,EAAEC,IAAI,EAAEC,eAAe,EAAEC,aAAa,EAAE,GACnFvE,IAAAA;AAEF,YAAA,MAAM0D,SAAAA,GAAyB;gBAC7BjD,GAAAA,EAAKA,GAAAA;gBACLtD,MAAAA,EAAQ,KAAA;gBACRqH,OAAAA,EAAS,IAAA;gBACTP,SAAAA,EAAW,aAAA;gBACXQ,mBAAAA,EAAqB,IAAA;AACrBrI,gBAAAA,UAAAA,EAAY,EAAE;AACdiI,gBAAAA,IAAAA;gBACAT,SAAAA,EAAWC,WAAAA;gBACXC,QAAAA,EAAUD,WAAAA;gBACVa,OAAAA,EAAS;AACPJ,oBAAAA;AACF,iBAAA;gBACAP,IAAAA,EAAM;AACJF,oBAAAA,WAAAA;AACAM,oBAAAA,YAAAA;AACAC,oBAAAA;AACF,iBAAA;AACAG,gBAAAA;AACF,aAAA;YAEAxH,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI,GAAGiD,SAAAA;;;AAI1B,YAAA,IAAI1C,MAAAA,EAAQ;gBACVF,qBAAAA,CACE/D,KAAAA,CAAMhB,gBAAgB,CAACwG,QAAQ,CAACoC,kCAAAA,CAAkBN,IAAAA,CAAAA,CAAM,EACxD5D,GAAAA,EACAO,MAAAA,CAAAA;AAEJ,YAAA;AACF,QAAA,CAAA;AACA4D,QAAAA,YAAAA,EAAc,CAAC7H,KAAAA,EAAOsG,MAAAA,GAAAA;YACpB,MAAM,EAAEwB,cAAc,EAAE7H,SAAS,EAAEC,SAAS,EAAE,GAAGoG,MAAAA,CAAOC,OAAO;YAE/D,MAAM5G,IAAAA,GAAOI,QAAQC,KAAAA,EAAO;AAAEC,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAU,aAAA,CAAA;YAEnD,MAAMQ,SAAAA,GAAYC,eAAAA,CAAgBoH,qBAAAA,CAAKD,cAAAA,EAAgB,iBAAA,CAAA,CAAA;YAEvD,IAAIpH,SAAAA,CAAUf,IAAI,KAAK,UAAA,EAAY;gBACjC,MAAMmG,MAAAA,GAASpF,UAAUoF,MAAM;gBAC/B,MAAMkC,eAAAA,GAAkBtH,SAAAA,CAAUsH,eAAe,IAAI,IAAA;gBACrD,MAAMC,QAAAA,GAAWvH,UAAUuH,QAAQ;gBACnC,MAAMC,YAAAA,GAAeC,gCAAgBF,QAAAA,EAAUD,eAAAA,CAAAA;gBAE/C,MAAMI,uBAAAA,GACJF,YAAAA,KAAiBG,SAAAA,IAAa,CAAC;AAAC,oBAAA,QAAA;AAAU,oBAAA;AAAU,iBAAA,CAACC,QAAQ,CAACJ,YAAAA,CAAAA;AAEhE,gBAAA,IAAIE,uBAAAA,EAAyB;AAC3B,oBAAA,MAAMG,oBAAoB5H,eAAAA,CAAgB;wBACxCb,IAAAA,EAAMkI,eAAAA;AACNC,wBAAAA,QAAAA,EAAUzI,mBAAAA,CAAoB0I,YAAAA,CAAAA;AAC9BpC,wBAAAA,MAAAA,EAAQnG,KAAK+D,GAAG;AAChBsE,wBAAAA,eAAAA,EAAiBtH,UAAUZ,IAAI;wBAC/BH,IAAAA,EAAM,UAAA;AACN6I,wBAAAA,OAAAA,EAAS9H,UAAU8H;AACrB,qBAAA,CAAA;oBAEA,MAAMC,UAAAA,GAAa1I,QAAQC,KAAAA,EAAO;AAAEC,wBAAAA,SAAAA;wBAAWC,SAAAA,EAAW4F;AAAO,qBAAA,CAAA;AACjEzD,oBAAAA,aAAAA,CAAcoG,UAAAA,EAAYF,iBAAAA,CAAAA;AAC5B,gBAAA;AACF,YAAA;AAEAlG,YAAAA,aAAAA,CAAc1C,IAAAA,EAAMe,SAAAA,CAAAA;AACpBP,YAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAClB,QAAA,CAAA;AACA+I,QAAAA,aAAAA,EAAe,CAAC1I,KAAAA,EAAOsG,MAAAA,GAAAA;YACrB,MAAM,EAAErG,SAAS,EAAEC,SAAS,EAAEyI,IAAI,EAAEC,EAAE,EAAE,GAAGtC,MAAAA,CAAOC,OAAO;YAEzD,MAAM5G,IAAAA,GAAOI,QAAQC,KAAAA,EAAO;AAAEC,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAU,aAAA,CAAA;AAEnD,YAAA,MAAMQ,SAAAA,GAAYf,IAAAA,CAAKN,UAAU,CAACsJ,IAAAA,CAAK;AACvChJ,YAAAA,IAAAA,CAAKN,UAAU,CAACmD,MAAM,CAACmG,IAAAA,EAAM,CAAA,CAAA;AAC7BhJ,YAAAA,IAAAA,CAAKN,UAAU,CAACmD,MAAM,CAACoG,IAAI,CAAA,EAAGlI,SAAAA,CAAAA;AAC9BP,YAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAClB,QAAA,CAAA;AACAkJ,QAAAA,uBAAAA,EAAyB,CAAC7I,KAAAA,EAAOsG,MAAAA,GAAAA;YAC/B,MAAM,EAAEwB,cAAc,EAAE7H,SAAS,EAAEC,SAAS,EAAE,GAAGoG,MAAAA,CAAOC,OAAO;YAE/D,MAAM5G,IAAAA,GAAOI,QAAQC,KAAAA,EAAO;AAAEC,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAU,aAAA,CAAA;AAEnDmC,YAAAA,aAAAA,CAAc1C,MAAMgB,eAAAA,CAAgBmH,cAAAA,CAAAA,CAAAA;AACtC,QAAA,CAAA;AACAgB,QAAAA,gCAAAA,EAAkC,CAChC9I,KAAAA,EACAsG,MAAAA,GAAAA;YAEA,MAAM,EAAEyC,iBAAiB,EAAEC,eAAe,EAAE/I,SAAS,EAAEC,SAAS,EAAE,GAAGoG,MAAAA,CAAOC,OAAO;YAEnF,MAAM5G,IAAAA,GAAOI,QAAQC,KAAAA,EAAO;AAAEC,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAU,aAAA,CAAA;YAEnD,MAAM+I,gBAAAA,GAAmBvJ,mBAAmBC,IAAAA,EAAMoJ,iBAAAA,CAAAA;AAClD,YAAA,MAAMxG,IAAAA,GAAO5C,IAAAA,CAAKN,UAAU,CAAC4J,gBAAAA,CAAiB;YAE9CD,eAAAA,CAAgBlH,OAAO,CAAC,CAAC4D,YAAAA,GAAAA;gBACvBnD,IAAAA,CAAK3D,UAAU,CAACyC,IAAI,CAACqE,YAAAA,CAAAA;AACvB,YAAA,CAAA,CAAA;AAEAjF,YAAAA,kBAAAA,CAAmB8B,IAAAA,EAAsB,SAAA,CAAA;AACzCpC,YAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAClB,QAAA,CAAA;AACAuJ,QAAAA,2BAAAA,EAA6B,CAC3BlJ,KAAAA,EACAsG,MAAAA,GAAAA;YAEA,MAAM,EAAEyC,iBAAiB,EAAEI,aAAa,EAAElJ,SAAS,EAAEC,SAAS,EAAE,GAAGoG,MAAAA,CAAOC,OAAO;YAEjF,MAAM5G,IAAAA,GAAOI,QAAQC,KAAAA,EAAO;AAAEC,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAU,aAAA,CAAA;YAEnD,MAAM+I,gBAAAA,GAAmBvJ,mBAAmBC,IAAAA,EAAMoJ,iBAAAA,CAAAA;AAClD,YAAA,MAAMxG,IAAAA,GAAO5C,IAAAA,CAAKN,UAAU,CAAC4J,gBAAAA,CAAiB;YAC9C,MAAMG,mBAAAA,GAAsB7G,KAAK3D,UAAU;AAE3C,YAAA,MAAMyK,oBAAoBC,qBAAAA,CAAW;AAAIF,gBAAAA,GAAAA,mBAAAA;AAAwBD,gBAAAA,GAAAA;AAAc,aAAA,CAAA;AAE/EhJ,YAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAChBc,YAAAA,kBAAAA,CAAmB8B,IAAAA,EAAsB,SAAA,CAAA;AACzCA,YAAAA,IAAAA,CAAK3D,UAAU,GAAGyK,iBAAAA;AACpB,QAAA,CAAA;AACAE,QAAAA,aAAAA,EAAe,CAACvJ,KAAAA,EAAOsG,MAAAA,GAAAA;AACrB,YAAA,MAAM,EACJxG,IAAI,EACJgI,cAAc,EACd7H,SAAS,EACTC,SAAS,EACTY,YAAY,EACZa,aAAa,EACb6H,kBAAkB,EAClBC,mBAAmB,EACpB,GAAGnD,OAAOC,OAAO;YAElB,MAAM5G,IAAAA,GAAOI,QAAQC,KAAAA,EAAO;AAAEC,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAU,aAAA,CAAA;YAEnD,MAAMwJ,qBAAAA,GAAwBhK,mBAAmBC,IAAAA,EAAMG,IAAAA,CAAAA;YAEvD,IAAI4J,qBAAAA,KAA0B,EAAC,EAAG;AAChC,gBAAA;AACF,YAAA;AAEA,YAAA,MAAM3I,iBAAAA,GAAoBpB,IAAAA,CAAKN,UAAU,CAACqK,qBAAAA,CAAsB;YAEhEjI,kBAAAA,CAAmB9B,IAAAA,EAAMoB,mBAAmB+G,cAAAA,EAAgC;AAC1EhH,gBAAAA,YAAAA;AACAa,gBAAAA;AACF,aAAA,CAAA;AACAE,YAAAA,mBAAAA,CAAoBlC,MAAMoB,iBAAAA,EAAmB+G,cAAAA,CAAAA;AAE7C3F,YAAAA,cAAAA,CAAexC,MAAM+J,qBAAAA,EAAuB5B,cAAAA,CAAAA;AAE5C,YAAA,IAAI/G,iBAAAA,CAAkBpB,IAAI,KAAKmI,cAAAA,CAAenI,IAAI,EAAE;AAClD,gBAAA;AACF,YAAA;AAEA,YAAA,IAAIoB,kBAAkBpB,IAAI,KAAK,cAAcmI,cAAAA,CAAenI,IAAI,KAAK,UAAA,EAAY;AAC/E,gBAAA;AACF,YAAA;YAEA,MAAMgK,cAAAA,GAAiB5J,QAAQC,KAAAA,EAAO;gBACpCC,SAAAA,EAAW,aAAA;AACXC,gBAAAA,SAAAA,EAAWa,kBAAkB+E;AAC/B,aAAA,CAAA;YACA,MAAM8D,SAAAA,GAAY7J,QAAQC,KAAAA,EAAO;gBAC/BC,SAAAA,EAAW,aAAA;AACXC,gBAAAA,SAAAA,EAAW4H,eAAehC;AAC5B,aAAA,CAAA;AAEA,YAAA,MAAM+D,4BAAAA,GAA+BnK,kBAAAA,CACnCiK,cAAAA,EACA5I,iBAAAA,CAAkBiH,eAAe,IAAI,EAAA,CAAA;YAEvC,MAAM8B,uBAAAA,GACJD,iCAAiC,EAAC,GAC9BF,eAAetK,UAAU,CAACwK,6BAA6B,GACvDxB,SAAAA;;YAGN,IAAItH,iBAAAA,CAAkBiH,eAAe,EAAE;gBACrCtF,qBAAAA,CAAsBiH,cAAAA,EAAgB5I,kBAAkBiH,eAAe,CAAA;AACzE,YAAA;AAEA,YAAA,MAAM+B,kBAAkB5B,+BAAAA,CACtBL,cAAAA,CAAeG,QAAQ,EACvBH,eAAeE,eAAe,CAAA;AAEhC,YAAA,MAAMgC,mBACJD,eAAAA,KAAoB1B,SAAAA,IAAa,CAAC9I,kBAAAA,CAAmB+I,QAAQ,CAACyB,eAAAA,CAAAA;AAEhE,YAAA,IAAIC,gBAAAA,EAAkB;AACpB,gBAAA,MAAMC,kBAAAA,GAAqB;AACzBnK,oBAAAA,IAAAA,EAAMgI,eAAeE,eAAe;oBACpCrI,IAAAA,EAAM,UAAA;oBACNsI,QAAAA,EAAUzI,mBAAAA,CAAoBsI,eAAeG,QAAQ,CAAA;AACrDD,oBAAAA,eAAAA,EAAiBF,eAAehI,IAAI;AACpCgG,oBAAAA,MAAAA,EAAQnG,KAAK+D,GAAG;AAChB8E,oBAAAA,OAAAA,EAASzH,iBAAAA,CAAkByH,OAAO,IAAIV,cAAAA,CAAeU,OAAO;AAC5DhB,oBAAAA,aAAAA,EAAezG,iBAAAA,CAAkByG,aAAa,IAAIM,cAAAA,CAAeN,aAAa;AAC9E,oBAAA,GAAImC,eAAejG,GAAG,KAAKkG,UAAUlG,GAAG,IAAIoG,yBAAyB9H,UAAAA,GACjE;AAAEA,wBAAAA,UAAAA,EAAY8H,wBAAwB9H;AAAW,qBAAA,GACjD,EAAE;oBACN5B,MAAAA,EAAQ;AACV,iBAAA;;gBAGA,IAAIyJ,4BAAAA,KAAiC,EAAC,IAAKF,cAAAA,CAAejG,GAAG,KAAKkG,SAAAA,CAAUlG,GAAG,EAAE;;;AAG/E,oBAAA,IAAIoG,uBAAAA,EAAyB;wBAC3BrI,kBAAAA,CAAmBmI,SAAAA,EAAWE,yBAAyBG,kBAAAA,EAAoB;4BACzEnJ,YAAAA,EAAc0I,kBAAAA;4BACd7H,aAAAA,EAAe8H;AACjB,yBAAA,CAAA;AACF,oBAAA;;AAGAhH,oBAAAA,kBAAAA,CAAmBmH,WAAWC,4BAAAA,EAA8BI,kBAAAA,CAAAA;gBAC9D,CAAA,MAAO;AACL5H,oBAAAA,aAAAA,CAAcuH,SAAAA,EAAW;AACvB,wBAAA,GAAGK,kBAAkB;wBACrB7J,MAAAA,EAAQ;AACV,qBAAA,CAAA;AACF,gBAAA;AACF,YAAA;AACF,QAAA,CAAA;AACA8J,QAAAA,wBAAAA,EAA0B,CAAClK,KAAAA,EAAOsG,MAAAA,GAAAA;AAChC,YAAA,MAAM,EAAErG,SAAS,EAAEC,SAAS,EAAEJ,IAAI,EAAEgI,cAAc,EAAEhH,YAAY,EAAEa,aAAa,EAAE,GAC/E2E,OAAOC,OAAO;AAEhB,YAAA,MAAM4D,oBAAAA,GAAuBrK,IAAAA;YAC7B,MAAMH,IAAAA,GAAOI,QAAQC,KAAAA,EAAO;AAAEC,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAU,aAAA,CAAA;YAEnD,MAAMwJ,qBAAAA,GAAwBhK,mBAAmBC,IAAAA,EAAMwK,oBAAAA,CAAAA;AACvD,YAAA,MAAMpJ,iBAAAA,GAAoBpB,IAAAA,CAAKN,UAAU,CAACqK,qBAAAA,CAAsB;AAEhEvH,YAAAA,cAAAA,CAAexC,MAAM+J,qBAAAA,EAAuB5B,cAAAA,CAAAA;YAC5CrG,kBAAAA,CAAmB9B,IAAAA,EAAMoB,mBAAmB+G,cAAAA,EAAgC;AAC1EhH,gBAAAA,YAAAA;AACAa,gBAAAA;AACF,aAAA,CAAA;AACAE,YAAAA,mBAAAA,CAAoBlC,MAAMoB,iBAAAA,EAAmB+G,cAAAA,CAAAA;AAC/C,QAAA,CAAA;QACAsC,YAAAA,EAAc,IAAA;YACZ,OAAOzL,YAAAA;AACT,QAAA,CAAA;AACA0L,QAAAA,8BAAAA,EAAgC,CAC9BrK,KAAAA,EACAsG,MAAAA,GAAAA;YAEA,MAAM,EAAEgE,MAAM,EAAEC,sBAAsB,EAAEtK,SAAS,EAAEC,SAAS,EAAE,GAAGoG,MAAAA,CAAOC,OAAO;YAE/E,MAAM5G,IAAAA,GACJM,SAAAA,KAAc,aAAA,GAAgBD,KAAAA,CAAMnB,YAAY,CAACqB,SAAAA,CAAU,GAAGF,KAAAA,CAAMpB,UAAU,CAACsB,SAAAA,CAAU;AAE3F,YAAA,IAAI,CAACP,IAAAA,EAAM;AACT,gBAAA;AACF,YAAA;YAEA,MAAMsJ,gBAAAA,GAAmBvJ,mBAAmBC,IAAAA,EAAM2K,MAAAA,CAAAA;AAClD,YAAA,MAAM/H,IAAAA,GAAO5C,IAAAA,CAAKN,UAAU,CAAC4J,gBAAAA,CAAiB;AAE9C9I,YAAAA,SAAAA,CAAUR,IAAAA,EAAM,SAAA,CAAA;AAChBc,YAAAA,kBAAAA,CAAmB8B,IAAAA,EAAsB,SAAA,CAAA;AACzCA,YAAAA,IAAAA,CAAK3D,UAAU,CAAC4D,MAAM,CAAC+H,sBAAAA,EAAwB,CAAA,CAAA;AACjD,QAAA,CAAA;AACAC,QAAAA,WAAAA,EAAa,CAACxK,KAAAA,EAAOsG,MAAAA,GAAAA;YACnB,MAAM,EAAErG,SAAS,EAAEC,SAAS,EAAEuK,qBAAqB,EAAE,GAAGnE,MAAAA,CAAOC,OAAO;YAEtE,MAAM5G,IAAAA,GAAOI,QAAQC,KAAAA,EAAO;AAAEC,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAU,aAAA,CAAA;YAEnD,MAAMwK,sBAAAA,GAAyBhL,mBAAmBC,IAAAA,EAAM8K,qBAAAA,CAAAA;AACxD,YAAA,MAAM/J,SAAAA,GAAYf,IAAAA,CAAKN,UAAU,CAACqL,sBAAAA,CAAuB;YAEzD,IAAIhK,SAAAA,CAAUf,IAAI,KAAK,UAAA,EAAY;gBACjC,MAAM,EAAEmG,MAAM,EAAEmC,QAAQ,EAAED,eAAAA,EAAiB2C,mBAAmB,EAAE,GAAGjK,SAAAA;gBACnE,MAAMwH,YAAAA,GAAeC,gCAAgBF,QAAAA,EAAU0C,mBAAAA,CAAAA;AAE/C,gBAAA,MAAMX,gBAAAA,GAAmB,CAACzK,kBAAAA,CAAmB+I,QAAQ,CAACJ,YAAAA,CAAAA;AAEtD,gBAAA,IAAI8B,oBAAoBW,mBAAAA,EAAqB;oBAC3C,MAAMC,iBAAAA,GAAoB7K,QAAQC,KAAAA,EAAO;AAAEC,wBAAAA,SAAAA;wBAAWC,SAAAA,EAAW4F;AAAO,qBAAA,CAAA;oBACxE,MAAM+E,oBAAAA,GAAuBnL,mBAAmBkL,iBAAAA,EAAmBD,mBAAAA,CAAAA;AAEnErI,oBAAAA,iBAAAA,CAAkBsI,iBAAAA,EAAmBC,oBAAAA,CAAAA;AACvC,gBAAA;AACF,YAAA;;AAGAlL,YAAAA,IAAAA,CAAKN,UAAU,CAACyC,OAAO,CAAC,CAACpB,SAAAA,GAAAA;gBACvB,IAAIA,SAAAA,CAAUf,IAAI,KAAK,KAAA,EAAO;oBAC5B,IAAIe,SAAAA,CAAUoK,WAAW,KAAKL,qBAAAA,EAAuB;AACnD,wBAAA,OAAO/J,UAAUoK,WAAW;AAC9B,oBAAA;AACF,gBAAA;AACF,YAAA,CAAA,CAAA;AAEAxI,YAAAA,iBAAAA,CAAkB3C,IAAAA,EAAM+K,sBAAAA,CAAAA;AAC1B,QAAA,CAAA;;AAEAK,QAAAA,qBAAAA,EAAuB,CAAC/K,KAAAA,EAAOsG,MAAAA,GAAAA;AAC7B,YAAA,MAAM,EAAErD,IAAI,EAAES,GAAG,EAAE,GAAG4C,OAAOC,OAAO;AAEpC,YAAA,MAAM5G,IAAAA,GAAOK,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI;AAClC,YAAA,IAAI,CAAC/D,IAAAA,EAAM;AACT,gBAAA;AACF,YAAA;AAEAqD,YAAAA,UAAAA,CAAWrD,IAAAA,EAAM;gBACfqH,IAAAA,EAAM;AACJF,oBAAAA,WAAAA,EAAa7D,KAAK6D,WAAW;AAC7BG,oBAAAA,IAAAA,EAAMhE,KAAKgE;AACb;AACF,aAAA,CAAA;AACF,QAAA,CAAA;AACA+D,QAAAA,kBAAAA,EAAoB,CAAChL,KAAAA,EAAOsG,MAAAA,GAAAA;AAC1B,YAAA,MAAM,EAAE2E,eAAe,EAAEvH,GAAG,EAAE,GAAG4C,OAAOC,OAAO;AAE/C,YAAA,MAAM5G,IAAAA,GAAOK,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI;AAClC,YAAA,IAAI,CAAC/D,IAAAA,IAAQA,IAAAA,CAAKS,MAAM,KAAK,KAAA,EAAO;AAClC,gBAAA;AACF,YAAA;AAEA,YAAA,IAAI6K,oBAAoBvH,GAAAA,EAAK;AAC3B,gBAAA,MAAMwH,OAAAA,GAAU;AAAE,oBAAA,GAAGvL,IAAI;oBAAE+D,GAAAA,EAAKuH;AAAgB,iBAAA;gBAChDjL,KAAAA,CAAMpB,UAAU,CAACqM,eAAAA,CAAgB,GAAGC,OAAAA;gBACpC,OAAOlL,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI;;AAG5B4B,gBAAAA,MAAAA,CAAOG,IAAI,CAACzF,KAAAA,CAAMnB,YAAY,CAAA,CAAEiD,OAAO,CAAC,CAACkE,cAAAA,GAAAA;AACvC,oBAAA,MAAMC,WAAAA,GAAcjG,KAAAA,CAAMnB,YAAY,CAACmH,cAAAA,CAAe;AAEtDC,oBAAAA,WAAAA,CAAY5G,UAAU,CAACyC,OAAO,CAAC,CAACpB,SAAAA,GAAAA;wBAC9B,IAAIA,SAAAA,CAAUf,IAAI,KAAK,aAAA,EAAe;AACpC,4BAAA,MAAMwJ,gBAAgBzI,SAAAA,CAAU9B,UAAU,CAACmH,GAAG,CAAC,CAACJ,SAAAA,GAAAA;AAC9C,gCAAA,IAAIA,cAAcjC,GAAAA,EAAK;oCACrB,OAAOuH,eAAAA;AACT,gCAAA;gCAEA,OAAOtF,SAAAA;AACT,4BAAA,CAAA,CAAA;AAEAjF,4BAAAA,SAAAA,CAAU9B,UAAU,GAAGuK,aAAAA;AACzB,wBAAA;AACF,oBAAA,CAAA,CAAA;AAEAlD,oBAAAA,WAAAA,CAAY5G,UAAU,CAACyC,OAAO,CAAC,CAACpB,SAAAA,GAAAA;AAC9B,wBAAA,IAAIA,UAAUf,IAAI,KAAK,eAAee,SAAAA,CAAUiF,SAAS,KAAKjC,GAAAA,EAAK;AACjEhD,4BAAAA,SAAAA,CAAUiF,SAAS,GAAGsF,eAAAA;AACxB,wBAAA;AACF,oBAAA,CAAA,CAAA;AACF,gBAAA,CAAA,CAAA;;AAGA3F,gBAAAA,MAAAA,CAAOG,IAAI,CAACzF,KAAAA,CAAMpB,UAAU,CAAA,CAAEkD,OAAO,CAAC,CAAC4D,YAAAA,GAAAA;AACrC,oBAAA,MAAMC,SAAAA,GAAY3F,KAAAA,CAAMpB,UAAU,CAAC8G,YAAAA,CAAa;AAEhDC,oBAAAA,SAAAA,CAAUtG,UAAU,CAACyC,OAAO,CAAC,CAACpB,SAAAA,GAAAA;AAC5B,wBAAA,IAAIA,UAAUf,IAAI,KAAK,eAAee,SAAAA,CAAUiF,SAAS,KAAKjC,GAAAA,EAAK;AACjEhD,4BAAAA,SAAAA,CAAUiF,SAAS,GAAGsF,eAAAA;AACxB,wBAAA;AACF,oBAAA,CAAA,CAAA;AACF,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA;AACAE,QAAAA,YAAAA,EAAc,CAACnL,KAAAA,EAAOsG,MAAAA,GAAAA;YACpB,MAAM,EAAErD,IAAI,EAAES,GAAG,EAAEO,MAAM,EAAE,GAAGqC,MAAAA,CAAOC,OAAO;YAE5C,MAAM,EAAEO,WAAW,EAAEQ,IAAI,EAAEC,eAAe,EAAEC,aAAa,EAAE,GAAGvE,IAAAA;AAE9D,YAAA,MAAMtD,IAAAA,GAAOK,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI;AACpC,YAAA,IAAI,CAAC/D,IAAAA,EAAM;AACT,gBAAA;AACF,YAAA;YAEA,MAAMyL,YAAAA,GAAezL,KAAK2H,IAAI;AAE9BtE,YAAAA,UAAAA,CAAWrD,IAAAA,EAAM;gBACfqH,IAAAA,EAAM;AACJF,oBAAAA;AACF,iBAAA;AACAQ,gBAAAA,IAAAA;gBACAK,OAAAA,EAAS;AACPJ,oBAAAA;AACF,iBAAA;AACAC,gBAAAA;AACF,aAAA,CAAA;YAEA,IAAIF,IAAAA,IAAQA,SAAS8D,YAAAA,EAAc;AACjC,gBAAA,MAAMC,aAAarL,KAAAA,CAAMhB,gBAAgB,CAACwG,QAAQ,CAACoC,mCAAkBwD,YAAAA,CAAAA,CAAc;gBACnF3H,sBAAAA,CAAuB4H,UAAAA,CAAWjI,MAAM,EAAEM,GAAAA,CAAAA;AAC5C,YAAA;;;AAIA,YAAA,IAAIO,MAAAA,EAAQ;gBACVF,qBAAAA,CACE/D,KAAAA,CAAMhB,gBAAgB,CAACwG,QAAQ,CAACoC,kCAAAA,CAAkBN,IAAAA,CAAAA,CAAM,EACxD5D,GAAAA,EACAO,MAAAA,CAAAA;AAEJ,YAAA;AACF,QAAA,CAAA;AACAqH,QAAAA,eAAAA,EAAiB,CAACtL,KAAAA,EAAOsG,MAAAA,GAAAA;YACvB,MAAM5C,GAAAA,GAAM4C,OAAOC,OAAO;;AAG1B,YAAA,IAAIvG,MAAMpB,UAAU,CAAC8E,IAAI,CAACtD,MAAM,KAAK,KAAA,EAAO;gBAC1C,OAAOJ,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI;YAC9B,CAAA,MAAO;AACLvD,gBAAAA,SAAAA,CAAUH,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI,EAAE,SAAA,CAAA;AACnC,YAAA;;AAGA4B,YAAAA,MAAAA,CAAOG,IAAI,CAACzF,KAAAA,CAAMnB,YAAY,CAAA,CAAEiD,OAAO,CAAC,CAACkE,cAAAA,GAAAA;AACvC,gBAAA,MAAMC,WAAAA,GAAcjG,KAAAA,CAAMnB,YAAY,CAACmH,cAAAA,CAAe;;AAGtDC,gBAAAA,WAAAA,CAAY5G,UAAU,CAACyC,OAAO,CAAC,CAACpB,SAAAA,GAAAA;oBAC9B,IAAIA,SAAAA,CAAUf,IAAI,KAAK,aAAA,EAAe;wBACpC,MAAMwJ,aAAAA,GAAgBzI,UAAU9B,UAAU,CAACiH,MAAM,CAC/C,CAACF,YAAuBA,SAAAA,KAAcjC,GAAAA,CAAAA;AAGxChD,wBAAAA,SAAAA,CAAU9B,UAAU,GAAGuK,aAAAA;AACzB,oBAAA;AACF,gBAAA,CAAA,CAAA;gBAEA,MAAMvD,aAAAA,GAAgBK,YAAY5G,UAAU,CACzCwG,MAAM,CAAC,CAACnF,YAAcA,SAAAA,CAAUf,IAAI,KAAK,WAAA,IAAee,SAAAA,CAAUiF,SAAS,KAAKjC,GAAAA,CAAAA,CAChFqC,GAAG,CAAC,CAACrF,SAAAA,GAAcA,SAAAA,CAAUZ,IAAI,CAAA;gBAEpC8F,aAAAA,CAAc9D,OAAO,CAAC,CAAChC,IAAAA,GAAAA;AACrB4C,oBAAAA,qBAAAA,CAAsBuD,WAAAA,EAAanG,IAAAA,CAAAA;AACrC,gBAAA,CAAA,CAAA;AACF,YAAA,CAAA,CAAA;;AAGAwF,YAAAA,MAAAA,CAAOG,IAAI,CAACzF,KAAAA,CAAMpB,UAAU,CAAA,CAAEkD,OAAO,CAAC,CAAC4D,YAAAA,GAAAA;AACrC,gBAAA,MAAMC,SAAAA,GAAY3F,KAAAA,CAAMpB,UAAU,CAAC8G,YAAAA,CAAa;gBAEhD,MAAME,aAAAA,GAAgBD,UAAUtG,UAAU,CACvCwG,MAAM,CAAC,CAACnF,YAAcA,SAAAA,CAAUf,IAAI,KAAK,WAAA,IAAee,SAAAA,CAAUiF,SAAS,KAAKjC,GAAAA,CAAAA,CAChFqC,GAAG,CAAC,CAACrF,SAAAA,GAAcA,SAAAA,CAAUZ,IAAI,CAAA;gBAEpC8F,aAAAA,CAAc9D,OAAO,CAAC,CAAChC,IAAAA,GAAAA;AACrB4C,oBAAAA,qBAAAA,CAAsBiD,SAAAA,EAAW7F,IAAAA,CAAAA;AACnC,gBAAA,CAAA,CAAA;AACF,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;AACAyL,QAAAA,iBAAAA,EAAmB,CAACvL,KAAAA,EAAOsG,MAAAA,GAAAA;YACzBnB,sBAAAA,CAAuBnF,KAAAA,EAAOsG,OAAOC,OAAO,CAAA;AAC9C,QAAA,CAAA;AAEAiF,QAAAA,YAAAA,EAAc,CAACxL,KAAAA,EAAOsG,MAAAA,GAAAA;AACpB,YAAA,MAAM,EAAEtC,OAAO,EAAEX,EAAE,EAAEvD,IAAAA,EAAM2L,OAAO,EAAEC,QAAQ,EAAE,GAAGpF,MAAAA,CAAOC,OAAO;YAC/D,MAAMzG,IAAAA,GAAO2L,QAAQpH,IAAI,EAAA;YACzB,MAAM,EAAEjB,MAAM,EAAE,GAAGpD,MAAMhB,gBAAgB,CAACwG,QAAQ,CAACxB,OAAAA,CAAQ;AAE3D,YAAA,IAAI0H,QAAAA,IAAY7G,aAAAA,CAAczB,MAAAA,EAAQsI,QAAAA,CAAAA,GAAY,IAAIC,iCAAAA,EAAkB;AACtE,gBAAA;AACF,YAAA;YAEA,IAAIC,2CAAAA,CAA2BxI,MAAAA,EAAQsI,QAAAA,EAAU5L,IAAAA,CAAAA,EAAO;AACtD,gBAAA;AACF,YAAA;AAEAsD,YAAAA,MAAAA,CAAO/B,IAAI,CAAC;AAAEgC,gBAAAA,EAAAA;AAAIvD,gBAAAA,IAAAA;gBAAMyE,MAAAA,EAAQmH,QAAAA;AAAU7H,gBAAAA,QAAAA,EAAU,EAAE;gBAAEzD,MAAAA,EAAQ;AAAM,aAAA,CAAA;AAEtE,YAAA,IAAIsL,QAAAA,EAAU;gBACZ,MAAMnH,MAAAA,GAASpB,UAAUC,MAAAA,EAAQsI,QAAAA,CAAAA;AAEjC,gBAAA,IAAInH,MAAAA,EAAQ;oBACVA,MAAAA,CAAOV,QAAQ,CAACxC,IAAI,CAAC;wBAAE1B,IAAAA,EAAM,OAAA;AAAS0D,wBAAAA;AAAG,qBAAA,CAAA;AACzCG,oBAAAA,cAAAA,CAAee,MAAAA,EAAQ,SAAA,CAAA;AACzB,gBAAA;AACF,YAAA;AACF,QAAA,CAAA;AACAsH,QAAAA,YAAAA,EAAc,CAAC7L,KAAAA,EAAOsG,MAAAA,GAAAA;YACpB,MAAM,EAAEtC,OAAO,EAAEX,EAAE,EAAEvD,MAAM2L,OAAO,EAAE,GAAGnF,MAAAA,CAAOC,OAAO;YACrD,MAAMzG,IAAAA,GAAO2L,QAAQpH,IAAI,EAAA;YAEzB,MAAM,EAAEjB,MAAM,EAAE,GAAGpD,MAAMhB,gBAAgB,CAACwG,QAAQ,CAACxB,OAAAA,CAAQ;YAC3D,MAAMT,KAAAA,GAAQJ,UAAUC,MAAAA,EAAQC,EAAAA,CAAAA;AAChC,YAAA,IAAI,CAACE,KAAAA,EAAO;AACV,gBAAA;AACF,YAAA;YAEA,IAAIA,KAAAA,CAAMzD,IAAI,KAAKA,IAAAA,EAAM;AACvB,gBAAA;AACF,YAAA;AAEA,YAAA,IAAI8L,4CAA2BxI,MAAAA,EAAQG,KAAAA,CAAMgB,MAAM,EAAEzE,MAAMuD,EAAAA,CAAAA,EAAK;AAC9D,gBAAA;AACF,YAAA;AAEAE,YAAAA,KAAAA,CAAMzD,IAAI,GAAGA,IAAAA;AACb0D,YAAAA,cAAAA,CAAeD,KAAAA,EAAO,SAAA,CAAA;AACxB,QAAA,CAAA;AACAuI,QAAAA,UAAAA,EAAY,CAAC9L,KAAAA,EAAOsG,MAAAA,GAAAA;YAClB,MAAM,EAAEtC,OAAO,EAAEX,EAAE,EAAE0I,WAAW,EAAE3J,KAAK,EAAE,GAAGkE,MAAAA,CAAOC,OAAO;YAC1D,MAAM,EAAEnD,MAAM,EAAE,GAAGpD,MAAMhB,gBAAgB,CAACwG,QAAQ,CAACxB,OAAAA,CAAQ;YAE3D,MAAMT,KAAAA,GAAQJ,UAAUC,MAAAA,EAAQC,EAAAA,CAAAA;AAChC,YAAA,IAAI,CAACE,KAAAA,EAAO;AACV,gBAAA;AACF,YAAA;;AAGA,YAAA,IAAIwI,gBAAgB1I,EAAAA,IAAO0I,WAAAA,IAAetH,iBAAAA,CAAkBrB,MAAAA,EAAQC,IAAI0I,WAAAA,CAAAA,EAAe;AACrF,gBAAA;AACF,YAAA;;AAGA,YAAA,MAAMC,WAAAA,GAAcD,WAAAA,GAAclH,aAAAA,CAAczB,MAAAA,EAAQ2I,eAAe,CAAA,GAAI,CAAA;AAC3E,YAAA,IAAIC,WAAAA,GAAcjH,gBAAAA,CAAiB3B,MAAAA,EAAQC,EAAAA,CAAAA,GAAMsI,iCAAAA,EAAkB;AACjE,gBAAA;AACF,YAAA;;AAGA,YAAA,IAAIC,4CAA2BxI,MAAAA,EAAQ2I,WAAAA,EAAaxI,KAAAA,CAAMzD,IAAI,EAAEuD,EAAAA,CAAAA,EAAK;AACnE,gBAAA;AACF,YAAA;YAEA,IAAIE,KAAAA,CAAMgB,MAAM,EAAE;AAChB,gBAAA,MAAM0H,SAAAA,GAAY9I,SAAAA,CAAUC,MAAAA,EAAQG,KAAAA,CAAMgB,MAAM,CAAA;AAEhD,gBAAA,IAAI0H,SAAAA,EAAW;;AAEb,oBAAA,MAAMtJ,MAAMsJ,SAAAA,CAAUpI,QAAQ,CAAChE,SAAS,CAAC,CAACiE,KAAAA,GAAAA;AACxC,wBAAA,OAAOA,MAAMnE,IAAI,KAAK,OAAA,IAAWmE,KAAAA,CAAMT,EAAE,KAAKA,EAAAA;AAChD,oBAAA,CAAA,CAAA;oBAEA,IAAIV,GAAAA,KAAQ,EAAC,EAAG;AACdsJ,wBAAAA,SAAAA,CAAUpI,QAAQ,CAACrB,MAAM,CAACG,GAAAA,EAAK,CAAA,CAAA;AACjC,oBAAA;AAEAa,oBAAAA,cAAAA,CAAeyI,SAAAA,EAAW,SAAA,CAAA;AAC5B,gBAAA;AACF,YAAA;AAEA1I,YAAAA,KAAAA,CAAMgB,MAAM,GAAGwH,WAAAA;AACfvI,YAAAA,cAAAA,CAAeD,KAAAA,EAAO,SAAA,CAAA;AAEtB,YAAA,IAAIwI,WAAAA,EAAa;gBACf,MAAMG,SAAAA,GAAY/I,UAAUC,MAAAA,EAAQ2I,WAAAA,CAAAA;AAEpC,gBAAA,IAAIG,SAAAA,EAAW;AACb,oBAAA,MAAMC,KAAAA,GAAQ;wBAAExM,IAAAA,EAAM,OAAA;AAAkB0D,wBAAAA;AAAG,qBAAA;oBAE3C,IAAI,OAAOjB,KAAAA,KAAU,QAAA,IAAYA,KAAAA,IAAS,CAAA,IAAKA,SAAS8J,SAAAA,CAAUrI,QAAQ,CAACd,MAAM,EAAE;AACjFmJ,wBAAAA,SAAAA,CAAUrI,QAAQ,CAACrB,MAAM,CAACJ,OAAO,CAAA,EAAG+J,KAAAA,CAAAA;oBACtC,CAAA,MAAO;wBACLD,SAAAA,CAAUrI,QAAQ,CAACxC,IAAI,CAAC8K,KAAAA,CAAAA;AAC1B,oBAAA;AAEA3I,oBAAAA,cAAAA,CAAe0I,SAAAA,EAAW,SAAA,CAAA;AAC5B,gBAAA;YACF,CAAA,MAAO,IAAI,OAAO9J,KAAAA,KAAU,QAAA,EAAU;;;;;gBAKpC,MAAMgK,YAAAA,GAAehJ,OAAOvD,SAAS,CAAC,CAACwM,SAAAA,GAAcA,SAAAA,CAAUhJ,EAAE,KAAKA,EAAAA,CAAAA;gBAEtE,IAAI+I,YAAAA,KAAiB,EAAC,EAAG;AACvB,oBAAA,MAAM,CAACE,KAAAA,CAAM,GAAGlJ,MAAAA,CAAOZ,MAAM,CAAC4J,YAAAA,EAAc,CAAA,CAAA;AAC5C,oBAAA,MAAMG,OAAAA,GAAUnJ,MAAAA,CACbyC,MAAM,CAAC,CAACwG,SAAAA,GAAcA,SAAAA,CAAU9H,MAAM,KAAK,MAC3CwB,GAAG,CAAC,CAACsG,SAAAA,GAAcA,UAAUhJ,EAAE,CAAA;oBAClC,MAAMmJ,QAAAA,GAAWD,OAAO,CAACnK,KAAAA,CAAM;AAC/B,oBAAA,MAAMqK,QAAAA,GAAWD,QAAAA,GACbpJ,MAAAA,CAAOvD,SAAS,CAAC,CAACwM,SAAAA,GAAcA,SAAAA,CAAUhJ,EAAE,KAAKmJ,QAAAA,CAAAA,GACjDpJ,MAAAA,CAAOL,MAAM;oBAEjBK,MAAAA,CAAOZ,MAAM,CAACiK,QAAAA,KAAa,KAAKrJ,MAAAA,CAAOL,MAAM,GAAG0J,QAAAA,EAAU,CAAA,EAAGH,KAAAA,CAAAA;AAC/D,gBAAA;AACF,YAAA;AACF,QAAA,CAAA;AACAI,QAAAA,gBAAAA,EAAkB,CAAC1M,KAAAA,EAAOsG,MAAAA,GAAAA;YACxB,MAAM,EAAEtC,OAAO,EAAEX,EAAAA,EAAIsJ,eAAe,EAAE,GAAGrG,OAAOC,OAAO;YACvD,MAAM,EAAEnD,MAAM,EAAE,GAAGpD,MAAMhB,gBAAgB,CAACwG,QAAQ,CAACxB,OAAAA,CAAQ;YAE3D,MAAM4I,aAAAA,GAAgBzJ,UAAUC,MAAAA,EAAQuJ,eAAAA,CAAAA;AACxC,YAAA,IAAI,CAACC,aAAAA,EAAe;AAClB,gBAAA;AACF,YAAA;YAEA,MAAMC,qBAAAA,GAAwBD,cAAcrI,MAAM;;;AAIlD,YAAA,IAAIuI,yDAAAA,CAAyC1J,MAAAA,EAAQuJ,eAAAA,CAAAA,CAAiB5J,MAAM,GAAG,CAAA,EAAG;AAChF,gBAAA;AACF,YAAA;;YAGA,MAAMc,QAAAA,GAAW+I,cAAc/I,QAAQ,CAACkC,GAAG,CAAC,CAACjC,SAAW;AAAE,oBAAA,GAAGA;iBAAM,CAAA,CAAA;;YAGnED,QAAAA,CAAS/B,OAAO,CAAC,CAACgC,KAAAA,GAAAA;gBAChB,IAAIA,KAAAA,CAAMnE,IAAI,KAAK,OAAA,EAAS;AAC1B,oBAAA,MAAMoN,UAAAA,GAAa5J,SAAAA,CAAUC,MAAAA,EAAQU,KAAAA,CAAMT,EAAE,CAAA;AAE7C,oBAAA,IAAI0J,UAAAA,EAAY;AACdA,wBAAAA,UAAAA,CAAWxI,MAAM,GAAGsI,qBAAAA;AACtB,oBAAA;AACF,gBAAA;AACF,YAAA,CAAA,CAAA;AAEA,YAAA,IAAIA,qBAAAA,EAAuB;gBACzB,MAAMG,mBAAAA,GAAsB7J,UAAUC,MAAAA,EAAQyJ,qBAAAA,CAAAA;AAE9C,gBAAA,IAAIG,mBAAAA,EAAqB;;AAEvB,oBAAA,MAAMC,qBAAqBD,mBAAAA,CAAoBnJ,QAAQ,CAAChE,SAAS,CAAC,CAACiE,KAAAA,GAAAA;AACjE,wBAAA,OAAOA,MAAMnE,IAAI,KAAK,OAAA,IAAWmE,KAAAA,CAAMT,EAAE,KAAKsJ,eAAAA;AAChD,oBAAA,CAAA,CAAA;oBAEA,IAAIM,kBAAAA,KAAuB,EAAC,EAAG;AAC7BD,wBAAAA,mBAAAA,CAAoBnJ,QAAQ,CAACrB,MAAM,CAACyK,oBAAoB,CAAA,EAAA,GAAMpJ,QAAAA,CAAAA;oBAChE,CAAA,MAAO;wBACLmJ,mBAAAA,CAAoBnJ,QAAQ,CAACxC,IAAI,CAAA,GAAIwC,QAAAA,CAAAA;AACvC,oBAAA;AAEAL,oBAAAA,cAAAA,CAAewJ,mBAAAA,EAAqB,SAAA,CAAA;AACtC,gBAAA;AACF,YAAA;;AAGA,YAAA,MAAMpJ,UAAAA,GAAaR,MAAAA,CAAOvD,SAAS,CAAC,CAACwM,SAAAA,GAAAA;gBACnC,OAAOA,SAAAA,CAAUhJ,EAAE,KAAKsJ,eAAAA;AAC1B,YAAA,CAAA,CAAA;YAEA,IAAI/I,UAAAA,KAAe,EAAC,EAAG;gBACrBR,MAAAA,CAAOZ,MAAM,CAACoB,UAAAA,EAAY,CAAA,CAAA;AAC5B,YAAA;AACF,QAAA,CAAA;AACAsJ,QAAAA,sBAAAA,EAAwB,CAAClN,KAAAA,EAAOsG,MAAAA,GAAAA;YAC9B,MAAM,EAAEtC,OAAO,EAAEX,EAAAA,EAAIsJ,eAAe,EAAEQ,eAAe,EAAE,GAAG7G,MAAAA,CAAOC,OAAO;YAExE4G,eAAAA,CAAgBrL,OAAO,CAAC,CAAC4B,GAAAA,GAAAA;AACvByB,gBAAAA,sBAAAA,CAAuBnF,KAAAA,EAAO0D,GAAAA,CAAAA;AAChC,YAAA,CAAA,CAAA;YAEA,MAAM,EAAEN,MAAM,EAAE,GAAGpD,MAAMhB,gBAAgB,CAACwG,QAAQ,CAACxB,OAAAA,CAAQ;YAE3D,MAAM4I,aAAAA,GAAgBzJ,UAAUC,MAAAA,EAAQuJ,eAAAA,CAAAA;AACxC,YAAA,IAAI,CAACC,aAAAA,EAAe;AAClB,gBAAA;AACF,YAAA;AAEA,YAAA,MAAMQ,WAAW,IAAIC,GAAAA,EAAAA;AACrB,YAAA,MAAMC,UAAU,CAACC,cAAAA,GAAAA;AACfH,gBAAAA,QAAAA,CAASI,GAAG,CAACD,cAAAA,CAAAA;gBAEb,MAAME,YAAAA,GAAetK,UAAUC,MAAAA,EAAQmK,cAAAA,CAAAA;AAEvC,gBAAA,KAAK,MAAMzJ,KAAAA,IAAS2J,YAAAA,EAAc5J,QAAAA,IAAY,EAAE,CAAE;oBAChD,IAAIC,KAAAA,CAAMnE,IAAI,KAAK,OAAA,EAAS;AAC5B2N,oBAAAA,OAAAA,CAAQxJ,MAAMT,EAAE,CAAA;AAClB,gBAAA;AACF,YAAA,CAAA;YAEAiK,OAAAA,CAAQX,eAAAA,CAAAA;YAER,IAAIC,aAAAA,CAAcrI,MAAM,EAAE;AACxB,gBAAA,MAAMyI,mBAAAA,GAAsB7J,SAAAA,CAAUC,MAAAA,EAAQwJ,aAAAA,CAAcrI,MAAM,CAAA;AAElE,gBAAA,IAAIyI,mBAAAA,EAAqB;AACvB,oBAAA,MAAMC,qBAAqBD,mBAAAA,CAAoBnJ,QAAQ,CAAChE,SAAS,CAAC,CAACiE,KAAAA,GAAAA;AACjE,wBAAA,OAAOA,MAAMnE,IAAI,KAAK,OAAA,IAAWmE,KAAAA,CAAMT,EAAE,KAAKsJ,eAAAA;AAChD,oBAAA,CAAA,CAAA;oBAEA,IAAIM,kBAAAA,KAAuB,EAAC,EAAG;AAC7BD,wBAAAA,mBAAAA,CAAoBnJ,QAAQ,CAACrB,MAAM,CAACyK,kBAAAA,EAAoB,CAAA,CAAA;AAC1D,oBAAA;AAEAzJ,oBAAAA,cAAAA,CAAewJ,mBAAAA,EAAqB,SAAA,CAAA;AACtC,gBAAA;AACF,YAAA;;YAGAhN,KAAAA,CAAMhB,gBAAgB,CAACwG,QAAQ,CAACxB,OAAAA,CAAQ,CAACZ,MAAM,GAAGA,MAAAA,CAAOyC,MAAM,CAAC,CAACwG,SAAAA,GAAAA;AAC/D,gBAAA,OAAO,CAACe,QAAAA,CAASM,GAAG,CAACrB,UAAUhJ,EAAE,CAAA;AACnC,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;AACAsK,QAAAA,yBAAAA,EAA2B,CACzB3N,KAAAA,EACAsG,MAAAA,GAAAA;YAEA,MAAM,EAAEtC,OAAO,EAAEN,GAAG,EAAEQ,aAAa,EAAE9B,KAAK,EAAE,GAAGkE,MAAAA,CAAOC,OAAO;YAC7D,MAAM,EAAEnD,MAAM,EAAE,GAAGpD,MAAMhB,gBAAgB,CAACwG,QAAQ,CAACxB,OAAAA,CAAQ;AAE3DP,YAAAA,sBAAAA,CAAuBL,MAAAA,EAAQM,GAAAA,CAAAA;AAE/B,YAAA,IAAIQ,aAAAA,EAAe;gBACjB,MAAMM,WAAAA,GAAcrB,UAAUC,MAAAA,EAAQc,aAAAA,CAAAA;AAEtC,gBAAA,IAAIM,WAAAA,EAAa;AACf,oBAAA,MAAM2H,KAAAA,GAAQ;wBAAExM,IAAAA,EAAM,aAAA;AAAwB+D,wBAAAA;AAAI,qBAAA;oBAElD,IAAI,OAAOtB,KAAAA,KAAU,QAAA,IAAYA,KAAAA,IAAS,CAAA,IAAKA,SAASoC,WAAAA,CAAYX,QAAQ,CAACd,MAAM,EAAE;AACnFyB,wBAAAA,WAAAA,CAAYX,QAAQ,CAACrB,MAAM,CAACJ,OAAO,CAAA,EAAG+J,KAAAA,CAAAA;oBACxC,CAAA,MAAO;wBACL3H,WAAAA,CAAYX,QAAQ,CAACxC,IAAI,CAAC8K,KAAAA,CAAAA;AAC5B,oBAAA;AAEA3I,oBAAAA,cAAAA,CAAegB,WAAAA,EAAa,SAAA,CAAA;AAC9B,gBAAA;AACF,YAAA;AACF,QAAA,CAAA;AACAoJ,QAAAA,qBAAAA,EAAuB,CAAC5N,KAAAA,EAAOsG,MAAAA,GAAAA;YAC7B,MAAM,EAAEtC,OAAO,EAAE6J,OAAO,EAAElF,IAAI,EAAEC,EAAE,EAAE,GAAGtC,MAAAA,CAAOC,OAAO;YAErD,MAAMhD,KAAAA,GAAQJ,SAAAA,CAAUnD,KAAAA,CAAMhB,gBAAgB,CAACwG,QAAQ,CAACxB,OAAAA,CAAQ,CAACZ,MAAM,EAAEyK,OAAAA,CAAAA;AACzE,YAAA,IAAI,CAACtK,KAAAA,EAAO;AACV,gBAAA;AACF,YAAA;AAEA,YAAA,MAAMO,KAAAA,GAAQP,KAAAA,CAAMM,QAAQ,CAAC8E,IAAAA,CAAK;AAClC,YAAA,IAAI,CAAC7E,KAAAA,EAAO;AACV,gBAAA;AACF,YAAA;AAEAP,YAAAA,KAAAA,CAAMM,QAAQ,CAACrB,MAAM,CAACmG,IAAAA,EAAM,CAAA,CAAA;AAC5BpF,YAAAA,KAAAA,CAAMM,QAAQ,CAACrB,MAAM,CAACoG,IAAI,CAAA,EAAG9E,KAAAA,CAAAA;AAE7BN,YAAAA,cAAAA,CAAeD,KAAAA,EAAO,SAAA,CAAA;AACxB,QAAA,CAAA;QAEAuK,WAAAA,CAAAA,CACE9N,KAAK,EACL+N,aAGE,EAAA;AAEF,YAAA,MAAM,EAAEzH,MAAM,EAAE0H,MAAM,EAAE,GAAGD,cAAcxH,OAAO;YAEhD,OAAQD,MAAAA;gBACN,KAAK,KAAA;AACH,oBAAA;wBACE,MAAM5C,GAAAA,GAAMsK,OAAOtK,GAAG;wBAEtB,IAAIsK,MAAAA,CAAO9G,SAAS,KAAK,WAAA,EAAa;4BACpClH,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI,GAAGsK,MAAAA;wBAC1B,CAAA,MAAO;4BACLhO,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI,GAAGsK,MAAAA;AAC5B,wBAAA;AACF,oBAAA;AACA,oBAAA;gBACF,KAAK,QAAA;AACH,oBAAA;wBACE,MAAMtK,GAAAA,GAAMsK,OAAOtK,GAAG;;wBAItB,IAAIsK,MAAAA,CAAO9G,SAAS,KAAK,WAAA,EAAa;AACpC,4BAAA,MAAMvB,SAAAA,GAAY3F,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI;4BACvC1D,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI,GAAG;AACtB,gCAAA,GAAGsK,MAAM;gCACT,GAAGpL,gBAAAA,CAAiB+C,WAAWqI,MAAAA,CAAO;AACtC5N,gCAAAA,MAAAA,EAAQuF,SAAAA,EAAWvF,MAAAA,KAAW,KAAA,GAAQ,KAAA,GAAQ4N,OAAO5N;AACvD,6BAAA;wBACF,CAAA,MAAO;AACL,4BAAA,MAAM6F,WAAAA,GAAcjG,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI;AAC3C,4BAAA,MAAM0H,eAAenF,WAAAA,EAAaqB,IAAAA;4BAElCtH,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI,GAAG;AACxB,gCAAA,GAAGsK,MAAM;gCACT,GAAGpL,gBAAAA,CAAiBqD,aAAa+H,MAAAA,CAAO;AACxC5N,gCAAAA,MAAAA,EAAQ6F,WAAAA,EAAa7F,MAAAA,KAAW,KAAA,GAAQ,KAAA,GAAQ4N,OAAO5N;AACzD,6BAAA;AAEA,4BAAA,IAAIgL,gBAAgB4C,MAAAA,CAAO1G,IAAI,IAAI0G,MAAAA,CAAO1G,IAAI,KAAK8D,YAAAA,EAAc;AAC/D,gCAAA,MAAMC,aACJrL,KAAAA,CAAMhB,gBAAgB,CAACwG,QAAQ,CAACoC,mCAAkBwD,YAAAA,CAAAA,CAAc;gCAClE3H,sBAAAA,CAAuB4H,UAAAA,CAAWjI,MAAM,EAAEM,GAAAA,CAAAA;AAC5C,4BAAA;AACF,wBAAA;AACF,oBAAA;AACA,oBAAA;gBACF,KAAK,QAAA;AAAU,oBAAA;wBACb,MAAMA,GAAAA,GAAMsK,OAAOtK,GAAG;wBACtB,MAAMuK,WAAAA,GAAcD,MAAAA,CAAO9G,SAAS,KAAK,WAAA;;AAEzC,wBAAA,IAAI+G,WAAAA,EAAa;AACf,4BAAA,MAAMC,MAAAA,GAASlO,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI;AACpC,4BAAA,IAAI,CAACwK,MAAAA,EAAQ;AACX,gCAAA;AACF,4BAAA;AAEA,4BAAA,MAAMC,YAAYnO,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI,EAAEtD,MAAAA,KAAW,KAAA;AACpD,4BAAA,IAAI+N,SAAAA,EAAW;gCACb,OAAOnO,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI;4BAC9B,CAAA,MAAO;AACL1D,gCAAAA,KAAAA,CAAMpB,UAAU,CAAC8E,GAAAA,CAAI,CAACtD,MAAM,GAAG,SAAA;AACjC,4BAAA;wBACF,CAAA,MAAO;AACL,4BAAA,MAAM8N,MAAAA,GAASlO,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI;AACtC,4BAAA,IAAI,CAACwK,MAAAA,EAAQ;AACX,gCAAA;AACF,4BAAA;AAEA,4BAAA,MAAMC,YAAYnO,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI,EAAEtD,MAAAA,KAAW,KAAA;AACtD,4BAAA,IAAI+N,SAAAA,EAAW;gCACb,OAAOnO,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI;4BAChC,CAAA,MAAO;AACL1D,gCAAAA,KAAAA,CAAMnB,YAAY,CAAC6E,GAAAA,CAAI,CAACtD,MAAM,GAAG,SAAA;AACnC,4BAAA;4BAEAkF,MAAAA,CAAOC,MAAM,CAACvF,KAAAA,CAAMhB,gBAAgB,CAACwG,QAAQ,CAAA,CAAE1D,OAAO,CAAC,CAACkC,OAAAA,GAAAA;gCACtDP,sBAAAA,CAAuBO,OAAAA,CAAQZ,MAAM,EAAEM,GAAAA,CAAAA;AACzC,4BAAA,CAAA,CAAA;AACF,wBAAA;AAEA,wBAAA;AACF,oBAAA;AACF;AACF,QAAA;AACF;AACF,CAAA,EAEA;IACE0K,KAAAA,EAAO,EAAA;IACPC,yBAAAA,EAA2B;AAAC,QAAA,cAAA;AAAgB,QAAA;AAAO,KAAA;AACnDC,IAAAA,aAAAA,EAAe,CAACtO,KAAAA,GAAAA;AACd,QAAA,IAAI,CAACA,KAAAA,EAAO;AACV,YAAA,OAAO,EAAC;AACV,QAAA;QAEA,OAAO;AACLpB,YAAAA,UAAAA,EAAYoB,MAAMpB,UAAU;AAC5BC,YAAAA,YAAAA,EAAcmB,MAAMnB,YAAY;AAChCG,YAAAA,gBAAAA,EAAkBgB,MAAMhB;AAC1B,SAAA;AACF,IAAA,CAAA;AACAuP,IAAAA,OAAAA,EAAS,CAACvO,KAAAA,GAAAA;QACRA,KAAAA,CAAMpB,UAAU,GAAGoB,KAAAA,CAAMlB,iBAAiB;QAC1CkB,KAAAA,CAAMnB,YAAY,GAAGmB,KAAAA,CAAMjB,mBAAmB;QAC9CiB,KAAAA,CAAMhB,gBAAgB,GAAGgB,KAAAA,CAAMd,uBAAuB;AACxD,IAAA;AACF,CAAA,CAAA;MAIW,EAAEsP,OAAO,EAAEC,OAAO,EAAE,GAAGvI;;;;;;"}
@@ -2,6 +2,7 @@ import merge from 'lodash/merge';
2
2
  import omit from 'lodash/omit';
3
3
  import uniq from 'lodash/uniq';
4
4
  import { applyPrivateSearchDefault } from '../../utils/applyPrivateSearchDefault.mjs';
5
+ import { getVisibleConditionEntries } from '../../utils/conditions.mjs';
5
6
  import { getRelationType } from '../../utils/getRelationType.mjs';
6
7
  import { makeUnique } from '../../utils/makeUnique.mjs';
7
8
  import { createUndoRedoSlice } from './undoRedo.mjs';
@@ -134,6 +135,25 @@ const createAttribute = (properties)=>{
134
135
  recordRename(type, previousAttribute, newAttribute);
135
136
  }
136
137
  };
138
+ /**
139
+ * Points the conditions of the type's other fields at the new name of a renamed
140
+ * field. Runs for every rename, recorded or not, so the conditions follow the
141
+ * field whether or not its data is preserved.
142
+ */ const renameConditionVars = (type, previousAttribute, newAttribute)=>{
143
+ const oldName = previousAttribute.name;
144
+ const newName = newAttribute?.name;
145
+ if (!newName || oldName === newName) {
146
+ return;
147
+ }
148
+ type.attributes.forEach((attribute)=>{
149
+ getVisibleConditionEntries(attribute.conditions).forEach(({ fieldVar })=>{
150
+ if (fieldVar.var === oldName) {
151
+ fieldVar.var = newName;
152
+ setAttributeStatus(attribute, 'CHANGED');
153
+ }
154
+ });
155
+ });
156
+ };
137
157
  const setAttributeAt = (type, index, attribute)=>{
138
158
  const previousAttribute = type.attributes[index];
139
159
  const newStatus = getNewStatus(previousAttribute.status, 'CHANGED');
@@ -500,6 +520,7 @@ const slice = createUndoRedoSlice({
500
520
  recordRename,
501
521
  declineRename
502
522
  });
523
+ renameConditionVars(type, previousAttribute, attributeToSet);
503
524
  setAttributeAt(type, initialAttributeIndex, attributeToSet);
504
525
  if (previousAttribute.type !== attributeToSet.type) {
505
526
  return;
@@ -571,6 +592,7 @@ const slice = createUndoRedoSlice({
571
592
  recordRename,
572
593
  declineRename
573
594
  });
595
+ renameConditionVars(type, previousAttribute, attributeToSet);
574
596
  },
575
597
  reloadPlugin: ()=>{
576
598
  return initialState;