@webiny/app-headless-cms 6.0.0-rc.4 → 6.0.0-rc.6
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/admin/components/ContentEntryForm/CustomLayout.js +2 -13
- package/admin/components/ContentEntryForm/CustomLayout.js.map +1 -1
- package/admin/components/ContentModelEditor/ContentModelEditorProvider.js.map +1 -1
- package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js +4 -4
- package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/FieldPermissionsSelection.js +5 -8
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/FieldPermissionsSelection.js.map +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.d.ts +2 -0
- package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab/PermissionsTab.js → PermissionsEditor/PermissionsEditor.js} +4 -10
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.js.map +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/{RulesTab/RulesTab.d.ts → RulesEditor/RulesEditor.d.ts} +1 -2
- package/admin/components/FieldEditor/EditFieldDialog/{RulesTab/RulesTab.js → RulesEditor/RulesEditor.js} +3 -6
- package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/RulesEditor.js.map +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.d.ts +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.js +3 -0
- package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.js.map +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/getValidators.d.ts +3 -3
- package/admin/components/FieldEditor/EditFieldDialog/getValidators.js.map +1 -1
- package/admin/components/FieldEditor/FieldEditor.js +10 -10
- package/admin/components/FieldEditor/FieldEditor.js.map +1 -1
- package/admin/components/FieldEditor/FieldEditorContext.d.ts +11 -11
- package/admin/components/FieldEditor/FieldEditorContext.js +41 -41
- package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
- package/admin/components/FieldEditor/LayoutCell.d.ts +3 -3
- package/admin/components/FieldEditor/LayoutCell.js +6 -6
- package/admin/components/FieldEditor/LayoutCell.js.map +1 -1
- package/admin/hooks/useCms.d.ts +1 -1
- package/admin/hooks/useCms.js +1 -1
- package/admin/hooks/useCms.js.map +1 -1
- package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +2 -2
- package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
- package/admin/plugins/fieldRenderers/checkboxes.js +2 -2
- package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
- package/admin/plugins/fieldRenderers/dateTime/Input.js +2 -2
- package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
- package/admin/plugins/fieldRenderers/dateTime/Select.js +2 -2
- package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
- package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js +2 -2
- package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js.map +1 -1
- package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js +2 -2
- package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js.map +1 -1
- package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js +2 -2
- package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js.map +1 -1
- package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js +2 -2
- package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js.map +1 -1
- package/admin/plugins/fieldRenderers/longText/longText.js +2 -2
- package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
- package/admin/plugins/fieldRenderers/longText/longTexts.js +2 -2
- package/admin/plugins/fieldRenderers/longText/longTexts.js.map +1 -1
- package/admin/plugins/fieldRenderers/number/numberInput.js +2 -2
- package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
- package/admin/plugins/fieldRenderers/number/numberInputs.js +2 -2
- package/admin/plugins/fieldRenderers/number/numberInputs.js.map +1 -1
- package/admin/plugins/fieldRenderers/object/MultiValueContainer.js +2 -2
- package/admin/plugins/fieldRenderers/object/MultiValueContainer.js.map +1 -1
- package/admin/plugins/fieldRenderers/radioButtons.js +2 -2
- package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js +2 -2
- package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js +2 -2
- package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +2 -2
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js +2 -2
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js +2 -2
- package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js +2 -2
- package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js.map +1 -1
- package/admin/plugins/fieldRenderers/select.js +2 -2
- package/admin/plugins/fieldRenderers/select.js.map +1 -1
- package/admin/plugins/fieldRenderers/text/tags.js +2 -2
- package/admin/plugins/fieldRenderers/text/tags.js.map +1 -1
- package/admin/plugins/fieldRenderers/text/textInput.js +2 -2
- package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
- package/admin/plugins/fieldRenderers/text/textInputs.js +2 -2
- package/admin/plugins/fieldRenderers/text/textInputs.js.map +1 -1
- package/admin/plugins/fields/ui/TabsLayoutEditor.d.ts +4 -4
- package/admin/plugins/fields/ui/TabsLayoutEditor.js +65 -61
- package/admin/plugins/fields/ui/TabsLayoutEditor.js.map +1 -1
- package/admin/plugins/fields/ui/alert.d.ts +2 -2
- package/admin/plugins/fields/ui/alert.js +25 -22
- package/admin/plugins/fields/ui/alert.js.map +1 -1
- package/admin/plugins/fields/ui/separator.d.ts +2 -2
- package/admin/plugins/fields/ui/separator.js +24 -21
- package/admin/plugins/fields/ui/separator.js.map +1 -1
- package/admin/plugins/fields/ui/tabs.d.ts +2 -2
- package/admin/plugins/fields/ui/tabs.js +10 -10
- package/admin/plugins/fields/ui/tabs.js.map +1 -1
- package/admin/views/contentModels/importing/ImportContentModelsDialog.js +15 -13
- package/admin/views/contentModels/importing/ImportContentModelsDialog.js.map +1 -1
- package/allPlugins.d.ts +1 -1
- package/exports/admin/cms/model.d.ts +2 -1
- package/exports/admin/cms/model.js +2 -1
- package/exports/admin/cms/model.js.map +1 -1
- package/exports/admin/cms.d.ts +7 -0
- package/exports/admin/cms.js +7 -0
- package/exports/admin/cms.js.map +1 -1
- package/legacyPluginAdapters/CmsContentFormRenderer.d.ts +4 -0
- package/legacyPluginAdapters/CmsContentFormRenderer.js +15 -0
- package/legacyPluginAdapters/CmsContentFormRenderer.js.map +1 -0
- package/legacyPluginAdapters/CmsModelFieldRenderer.d.ts +4 -0
- package/legacyPluginAdapters/CmsModelFieldRenderer.js +14 -0
- package/legacyPluginAdapters/CmsModelFieldRenderer.js.map +1 -0
- package/legacyPluginAdapters/CmsModelFieldType.d.ts +4 -0
- package/legacyPluginAdapters/CmsModelFieldType.js +14 -0
- package/legacyPluginAdapters/CmsModelFieldType.js.map +1 -0
- package/legacyPluginAdapters/CmsModelFieldValidator.d.ts +4 -0
- package/legacyPluginAdapters/CmsModelFieldValidator.js +14 -0
- package/legacyPluginAdapters/CmsModelFieldValidator.js.map +1 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.d.ts +13 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.js +15 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.js.map +1 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldType.d.ts +2 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldType.js +14 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldType.js.map +1 -0
- package/package.json +24 -24
- package/types.d.ts +1 -1
- package/types.js +1 -1
- package/types.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.js.map +0 -1
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.d.ts +0 -4
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js.map +0 -1
- package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js.map +0 -1
- package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.d.ts +0 -1
- package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js +0 -3
- package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js.map +0 -1
- /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.d.ts +0 -0
- /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.js +0 -0
- /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.js.map +0 -0
- /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/FieldPermissionsSelection.d.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useCallback, useRef, useEffect } from "react";
|
|
2
|
-
import { Accordion, Tabs } from "@webiny/admin-ui";
|
|
2
|
+
import { Accordion, Tabs, ScrollArea } from "@webiny/admin-ui";
|
|
3
3
|
import { ReactComponent as EditIcon } from "@webiny/icons/edit.svg";
|
|
4
4
|
import { ReactComponent as DeleteIcon } from "@webiny/icons/delete.svg";
|
|
5
5
|
import { ReactComponent as ArrowUpIcon } from "@webiny/icons/expand_less.svg";
|
|
@@ -18,8 +18,8 @@ import { Bind } from "@webiny/form";
|
|
|
18
18
|
import { FieldEditor } from "../../../components/FieldEditor/index.js";
|
|
19
19
|
import { IconPicker } from "../../../components/IconPicker.js";
|
|
20
20
|
import { useModelFieldEditor } from "../../../hooks/index.js";
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
21
|
+
import { PermissionsEditor } from "../../../components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.js";
|
|
22
|
+
import { RulesEditor } from "../../../components/FieldEditor/EditFieldDialog/RulesEditor/RulesEditor.js";
|
|
23
23
|
import { useModelEditor } from "../../../components/ContentModelEditor/useModelEditor.js";
|
|
24
24
|
const TabsSettings = () => {
|
|
25
25
|
return /*#__PURE__*/React.createElement(Grid, {
|
|
@@ -47,7 +47,9 @@ const TabsSettings = () => {
|
|
|
47
47
|
const TabsDialogContent = ({
|
|
48
48
|
fieldOptions
|
|
49
49
|
}) => {
|
|
50
|
-
return /*#__PURE__*/React.createElement(
|
|
50
|
+
return /*#__PURE__*/React.createElement(ScrollArea, {
|
|
51
|
+
className: "max-h-[70vh] flex flex-col"
|
|
52
|
+
}, /*#__PURE__*/React.createElement(Tabs, {
|
|
51
53
|
size: "md",
|
|
52
54
|
separator: true,
|
|
53
55
|
tabs: [/*#__PURE__*/React.createElement(Tabs.Tab, {
|
|
@@ -59,19 +61,20 @@ const TabsDialogContent = ({
|
|
|
59
61
|
key: "permissions",
|
|
60
62
|
trigger: "Permissions",
|
|
61
63
|
value: "permissions",
|
|
62
|
-
content: /*#__PURE__*/React.createElement(
|
|
63
|
-
|
|
64
|
-
})
|
|
64
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
65
|
+
className: "mt-md"
|
|
66
|
+
}, /*#__PURE__*/React.createElement(PermissionsEditor, null))
|
|
65
67
|
}), /*#__PURE__*/React.createElement(Tabs.Tab, {
|
|
66
68
|
key: "rules",
|
|
67
69
|
trigger: "Rules",
|
|
68
70
|
value: "rules",
|
|
69
|
-
content: /*#__PURE__*/React.createElement(
|
|
70
|
-
|
|
71
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
72
|
+
className: "mt-md"
|
|
73
|
+
}, /*#__PURE__*/React.createElement(RulesEditor, {
|
|
71
74
|
fieldOptions: fieldOptions
|
|
72
|
-
})
|
|
75
|
+
}))
|
|
73
76
|
})]
|
|
74
|
-
});
|
|
77
|
+
}));
|
|
75
78
|
};
|
|
76
79
|
const TabSettingsFields = () => {
|
|
77
80
|
return /*#__PURE__*/React.createElement(Grid, {
|
|
@@ -105,17 +108,18 @@ const TabDialogContent = ({
|
|
|
105
108
|
key: "permissions",
|
|
106
109
|
trigger: "Permissions",
|
|
107
110
|
value: "permissions",
|
|
108
|
-
content: /*#__PURE__*/React.createElement(
|
|
109
|
-
|
|
110
|
-
})
|
|
111
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
112
|
+
className: "mt-md"
|
|
113
|
+
}, /*#__PURE__*/React.createElement(PermissionsEditor, null))
|
|
111
114
|
}), /*#__PURE__*/React.createElement(Tabs.Tab, {
|
|
112
115
|
key: "rules",
|
|
113
116
|
trigger: "Rules",
|
|
114
117
|
value: "rules",
|
|
115
|
-
content: /*#__PURE__*/React.createElement(
|
|
116
|
-
|
|
118
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
119
|
+
className: "mt-md"
|
|
120
|
+
}, /*#__PURE__*/React.createElement(RulesEditor, {
|
|
117
121
|
fieldOptions: fieldOptions
|
|
118
|
-
})
|
|
122
|
+
}))
|
|
119
123
|
})]
|
|
120
124
|
});
|
|
121
125
|
};
|
|
@@ -154,7 +158,7 @@ const TabItem = ({
|
|
|
154
158
|
tab,
|
|
155
159
|
index,
|
|
156
160
|
totalTabs,
|
|
157
|
-
|
|
161
|
+
field,
|
|
158
162
|
parentFields,
|
|
159
163
|
onUpdate,
|
|
160
164
|
onInsertField,
|
|
@@ -204,39 +208,39 @@ const TabItem = ({
|
|
|
204
208
|
}
|
|
205
209
|
}
|
|
206
210
|
|
|
207
|
-
// Update the tab's layout in the
|
|
208
|
-
const updatedTabs = [...
|
|
211
|
+
// Update the tab's layout in the field
|
|
212
|
+
const updatedTabs = [...field.tabs];
|
|
209
213
|
updatedTabs[index] = {
|
|
210
214
|
...tab,
|
|
211
215
|
layout: newLayout
|
|
212
216
|
};
|
|
213
217
|
onUpdate({
|
|
214
|
-
...
|
|
218
|
+
...field,
|
|
215
219
|
tabs: updatedTabs
|
|
216
220
|
});
|
|
217
|
-
}, [tab, index,
|
|
221
|
+
}, [tab, index, field, tabFields, onUpdate, onInsertField, onRemoveField, onUpdateField]);
|
|
218
222
|
const moveTabUp = useCallback(() => {
|
|
219
223
|
if (isFirst) {
|
|
220
224
|
return;
|
|
221
225
|
}
|
|
222
|
-
const tabs = [...
|
|
226
|
+
const tabs = [...field.tabs];
|
|
223
227
|
[tabs[index - 1], tabs[index]] = [tabs[index], tabs[index - 1]];
|
|
224
228
|
onUpdate({
|
|
225
|
-
...
|
|
229
|
+
...field,
|
|
226
230
|
tabs
|
|
227
231
|
});
|
|
228
|
-
}, [
|
|
232
|
+
}, [field, index, isFirst, onUpdate]);
|
|
229
233
|
const moveTabDown = useCallback(() => {
|
|
230
234
|
if (isLast) {
|
|
231
235
|
return;
|
|
232
236
|
}
|
|
233
|
-
const tabs = [...
|
|
237
|
+
const tabs = [...field.tabs];
|
|
234
238
|
[tabs[index + 1], tabs[index]] = [tabs[index], tabs[index + 1]];
|
|
235
239
|
onUpdate({
|
|
236
|
-
...
|
|
240
|
+
...field,
|
|
237
241
|
tabs
|
|
238
242
|
});
|
|
239
|
-
}, [
|
|
243
|
+
}, [field, index, isLast, onUpdate]);
|
|
240
244
|
const deleteTab = useCallback(() => {
|
|
241
245
|
showConfirmation(() => {
|
|
242
246
|
// Collect field IDs to un-hoist
|
|
@@ -247,13 +251,13 @@ const TabItem = ({
|
|
|
247
251
|
}
|
|
248
252
|
}
|
|
249
253
|
}
|
|
250
|
-
const tabs =
|
|
254
|
+
const tabs = field.tabs.filter((_, i) => i !== index);
|
|
251
255
|
onUpdate({
|
|
252
|
-
...
|
|
256
|
+
...field,
|
|
253
257
|
tabs
|
|
254
258
|
});
|
|
255
259
|
});
|
|
256
|
-
}, [
|
|
260
|
+
}, [field, index, tab, onUpdate, onRemoveField, showConfirmation]);
|
|
257
261
|
const editTab = useCallback(() => {
|
|
258
262
|
dialogs.showDialog({
|
|
259
263
|
title: "Tab Settings",
|
|
@@ -269,7 +273,7 @@ const TabItem = ({
|
|
|
269
273
|
fieldOptions: fieldOptions
|
|
270
274
|
}),
|
|
271
275
|
onAccept: data => {
|
|
272
|
-
const updatedTabs = [...
|
|
276
|
+
const updatedTabs = [...field.tabs];
|
|
273
277
|
updatedTabs[index] = {
|
|
274
278
|
...tab,
|
|
275
279
|
label: data.label ?? tab.label,
|
|
@@ -277,12 +281,12 @@ const TabItem = ({
|
|
|
277
281
|
rules: data.rules ?? []
|
|
278
282
|
};
|
|
279
283
|
onUpdate({
|
|
280
|
-
...
|
|
284
|
+
...field,
|
|
281
285
|
tabs: updatedTabs
|
|
282
286
|
});
|
|
283
287
|
}
|
|
284
288
|
});
|
|
285
|
-
}, [dialogs,
|
|
289
|
+
}, [dialogs, field, index, tab, onUpdate]);
|
|
286
290
|
return /*#__PURE__*/React.createElement(Accordion.Item, {
|
|
287
291
|
title: tab.label
|
|
288
292
|
/* This ensures drop zones are not affected by `overflow-hidden` on the accordion content. */,
|
|
@@ -312,7 +316,7 @@ const TabItem = ({
|
|
|
312
316
|
}));
|
|
313
317
|
};
|
|
314
318
|
export const TabsLayoutEditor = ({
|
|
315
|
-
|
|
319
|
+
field,
|
|
316
320
|
onUpdate,
|
|
317
321
|
onDelete
|
|
318
322
|
}) => {
|
|
@@ -335,11 +339,11 @@ export const TabsLayoutEditor = ({
|
|
|
335
339
|
newTabId.current = undefined;
|
|
336
340
|
}, []);
|
|
337
341
|
|
|
338
|
-
// Resolve all fields that exist in any tab of this
|
|
342
|
+
// Resolve all fields that exist in any tab of this field from the parent's fields
|
|
339
343
|
const getAllParentFields = useCallback(() => {
|
|
340
|
-
// Collect all field IDs that exist in any tab of this
|
|
344
|
+
// Collect all field IDs that exist in any tab of this field
|
|
341
345
|
const allFieldIds = new Set();
|
|
342
|
-
for (const tab of
|
|
346
|
+
for (const tab of field.tabs) {
|
|
343
347
|
for (const row of tab.layout) {
|
|
344
348
|
for (const cell of row) {
|
|
345
349
|
if (typeof cell === "string") {
|
|
@@ -352,44 +356,44 @@ export const TabsLayoutEditor = ({
|
|
|
352
356
|
// Resolve them from the parent editor
|
|
353
357
|
const resolved = [];
|
|
354
358
|
for (const id of allFieldIds) {
|
|
355
|
-
const
|
|
359
|
+
const f = parentEditor.getField({
|
|
356
360
|
id
|
|
357
361
|
});
|
|
358
|
-
if (
|
|
359
|
-
resolved.push(
|
|
362
|
+
if (f) {
|
|
363
|
+
resolved.push(f);
|
|
360
364
|
}
|
|
361
365
|
}
|
|
362
366
|
return resolved;
|
|
363
|
-
}, [
|
|
364
|
-
const handleInsertField = useCallback(
|
|
367
|
+
}, [field, parentEditor]);
|
|
368
|
+
const handleInsertField = useCallback(f => {
|
|
365
369
|
// Hoist the field to the parent context's fields (without placing in parent's layout)
|
|
366
370
|
const existingField = parentEditor.getField({
|
|
367
|
-
id:
|
|
371
|
+
id: f.id
|
|
368
372
|
});
|
|
369
373
|
if (!existingField) {
|
|
370
|
-
parentEditor.addField(
|
|
374
|
+
parentEditor.addField(f);
|
|
371
375
|
}
|
|
372
376
|
}, [parentEditor]);
|
|
373
377
|
const handleRemoveField = useCallback(fieldId => {
|
|
374
378
|
// Un-hoist the field from the parent context's fields
|
|
375
379
|
parentEditor.removeField(fieldId);
|
|
376
380
|
}, [parentEditor]);
|
|
377
|
-
const handleUpdateField = useCallback(
|
|
378
|
-
parentEditor.updateField(
|
|
381
|
+
const handleUpdateField = useCallback(f => {
|
|
382
|
+
parentEditor.updateField(f);
|
|
379
383
|
}, [parentEditor]);
|
|
380
384
|
const addTab = useCallback(() => {
|
|
381
385
|
const id = generateAlphaNumericLowerCaseId(8);
|
|
382
386
|
newTabId.current = id;
|
|
383
387
|
const newTab = {
|
|
384
388
|
id,
|
|
385
|
-
label: `Tab ${
|
|
389
|
+
label: `Tab ${field.tabs.length + 1}`,
|
|
386
390
|
layout: []
|
|
387
391
|
};
|
|
388
392
|
onUpdate({
|
|
389
|
-
...
|
|
390
|
-
tabs: [...
|
|
393
|
+
...field,
|
|
394
|
+
tabs: [...field.tabs, newTab]
|
|
391
395
|
});
|
|
392
|
-
}, [
|
|
396
|
+
}, [field, onUpdate]);
|
|
393
397
|
const handleDeleteTabs = useCallback(() => {
|
|
394
398
|
showDeleteConfirmation(() => {
|
|
395
399
|
onDelete();
|
|
@@ -402,17 +406,17 @@ export const TabsLayoutEditor = ({
|
|
|
402
406
|
acceptLabel: "Save",
|
|
403
407
|
cancelLabel: "Cancel",
|
|
404
408
|
formData: {
|
|
405
|
-
label:
|
|
406
|
-
description:
|
|
407
|
-
help:
|
|
408
|
-
rules:
|
|
409
|
+
label: field.label ?? "",
|
|
410
|
+
description: field.description ?? "",
|
|
411
|
+
help: field.help ?? "",
|
|
412
|
+
rules: field.rules ?? []
|
|
409
413
|
},
|
|
410
414
|
content: /*#__PURE__*/React.createElement(TabsDialogContent, {
|
|
411
415
|
fieldOptions: fieldOptions
|
|
412
416
|
}),
|
|
413
417
|
onAccept: data => {
|
|
414
418
|
onUpdate({
|
|
415
|
-
...
|
|
419
|
+
...field,
|
|
416
420
|
label: data.label ?? "",
|
|
417
421
|
description: data.description || null,
|
|
418
422
|
help: data.help || null,
|
|
@@ -420,7 +424,7 @@ export const TabsLayoutEditor = ({
|
|
|
420
424
|
});
|
|
421
425
|
}
|
|
422
426
|
});
|
|
423
|
-
}, [
|
|
427
|
+
}, [field, onUpdate]);
|
|
424
428
|
const resolvedParentFields = getAllParentFields();
|
|
425
429
|
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
426
430
|
className: "flex justify-between"
|
|
@@ -431,7 +435,7 @@ export const TabsLayoutEditor = ({
|
|
|
431
435
|
}, /*#__PURE__*/React.createElement(Heading, {
|
|
432
436
|
level: 6,
|
|
433
437
|
className: "text-nowrap"
|
|
434
|
-
},
|
|
438
|
+
}, field.label || "No label")), /*#__PURE__*/React.createElement(Text, {
|
|
435
439
|
size: "sm",
|
|
436
440
|
className: "flex w-full text-neutral-strong"
|
|
437
441
|
}, "Tabs")), /*#__PURE__*/React.createElement("div", {
|
|
@@ -446,12 +450,12 @@ export const TabsLayoutEditor = ({
|
|
|
446
450
|
onClick: handleDeleteTabs,
|
|
447
451
|
variant: "ghost",
|
|
448
452
|
size: "sm"
|
|
449
|
-
}))),
|
|
453
|
+
}))), field.tabs.length > 0 && /*#__PURE__*/React.createElement(Accordion, null, field.tabs.map((tab, index) => /*#__PURE__*/React.createElement(TabItem, {
|
|
450
454
|
key: tab.id,
|
|
451
455
|
tab: tab,
|
|
452
456
|
index: index,
|
|
453
|
-
totalTabs:
|
|
454
|
-
|
|
457
|
+
totalTabs: field.tabs.length,
|
|
458
|
+
field: field,
|
|
455
459
|
parentFields: resolvedParentFields,
|
|
456
460
|
onUpdate: onUpdate,
|
|
457
461
|
onInsertField: handleInsertField,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useRef","useEffect","Accordion","Tabs","ReactComponent","EditIcon","DeleteIcon","ArrowUpIcon","ArrowDownIcon","AddIcon","generateAlphaNumericLowerCaseId","useConfirmationDialog","useDialogs","Grid","IconButton","Button","Input","Textarea","Heading","Text","Bind","FieldEditor","IconPicker","useModelFieldEditor","PermissionsTab","RulesTab","useModelEditor","TabsSettings","createElement","className","Column","span","name","label","TabsDialogContent","fieldOptions","size","separator","tabs","Tab","key","trigger","value","content","gridClassName","TabSettingsFields","TabDialogContent","createTabParent","tab","id","fieldId","type","renderer","resolveTabFields","parentFields","fieldIds","Set","row","layout","cell","add","filter","f","has","TabItem","index","totalTabs","descriptor","onUpdate","onInsertField","onRemoveField","onUpdateField","dialogs","showConfirmation","title","message","acceptLabel","isFirst","isLast","tabFields","handleFieldsChange","fields","newFields","newLayout","oldFieldIds","map","newFieldIds","oldFieldMap","Map","get","updatedTabs","moveTabUp","moveTabDown","deleteTab","_","i","editTab","showDialog","description","cancelLabel","formData","icon","rules","onAccept","data","undefined","Item","length","actions","Fragment","Action","onClick","disabled","Separator","parent","onChange","TabsLayoutEditor","onDelete","parentEditor","newTabId","showDeleteConfirmation","current","getAllParentFields","allFieldIds","resolved","field","getField","push","handleInsertField","existingField","addField","handleRemoveField","removeField","handleUpdateField","updateField","addTab","newTab","handleDeleteTabs","editTabsSettings","help","resolvedParentFields","level","variant","text"],"sources":["TabsLayoutEditor.tsx"],"sourcesContent":["import React, { useCallback, useRef, useEffect } from \"react\";\nimport { Accordion, Tabs } from \"@webiny/admin-ui\";\nimport { ReactComponent as EditIcon } from \"@webiny/icons/edit.svg\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { ReactComponent as ArrowUpIcon } from \"@webiny/icons/expand_less.svg\";\nimport { ReactComponent as ArrowDownIcon } from \"@webiny/icons/expand_more.svg\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\nimport type {\n CmsTabLayoutDescriptor,\n CmsTabLayoutTab,\n CmsLayoutDescriptor,\n CmsEditorFieldsLayout\n} from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { useConfirmationDialog, useDialogs } from \"@webiny/app-admin\";\nimport { Grid } from \"@webiny/admin-ui\";\nimport { IconButton } from \"@webiny/admin-ui\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { Input } from \"@webiny/admin-ui\";\nimport { Textarea } from \"@webiny/admin-ui\";\nimport { Heading } from \"@webiny/admin-ui\";\nimport { Text } from \"@webiny/admin-ui\";\nimport { Bind } from \"@webiny/form\";\nimport type { CmsModelField } from \"~/types.js\";\nimport { FieldEditor } from \"~/admin/components/FieldEditor/index.js\";\nimport { IconPicker } from \"~/admin/components/IconPicker.js\";\nimport { useModelFieldEditor } from \"~/admin/hooks/index.js\";\nimport { PermissionsTab } from \"~/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js\";\nimport { RulesTab } from \"~/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js\";\nimport { useModelEditor } from \"~/admin/components/ContentModelEditor/useModelEditor.js\";\nimport type { FieldOption } from \"@webiny/app-headless-cms-common/Fields/fieldOptions.js\";\n\ninterface TabsLayoutEditorProps {\n descriptor: CmsTabLayoutDescriptor;\n onUpdate: (d: CmsLayoutDescriptor) => void;\n onDelete: () => void;\n}\n\ninterface TabItemProps {\n tab: CmsTabLayoutTab;\n index: number;\n totalTabs: number;\n descriptor: CmsTabLayoutDescriptor;\n parentFields: CmsModelField[];\n onUpdate: (d: CmsLayoutDescriptor) => void;\n onInsertField: (field: CmsModelField) => void;\n onRemoveField: (fieldId: string) => void;\n onUpdateField: (field: CmsModelField) => void;\n}\n\nconst TabsSettings = () => {\n return (\n <Grid className={\"mt-md\"}>\n <Grid.Column span={12}>\n <Bind name={\"label\"}>\n <Input label={\"Label\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"description\"}>\n <Input label={\"Description\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"help\"}>\n <Textarea label={\"Help\"} />\n </Bind>\n </Grid.Column>\n </Grid>\n );\n};\n\nconst TabsDialogContent = ({ fieldOptions }: { fieldOptions: FieldOption[] }) => {\n return (\n <Tabs\n size={\"md\"}\n separator\n tabs={[\n <Tabs.Tab\n key={\"tabs\"}\n trigger={\"Tabs\"}\n value={\"tabs\"}\n content={<TabsSettings />}\n />,\n <Tabs.Tab\n key={\"permissions\"}\n trigger={\"Permissions\"}\n value={\"permissions\"}\n content={<PermissionsTab gridClassName={\"mt-md\"} />}\n />,\n <Tabs.Tab\n key={\"rules\"}\n trigger={\"Rules\"}\n value={\"rules\"}\n content={<RulesTab gridClassName={\"mt-md\"} fieldOptions={fieldOptions} />}\n />\n ]}\n />\n );\n};\n\nconst TabSettingsFields = () => {\n return (\n <Grid className={\"mt-md\"}>\n <Grid.Column span={12}>\n <Bind name={\"label\"}>\n <Input label={\"Label\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"icon\"}>\n <IconPicker label={\"Icon\"} />\n </Bind>\n </Grid.Column>\n </Grid>\n );\n};\n\nconst TabDialogContent = ({ fieldOptions }: { fieldOptions: FieldOption[] }) => {\n return (\n <Tabs\n size={\"md\"}\n separator\n tabs={[\n <Tabs.Tab\n key={\"tab\"}\n trigger={\"Tab\"}\n value={\"tab\"}\n content={<TabSettingsFields />}\n />,\n <Tabs.Tab\n key={\"permissions\"}\n trigger={\"Permissions\"}\n value={\"permissions\"}\n content={<PermissionsTab gridClassName={\"mt-md\"} />}\n />,\n <Tabs.Tab\n key={\"rules\"}\n trigger={\"Rules\"}\n value={\"rules\"}\n content={<RulesTab gridClassName={\"mt-md\"} fieldOptions={fieldOptions} />}\n />\n ]}\n />\n );\n};\n\n/**\n * Create a synthetic parent field for a tab so that each tab's FieldEditor\n * has a unique identity for cross-parent drag & drop detection.\n */\nfunction createTabParent(tab: CmsTabLayoutTab): CmsModelField {\n return {\n id: tab.id,\n fieldId: `tab:${tab.id}`,\n type: \"tab\",\n label: tab.label,\n renderer: { name: \"\" }\n } as CmsModelField;\n}\n\n/**\n * Resolve fields for a tab by looking up field IDs in the parent's fields array.\n */\nfunction resolveTabFields(tab: CmsTabLayoutTab, parentFields: CmsModelField[]): CmsModelField[] {\n const fieldIds = new Set<string>();\n for (const row of tab.layout) {\n for (const cell of row) {\n if (typeof cell === \"string\") {\n fieldIds.add(cell);\n }\n }\n }\n return parentFields.filter(f => fieldIds.has(f.id));\n}\n\nconst TabItem = ({\n tab,\n index,\n totalTabs,\n descriptor,\n parentFields,\n onUpdate,\n onInsertField,\n onRemoveField,\n onUpdateField\n}: TabItemProps) => {\n const { fieldOptions } = useModelEditor();\n const dialogs = useDialogs();\n\n const { showConfirmation } = useConfirmationDialog({\n title: \"Delete tab\",\n message: `Are you sure you want to delete the tab \"${tab.label}\"? Fields inside this tab will be removed.`,\n acceptLabel: \"Yes, delete tab\"\n });\n\n const isFirst = index === 0;\n const isLast = index === totalTabs - 1;\n\n const tabFields = resolveTabFields(tab, parentFields);\n\n const handleFieldsChange = useCallback(\n ({\n fields: newFields,\n layout: newLayout\n }: {\n fields: CmsModelField[];\n layout: CmsEditorFieldsLayout;\n }) => {\n const oldFieldIds = new Set(tabFields.map(f => f.id));\n const newFieldIds = new Set(newFields.map(f => f.id));\n\n // Find added fields (in new but not in old) -> hoist to parent\n for (const f of newFields) {\n if (!oldFieldIds.has(f.id)) {\n onInsertField(f);\n }\n }\n\n // Find removed fields (in old but not in new) -> un-hoist from parent\n for (const id of oldFieldIds) {\n if (!newFieldIds.has(id)) {\n onRemoveField(id);\n }\n }\n\n // Propagate field updates (e.g. permissions changes) to the parent\n const oldFieldMap = new Map(tabFields.map(f => [f.id, f]));\n for (const f of newFields) {\n if (oldFieldMap.has(f.id) && oldFieldMap.get(f.id) !== f) {\n onUpdateField(f);\n }\n }\n\n // Update the tab's layout in the descriptor\n const updatedTabs = [...descriptor.tabs];\n updatedTabs[index] = { ...tab, layout: newLayout };\n onUpdate({ ...descriptor, tabs: updatedTabs });\n },\n [tab, index, descriptor, tabFields, onUpdate, onInsertField, onRemoveField, onUpdateField]\n );\n\n const moveTabUp = useCallback(() => {\n if (isFirst) {\n return;\n }\n const tabs = [...descriptor.tabs];\n [tabs[index - 1], tabs[index]] = [tabs[index], tabs[index - 1]];\n onUpdate({ ...descriptor, tabs });\n }, [descriptor, index, isFirst, onUpdate]);\n\n const moveTabDown = useCallback(() => {\n if (isLast) {\n return;\n }\n const tabs = [...descriptor.tabs];\n [tabs[index + 1], tabs[index]] = [tabs[index], tabs[index + 1]];\n onUpdate({ ...descriptor, tabs });\n }, [descriptor, index, isLast, onUpdate]);\n\n const deleteTab = useCallback(() => {\n showConfirmation(() => {\n // Collect field IDs to un-hoist\n for (const row of tab.layout) {\n for (const cell of row) {\n if (typeof cell === \"string\") {\n onRemoveField(cell);\n }\n }\n }\n\n const tabs = descriptor.tabs.filter((_, i) => i !== index);\n onUpdate({ ...descriptor, tabs });\n });\n }, [descriptor, index, tab, onUpdate, onRemoveField, showConfirmation]);\n\n const editTab = useCallback(() => {\n dialogs.showDialog({\n title: \"Tab Settings\",\n description: \"Configure the tab and access permissions\",\n acceptLabel: \"Save\",\n cancelLabel: \"Cancel\",\n formData: {\n label: tab.label,\n icon: tab.icon ?? \"\",\n rules: tab.rules ?? []\n },\n content: <TabDialogContent fieldOptions={fieldOptions} />,\n onAccept: data => {\n const updatedTabs = [...descriptor.tabs];\n updatedTabs[index] = {\n ...tab,\n label: data.label ?? tab.label,\n icon: data.icon || undefined,\n rules: data.rules ?? []\n };\n onUpdate({ ...descriptor, tabs: updatedTabs });\n }\n });\n }, [dialogs, descriptor, index, tab, onUpdate]);\n\n return (\n <Accordion.Item\n title={tab.label}\n /* This ensures drop zones are not affected by `overflow-hidden` on the accordion content. */\n className={\"[&>[data-state='open']]:!overflow-visible\"}\n description={`${tabFields.length} field${tabFields.length !== 1 ? \"s\" : \"\"}`}\n actions={\n <>\n <Accordion.Item.Action\n icon={<ArrowUpIcon />}\n onClick={moveTabUp}\n disabled={isFirst}\n />\n <Accordion.Item.Action\n icon={<ArrowDownIcon />}\n onClick={moveTabDown}\n disabled={isLast}\n />\n <Accordion.Item.Action.Separator />\n <Accordion.Item.Action icon={<EditIcon />} onClick={editTab} />\n <Accordion.Item.Action\n icon={<DeleteIcon />}\n onClick={deleteTab}\n disabled={totalTabs <= 1}\n />\n </>\n }\n >\n <FieldEditor\n parent={createTabParent(tab)}\n fields={tabFields}\n layout={tab.layout}\n onChange={handleFieldsChange}\n />\n </Accordion.Item>\n );\n};\n\nexport const TabsLayoutEditor = ({ descriptor, onUpdate, onDelete }: TabsLayoutEditorProps) => {\n const parentEditor = useModelFieldEditor();\n const { fieldOptions } = useModelEditor();\n const { showDialog } = useDialogs();\n const newTabId = useRef<string | undefined>(undefined);\n\n const { showConfirmation: showDeleteConfirmation } = useConfirmationDialog({\n title: \"Delete tabs\",\n message:\n \"Are you sure you want to delete this tabs element? All fields inside the tabs will be removed.\",\n acceptLabel: \"Yes, delete\"\n });\n\n useEffect(() => {\n newTabId.current = undefined;\n }, []);\n\n // Resolve all fields that exist in any tab of this descriptor from the parent's fields\n const getAllParentFields = useCallback((): CmsModelField[] => {\n // Collect all field IDs that exist in any tab of this descriptor\n const allFieldIds = new Set<string>();\n for (const tab of descriptor.tabs) {\n for (const row of tab.layout) {\n for (const cell of row) {\n if (typeof cell === \"string\") {\n allFieldIds.add(cell);\n }\n }\n }\n }\n\n // Resolve them from the parent editor\n const resolved: CmsModelField[] = [];\n for (const id of allFieldIds) {\n const field = parentEditor.getField({ id });\n if (field) {\n resolved.push(field);\n }\n }\n return resolved;\n }, [descriptor, parentEditor]);\n\n const handleInsertField = useCallback(\n (field: CmsModelField) => {\n // Hoist the field to the parent context's fields (without placing in parent's layout)\n const existingField = parentEditor.getField({ id: field.id });\n if (!existingField) {\n parentEditor.addField(field);\n }\n },\n [parentEditor]\n );\n\n const handleRemoveField = useCallback(\n (fieldId: string) => {\n // Un-hoist the field from the parent context's fields\n parentEditor.removeField(fieldId);\n },\n [parentEditor]\n );\n\n const handleUpdateField = useCallback(\n (field: CmsModelField) => {\n parentEditor.updateField(field);\n },\n [parentEditor]\n );\n\n const addTab = useCallback(() => {\n const id = generateAlphaNumericLowerCaseId(8);\n newTabId.current = id;\n const newTab: CmsTabLayoutTab = {\n id,\n label: `Tab ${descriptor.tabs.length + 1}`,\n layout: []\n };\n onUpdate({ ...descriptor, tabs: [...descriptor.tabs, newTab] });\n }, [descriptor, onUpdate]);\n\n const handleDeleteTabs = useCallback(() => {\n showDeleteConfirmation(() => {\n onDelete();\n });\n }, [onDelete, showDeleteConfirmation]);\n\n const editTabsSettings = useCallback(() => {\n showDialog({\n title: \"Tabs Settings\",\n description: \"Configure the tabs and access permissions\",\n acceptLabel: \"Save\",\n cancelLabel: \"Cancel\",\n formData: {\n label: descriptor.label ?? \"\",\n description: descriptor.description ?? \"\",\n help: descriptor.help ?? \"\",\n rules: descriptor.rules ?? []\n },\n content: <TabsDialogContent fieldOptions={fieldOptions} />,\n onAccept: data => {\n onUpdate({\n ...descriptor,\n label: data.label ?? \"\",\n description: data.description || null,\n help: data.help || null,\n rules: data.rules ?? []\n });\n }\n });\n }, [descriptor, onUpdate]);\n\n const resolvedParentFields = getAllParentFields();\n\n return (\n <div>\n <div className={\"flex justify-between\"}>\n <div className={\"flex flex-col\"}>\n <div className={\"flex flex-row items-center\"}>\n <Heading level={6} className={\"text-nowrap\"}>\n {descriptor.label || \"No label\"}\n </Heading>\n </div>\n <Text size=\"sm\" className={\"flex w-full text-neutral-strong\"}>\n Tabs\n </Text>\n </div>\n <div className={\"flex items-center gap-xs\"}>\n <IconButton\n icon={<EditIcon />}\n onClick={editTabsSettings}\n variant={\"ghost\"}\n size={\"sm\"}\n />\n <IconButton\n icon={<DeleteIcon />}\n onClick={handleDeleteTabs}\n variant={\"ghost\"}\n size={\"sm\"}\n />\n </div>\n </div>\n {descriptor.tabs.length > 0 && (\n <Accordion>\n {descriptor.tabs.map((tab, index) => (\n <TabItem\n key={tab.id}\n tab={tab}\n index={index}\n totalTabs={descriptor.tabs.length}\n descriptor={descriptor}\n parentFields={resolvedParentFields}\n onUpdate={onUpdate}\n onInsertField={handleInsertField}\n onRemoveField={handleRemoveField}\n onUpdateField={handleUpdateField}\n />\n ))}\n </Accordion>\n )}\n <div className={\"mt-sm flex justify-center\"}>\n <Button onClick={addTab} text={\"Add Tab\"} icon={<AddIcon />} size={\"sm\"} />\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useCallback","useRef","useEffect","Accordion","Tabs","ScrollArea","ReactComponent","EditIcon","DeleteIcon","ArrowUpIcon","ArrowDownIcon","AddIcon","generateAlphaNumericLowerCaseId","useConfirmationDialog","useDialogs","Grid","IconButton","Button","Input","Textarea","Heading","Text","Bind","FieldEditor","IconPicker","useModelFieldEditor","PermissionsEditor","RulesEditor","useModelEditor","TabsSettings","createElement","className","Column","span","name","label","TabsDialogContent","fieldOptions","size","separator","tabs","Tab","key","trigger","value","content","TabSettingsFields","TabDialogContent","createTabParent","tab","id","fieldId","type","renderer","resolveTabFields","parentFields","fieldIds","Set","row","layout","cell","add","filter","f","has","TabItem","index","totalTabs","field","onUpdate","onInsertField","onRemoveField","onUpdateField","dialogs","showConfirmation","title","message","acceptLabel","isFirst","isLast","tabFields","handleFieldsChange","fields","newFields","newLayout","oldFieldIds","map","newFieldIds","oldFieldMap","Map","get","updatedTabs","moveTabUp","moveTabDown","deleteTab","_","i","editTab","showDialog","description","cancelLabel","formData","icon","rules","onAccept","data","undefined","Item","length","actions","Fragment","Action","onClick","disabled","Separator","parent","onChange","TabsLayoutEditor","onDelete","parentEditor","newTabId","showDeleteConfirmation","current","getAllParentFields","allFieldIds","resolved","getField","push","handleInsertField","existingField","addField","handleRemoveField","removeField","handleUpdateField","updateField","addTab","newTab","handleDeleteTabs","editTabsSettings","help","resolvedParentFields","level","variant","text"],"sources":["TabsLayoutEditor.tsx"],"sourcesContent":["import React, { useCallback, useRef, useEffect } from \"react\";\nimport { Accordion, Tabs, ScrollArea } from \"@webiny/admin-ui\";\nimport { ReactComponent as EditIcon } from \"@webiny/icons/edit.svg\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { ReactComponent as ArrowUpIcon } from \"@webiny/icons/expand_less.svg\";\nimport { ReactComponent as ArrowDownIcon } from \"@webiny/icons/expand_more.svg\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\nimport type {\n CmsTabLayoutField,\n CmsTabLayoutTab,\n CmsLayoutField,\n CmsEditorFieldsLayout\n} from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { useConfirmationDialog, useDialogs } from \"@webiny/app-admin\";\nimport { Grid } from \"@webiny/admin-ui\";\nimport { IconButton } from \"@webiny/admin-ui\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { Input } from \"@webiny/admin-ui\";\nimport { Textarea } from \"@webiny/admin-ui\";\nimport { Heading } from \"@webiny/admin-ui\";\nimport { Text } from \"@webiny/admin-ui\";\nimport { Bind } from \"@webiny/form\";\nimport type { CmsModelField } from \"~/types.js\";\nimport { FieldEditor } from \"~/admin/components/FieldEditor/index.js\";\nimport { IconPicker } from \"~/admin/components/IconPicker.js\";\nimport { useModelFieldEditor } from \"~/admin/hooks/index.js\";\nimport { PermissionsEditor } from \"~/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.js\";\nimport { RulesEditor } from \"~/admin/components/FieldEditor/EditFieldDialog/RulesEditor/RulesEditor.js\";\nimport { useModelEditor } from \"~/admin/components/ContentModelEditor/useModelEditor.js\";\nimport type { FieldOption } from \"@webiny/app-headless-cms-common/Fields/fieldOptions.js\";\n\ninterface TabsLayoutEditorProps {\n field: CmsTabLayoutField;\n onUpdate: (d: CmsLayoutField) => void;\n onDelete: () => void;\n}\n\ninterface TabItemProps {\n tab: CmsTabLayoutTab;\n index: number;\n totalTabs: number;\n field: CmsTabLayoutField;\n parentFields: CmsModelField[];\n onUpdate: (d: CmsLayoutField) => void;\n onInsertField: (field: CmsModelField) => void;\n onRemoveField: (fieldId: string) => void;\n onUpdateField: (field: CmsModelField) => void;\n}\n\nconst TabsSettings = () => {\n return (\n <Grid className={\"mt-md\"}>\n <Grid.Column span={12}>\n <Bind name={\"label\"}>\n <Input label={\"Label\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"description\"}>\n <Input label={\"Description\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"help\"}>\n <Textarea label={\"Help\"} />\n </Bind>\n </Grid.Column>\n </Grid>\n );\n};\n\nconst TabsDialogContent = ({ fieldOptions }: { fieldOptions: FieldOption[] }) => {\n return (\n <ScrollArea className=\"max-h-[70vh] flex flex-col\">\n <Tabs\n size={\"md\"}\n separator\n tabs={[\n <Tabs.Tab\n key={\"tabs\"}\n trigger={\"Tabs\"}\n value={\"tabs\"}\n content={<TabsSettings />}\n />,\n <Tabs.Tab\n key={\"permissions\"}\n trigger={\"Permissions\"}\n value={\"permissions\"}\n content={\n <div className={\"mt-md\"}>\n <PermissionsEditor />\n </div>\n }\n />,\n <Tabs.Tab\n key={\"rules\"}\n trigger={\"Rules\"}\n value={\"rules\"}\n content={\n <div className={\"mt-md\"}>\n <RulesEditor fieldOptions={fieldOptions} />\n </div>\n }\n />\n ]}\n />\n </ScrollArea>\n );\n};\n\nconst TabSettingsFields = () => {\n return (\n <Grid className={\"mt-md\"}>\n <Grid.Column span={12}>\n <Bind name={\"label\"}>\n <Input label={\"Label\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"icon\"}>\n <IconPicker label={\"Icon\"} />\n </Bind>\n </Grid.Column>\n </Grid>\n );\n};\n\nconst TabDialogContent = ({ fieldOptions }: { fieldOptions: FieldOption[] }) => {\n return (\n <Tabs\n size={\"md\"}\n separator\n tabs={[\n <Tabs.Tab\n key={\"tab\"}\n trigger={\"Tab\"}\n value={\"tab\"}\n content={<TabSettingsFields />}\n />,\n <Tabs.Tab\n key={\"permissions\"}\n trigger={\"Permissions\"}\n value={\"permissions\"}\n content={\n <div className={\"mt-md\"}>\n <PermissionsEditor />\n </div>\n }\n />,\n <Tabs.Tab\n key={\"rules\"}\n trigger={\"Rules\"}\n value={\"rules\"}\n content={\n <div className={\"mt-md\"}>\n <RulesEditor fieldOptions={fieldOptions} />\n </div>\n }\n />\n ]}\n />\n );\n};\n\n/**\n * Create a synthetic parent field for a tab so that each tab's FieldEditor\n * has a unique identity for cross-parent drag & drop detection.\n */\nfunction createTabParent(tab: CmsTabLayoutTab): CmsModelField {\n return {\n id: tab.id,\n fieldId: `tab:${tab.id}`,\n type: \"tab\",\n label: tab.label,\n renderer: { name: \"\" }\n } as CmsModelField;\n}\n\n/**\n * Resolve fields for a tab by looking up field IDs in the parent's fields array.\n */\nfunction resolveTabFields(tab: CmsTabLayoutTab, parentFields: CmsModelField[]): CmsModelField[] {\n const fieldIds = new Set<string>();\n for (const row of tab.layout) {\n for (const cell of row) {\n if (typeof cell === \"string\") {\n fieldIds.add(cell);\n }\n }\n }\n return parentFields.filter(f => fieldIds.has(f.id));\n}\n\nconst TabItem = ({\n tab,\n index,\n totalTabs,\n field,\n parentFields,\n onUpdate,\n onInsertField,\n onRemoveField,\n onUpdateField\n}: TabItemProps) => {\n const { fieldOptions } = useModelEditor();\n const dialogs = useDialogs();\n\n const { showConfirmation } = useConfirmationDialog({\n title: \"Delete tab\",\n message: `Are you sure you want to delete the tab \"${tab.label}\"? Fields inside this tab will be removed.`,\n acceptLabel: \"Yes, delete tab\"\n });\n\n const isFirst = index === 0;\n const isLast = index === totalTabs - 1;\n\n const tabFields = resolveTabFields(tab, parentFields);\n\n const handleFieldsChange = useCallback(\n ({\n fields: newFields,\n layout: newLayout\n }: {\n fields: CmsModelField[];\n layout: CmsEditorFieldsLayout;\n }) => {\n const oldFieldIds = new Set(tabFields.map(f => f.id));\n const newFieldIds = new Set(newFields.map(f => f.id));\n\n // Find added fields (in new but not in old) -> hoist to parent\n for (const f of newFields) {\n if (!oldFieldIds.has(f.id)) {\n onInsertField(f);\n }\n }\n\n // Find removed fields (in old but not in new) -> un-hoist from parent\n for (const id of oldFieldIds) {\n if (!newFieldIds.has(id)) {\n onRemoveField(id);\n }\n }\n\n // Propagate field updates (e.g. permissions changes) to the parent\n const oldFieldMap = new Map(tabFields.map(f => [f.id, f]));\n for (const f of newFields) {\n if (oldFieldMap.has(f.id) && oldFieldMap.get(f.id) !== f) {\n onUpdateField(f);\n }\n }\n\n // Update the tab's layout in the field\n const updatedTabs = [...field.tabs];\n updatedTabs[index] = { ...tab, layout: newLayout };\n onUpdate({ ...field, tabs: updatedTabs });\n },\n [tab, index, field, tabFields, onUpdate, onInsertField, onRemoveField, onUpdateField]\n );\n\n const moveTabUp = useCallback(() => {\n if (isFirst) {\n return;\n }\n const tabs = [...field.tabs];\n [tabs[index - 1], tabs[index]] = [tabs[index], tabs[index - 1]];\n onUpdate({ ...field, tabs });\n }, [field, index, isFirst, onUpdate]);\n\n const moveTabDown = useCallback(() => {\n if (isLast) {\n return;\n }\n const tabs = [...field.tabs];\n [tabs[index + 1], tabs[index]] = [tabs[index], tabs[index + 1]];\n onUpdate({ ...field, tabs });\n }, [field, index, isLast, onUpdate]);\n\n const deleteTab = useCallback(() => {\n showConfirmation(() => {\n // Collect field IDs to un-hoist\n for (const row of tab.layout) {\n for (const cell of row) {\n if (typeof cell === \"string\") {\n onRemoveField(cell);\n }\n }\n }\n\n const tabs = field.tabs.filter((_, i) => i !== index);\n onUpdate({ ...field, tabs });\n });\n }, [field, index, tab, onUpdate, onRemoveField, showConfirmation]);\n\n const editTab = useCallback(() => {\n dialogs.showDialog({\n title: \"Tab Settings\",\n description: \"Configure the tab and access permissions\",\n acceptLabel: \"Save\",\n cancelLabel: \"Cancel\",\n formData: {\n label: tab.label,\n icon: tab.icon ?? \"\",\n rules: tab.rules ?? []\n },\n content: <TabDialogContent fieldOptions={fieldOptions} />,\n onAccept: data => {\n const updatedTabs = [...field.tabs];\n updatedTabs[index] = {\n ...tab,\n label: data.label ?? tab.label,\n icon: data.icon || undefined,\n rules: data.rules ?? []\n };\n onUpdate({ ...field, tabs: updatedTabs });\n }\n });\n }, [dialogs, field, index, tab, onUpdate]);\n\n return (\n <Accordion.Item\n title={tab.label}\n /* This ensures drop zones are not affected by `overflow-hidden` on the accordion content. */\n className={\"[&>[data-state='open']]:!overflow-visible\"}\n description={`${tabFields.length} field${tabFields.length !== 1 ? \"s\" : \"\"}`}\n actions={\n <>\n <Accordion.Item.Action\n icon={<ArrowUpIcon />}\n onClick={moveTabUp}\n disabled={isFirst}\n />\n <Accordion.Item.Action\n icon={<ArrowDownIcon />}\n onClick={moveTabDown}\n disabled={isLast}\n />\n <Accordion.Item.Action.Separator />\n <Accordion.Item.Action icon={<EditIcon />} onClick={editTab} />\n <Accordion.Item.Action\n icon={<DeleteIcon />}\n onClick={deleteTab}\n disabled={totalTabs <= 1}\n />\n </>\n }\n >\n <FieldEditor\n parent={createTabParent(tab)}\n fields={tabFields}\n layout={tab.layout}\n onChange={handleFieldsChange}\n />\n </Accordion.Item>\n );\n};\n\nexport const TabsLayoutEditor = ({ field, onUpdate, onDelete }: TabsLayoutEditorProps) => {\n const parentEditor = useModelFieldEditor();\n const { fieldOptions } = useModelEditor();\n const { showDialog } = useDialogs();\n const newTabId = useRef<string | undefined>(undefined);\n\n const { showConfirmation: showDeleteConfirmation } = useConfirmationDialog({\n title: \"Delete tabs\",\n message:\n \"Are you sure you want to delete this tabs element? All fields inside the tabs will be removed.\",\n acceptLabel: \"Yes, delete\"\n });\n\n useEffect(() => {\n newTabId.current = undefined;\n }, []);\n\n // Resolve all fields that exist in any tab of this field from the parent's fields\n const getAllParentFields = useCallback((): CmsModelField[] => {\n // Collect all field IDs that exist in any tab of this field\n const allFieldIds = new Set<string>();\n for (const tab of field.tabs) {\n for (const row of tab.layout) {\n for (const cell of row) {\n if (typeof cell === \"string\") {\n allFieldIds.add(cell);\n }\n }\n }\n }\n\n // Resolve them from the parent editor\n const resolved: CmsModelField[] = [];\n for (const id of allFieldIds) {\n const f = parentEditor.getField({ id });\n if (f) {\n resolved.push(f);\n }\n }\n return resolved;\n }, [field, parentEditor]);\n\n const handleInsertField = useCallback(\n (f: CmsModelField) => {\n // Hoist the field to the parent context's fields (without placing in parent's layout)\n const existingField = parentEditor.getField({ id: f.id });\n if (!existingField) {\n parentEditor.addField(f);\n }\n },\n [parentEditor]\n );\n\n const handleRemoveField = useCallback(\n (fieldId: string) => {\n // Un-hoist the field from the parent context's fields\n parentEditor.removeField(fieldId);\n },\n [parentEditor]\n );\n\n const handleUpdateField = useCallback(\n (f: CmsModelField) => {\n parentEditor.updateField(f);\n },\n [parentEditor]\n );\n\n const addTab = useCallback(() => {\n const id = generateAlphaNumericLowerCaseId(8);\n newTabId.current = id;\n const newTab: CmsTabLayoutTab = {\n id,\n label: `Tab ${field.tabs.length + 1}`,\n layout: []\n };\n onUpdate({ ...field, tabs: [...field.tabs, newTab] });\n }, [field, onUpdate]);\n\n const handleDeleteTabs = useCallback(() => {\n showDeleteConfirmation(() => {\n onDelete();\n });\n }, [onDelete, showDeleteConfirmation]);\n\n const editTabsSettings = useCallback(() => {\n showDialog({\n title: \"Tabs Settings\",\n description: \"Configure the tabs and access permissions\",\n acceptLabel: \"Save\",\n cancelLabel: \"Cancel\",\n formData: {\n label: field.label ?? \"\",\n description: field.description ?? \"\",\n help: field.help ?? \"\",\n rules: field.rules ?? []\n },\n content: <TabsDialogContent fieldOptions={fieldOptions} />,\n onAccept: data => {\n onUpdate({\n ...field,\n label: data.label ?? \"\",\n description: data.description || null,\n help: data.help || null,\n rules: data.rules ?? []\n });\n }\n });\n }, [field, onUpdate]);\n\n const resolvedParentFields = getAllParentFields();\n\n return (\n <div>\n <div className={\"flex justify-between\"}>\n <div className={\"flex flex-col\"}>\n <div className={\"flex flex-row items-center\"}>\n <Heading level={6} className={\"text-nowrap\"}>\n {field.label || \"No label\"}\n </Heading>\n </div>\n <Text size=\"sm\" className={\"flex w-full text-neutral-strong\"}>\n Tabs\n </Text>\n </div>\n <div className={\"flex items-center gap-xs\"}>\n <IconButton\n icon={<EditIcon />}\n onClick={editTabsSettings}\n variant={\"ghost\"}\n size={\"sm\"}\n />\n <IconButton\n icon={<DeleteIcon />}\n onClick={handleDeleteTabs}\n variant={\"ghost\"}\n size={\"sm\"}\n />\n </div>\n </div>\n {field.tabs.length > 0 && (\n <Accordion>\n {field.tabs.map((tab, index) => (\n <TabItem\n key={tab.id}\n tab={tab}\n index={index}\n totalTabs={field.tabs.length}\n field={field}\n parentFields={resolvedParentFields}\n onUpdate={onUpdate}\n onInsertField={handleInsertField}\n onRemoveField={handleRemoveField}\n onUpdateField={handleUpdateField}\n />\n ))}\n </Accordion>\n )}\n <div className={\"mt-sm flex justify-center\"}>\n <Button onClick={addTab} text={\"Add Tab\"} icon={<AddIcon />} size={\"sm\"} />\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const uiAlertField:
|
|
1
|
+
import type { CmsModelLayoutFieldTypePlugin } from "@webiny/app-headless-cms-common/types/index.js";
|
|
2
|
+
export declare const uiAlertField: CmsModelLayoutFieldTypePlugin;
|
|
@@ -3,11 +3,11 @@ import { ReactComponent as AlertIcon } from "@webiny/icons/warning.svg";
|
|
|
3
3
|
import { ReactComponent as EditIcon } from "@webiny/icons/edit.svg";
|
|
4
4
|
import { ReactComponent as DeleteIcon } from "@webiny/icons/delete.svg";
|
|
5
5
|
import { i18n } from "@webiny/app/i18n/index.js";
|
|
6
|
-
import { Alert, Grid, IconButton, Tabs, Textarea, Select, Text } from "@webiny/admin-ui";
|
|
6
|
+
import { Alert, Grid, IconButton, Tabs, Textarea, Select, Text, ScrollArea } from "@webiny/admin-ui";
|
|
7
7
|
import { useDialogs } from "@webiny/app-admin";
|
|
8
8
|
import { Bind } from "@webiny/form";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { PermissionsEditor } from "../../../components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.js";
|
|
10
|
+
import { RulesEditor } from "../../../components/FieldEditor/EditFieldDialog/RulesEditor/RulesEditor.js";
|
|
11
11
|
import { useModelEditor } from "../../../components/ContentModelEditor/useModelEditor.js";
|
|
12
12
|
const t = i18n.ns("app-headless-cms/admin/fields");
|
|
13
13
|
const AlertSettings = () => {
|
|
@@ -45,7 +45,9 @@ const AlertSettings = () => {
|
|
|
45
45
|
const AlertDialogContent = ({
|
|
46
46
|
fieldOptions
|
|
47
47
|
}) => {
|
|
48
|
-
return /*#__PURE__*/React.createElement(
|
|
48
|
+
return /*#__PURE__*/React.createElement(ScrollArea, {
|
|
49
|
+
className: "max-h-[70vh] flex flex-col"
|
|
50
|
+
}, /*#__PURE__*/React.createElement(Tabs, {
|
|
49
51
|
size: "md",
|
|
50
52
|
separator: true,
|
|
51
53
|
tabs: [/*#__PURE__*/React.createElement(Tabs.Tab, {
|
|
@@ -57,22 +59,23 @@ const AlertDialogContent = ({
|
|
|
57
59
|
key: "permissions",
|
|
58
60
|
trigger: "Permissions",
|
|
59
61
|
value: "permissions",
|
|
60
|
-
content: /*#__PURE__*/React.createElement(
|
|
61
|
-
|
|
62
|
-
})
|
|
62
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
63
|
+
className: "mt-md"
|
|
64
|
+
}, /*#__PURE__*/React.createElement(PermissionsEditor, null))
|
|
63
65
|
}), /*#__PURE__*/React.createElement(Tabs.Tab, {
|
|
64
66
|
key: "rules",
|
|
65
67
|
trigger: "Rules",
|
|
66
68
|
value: "rules",
|
|
67
|
-
content: /*#__PURE__*/React.createElement(
|
|
68
|
-
|
|
69
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
70
|
+
className: "mt-md"
|
|
71
|
+
}, /*#__PURE__*/React.createElement(RulesEditor, {
|
|
69
72
|
fieldOptions: fieldOptions
|
|
70
|
-
})
|
|
73
|
+
}))
|
|
71
74
|
})]
|
|
72
|
-
});
|
|
75
|
+
}));
|
|
73
76
|
};
|
|
74
77
|
const AlertLayoutCell = ({
|
|
75
|
-
|
|
78
|
+
field,
|
|
76
79
|
onUpdate,
|
|
77
80
|
onDelete
|
|
78
81
|
}) => {
|
|
@@ -87,16 +90,16 @@ const AlertLayoutCell = ({
|
|
|
87
90
|
acceptLabel: "Save",
|
|
88
91
|
cancelLabel: "Cancel",
|
|
89
92
|
formData: {
|
|
90
|
-
label:
|
|
91
|
-
alertType:
|
|
92
|
-
rules:
|
|
93
|
+
label: field.label,
|
|
94
|
+
alertType: field.alertType,
|
|
95
|
+
rules: field.rules ?? []
|
|
93
96
|
},
|
|
94
97
|
content: /*#__PURE__*/React.createElement(AlertDialogContent, {
|
|
95
98
|
fieldOptions: fieldOptions
|
|
96
99
|
}),
|
|
97
100
|
onAccept: data => {
|
|
98
101
|
onUpdate({
|
|
99
|
-
...
|
|
102
|
+
...field,
|
|
100
103
|
label: data.label ?? "",
|
|
101
104
|
alertType: data.alertType ?? "info",
|
|
102
105
|
rules: data.rules ?? []
|
|
@@ -108,9 +111,9 @@ const AlertLayoutCell = ({
|
|
|
108
111
|
className: "flex items-center justify-between"
|
|
109
112
|
}, /*#__PURE__*/React.createElement("div", {
|
|
110
113
|
className: "flex-1"
|
|
111
|
-
},
|
|
112
|
-
type:
|
|
113
|
-
},
|
|
114
|
+
}, field.label ? /*#__PURE__*/React.createElement(Alert, {
|
|
115
|
+
type: field.alertType
|
|
116
|
+
}, field.label) : /*#__PURE__*/React.createElement(Text, {
|
|
114
117
|
size: "sm",
|
|
115
118
|
className: "text-neutral-strong italic"
|
|
116
119
|
}, "Alert (no message set)")), /*#__PURE__*/React.createElement("div", {
|
|
@@ -136,7 +139,7 @@ export const uiAlertField = {
|
|
|
136
139
|
description: t`Show an alert message in the form.`,
|
|
137
140
|
icon: /*#__PURE__*/React.createElement(AlertIcon, null),
|
|
138
141
|
canEditSettings: true,
|
|
139
|
-
|
|
142
|
+
createField() {
|
|
140
143
|
return {
|
|
141
144
|
type: "alert",
|
|
142
145
|
label: "",
|
|
@@ -144,12 +147,12 @@ export const uiAlertField = {
|
|
|
144
147
|
};
|
|
145
148
|
},
|
|
146
149
|
render({
|
|
147
|
-
|
|
150
|
+
field,
|
|
148
151
|
onUpdate,
|
|
149
152
|
onDelete
|
|
150
153
|
}) {
|
|
151
154
|
return /*#__PURE__*/React.createElement(AlertLayoutCell, {
|
|
152
|
-
|
|
155
|
+
field: field,
|
|
153
156
|
onUpdate: onUpdate,
|
|
154
157
|
onDelete: onDelete
|
|
155
158
|
});
|