@strapi/content-type-builder 5.54.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 +16 -16
- package/dist/server/services/schema-builder/schema-handler.js.map +1 -1
- package/dist/server/services/schema-builder/schema-handler.mjs +16 -16
- 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 +6 -6
- 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,198 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { ComboboxOption, Field, Combobox } from '@strapi/design-system';
|
|
4
|
+
import { useIntl } from 'react-intl';
|
|
5
|
+
import { useDataManager } from './DataManager/useDataManager.mjs';
|
|
6
|
+
import { sectionKeyForKind, findSiblingFolderByName } from './DataManager/utils/contentStructure.mjs';
|
|
7
|
+
import { useFormModalNavigation } from './FormModalNavigation/useFormModalNavigation.mjs';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Flatten a section's (flat) folder groups into a list of full folder path strings.
|
|
11
|
+
*/ const buildFolderOptions = (groups)=>{
|
|
12
|
+
const groupById = new Map(groups.map((group)=>[
|
|
13
|
+
group.id,
|
|
14
|
+
group
|
|
15
|
+
]));
|
|
16
|
+
const childGroupIds = new Set();
|
|
17
|
+
for (const group of groups){
|
|
18
|
+
for (const child of group.children){
|
|
19
|
+
if (child.type === 'group') {
|
|
20
|
+
childGroupIds.add(child.id);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const options = [];
|
|
25
|
+
const walk = (group, ancestors)=>{
|
|
26
|
+
const path = [
|
|
27
|
+
...ancestors,
|
|
28
|
+
group.name
|
|
29
|
+
];
|
|
30
|
+
options.push({
|
|
31
|
+
id: group.id,
|
|
32
|
+
label: path.join(' / ')
|
|
33
|
+
});
|
|
34
|
+
for (const child of group.children){
|
|
35
|
+
if (child.type !== 'group') {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const subGroup = groupById.get(child.id);
|
|
39
|
+
if (subGroup) {
|
|
40
|
+
walk(subGroup, path);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
groups.filter((group)=>{
|
|
45
|
+
return !childGroupIds.has(group.id);
|
|
46
|
+
}).forEach((root)=>{
|
|
47
|
+
return walk(root, []);
|
|
48
|
+
});
|
|
49
|
+
return options;
|
|
50
|
+
};
|
|
51
|
+
const FolderSelect = ({ error = null, modifiedData, placeholder, isCreating, intlLabel, targetUid, onChange, value, name })=>{
|
|
52
|
+
const { kind: modalKind } = useFormModalNavigation();
|
|
53
|
+
const { contentStructure } = useDataManager();
|
|
54
|
+
const { formatMessage } = useIntl();
|
|
55
|
+
const kind = modifiedData?.kind ?? modalKind ?? 'collectionType';
|
|
56
|
+
const section = sectionKeyForKind(kind);
|
|
57
|
+
const groups = contentStructure.sections[section].groups;
|
|
58
|
+
const folderOptions = useMemo(()=>{
|
|
59
|
+
return buildFolderOptions(groups);
|
|
60
|
+
}, [
|
|
61
|
+
groups
|
|
62
|
+
]);
|
|
63
|
+
const knownFolderIds = useMemo(()=>{
|
|
64
|
+
return new Set(folderOptions.map((option)=>option.id));
|
|
65
|
+
}, [
|
|
66
|
+
folderOptions
|
|
67
|
+
]);
|
|
68
|
+
const currentFolderId = useMemo(()=>{
|
|
69
|
+
if (isCreating || !targetUid) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const owner = groups.find((group)=>{
|
|
73
|
+
return group.children.some((child)=>{
|
|
74
|
+
return child.type === 'contentType' && child.uid === targetUid;
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
return owner?.id ?? null;
|
|
78
|
+
}, [
|
|
79
|
+
groups,
|
|
80
|
+
isCreating,
|
|
81
|
+
targetUid
|
|
82
|
+
]);
|
|
83
|
+
const change = (next)=>{
|
|
84
|
+
onChange({
|
|
85
|
+
target: {
|
|
86
|
+
name,
|
|
87
|
+
value: next,
|
|
88
|
+
type: 'content-type-folder-select'
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
const changeToFolderId = (id)=>{
|
|
93
|
+
change(id === currentFolderId ? undefined : {
|
|
94
|
+
targetGroupId: id
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
const selectTypedName = (typed)=>{
|
|
98
|
+
const trimmed = typed.trim();
|
|
99
|
+
if (!trimmed) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const existing = findSiblingFolderByName(groups, null, trimmed);
|
|
103
|
+
if (existing) {
|
|
104
|
+
changeToFolderId(existing.id);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
change({
|
|
108
|
+
newFolderName: trimmed
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
const selectedValue = (()=>{
|
|
112
|
+
if (value === undefined) {
|
|
113
|
+
return currentFolderId ?? '';
|
|
114
|
+
}
|
|
115
|
+
if ('newFolderName' in value) {
|
|
116
|
+
return value.newFolderName;
|
|
117
|
+
}
|
|
118
|
+
return value.targetGroupId ?? '';
|
|
119
|
+
})();
|
|
120
|
+
const selectedLabel = (()=>{
|
|
121
|
+
if (value && 'newFolderName' in value) {
|
|
122
|
+
return value.newFolderName;
|
|
123
|
+
}
|
|
124
|
+
return folderOptions.find(({ id })=>id === selectedValue)?.label ?? '';
|
|
125
|
+
})();
|
|
126
|
+
const handleChange = (nextValue)=>{
|
|
127
|
+
if (!nextValue) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (knownFolderIds.has(nextValue)) {
|
|
131
|
+
changeToFolderId(nextValue);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
selectTypedName(nextValue);
|
|
135
|
+
};
|
|
136
|
+
const handleCreateOption = (nextValue)=>{
|
|
137
|
+
if (!nextValue) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
selectTypedName(nextValue);
|
|
141
|
+
};
|
|
142
|
+
const handleClear = ()=>{
|
|
143
|
+
// In edit an explicit clear ungroups the content type. In create it just returns the field to its "no folder" default.
|
|
144
|
+
change(isCreating ? undefined : {
|
|
145
|
+
targetGroupId: null
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
const errorMessage = error ? formatMessage({
|
|
149
|
+
id: error,
|
|
150
|
+
defaultMessage: error
|
|
151
|
+
}) : '';
|
|
152
|
+
const placeholderText = placeholder ? formatMessage(placeholder) : undefined;
|
|
153
|
+
const label = formatMessage(intlLabel);
|
|
154
|
+
const comboboxOptions = useMemo(()=>{
|
|
155
|
+
const options = [];
|
|
156
|
+
for (const option of folderOptions){
|
|
157
|
+
options.push(/*#__PURE__*/ jsx(ComboboxOption, {
|
|
158
|
+
value: option.id,
|
|
159
|
+
children: option.label
|
|
160
|
+
}, option.id));
|
|
161
|
+
}
|
|
162
|
+
// A new folder name typed into the combobox doesn't exist as a group yet, so we append it as its own option value.
|
|
163
|
+
if (selectedValue && !knownFolderIds.has(selectedValue)) {
|
|
164
|
+
options.push(/*#__PURE__*/ jsx(ComboboxOption, {
|
|
165
|
+
value: selectedValue,
|
|
166
|
+
children: selectedValue
|
|
167
|
+
}, `new:${selectedValue}`));
|
|
168
|
+
}
|
|
169
|
+
return options;
|
|
170
|
+
}, [
|
|
171
|
+
folderOptions,
|
|
172
|
+
knownFolderIds,
|
|
173
|
+
selectedValue
|
|
174
|
+
]);
|
|
175
|
+
return /*#__PURE__*/ jsxs(Field.Root, {
|
|
176
|
+
error: errorMessage,
|
|
177
|
+
name: name,
|
|
178
|
+
children: [
|
|
179
|
+
/*#__PURE__*/ jsx(Field.Label, {
|
|
180
|
+
children: label
|
|
181
|
+
}),
|
|
182
|
+
/*#__PURE__*/ jsx(Combobox, {
|
|
183
|
+
defaultTextValue: selectedLabel || undefined,
|
|
184
|
+
onCreateOption: handleCreateOption,
|
|
185
|
+
value: selectedValue || undefined,
|
|
186
|
+
placeholder: placeholderText,
|
|
187
|
+
onChange: handleChange,
|
|
188
|
+
onClear: handleClear,
|
|
189
|
+
creatable: true,
|
|
190
|
+
children: comboboxOptions
|
|
191
|
+
}, section),
|
|
192
|
+
/*#__PURE__*/ jsx(Field.Error, {})
|
|
193
|
+
]
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export { FolderSelect };
|
|
198
|
+
//# sourceMappingURL=FolderSelect.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderSelect.mjs","sources":["../../../admin/src/components/FolderSelect.tsx"],"sourcesContent":["import { ReactNode, useMemo } from 'react';\n\nimport { Combobox, ComboboxOption, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDataManager } from './DataManager/useDataManager';\nimport { findSiblingFolderByName, sectionKeyForKind } from './DataManager/utils/contentStructure';\nimport { useFormModalNavigation } from './FormModalNavigation/useFormModalNavigation';\n\nimport type { FormChangeHandler, IntlLabel } from '../types';\nimport type { ContentStructureGroup, FolderSelection } from './DataManager/utils/contentStructure';\nimport type { Struct } from '@strapi/types';\n\ninterface FolderSelectProps {\n onChange: FormChangeHandler<FolderSelection | undefined, 'content-type-folder-select'>;\n modifiedData?: { kind?: Struct.ContentTypeKind };\n value?: FolderSelection;\n placeholder?: IntlLabel;\n error?: string | null;\n isCreating?: boolean;\n intlLabel: IntlLabel;\n targetUid?: string;\n name: string;\n}\n\ntype FolderOption = { id: string; label: string };\n\n/**\n * Flatten a section's (flat) folder groups into a list of full folder path strings.\n */\nconst buildFolderOptions = (groups: ContentStructureGroup[]): FolderOption[] => {\n const groupById = new Map(groups.map((group) => [group.id, group]));\n\n const childGroupIds = new Set<string>();\n\n for (const group of groups) {\n for (const child of group.children) {\n if (child.type === 'group') {\n childGroupIds.add(child.id);\n }\n }\n }\n\n const options: FolderOption[] = [];\n\n const walk = (group: ContentStructureGroup, ancestors: string[]) => {\n const path = [...ancestors, group.name];\n options.push({ id: group.id, label: path.join(' / ') });\n\n for (const child of group.children) {\n if (child.type !== 'group') {\n continue;\n }\n\n const subGroup = groupById.get(child.id);\n\n if (subGroup) {\n walk(subGroup, path);\n }\n }\n };\n\n groups\n .filter((group) => {\n return !childGroupIds.has(group.id);\n })\n .forEach((root) => {\n return walk(root, []);\n });\n\n return options;\n};\n\nexport const FolderSelect = ({\n error = null,\n modifiedData,\n placeholder,\n isCreating,\n intlLabel,\n targetUid,\n onChange,\n value,\n name,\n}: FolderSelectProps) => {\n const { kind: modalKind } = useFormModalNavigation();\n const { contentStructure } = useDataManager();\n const { formatMessage } = useIntl();\n\n const kind = (modifiedData?.kind ?? modalKind ?? 'collectionType') as Struct.ContentTypeKind;\n const section = sectionKeyForKind(kind);\n const groups = contentStructure.sections[section].groups;\n\n const folderOptions = useMemo(() => {\n return buildFolderOptions(groups);\n }, [groups]);\n const knownFolderIds = useMemo(() => {\n return new Set(folderOptions.map((option) => option.id));\n }, [folderOptions]);\n\n const currentFolderId = useMemo(() => {\n if (isCreating || !targetUid) {\n return null;\n }\n\n const owner = groups.find((group) => {\n return group.children.some((child) => {\n return child.type === 'contentType' && child.uid === targetUid;\n });\n });\n\n return owner?.id ?? null;\n }, [groups, isCreating, targetUid]);\n\n const change = (next: FolderSelection | undefined) => {\n onChange({ target: { name, value: next, type: 'content-type-folder-select' } });\n };\n\n const changeToFolderId = (id: string) => {\n change(id === currentFolderId ? undefined : { targetGroupId: id });\n };\n\n const selectTypedName = (typed: string) => {\n const trimmed = typed.trim();\n\n if (!trimmed) {\n return;\n }\n\n const existing = findSiblingFolderByName(groups, null, trimmed);\n\n if (existing) {\n changeToFolderId(existing.id);\n return;\n }\n\n change({ newFolderName: trimmed });\n };\n\n const selectedValue = (() => {\n if (value === undefined) {\n return currentFolderId ?? '';\n }\n\n if ('newFolderName' in value) {\n return value.newFolderName;\n }\n\n return value.targetGroupId ?? '';\n })();\n\n const selectedLabel = (() => {\n if (value && 'newFolderName' in value) {\n return value.newFolderName;\n }\n return folderOptions.find(({ id }) => id === selectedValue)?.label ?? '';\n })();\n\n const handleChange = (nextValue?: string) => {\n if (!nextValue) {\n return;\n }\n\n if (knownFolderIds.has(nextValue)) {\n changeToFolderId(nextValue);\n return;\n }\n\n selectTypedName(nextValue);\n };\n\n const handleCreateOption = (nextValue?: string) => {\n if (!nextValue) {\n return;\n }\n\n selectTypedName(nextValue);\n };\n\n const handleClear = () => {\n // In edit an explicit clear ungroups the content type. In create it just returns the field to its \"no folder\" default.\n change(isCreating ? undefined : { targetGroupId: null });\n };\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const placeholderText = placeholder ? formatMessage(placeholder) : undefined;\n const label = formatMessage(intlLabel);\n\n const comboboxOptions = useMemo(() => {\n const options: ReactNode[] = [];\n\n for (const option of folderOptions) {\n options.push(\n <ComboboxOption key={option.id} value={option.id}>\n {option.label}\n </ComboboxOption>\n );\n }\n\n // A new folder name typed into the combobox doesn't exist as a group yet, so we append it as its own option value.\n if (selectedValue && !knownFolderIds.has(selectedValue)) {\n options.push(\n <ComboboxOption key={`new:${selectedValue}`} value={selectedValue}>\n {selectedValue}\n </ComboboxOption>\n );\n }\n\n return options;\n }, [folderOptions, knownFolderIds, selectedValue]);\n\n return (\n <Field.Root error={errorMessage} name={name}>\n <Field.Label>{label}</Field.Label>\n <Combobox\n key={section} // This forces the input to regenerate its defaultTextValue when the kind changes.\n defaultTextValue={selectedLabel || undefined}\n onCreateOption={handleCreateOption}\n value={selectedValue || undefined}\n placeholder={placeholderText}\n onChange={handleChange}\n onClear={handleClear}\n creatable\n >\n {comboboxOptions}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\n"],"names":["buildFolderOptions","groups","groupById","Map","map","group","id","childGroupIds","Set","child","children","type","add","options","walk","ancestors","path","name","push","label","join","subGroup","get","filter","has","forEach","root","FolderSelect","error","modifiedData","placeholder","isCreating","intlLabel","targetUid","onChange","value","kind","modalKind","useFormModalNavigation","contentStructure","useDataManager","formatMessage","useIntl","section","sectionKeyForKind","sections","folderOptions","useMemo","knownFolderIds","option","currentFolderId","owner","find","some","uid","change","next","target","changeToFolderId","undefined","targetGroupId","selectTypedName","typed","trimmed","trim","existing","findSiblingFolderByName","newFolderName","selectedValue","selectedLabel","handleChange","nextValue","handleCreateOption","handleClear","errorMessage","defaultMessage","placeholderText","comboboxOptions","_jsx","ComboboxOption","_jsxs","Field","Root","Label","Combobox","defaultTextValue","onCreateOption","onClear","creatable","Error"],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ var getTrad = require('../../utils/getTrad.js');
|
|
|
18
18
|
var isAllowedContentTypesForRelations = require('../../utils/isAllowedContentTypesForRelations.js');
|
|
19
19
|
var conditions = require('../../utils/conditions.js');
|
|
20
20
|
var findAttribute = require('../../utils/findAttribute.js');
|
|
21
|
+
var folderTelemetry = require('../../utils/folderTelemetry.js');
|
|
21
22
|
var getYupInnerErrors = require('../../utils/getYupInnerErrors.js');
|
|
22
23
|
var AllowedTypesSelect = require('../AllowedTypesSelect.js');
|
|
23
24
|
var AttributeOptions = require('../AttributeOptions/AttributeOptions.js');
|
|
@@ -30,6 +31,7 @@ var useCTBTracking = require('../CTBSession/useCTBTracking.js');
|
|
|
30
31
|
var CustomRadioGroup = require('../CustomRadioGroup/CustomRadioGroup.js');
|
|
31
32
|
var useDataManager = require('../DataManager/useDataManager.js');
|
|
32
33
|
var DraftAndPublishToggle = require('../DraftAndPublishToggle.js');
|
|
34
|
+
var FolderSelect = require('../FolderSelect.js');
|
|
33
35
|
var FormModalEndActions = require('../FormModalEndActions.js');
|
|
34
36
|
var FormModalHeader = require('../FormModalHeader.js');
|
|
35
37
|
var useFormModalNavigation = require('../FormModalNavigation/useFormModalNavigation.js');
|
|
@@ -418,6 +420,20 @@ const FormModal = ()=>{
|
|
|
418
420
|
}));
|
|
419
421
|
sendButtonAddMoreFieldEvent(shouldContinue);
|
|
420
422
|
const ctTargetUid = targetUid;
|
|
423
|
+
const folderSelection = modifiedData.folder;
|
|
424
|
+
const trackFolderAssignment = ()=>{
|
|
425
|
+
if (!folderSelection) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
if ('newFolderName' in folderSelection) {
|
|
429
|
+
trackUsage(folderTelemetry.DID_ACT_ON_FOLDERS, {
|
|
430
|
+
operation: folderTelemetry.folderTelemetryOperation('create')
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
trackUsage(folderTelemetry.DID_ACT_ON_FOLDERS, {
|
|
434
|
+
operation: folderTelemetry.folderTelemetryOperation('assign')
|
|
435
|
+
});
|
|
436
|
+
};
|
|
421
437
|
if (isCreatingContentType) {
|
|
422
438
|
// Create the content type schema
|
|
423
439
|
if (isCreating) {
|
|
@@ -430,8 +446,10 @@ const FormModal = ()=>{
|
|
|
430
446
|
singularName: toStringValue(modifiedData.singularName),
|
|
431
447
|
pluralName: toStringValue(modifiedData.pluralName)
|
|
432
448
|
},
|
|
433
|
-
uid
|
|
449
|
+
uid,
|
|
450
|
+
folder: folderSelection
|
|
434
451
|
});
|
|
452
|
+
trackFolderAssignment();
|
|
435
453
|
// Redirect the user to the created content type
|
|
436
454
|
navigate({
|
|
437
455
|
pathname: `/plugins/${pluginId.pluginId}/content-types/${uid}`
|
|
@@ -450,8 +468,10 @@ const FormModal = ()=>{
|
|
|
450
468
|
kind: toContentTypeKind(modifiedData.kind),
|
|
451
469
|
draftAndPublish: toBooleanValue(modifiedData.draftAndPublish),
|
|
452
470
|
pluginOptions: toRecordValue(modifiedData.pluginOptions)
|
|
453
|
-
}
|
|
471
|
+
},
|
|
472
|
+
folder: folderSelection
|
|
454
473
|
});
|
|
474
|
+
trackFolderAssignment();
|
|
455
475
|
} else {
|
|
456
476
|
toggleNotification({
|
|
457
477
|
type: 'danger',
|
|
@@ -837,6 +857,7 @@ const FormModal = ()=>{
|
|
|
837
857
|
'checkbox-with-number-field': CheckboxWithNumberField.CheckboxWithNumberField,
|
|
838
858
|
'icon-picker': IconPicker.IconPicker,
|
|
839
859
|
'content-type-radio-group': ContentTypeRadioGroup.ContentTypeRadioGroup,
|
|
860
|
+
'content-type-folder-select': FolderSelect.FolderSelect,
|
|
840
861
|
'radio-group': CustomRadioGroup.CustomRadioGroup,
|
|
841
862
|
relation: Relation.Relation,
|
|
842
863
|
'select-category': SelectCategory.SelectCategory,
|