@strapi/content-type-builder 5.53.0 → 5.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AIChat/hooks/useAIFetch.js +6 -2
- package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs +7 -3
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.js +20 -0
- package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.mjs +18 -0
- package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js +83 -59
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +86 -62
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.js +112 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.mjs +110 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.js +159 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.mjs +157 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.js +311 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.mjs +309 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.js +379 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.mjs +376 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.js +172 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.mjs +166 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.js +62 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.mjs +60 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.js +145 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.mjs +143 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js +176 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs +169 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js +277 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs +273 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.js +62 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.mjs +58 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.mjs.map +1 -0
- package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.js +70 -8
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +70 -8
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/reducer.js +411 -33
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +411 -33
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.js +11 -2
- package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs +11 -2
- package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/contentStructure.js +150 -0
- package/dist/admin/components/DataManager/utils/contentStructure.js.map +1 -0
- package/dist/admin/components/DataManager/utils/contentStructure.mjs +133 -0
- package/dist/admin/components/DataManager/utils/contentStructure.mjs.map +1 -0
- package/dist/admin/components/FolderSelect.js +200 -0
- package/dist/admin/components/FolderSelect.js.map +1 -0
- package/dist/admin/components/FolderSelect.mjs +198 -0
- package/dist/admin/components/FolderSelect.mjs.map +1 -0
- package/dist/admin/components/FormModal/FormModal.js +23 -2
- package/dist/admin/components/FormModal/FormModal.js.map +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs +23 -2
- package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/contentTypeForm.js +15 -18
- package/dist/admin/components/FormModal/contentType/contentTypeForm.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs +15 -18
- package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/reducer.js +6 -0
- package/dist/admin/components/FormModal/reducer.js.map +1 -1
- package/dist/admin/components/FormModal/reducer.mjs +6 -0
- package/dist/admin/components/FormModal/reducer.mjs.map +1 -1
- package/dist/admin/pages/App/index.js +2 -5
- package/dist/admin/pages/App/index.js.map +1 -1
- package/dist/admin/pages/App/index.mjs +2 -5
- package/dist/admin/pages/App/index.mjs.map +1 -1
- package/dist/admin/src/components/AIChat/hooks/usePrefetchAIToken.d.ts +1 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.d.ts +16 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.d.ts +12 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.d.ts +14 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.d.ts +38 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/{useContentTypeBuilderMenu.d.ts → hooks/useContentTypeBuilderMenu.d.ts} +17 -7
- package/dist/admin/src/components/ContentTypeBuilderNav/hooks/useFolderActions.d.ts +42 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/hooks/useSortableTree.d.ts +53 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/lib/buildFolderTree.d.ts +42 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/lib/dropProjection.d.ts +58 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/lib/flatModel.d.ts +18 -0
- package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +41 -0
- package/dist/admin/src/components/DataManager/reducer.d.ts +105 -1
- package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +5 -1
- package/dist/admin/src/components/DataManager/utils/contentStructure.d.ts +68 -0
- package/dist/admin/src/components/FolderSelect.d.ts +18 -0
- package/dist/admin/src/components/FormModal/contentType/contentTypeForm.d.ts +0 -21
- package/dist/admin/src/components/FormModal/forms/forms.d.ts +0 -10
- package/dist/admin/src/components/FormModal/reducer.d.ts +7 -0
- package/dist/admin/src/utils/folderTelemetry.d.ts +5 -0
- package/dist/admin/translations/en.json.js +23 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +23 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/folderTelemetry.js +19 -0
- package/dist/admin/utils/folderTelemetry.js.map +1 -0
- package/dist/admin/utils/folderTelemetry.mjs +16 -0
- package/dist/admin/utils/folderTelemetry.mjs.map +1 -0
- package/dist/server/controllers/schema.js +1 -1
- package/dist/server/controllers/schema.js.map +1 -1
- package/dist/server/controllers/schema.mjs +1 -1
- package/dist/server/controllers/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/common.js +3 -0
- package/dist/server/controllers/validation/common.js.map +1 -1
- package/dist/server/controllers/validation/common.mjs +3 -1
- package/dist/server/controllers/validation/common.mjs.map +1 -1
- package/dist/server/controllers/validation/content-structure.js +177 -0
- package/dist/server/controllers/validation/content-structure.js.map +1 -0
- package/dist/server/controllers/validation/content-structure.mjs +173 -0
- package/dist/server/controllers/validation/content-structure.mjs.map +1 -0
- package/dist/server/controllers/validation/schema.js +3 -1
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +3 -1
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/register.js +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/content-api.js +4 -4
- package/dist/server/routes/content-api.js.map +1 -1
- package/dist/server/routes/content-api.mjs +4 -4
- package/dist/server/routes/content-api.mjs.map +1 -1
- package/dist/server/services/api-handler.js +37 -4
- package/dist/server/services/api-handler.js.map +1 -1
- package/dist/server/services/api-handler.mjs +36 -5
- package/dist/server/services/api-handler.mjs.map +1 -1
- package/dist/server/services/content-structure.js +174 -0
- package/dist/server/services/content-structure.js.map +1 -0
- package/dist/server/services/content-structure.mjs +172 -0
- package/dist/server/services/content-structure.mjs.map +1 -0
- package/dist/server/services/content-types.js +196 -44
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +195 -45
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/schema-builder/index.js +4 -2
- package/dist/server/services/schema-builder/index.js.map +1 -1
- package/dist/server/services/schema-builder/index.mjs +4 -2
- package/dist/server/services/schema-builder/index.mjs.map +1 -1
- package/dist/server/services/schema-builder/schema-handler.js +19 -17
- package/dist/server/services/schema-builder/schema-handler.js.map +1 -1
- package/dist/server/services/schema-builder/schema-handler.mjs +19 -17
- package/dist/server/services/schema-builder/schema-handler.mjs.map +1 -1
- package/dist/server/services/schema-mutation.js +46 -0
- package/dist/server/services/schema-mutation.js.map +1 -0
- package/dist/server/services/schema-mutation.mjs +43 -0
- package/dist/server/services/schema-mutation.mjs.map +1 -0
- package/dist/server/services/schema.js +134 -79
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +135 -80
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/src/controllers/schema.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/common.d.ts +1 -0
- package/dist/server/src/controllers/validation/common.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-structure.d.ts +56 -0
- package/dist/server/src/controllers/validation/content-structure.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/schema.d.ts +35 -0
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +3 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/content-api.d.ts.map +1 -1
- package/dist/server/src/services/api-handler.d.ts +13 -1
- package/dist/server/src/services/api-handler.d.ts.map +1 -1
- package/dist/server/src/services/content-structure.d.ts +37 -0
- package/dist/server/src/services/content-structure.d.ts.map +1 -0
- package/dist/server/src/services/content-types.d.ts +4 -0
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/schema-builder/index.d.ts +3 -1
- package/dist/server/src/services/schema-builder/index.d.ts.map +1 -1
- package/dist/server/src/services/schema-builder/schema-handler.d.ts.map +1 -1
- package/dist/server/src/services/schema-mutation.d.ts +26 -0
- package/dist/server/src/services/schema-mutation.d.ts.map +1 -0
- package/dist/server/src/services/schema.d.ts +1 -0
- package/dist/server/src/services/schema.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/package.json +8 -8
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +0 -157
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +0 -1
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs +0 -151
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +0 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const itemId = (node)=>{
|
|
4
|
+
return node.type === 'folder' ? `folder:${node.id}` : `ct:${node.uid}`;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Flatten a contentStructure tree into visible, ordered rows. Descendants of a collapsed folder are omitted.
|
|
8
|
+
*/ function flattenSortableTree(nodes, collapsed, parentId = null, depth = 0) {
|
|
9
|
+
const result = [];
|
|
10
|
+
for (const node of nodes){
|
|
11
|
+
if (node.type === 'folder') {
|
|
12
|
+
const isCollapsed = collapsed.has(node.id);
|
|
13
|
+
result.push({
|
|
14
|
+
id: itemId(node),
|
|
15
|
+
node,
|
|
16
|
+
depth,
|
|
17
|
+
parentId,
|
|
18
|
+
collapsed: isCollapsed
|
|
19
|
+
});
|
|
20
|
+
const flattenedTree = flattenSortableTree(node.children, collapsed, node.id, depth + 1);
|
|
21
|
+
if (!isCollapsed) {
|
|
22
|
+
result.push(...flattenedTree);
|
|
23
|
+
}
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
result.push({
|
|
27
|
+
id: itemId(node),
|
|
28
|
+
node,
|
|
29
|
+
depth,
|
|
30
|
+
parentId,
|
|
31
|
+
collapsed: false
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Return a contentStructure without the active element's children.
|
|
38
|
+
* This is used to hide a dragged folder's descendants so it can't be dropped into its own subtree.
|
|
39
|
+
*/ function removeSubtree(items, activeId) {
|
|
40
|
+
const active = items.find((item)=>item.id === activeId);
|
|
41
|
+
if (!active || active.node.type !== 'folder') {
|
|
42
|
+
return items;
|
|
43
|
+
}
|
|
44
|
+
const excluded = new Set([
|
|
45
|
+
activeId
|
|
46
|
+
]);
|
|
47
|
+
return items.filter((item)=>{
|
|
48
|
+
if (item.id === activeId) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
if (item.parentId && excluded.has(`folder:${item.parentId}`)) {
|
|
52
|
+
excluded.add(item.id);
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
exports.flattenSortableTree = flattenSortableTree;
|
|
60
|
+
exports.itemId = itemId;
|
|
61
|
+
exports.removeSubtree = removeSubtree;
|
|
62
|
+
//# sourceMappingURL=flatModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatModel.js","sources":["../../../../../admin/src/components/ContentTypeBuilderNav/lib/flatModel.ts"],"sourcesContent":["import type { FolderTreeNode } from './buildFolderTree';\n\nexport type FlatItem = {\n parentId: string | null;\n node: FolderTreeNode;\n collapsed: boolean;\n depth: number;\n id: string;\n};\n\nexport const itemId = (node: FolderTreeNode): string => {\n return node.type === 'folder' ? `folder:${node.id}` : `ct:${node.uid}`;\n};\n\n/**\n * Flatten a contentStructure tree into visible, ordered rows. Descendants of a collapsed folder are omitted.\n */\nexport function flattenSortableTree(\n nodes: FolderTreeNode[],\n collapsed: Set<string>,\n parentId: string | null = null,\n depth = 0\n): FlatItem[] {\n const result: FlatItem[] = [];\n\n for (const node of nodes) {\n if (node.type === 'folder') {\n const isCollapsed = collapsed.has(node.id);\n result.push({ id: itemId(node), node, depth, parentId, collapsed: isCollapsed });\n\n const flattenedTree = flattenSortableTree(node.children, collapsed, node.id, depth + 1);\n if (!isCollapsed) {\n result.push(...flattenedTree);\n }\n\n continue;\n }\n\n result.push({ id: itemId(node), node, depth, parentId, collapsed: false });\n }\n\n return result;\n}\n\n/**\n * Return a contentStructure without the active element's children.\n * This is used to hide a dragged folder's descendants so it can't be dropped into its own subtree.\n */\nexport function removeSubtree(items: FlatItem[], activeId: string): FlatItem[] {\n const active = items.find((item) => item.id === activeId);\n\n if (!active || active.node.type !== 'folder') {\n return items;\n }\n\n const excluded = new Set<string>([activeId]);\n\n return items.filter((item) => {\n if (item.id === activeId) {\n return true;\n }\n\n if (item.parentId && excluded.has(`folder:${item.parentId}`)) {\n excluded.add(item.id);\n return false;\n }\n\n return true;\n });\n}\n"],"names":["itemId","node","type","id","uid","flattenSortableTree","nodes","collapsed","parentId","depth","result","isCollapsed","has","push","flattenedTree","children","removeSubtree","items","activeId","active","find","item","excluded","Set","filter","add"],"mappings":";;AAUO,MAAMA,SAAS,CAACC,IAAAA,GAAAA;AACrB,IAAA,OAAOA,KAAKC,IAAI,KAAK,QAAA,GAAW,CAAC,OAAO,EAAED,IAAAA,CAAKE,EAAE,CAAA,CAAE,GAAG,CAAC,GAAG,EAAEF,IAAAA,CAAKG,GAAG,CAAA,CAAE;AACxE;AAEA;;IAGO,SAASC,mBAAAA,CACdC,KAAuB,EACvBC,SAAsB,EACtBC,QAAAA,GAA0B,IAAI,EAC9BC,KAAAA,GAAQ,CAAC,EAAA;AAET,IAAA,MAAMC,SAAqB,EAAE;IAE7B,KAAK,MAAMT,QAAQK,KAAAA,CAAO;QACxB,IAAIL,IAAAA,CAAKC,IAAI,KAAK,QAAA,EAAU;AAC1B,YAAA,MAAMS,WAAAA,GAAcJ,SAAAA,CAAUK,GAAG,CAACX,KAAKE,EAAE,CAAA;AACzCO,YAAAA,MAAAA,CAAOG,IAAI,CAAC;AAAEV,gBAAAA,EAAAA,EAAIH,MAAAA,CAAOC,IAAAA,CAAAA;AAAOA,gBAAAA,IAAAA;AAAMQ,gBAAAA,KAAAA;AAAOD,gBAAAA,QAAAA;gBAAUD,SAAAA,EAAWI;AAAY,aAAA,CAAA;YAE9E,MAAMG,aAAAA,GAAgBT,oBAAoBJ,IAAAA,CAAKc,QAAQ,EAAER,SAAAA,EAAWN,IAAAA,CAAKE,EAAE,EAAEM,KAAAA,GAAQ,CAAA,CAAA;AACrF,YAAA,IAAI,CAACE,WAAAA,EAAa;AAChBD,gBAAAA,MAAAA,CAAOG,IAAI,CAAA,GAAIC,aAAAA,CAAAA;AACjB,YAAA;AAEA,YAAA;AACF,QAAA;AAEAJ,QAAAA,MAAAA,CAAOG,IAAI,CAAC;AAAEV,YAAAA,EAAAA,EAAIH,MAAAA,CAAOC,IAAAA,CAAAA;AAAOA,YAAAA,IAAAA;AAAMQ,YAAAA,KAAAA;AAAOD,YAAAA,QAAAA;YAAUD,SAAAA,EAAW;AAAM,SAAA,CAAA;AAC1E,IAAA;IAEA,OAAOG,MAAAA;AACT;AAEA;;;AAGC,IACM,SAASM,aAAAA,CAAcC,KAAiB,EAAEC,QAAgB,EAAA;IAC/D,MAAMC,MAAAA,GAASF,MAAMG,IAAI,CAAC,CAACC,IAAAA,GAASA,IAAAA,CAAKlB,EAAE,KAAKe,QAAAA,CAAAA;AAEhD,IAAA,IAAI,CAACC,MAAAA,IAAUA,MAAAA,CAAOlB,IAAI,CAACC,IAAI,KAAK,QAAA,EAAU;QAC5C,OAAOe,KAAAA;AACT,IAAA;IAEA,MAAMK,QAAAA,GAAW,IAAIC,GAAAA,CAAY;AAACL,QAAAA;AAAS,KAAA,CAAA;IAE3C,OAAOD,KAAAA,CAAMO,MAAM,CAAC,CAACH,IAAAA,GAAAA;QACnB,IAAIA,IAAAA,CAAKlB,EAAE,KAAKe,QAAAA,EAAU;YACxB,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAIG,IAAAA,CAAKb,QAAQ,IAAIc,QAAAA,CAASV,GAAG,CAAC,CAAC,OAAO,EAAES,IAAAA,CAAKb,QAAQ,CAAA,CAAE,CAAA,EAAG;YAC5Dc,QAAAA,CAASG,GAAG,CAACJ,IAAAA,CAAKlB,EAAE,CAAA;YACpB,OAAO,KAAA;AACT,QAAA;QAEA,OAAO,IAAA;AACT,IAAA,CAAA,CAAA;AACF;;;;;;"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const itemId = (node)=>{
|
|
2
|
+
return node.type === 'folder' ? `folder:${node.id}` : `ct:${node.uid}`;
|
|
3
|
+
};
|
|
4
|
+
/**
|
|
5
|
+
* Flatten a contentStructure tree into visible, ordered rows. Descendants of a collapsed folder are omitted.
|
|
6
|
+
*/ function flattenSortableTree(nodes, collapsed, parentId = null, depth = 0) {
|
|
7
|
+
const result = [];
|
|
8
|
+
for (const node of nodes){
|
|
9
|
+
if (node.type === 'folder') {
|
|
10
|
+
const isCollapsed = collapsed.has(node.id);
|
|
11
|
+
result.push({
|
|
12
|
+
id: itemId(node),
|
|
13
|
+
node,
|
|
14
|
+
depth,
|
|
15
|
+
parentId,
|
|
16
|
+
collapsed: isCollapsed
|
|
17
|
+
});
|
|
18
|
+
const flattenedTree = flattenSortableTree(node.children, collapsed, node.id, depth + 1);
|
|
19
|
+
if (!isCollapsed) {
|
|
20
|
+
result.push(...flattenedTree);
|
|
21
|
+
}
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
result.push({
|
|
25
|
+
id: itemId(node),
|
|
26
|
+
node,
|
|
27
|
+
depth,
|
|
28
|
+
parentId,
|
|
29
|
+
collapsed: false
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Return a contentStructure without the active element's children.
|
|
36
|
+
* This is used to hide a dragged folder's descendants so it can't be dropped into its own subtree.
|
|
37
|
+
*/ function removeSubtree(items, activeId) {
|
|
38
|
+
const active = items.find((item)=>item.id === activeId);
|
|
39
|
+
if (!active || active.node.type !== 'folder') {
|
|
40
|
+
return items;
|
|
41
|
+
}
|
|
42
|
+
const excluded = new Set([
|
|
43
|
+
activeId
|
|
44
|
+
]);
|
|
45
|
+
return items.filter((item)=>{
|
|
46
|
+
if (item.id === activeId) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
if (item.parentId && excluded.has(`folder:${item.parentId}`)) {
|
|
50
|
+
excluded.add(item.id);
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { flattenSortableTree, itemId, removeSubtree };
|
|
58
|
+
//# sourceMappingURL=flatModel.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatModel.mjs","sources":["../../../../../admin/src/components/ContentTypeBuilderNav/lib/flatModel.ts"],"sourcesContent":["import type { FolderTreeNode } from './buildFolderTree';\n\nexport type FlatItem = {\n parentId: string | null;\n node: FolderTreeNode;\n collapsed: boolean;\n depth: number;\n id: string;\n};\n\nexport const itemId = (node: FolderTreeNode): string => {\n return node.type === 'folder' ? `folder:${node.id}` : `ct:${node.uid}`;\n};\n\n/**\n * Flatten a contentStructure tree into visible, ordered rows. Descendants of a collapsed folder are omitted.\n */\nexport function flattenSortableTree(\n nodes: FolderTreeNode[],\n collapsed: Set<string>,\n parentId: string | null = null,\n depth = 0\n): FlatItem[] {\n const result: FlatItem[] = [];\n\n for (const node of nodes) {\n if (node.type === 'folder') {\n const isCollapsed = collapsed.has(node.id);\n result.push({ id: itemId(node), node, depth, parentId, collapsed: isCollapsed });\n\n const flattenedTree = flattenSortableTree(node.children, collapsed, node.id, depth + 1);\n if (!isCollapsed) {\n result.push(...flattenedTree);\n }\n\n continue;\n }\n\n result.push({ id: itemId(node), node, depth, parentId, collapsed: false });\n }\n\n return result;\n}\n\n/**\n * Return a contentStructure without the active element's children.\n * This is used to hide a dragged folder's descendants so it can't be dropped into its own subtree.\n */\nexport function removeSubtree(items: FlatItem[], activeId: string): FlatItem[] {\n const active = items.find((item) => item.id === activeId);\n\n if (!active || active.node.type !== 'folder') {\n return items;\n }\n\n const excluded = new Set<string>([activeId]);\n\n return items.filter((item) => {\n if (item.id === activeId) {\n return true;\n }\n\n if (item.parentId && excluded.has(`folder:${item.parentId}`)) {\n excluded.add(item.id);\n return false;\n }\n\n return true;\n });\n}\n"],"names":["itemId","node","type","id","uid","flattenSortableTree","nodes","collapsed","parentId","depth","result","isCollapsed","has","push","flattenedTree","children","removeSubtree","items","activeId","active","find","item","excluded","Set","filter","add"],"mappings":"AAUO,MAAMA,SAAS,CAACC,IAAAA,GAAAA;AACrB,IAAA,OAAOA,KAAKC,IAAI,KAAK,QAAA,GAAW,CAAC,OAAO,EAAED,IAAAA,CAAKE,EAAE,CAAA,CAAE,GAAG,CAAC,GAAG,EAAEF,IAAAA,CAAKG,GAAG,CAAA,CAAE;AACxE;AAEA;;IAGO,SAASC,mBAAAA,CACdC,KAAuB,EACvBC,SAAsB,EACtBC,QAAAA,GAA0B,IAAI,EAC9BC,KAAAA,GAAQ,CAAC,EAAA;AAET,IAAA,MAAMC,SAAqB,EAAE;IAE7B,KAAK,MAAMT,QAAQK,KAAAA,CAAO;QACxB,IAAIL,IAAAA,CAAKC,IAAI,KAAK,QAAA,EAAU;AAC1B,YAAA,MAAMS,WAAAA,GAAcJ,SAAAA,CAAUK,GAAG,CAACX,KAAKE,EAAE,CAAA;AACzCO,YAAAA,MAAAA,CAAOG,IAAI,CAAC;AAAEV,gBAAAA,EAAAA,EAAIH,MAAAA,CAAOC,IAAAA,CAAAA;AAAOA,gBAAAA,IAAAA;AAAMQ,gBAAAA,KAAAA;AAAOD,gBAAAA,QAAAA;gBAAUD,SAAAA,EAAWI;AAAY,aAAA,CAAA;YAE9E,MAAMG,aAAAA,GAAgBT,oBAAoBJ,IAAAA,CAAKc,QAAQ,EAAER,SAAAA,EAAWN,IAAAA,CAAKE,EAAE,EAAEM,KAAAA,GAAQ,CAAA,CAAA;AACrF,YAAA,IAAI,CAACE,WAAAA,EAAa;AAChBD,gBAAAA,MAAAA,CAAOG,IAAI,CAAA,GAAIC,aAAAA,CAAAA;AACjB,YAAA;AAEA,YAAA;AACF,QAAA;AAEAJ,QAAAA,MAAAA,CAAOG,IAAI,CAAC;AAAEV,YAAAA,EAAAA,EAAIH,MAAAA,CAAOC,IAAAA,CAAAA;AAAOA,YAAAA,IAAAA;AAAMQ,YAAAA,KAAAA;AAAOD,YAAAA,QAAAA;YAAUD,SAAAA,EAAW;AAAM,SAAA,CAAA;AAC1E,IAAA;IAEA,OAAOG,MAAAA;AACT;AAEA;;;AAGC,IACM,SAASM,aAAAA,CAAcC,KAAiB,EAAEC,QAAgB,EAAA;IAC/D,MAAMC,MAAAA,GAASF,MAAMG,IAAI,CAAC,CAACC,IAAAA,GAASA,IAAAA,CAAKlB,EAAE,KAAKe,QAAAA,CAAAA;AAEhD,IAAA,IAAI,CAACC,MAAAA,IAAUA,MAAAA,CAAOlB,IAAI,CAACC,IAAI,KAAK,QAAA,EAAU;QAC5C,OAAOe,KAAAA;AACT,IAAA;IAEA,MAAMK,QAAAA,GAAW,IAAIC,GAAAA,CAAY;AAACL,QAAAA;AAAS,KAAA,CAAA;IAE3C,OAAOD,KAAAA,CAAMO,MAAM,CAAC,CAACH,IAAAA,GAAAA;QACnB,IAAIA,IAAAA,CAAKlB,EAAE,KAAKe,QAAAA,EAAU;YACxB,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAIG,IAAAA,CAAKb,QAAQ,IAAIc,QAAAA,CAASV,GAAG,CAAC,CAAC,OAAO,EAAES,IAAAA,CAAKb,QAAQ,CAAA,CAAE,CAAA,EAAG;YAC5Dc,QAAAA,CAASG,GAAG,CAACJ,IAAAA,CAAKlB,EAAE,CAAA;YACpB,OAAO,KAAA;AACT,QAAA;QAEA,OAAO,IAAA;AACT,IAAA,CAAA,CAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataManagerContext.js","sources":["../../../../admin/src/components/DataManager/DataManagerContext.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport { createContext } from 'react';\n\nimport type { Component, ContentType } from '../../types';\nimport type { ComponentWithChildren } from './utils/retrieveComponentsThatHaveComponents';\nimport type { NestedComponent } from './utils/retrieveNestedComponents';\nimport type { Internal, Struct } from '@strapi/types';\n\nexport interface DataManagerContextValue {\n isLoading: boolean;\n addAttribute: (opts: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n }) => void;\n editAttribute: (opts: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n name: string;\n }) => void;\n moveAttribute: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n from: number;\n to: number;\n }) => void;\n addCustomFieldAttribute: (params: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n }) => void;\n editCustomFieldAttribute: (params: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n name: string;\n }) => void;\n addCreatedComponentToDynamicZone: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dynamicZoneTarget: string;\n componentsToAdd: Internal.UID.Component[];\n }) => void;\n createComponentSchema: (opts: {\n data: {\n icon?: string;\n displayName: string;\n };\n componentCategory: string;\n uid: Internal.UID.Component;\n }) => void;\n createSchema: (opts: {\n data: {\n displayName: string;\n singularName: string;\n pluralName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: Record<string, unknown>;\n };\n uid: Internal.UID.Schema;\n }) => void;\n changeDynamicZoneComponents: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dynamicZoneTarget: string;\n newComponents: Internal.UID.Component[];\n }) => void;\n removeAttribute: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n attributeToRemoveName: string;\n }) => void;\n deleteComponent(uid: Internal.UID.Component): void;\n deleteContentType(uid: Internal.UID.ContentType): void;\n removeComponentFromDynamicZone: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dzName: string;\n componentToRemoveIndex: number;\n }) => void;\n sortedContentTypesList: {\n visible: ContentType['visible'];\n name: ContentType['uid'];\n title: ContentType['info']['displayName'];\n plugin: ContentType['plugin'];\n uid: ContentType['uid'];\n to: string;\n kind: ContentType['kind'];\n restrictRelationsTo: ContentType['restrictRelationsTo'];\n status: ContentType['status'];\n }[];\n updateComponentSchema: (opts: {\n data: {\n icon?: string;\n displayName: string;\n };\n componentUID: Internal.UID.Component;\n }) => void;\n updateComponentUid: (opts: {\n newComponentUID: Internal.UID.Component;\n componentUID: Internal.UID.Component;\n }) => void;\n updateSchema: (opts: {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: Record<string, unknown>;\n };\n uid: Internal.UID.ContentType;\n }) => void;\n initialComponents: Record<Internal.UID.Component, Component>;\n components: Record<Internal.UID.Component, Component>;\n componentsGroupedByCategory: Record<string, Component[]>;\n componentsThatHaveOtherComponentInTheirAttributes: ComponentWithChildren[];\n initialContentTypes: Record<Internal.UID.ContentType, ContentType>;\n contentTypes: Record<Internal.UID.ContentType, ContentType>;\n isInDevelopmentMode?: boolean;\n nestedComponents: NestedComponent[];\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n allComponentsCategories: string[];\n saveSchema(): Promise<void>;\n isModified: boolean;\n isSaving: boolean;\n applyChange: (opts: {\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }) => void;\n history: {\n undo(): void;\n redo(): void;\n discardAllChanges(): void;\n canUndo: boolean;\n canRedo: boolean;\n canDiscardAll: boolean;\n };\n}\n\n// @ts-expect-error need to pass initial value to params\nexport const DataManagerContext = createContext<DataManagerContextValue>();\n"],"names":["DataManagerContext","createContext"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"DataManagerContext.js","sources":["../../../../admin/src/components/DataManager/DataManagerContext.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport { createContext } from 'react';\n\nimport type { ContentStructure, FolderSelection, SectionKey } from './utils/contentStructure';\nimport type { Component, ContentType } from '../../types';\nimport type { ComponentWithChildren } from './utils/retrieveComponentsThatHaveComponents';\nimport type { NestedComponent } from './utils/retrieveNestedComponents';\nimport type { Internal, Struct } from '@strapi/types';\n\nexport interface DataManagerContextValue {\n isLoading: boolean;\n addAttribute: (opts: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n }) => void;\n editAttribute: (opts: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n name: string;\n }) => void;\n moveAttribute: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n from: number;\n to: number;\n }) => void;\n addCustomFieldAttribute: (params: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n }) => void;\n editCustomFieldAttribute: (params: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n name: string;\n }) => void;\n addCreatedComponentToDynamicZone: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dynamicZoneTarget: string;\n componentsToAdd: Internal.UID.Component[];\n }) => void;\n createComponentSchema: (opts: {\n data: {\n icon?: string;\n displayName: string;\n };\n componentCategory: string;\n uid: Internal.UID.Component;\n }) => void;\n createSchema: (opts: {\n data: {\n displayName: string;\n singularName: string;\n pluralName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: Record<string, unknown>;\n };\n uid: Internal.UID.Schema;\n folder?: FolderSelection;\n }) => void;\n changeDynamicZoneComponents: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dynamicZoneTarget: string;\n newComponents: Internal.UID.Component[];\n }) => void;\n removeAttribute: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n attributeToRemoveName: string;\n }) => void;\n deleteComponent(uid: Internal.UID.Component): void;\n deleteContentType(uid: Internal.UID.ContentType): void;\n contentStructure: ContentStructure;\n createFolder: (opts: { section: SectionKey; name: string; parentId: string | null }) => void;\n renameFolder: (opts: { section: SectionKey; id: string; name: string }) => void;\n moveFolder: (opts: {\n section: SectionKey;\n id: string;\n newParentId: string | null;\n index?: number;\n }) => void;\n deleteFolderOnly: (opts: { section: SectionKey; id: string }) => void;\n deleteFolderAndContent: (opts: {\n section: SectionKey;\n id: string;\n contentTypeUids: Internal.UID.ContentType[];\n }) => void;\n assignContentTypeToFolder: (opts: {\n section: SectionKey;\n uid: Internal.UID.ContentType;\n targetGroupId: string | null;\n index?: number;\n }) => void;\n reorderFolderChildren: (opts: {\n section: SectionKey;\n groupId: string;\n from: number;\n to: number;\n }) => void;\n removeComponentFromDynamicZone: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dzName: string;\n componentToRemoveIndex: number;\n }) => void;\n sortedContentTypesList: {\n visible: ContentType['visible'];\n name: ContentType['uid'];\n title: ContentType['info']['displayName'];\n plugin: ContentType['plugin'];\n uid: ContentType['uid'];\n to: string;\n kind: ContentType['kind'];\n restrictRelationsTo: ContentType['restrictRelationsTo'];\n status: ContentType['status'];\n }[];\n updateComponentSchema: (opts: {\n data: {\n icon?: string;\n displayName: string;\n };\n componentUID: Internal.UID.Component;\n }) => void;\n updateComponentUid: (opts: {\n newComponentUID: Internal.UID.Component;\n componentUID: Internal.UID.Component;\n }) => void;\n updateSchema: (opts: {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: Record<string, unknown>;\n };\n uid: Internal.UID.ContentType;\n folder?: FolderSelection;\n }) => void;\n initialComponents: Record<Internal.UID.Component, Component>;\n components: Record<Internal.UID.Component, Component>;\n componentsGroupedByCategory: Record<string, Component[]>;\n componentsThatHaveOtherComponentInTheirAttributes: ComponentWithChildren[];\n initialContentTypes: Record<Internal.UID.ContentType, ContentType>;\n contentTypes: Record<Internal.UID.ContentType, ContentType>;\n isInDevelopmentMode?: boolean;\n nestedComponents: NestedComponent[];\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n allComponentsCategories: string[];\n saveSchema(): Promise<void>;\n isModified: boolean;\n isSaving: boolean;\n applyChange: (opts: {\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }) => void;\n history: {\n undo(): void;\n redo(): void;\n discardAllChanges(): void;\n canUndo: boolean;\n canRedo: boolean;\n canDiscardAll: boolean;\n };\n}\n\n// @ts-expect-error need to pass initial value to params\nexport const DataManagerContext = createContext<DataManagerContextValue>();\n"],"names":["DataManagerContext","createContext"],"mappings":";;;;AA6KA;AACO,MAAMA,qBAAqBC,mBAAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataManagerContext.mjs","sources":["../../../../admin/src/components/DataManager/DataManagerContext.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport { createContext } from 'react';\n\nimport type { Component, ContentType } from '../../types';\nimport type { ComponentWithChildren } from './utils/retrieveComponentsThatHaveComponents';\nimport type { NestedComponent } from './utils/retrieveNestedComponents';\nimport type { Internal, Struct } from '@strapi/types';\n\nexport interface DataManagerContextValue {\n isLoading: boolean;\n addAttribute: (opts: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n }) => void;\n editAttribute: (opts: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n name: string;\n }) => void;\n moveAttribute: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n from: number;\n to: number;\n }) => void;\n addCustomFieldAttribute: (params: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n }) => void;\n editCustomFieldAttribute: (params: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n name: string;\n }) => void;\n addCreatedComponentToDynamicZone: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dynamicZoneTarget: string;\n componentsToAdd: Internal.UID.Component[];\n }) => void;\n createComponentSchema: (opts: {\n data: {\n icon?: string;\n displayName: string;\n };\n componentCategory: string;\n uid: Internal.UID.Component;\n }) => void;\n createSchema: (opts: {\n data: {\n displayName: string;\n singularName: string;\n pluralName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: Record<string, unknown>;\n };\n uid: Internal.UID.Schema;\n }) => void;\n changeDynamicZoneComponents: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dynamicZoneTarget: string;\n newComponents: Internal.UID.Component[];\n }) => void;\n removeAttribute: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n attributeToRemoveName: string;\n }) => void;\n deleteComponent(uid: Internal.UID.Component): void;\n deleteContentType(uid: Internal.UID.ContentType): void;\n removeComponentFromDynamicZone: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dzName: string;\n componentToRemoveIndex: number;\n }) => void;\n sortedContentTypesList: {\n visible: ContentType['visible'];\n name: ContentType['uid'];\n title: ContentType['info']['displayName'];\n plugin: ContentType['plugin'];\n uid: ContentType['uid'];\n to: string;\n kind: ContentType['kind'];\n restrictRelationsTo: ContentType['restrictRelationsTo'];\n status: ContentType['status'];\n }[];\n updateComponentSchema: (opts: {\n data: {\n icon?: string;\n displayName: string;\n };\n componentUID: Internal.UID.Component;\n }) => void;\n updateComponentUid: (opts: {\n newComponentUID: Internal.UID.Component;\n componentUID: Internal.UID.Component;\n }) => void;\n updateSchema: (opts: {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: Record<string, unknown>;\n };\n uid: Internal.UID.ContentType;\n }) => void;\n initialComponents: Record<Internal.UID.Component, Component>;\n components: Record<Internal.UID.Component, Component>;\n componentsGroupedByCategory: Record<string, Component[]>;\n componentsThatHaveOtherComponentInTheirAttributes: ComponentWithChildren[];\n initialContentTypes: Record<Internal.UID.ContentType, ContentType>;\n contentTypes: Record<Internal.UID.ContentType, ContentType>;\n isInDevelopmentMode?: boolean;\n nestedComponents: NestedComponent[];\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n allComponentsCategories: string[];\n saveSchema(): Promise<void>;\n isModified: boolean;\n isSaving: boolean;\n applyChange: (opts: {\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }) => void;\n history: {\n undo(): void;\n redo(): void;\n discardAllChanges(): void;\n canUndo: boolean;\n canRedo: boolean;\n canDiscardAll: boolean;\n };\n}\n\n// @ts-expect-error need to pass initial value to params\nexport const DataManagerContext = createContext<DataManagerContextValue>();\n"],"names":["DataManagerContext","createContext"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"DataManagerContext.mjs","sources":["../../../../admin/src/components/DataManager/DataManagerContext.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport { createContext } from 'react';\n\nimport type { ContentStructure, FolderSelection, SectionKey } from './utils/contentStructure';\nimport type { Component, ContentType } from '../../types';\nimport type { ComponentWithChildren } from './utils/retrieveComponentsThatHaveComponents';\nimport type { NestedComponent } from './utils/retrieveNestedComponents';\nimport type { Internal, Struct } from '@strapi/types';\n\nexport interface DataManagerContextValue {\n isLoading: boolean;\n addAttribute: (opts: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n }) => void;\n editAttribute: (opts: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n name: string;\n }) => void;\n moveAttribute: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n from: number;\n to: number;\n }) => void;\n addCustomFieldAttribute: (params: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n }) => void;\n editCustomFieldAttribute: (params: {\n attributeToSet: Record<string, unknown>;\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n name: string;\n }) => void;\n addCreatedComponentToDynamicZone: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dynamicZoneTarget: string;\n componentsToAdd: Internal.UID.Component[];\n }) => void;\n createComponentSchema: (opts: {\n data: {\n icon?: string;\n displayName: string;\n };\n componentCategory: string;\n uid: Internal.UID.Component;\n }) => void;\n createSchema: (opts: {\n data: {\n displayName: string;\n singularName: string;\n pluralName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: Record<string, unknown>;\n };\n uid: Internal.UID.Schema;\n folder?: FolderSelection;\n }) => void;\n changeDynamicZoneComponents: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dynamicZoneTarget: string;\n newComponents: Internal.UID.Component[];\n }) => void;\n removeAttribute: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n attributeToRemoveName: string;\n }) => void;\n deleteComponent(uid: Internal.UID.Component): void;\n deleteContentType(uid: Internal.UID.ContentType): void;\n contentStructure: ContentStructure;\n createFolder: (opts: { section: SectionKey; name: string; parentId: string | null }) => void;\n renameFolder: (opts: { section: SectionKey; id: string; name: string }) => void;\n moveFolder: (opts: {\n section: SectionKey;\n id: string;\n newParentId: string | null;\n index?: number;\n }) => void;\n deleteFolderOnly: (opts: { section: SectionKey; id: string }) => void;\n deleteFolderAndContent: (opts: {\n section: SectionKey;\n id: string;\n contentTypeUids: Internal.UID.ContentType[];\n }) => void;\n assignContentTypeToFolder: (opts: {\n section: SectionKey;\n uid: Internal.UID.ContentType;\n targetGroupId: string | null;\n index?: number;\n }) => void;\n reorderFolderChildren: (opts: {\n section: SectionKey;\n groupId: string;\n from: number;\n to: number;\n }) => void;\n removeComponentFromDynamicZone: (opts: {\n forTarget: Struct.ModelType;\n targetUid: Internal.UID.Schema;\n dzName: string;\n componentToRemoveIndex: number;\n }) => void;\n sortedContentTypesList: {\n visible: ContentType['visible'];\n name: ContentType['uid'];\n title: ContentType['info']['displayName'];\n plugin: ContentType['plugin'];\n uid: ContentType['uid'];\n to: string;\n kind: ContentType['kind'];\n restrictRelationsTo: ContentType['restrictRelationsTo'];\n status: ContentType['status'];\n }[];\n updateComponentSchema: (opts: {\n data: {\n icon?: string;\n displayName: string;\n };\n componentUID: Internal.UID.Component;\n }) => void;\n updateComponentUid: (opts: {\n newComponentUID: Internal.UID.Component;\n componentUID: Internal.UID.Component;\n }) => void;\n updateSchema: (opts: {\n data: {\n displayName: string;\n kind: Struct.ContentTypeKind;\n draftAndPublish: boolean;\n pluginOptions: Record<string, unknown>;\n };\n uid: Internal.UID.ContentType;\n folder?: FolderSelection;\n }) => void;\n initialComponents: Record<Internal.UID.Component, Component>;\n components: Record<Internal.UID.Component, Component>;\n componentsGroupedByCategory: Record<string, Component[]>;\n componentsThatHaveOtherComponentInTheirAttributes: ComponentWithChildren[];\n initialContentTypes: Record<Internal.UID.ContentType, ContentType>;\n contentTypes: Record<Internal.UID.ContentType, ContentType>;\n isInDevelopmentMode?: boolean;\n nestedComponents: NestedComponent[];\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n allComponentsCategories: string[];\n saveSchema(): Promise<void>;\n isModified: boolean;\n isSaving: boolean;\n applyChange: (opts: {\n action: 'add' | 'update' | 'delete';\n schema: ContentType | Component;\n }) => void;\n history: {\n undo(): void;\n redo(): void;\n discardAllChanges(): void;\n canUndo: boolean;\n canRedo: boolean;\n canDiscardAll: boolean;\n };\n}\n\n// @ts-expect-error need to pass initial value to params\nexport const DataManagerContext = createContext<DataManagerContextValue>();\n"],"names":["DataManagerContext","createContext"],"mappings":";;AA6KA;AACO,MAAMA,qBAAqBC,aAAAA;;;;"}
|
|
@@ -19,6 +19,7 @@ var DataManagerContext = require('./DataManagerContext.js');
|
|
|
19
19
|
var reducer = require('./reducer.js');
|
|
20
20
|
var useServerRestartWatcher = require('./useServerRestartWatcher.js');
|
|
21
21
|
var cleanData = require('./utils/cleanData.js');
|
|
22
|
+
var contentStructure = require('./utils/contentStructure.js');
|
|
22
23
|
var retrieveComponentsThatHaveComponents = require('./utils/retrieveComponentsThatHaveComponents.js');
|
|
23
24
|
var retrieveNestedComponents = require('./utils/retrieveNestedComponents.js');
|
|
24
25
|
var retrieveSpecificInfoFromComponents = require('./utils/retrieveSpecificInfoFromComponents.js');
|
|
@@ -48,6 +49,23 @@ var groupBy__default = /*#__PURE__*/_interopDefault(groupBy);
|
|
|
48
49
|
var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
|
|
49
50
|
var mapValues__default = /*#__PURE__*/_interopDefault(mapValues);
|
|
50
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Including the new folder state in the same payload as create/edit transactions ensures the
|
|
54
|
+
* folder assignment is subject to the same undo/redo operations as the content type mutation
|
|
55
|
+
*/ const toFolderAssignment = (folder)=>{
|
|
56
|
+
if (!folder) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
if ('newFolderName' in folder) {
|
|
60
|
+
return {
|
|
61
|
+
newFolderId: contentStructure.generateGroupId(),
|
|
62
|
+
newFolderName: folder.newFolderName
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
targetGroupId: folder.targetGroupId
|
|
67
|
+
};
|
|
68
|
+
};
|
|
51
69
|
const selectState = (state)=>state['content-type-builder_dataManagerProvider'] || reducer.initialState;
|
|
52
70
|
/**
|
|
53
71
|
* Tag types registered on the shared `adminApi` instance at runtime by
|
|
@@ -69,7 +87,7 @@ const DataManagerProvider = ({ children })=>{
|
|
|
69
87
|
const dispatchGuidedTour = strapiAdmin.useGuidedTour('DataManagerProvider', (s)=>s.dispatch);
|
|
70
88
|
const location = reactRouterDom.useLocation();
|
|
71
89
|
const { sessionId: ctbSessionId, regenerateSessionId } = useCTBSession.useCTBSession();
|
|
72
|
-
const { components, contentTypes, reservedNames, initialComponents, initialContentTypes, isLoading } = state.current;
|
|
90
|
+
const { components, contentTypes, reservedNames, initialComponents, initialContentTypes, contentStructure: contentStructure$1, initialContentStructure, isLoading } = state.current;
|
|
73
91
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
74
92
|
const { lockAppWithAutoreload, unlockAppWithAutoreload } = AutoReloadOverlayBlocker.useAutoReloadOverlayBlocker();
|
|
75
93
|
const serverRestartWatcher = useServerRestartWatcher.useServerRestartWatcher();
|
|
@@ -83,12 +101,14 @@ const DataManagerProvider = ({ children })=>{
|
|
|
83
101
|
const [isSaving, setIsSaving] = React__namespace.useState(false);
|
|
84
102
|
const previousLocationRef = React__namespace.useRef(null);
|
|
85
103
|
const isModified = React__namespace.useMemo(()=>{
|
|
86
|
-
return !(isEqual__default.default(components, initialComponents) && isEqual__default.default(contentTypes, initialContentTypes));
|
|
104
|
+
return !(isEqual__default.default(components, initialComponents) && isEqual__default.default(contentTypes, initialContentTypes) && isEqual__default.default(contentStructure$1, initialContentStructure));
|
|
87
105
|
}, [
|
|
88
106
|
components,
|
|
89
107
|
contentTypes,
|
|
90
108
|
initialComponents,
|
|
91
|
-
initialContentTypes
|
|
109
|
+
initialContentTypes,
|
|
110
|
+
contentStructure$1,
|
|
111
|
+
initialContentStructure
|
|
92
112
|
]);
|
|
93
113
|
const fetchClient = strapiAdmin.useFetchClient();
|
|
94
114
|
const isInDevelopmentMode = autoReload;
|
|
@@ -99,7 +119,7 @@ const DataManagerProvider = ({ children })=>{
|
|
|
99
119
|
fetchClient.get(`/content-type-builder/schema`),
|
|
100
120
|
fetchClient.get(`/content-type-builder/reserved-names`)
|
|
101
121
|
]);
|
|
102
|
-
const { components, contentTypes } = schemaResponse.data.data;
|
|
122
|
+
const { components, contentTypes, contentStructure: contentStructure$1 } = schemaResponse.data.data;
|
|
103
123
|
dispatch(reducer.actions.init({
|
|
104
124
|
components: mapValues__default.default(components, (component)=>({
|
|
105
125
|
...component,
|
|
@@ -109,7 +129,8 @@ const DataManagerProvider = ({ children })=>{
|
|
|
109
129
|
...contentType,
|
|
110
130
|
status: 'UNCHANGED'
|
|
111
131
|
})),
|
|
112
|
-
reservedNames: reservedNamesResponse.data
|
|
132
|
+
reservedNames: reservedNamesResponse.data,
|
|
133
|
+
contentStructure: contentStructure.fromServerFile(contentStructure$1)
|
|
113
134
|
}));
|
|
114
135
|
dispatch(reducer.actions.clearHistory());
|
|
115
136
|
} catch (err) {
|
|
@@ -186,7 +207,9 @@ const DataManagerProvider = ({ children })=>{
|
|
|
186
207
|
}, {});
|
|
187
208
|
const { requestData, trackingEventProperties } = cleanData.stateToRequestData({
|
|
188
209
|
components: state.current.components,
|
|
189
|
-
contentTypes: mutatedCTs
|
|
210
|
+
contentTypes: mutatedCTs,
|
|
211
|
+
contentStructure: state.current.contentStructure,
|
|
212
|
+
initialContentStructure: state.current.initialContentStructure
|
|
190
213
|
});
|
|
191
214
|
// Track that the save button was clicked (includes session ID via useCTBTracking)
|
|
192
215
|
trackUsage('willUpdateCTBSchema', {
|
|
@@ -285,6 +308,7 @@ const DataManagerProvider = ({ children })=>{
|
|
|
285
308
|
contentTypes,
|
|
286
309
|
initialComponents,
|
|
287
310
|
initialContentTypes,
|
|
311
|
+
contentStructure: contentStructure$1,
|
|
288
312
|
isSaving,
|
|
289
313
|
isModified,
|
|
290
314
|
isInDevelopmentMode,
|
|
@@ -320,7 +344,11 @@ const DataManagerProvider = ({ children })=>{
|
|
|
320
344
|
dispatch(reducer.actions.addCreatedComponentToDynamicZone(payload));
|
|
321
345
|
},
|
|
322
346
|
createSchema (payload) {
|
|
323
|
-
|
|
347
|
+
const { folder, ...rest } = payload;
|
|
348
|
+
dispatch(reducer.actions.createSchema({
|
|
349
|
+
...rest,
|
|
350
|
+
folder: toFolderAssignment(folder)
|
|
351
|
+
}));
|
|
324
352
|
},
|
|
325
353
|
createComponentSchema ({ data, uid, componentCategory }) {
|
|
326
354
|
dispatch(reducer.actions.createComponentSchema({
|
|
@@ -365,6 +393,36 @@ const DataManagerProvider = ({ children })=>{
|
|
|
365
393
|
dispatch(reducer.actions.deleteContentType(uid));
|
|
366
394
|
}
|
|
367
395
|
},
|
|
396
|
+
createFolder ({ section, name, parentId }) {
|
|
397
|
+
dispatch(reducer.actions.createFolder({
|
|
398
|
+
section,
|
|
399
|
+
name,
|
|
400
|
+
parentId,
|
|
401
|
+
id: contentStructure.generateGroupId()
|
|
402
|
+
}));
|
|
403
|
+
},
|
|
404
|
+
renameFolder (payload) {
|
|
405
|
+
dispatch(reducer.actions.renameFolder(payload));
|
|
406
|
+
},
|
|
407
|
+
moveFolder (payload) {
|
|
408
|
+
dispatch(reducer.actions.moveFolder(payload));
|
|
409
|
+
},
|
|
410
|
+
deleteFolderOnly (payload) {
|
|
411
|
+
dispatch(reducer.actions.deleteFolderOnly(payload));
|
|
412
|
+
},
|
|
413
|
+
deleteFolderAndContent ({ section, id, contentTypeUids }) {
|
|
414
|
+
dispatch(reducer.actions.deleteFolderAndContent({
|
|
415
|
+
section,
|
|
416
|
+
id,
|
|
417
|
+
contentTypeUids
|
|
418
|
+
}));
|
|
419
|
+
},
|
|
420
|
+
assignContentTypeToFolder (payload) {
|
|
421
|
+
dispatch(reducer.actions.assignContentTypeToFolder(payload));
|
|
422
|
+
},
|
|
423
|
+
reorderFolderChildren (payload) {
|
|
424
|
+
dispatch(reducer.actions.reorderFolderChildren(payload));
|
|
425
|
+
},
|
|
368
426
|
updateComponentSchema ({ data, componentUID }) {
|
|
369
427
|
dispatch(reducer.actions.updateComponentSchema({
|
|
370
428
|
data,
|
|
@@ -378,7 +436,11 @@ const DataManagerProvider = ({ children })=>{
|
|
|
378
436
|
}));
|
|
379
437
|
},
|
|
380
438
|
updateSchema (args) {
|
|
381
|
-
|
|
439
|
+
const { folder, ...rest } = args;
|
|
440
|
+
dispatch(reducer.actions.updateSchema({
|
|
441
|
+
...rest,
|
|
442
|
+
folder: toFolderAssignment(folder)
|
|
443
|
+
}));
|
|
382
444
|
},
|
|
383
445
|
moveAttribute (args) {
|
|
384
446
|
dispatch(reducer.actions.moveAttribute(args));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataManagerProvider.js","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useCTBTracking } from '../CTBSession/ctbSession';\nimport { useCTBSession } from '../CTBSession/useCTBSession';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { AnyAttribute, ContentTypes, ContentType, Components } from '../../types';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\ntype SchemaResponse = {\n data: {\n components: Components;\n contentTypes: ContentTypes;\n };\n};\n\ntype ReservedNamesResponse = DataManagerContextValue['reservedNames'];\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\n/**\n * Tag types registered on the shared `adminApi` instance at runtime by\n * `@strapi/content-manager` via `enhanceEndpoints({ addTagTypes: [...] })`\n * (see packages/core/content-manager/admin/src/services/api.ts).\n *\n * The cast is only required because adminApi's compile-time tag union doesn't see\n * tags added downstream from this side of the dependency graph.\n */\nconst CONTENT_MANAGER_SCHEMA_CACHE_TAGS = [\n 'InitialData',\n 'ContentTypesConfiguration',\n 'ContentTypeSettings',\n 'ComponentConfiguration',\n] as const;\n\nconst invalidateContentManagerSchemaCaches = () =>\n adminApi.util.invalidateTags(CONTENT_MANAGER_SCHEMA_CACHE_TAGS as never);\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n const dispatchGuidedTour = useGuidedTour('DataManagerProvider', (s) => s.dispatch);\n const location = useLocation();\n const { sessionId: ctbSessionId, regenerateSessionId } = useCTBSession();\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useCTBTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n const previousLocationRef = React.useRef<string | null>(null);\n\n const isModified = React.useMemo(() => {\n return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));\n }, [components, contentTypes, initialComponents, initialContentTypes]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<() => Promise<void>>(async () => undefined);\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get<SchemaResponse>(`/content-type-builder/schema`),\n fetchClient.get<ReservedNamesResponse>(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n previousLocationRef.current = location.pathname;\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Detect navigation away and back to CTB to regenerate session\n React.useEffect(() => {\n const currentPath = location.pathname;\n const previousPath = previousLocationRef.current;\n const CTB_PATH = '/plugins/content-type-builder';\n\n if (previousPath) {\n const isCTBPath = currentPath.includes(CTB_PATH);\n const wasCTBPath = previousPath.includes(CTB_PATH);\n\n // Regenerate session when returning to CTB after navigating away\n if (!wasCTBPath && isCTBPath) {\n regenerateSessionId();\n }\n }\n\n previousLocationRef.current = currentPath;\n }, [location.pathname, regenerateSessionId]);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n });\n\n // Track that the save button was clicked (includes session ID via useCTBTracking)\n trackUsage('willUpdateCTBSchema', {\n ...trackingEventProperties,\n ctbSessionId,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n // Note: didCreateGuidedTourCollectionType doesn't accept properties\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Generate new session ID after server restart\n regenerateSessionId();\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n // Refresh content-manager caches that depend on the CT/component schema.\n dispatch(invalidateContentManagerSchemaCaches());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: false,\n ctbSessionId,\n });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: true,\n ctbSessionId,\n });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(\n actions.addAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n editAttribute(payload) {\n dispatch(\n actions.editAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n addCustomFieldAttribute(payload) {\n dispatch(\n actions.addCustomFieldAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n editCustomFieldAttribute(payload) {\n dispatch(\n actions.editCustomFieldAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n dispatch(actions.createSchema(payload));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n // Note: willDeleteFieldOfContentType doesn't accept properties\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n dispatch(actions.updateSchema(args));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["selectState","state","initialState","CONTENT_MANAGER_SCHEMA_CACHE_TAGS","invalidateContentManagerSchemaCaches","adminApi","util","invalidateTags","DataManagerProvider","children","dispatch","useDispatch","useSelector","dispatchGuidedTour","useGuidedTour","s","location","useLocation","sessionId","ctbSessionId","regenerateSessionId","useCTBSession","components","contentTypes","reservedNames","initialComponents","initialContentTypes","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useCTBTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","previousLocationRef","useRef","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","undefined","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","pathname","reloadPlugin","currentPath","previousPath","CTB_PATH","isCTBPath","includes","wasCTBPath","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","success","payload","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","createSchema","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","attributeToSet","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataManagerProvider.js","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useCTBTracking } from '../CTBSession/ctbSession';\nimport { useCTBSession } from '../CTBSession/useCTBSession';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { fromServerFile, generateGroupId } from './utils/contentStructure';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { AnyAttribute, ContentTypes, ContentType, Components } from '../../types';\nimport type { FolderSelection } from './utils/contentStructure';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal, Modules } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Including the new folder state in the same payload as create/edit transactions ensures the\n * folder assignment is subject to the same undo/redo operations as the content type mutation\n */\nconst toFolderAssignment = (folder?: FolderSelection) => {\n if (!folder) {\n return undefined;\n }\n\n if ('newFolderName' in folder) {\n return { newFolderId: generateGroupId(), newFolderName: folder.newFolderName };\n }\n\n return { targetGroupId: folder.targetGroupId };\n};\n\ntype SchemaResponse = {\n data: {\n components: Components;\n contentTypes: ContentTypes;\n contentStructure?: Modules.ContentStructure.ContentStructureFile | null;\n };\n};\n\ntype ReservedNamesResponse = DataManagerContextValue['reservedNames'];\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\n/**\n * Tag types registered on the shared `adminApi` instance at runtime by\n * `@strapi/content-manager` via `enhanceEndpoints({ addTagTypes: [...] })`\n * (see packages/core/content-manager/admin/src/services/api.ts).\n *\n * The cast is only required because adminApi's compile-time tag union doesn't see\n * tags added downstream from this side of the dependency graph.\n */\nconst CONTENT_MANAGER_SCHEMA_CACHE_TAGS = [\n 'InitialData',\n 'ContentTypesConfiguration',\n 'ContentTypeSettings',\n 'ComponentConfiguration',\n] as const;\n\nconst invalidateContentManagerSchemaCaches = () =>\n adminApi.util.invalidateTags(CONTENT_MANAGER_SCHEMA_CACHE_TAGS as never);\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n const dispatchGuidedTour = useGuidedTour('DataManagerProvider', (s) => s.dispatch);\n const location = useLocation();\n const { sessionId: ctbSessionId, regenerateSessionId } = useCTBSession();\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n contentStructure,\n initialContentStructure,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useCTBTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n const previousLocationRef = React.useRef<string | null>(null);\n\n const isModified = React.useMemo(() => {\n return !(\n isEqual(components, initialComponents) &&\n isEqual(contentTypes, initialContentTypes) &&\n isEqual(contentStructure, initialContentStructure)\n );\n }, [\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n contentStructure,\n initialContentStructure,\n ]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<() => Promise<void>>(async () => undefined);\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get<SchemaResponse>(`/content-type-builder/schema`),\n fetchClient.get<ReservedNamesResponse>(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes, contentStructure } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n contentStructure: fromServerFile(contentStructure),\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n previousLocationRef.current = location.pathname;\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Detect navigation away and back to CTB to regenerate session\n React.useEffect(() => {\n const currentPath = location.pathname;\n const previousPath = previousLocationRef.current;\n const CTB_PATH = '/plugins/content-type-builder';\n\n if (previousPath) {\n const isCTBPath = currentPath.includes(CTB_PATH);\n const wasCTBPath = previousPath.includes(CTB_PATH);\n\n // Regenerate session when returning to CTB after navigating away\n if (!wasCTBPath && isCTBPath) {\n regenerateSessionId();\n }\n }\n\n previousLocationRef.current = currentPath;\n }, [location.pathname, regenerateSessionId]);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n contentStructure: state.current.contentStructure,\n initialContentStructure: state.current.initialContentStructure,\n });\n\n // Track that the save button was clicked (includes session ID via useCTBTracking)\n trackUsage('willUpdateCTBSchema', {\n ...trackingEventProperties,\n ctbSessionId,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n // Note: didCreateGuidedTourCollectionType doesn't accept properties\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Generate new session ID after server restart\n regenerateSessionId();\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n // Refresh content-manager caches that depend on the CT/component schema.\n dispatch(invalidateContentManagerSchemaCaches());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: false,\n ctbSessionId,\n });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: true,\n ctbSessionId,\n });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n contentStructure,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(\n actions.addAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n editAttribute(payload) {\n dispatch(\n actions.editAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n addCustomFieldAttribute(payload) {\n dispatch(\n actions.addCustomFieldAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n editCustomFieldAttribute(payload) {\n dispatch(\n actions.editCustomFieldAttribute({\n ...payload,\n attributeToSet: payload.attributeToSet as AnyAttribute,\n })\n );\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n const { folder, ...rest } = payload;\n dispatch(actions.createSchema({ ...rest, folder: toFolderAssignment(folder) }));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n // Note: willDeleteFieldOfContentType doesn't accept properties\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n createFolder({ section, name, parentId }) {\n dispatch(actions.createFolder({ section, name, parentId, id: generateGroupId() }));\n },\n renameFolder(payload) {\n dispatch(actions.renameFolder(payload));\n },\n moveFolder(payload) {\n dispatch(actions.moveFolder(payload));\n },\n deleteFolderOnly(payload) {\n dispatch(actions.deleteFolderOnly(payload));\n },\n deleteFolderAndContent({ section, id, contentTypeUids }) {\n dispatch(actions.deleteFolderAndContent({ section, id, contentTypeUids }));\n },\n assignContentTypeToFolder(payload) {\n dispatch(actions.assignContentTypeToFolder(payload));\n },\n reorderFolderChildren(payload) {\n dispatch(actions.reorderFolderChildren(payload));\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n const { folder, ...rest } = args;\n dispatch(actions.updateSchema({ ...rest, folder: toFolderAssignment(folder) }));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["toFolderAssignment","folder","undefined","newFolderId","generateGroupId","newFolderName","targetGroupId","selectState","state","initialState","CONTENT_MANAGER_SCHEMA_CACHE_TAGS","invalidateContentManagerSchemaCaches","adminApi","util","invalidateTags","DataManagerProvider","children","dispatch","useDispatch","useSelector","dispatchGuidedTour","useGuidedTour","s","location","useLocation","sessionId","ctbSessionId","regenerateSessionId","useCTBSession","components","contentTypes","reservedNames","initialComponents","initialContentTypes","contentStructure","initialContentStructure","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useCTBTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","previousLocationRef","useRef","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","fromServerFile","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","pathname","reloadPlugin","currentPath","previousPath","CTB_PATH","isCTBPath","includes","wasCTBPath","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","success","payload","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","createSchema","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","attributeToSet","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","rest","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","createFolder","section","name","parentId","renameFolder","moveFolder","deleteFolderOnly","deleteFolderAndContent","contentTypeUids","assignContentTypeToFolder","reorderFolderChildren","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":"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"}
|