@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.
Files changed (132) hide show
  1. package/admin/components/ContentEntryForm/CustomLayout.js +2 -13
  2. package/admin/components/ContentEntryForm/CustomLayout.js.map +1 -1
  3. package/admin/components/ContentModelEditor/ContentModelEditorProvider.js.map +1 -1
  4. package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
  5. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js +4 -4
  6. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js.map +1 -1
  7. package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/FieldPermissionsSelection.js +5 -8
  8. package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/FieldPermissionsSelection.js.map +1 -0
  9. package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.d.ts +2 -0
  10. package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab/PermissionsTab.js → PermissionsEditor/PermissionsEditor.js} +4 -10
  11. package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.js.map +1 -0
  12. package/admin/components/FieldEditor/EditFieldDialog/{RulesTab/RulesTab.d.ts → RulesEditor/RulesEditor.d.ts} +1 -2
  13. package/admin/components/FieldEditor/EditFieldDialog/{RulesTab/RulesTab.js → RulesEditor/RulesEditor.js} +3 -6
  14. package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/RulesEditor.js.map +1 -0
  15. package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.d.ts +1 -0
  16. package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.js +3 -0
  17. package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.js.map +1 -0
  18. package/admin/components/FieldEditor/EditFieldDialog/getValidators.d.ts +3 -3
  19. package/admin/components/FieldEditor/EditFieldDialog/getValidators.js.map +1 -1
  20. package/admin/components/FieldEditor/FieldEditor.js +10 -10
  21. package/admin/components/FieldEditor/FieldEditor.js.map +1 -1
  22. package/admin/components/FieldEditor/FieldEditorContext.d.ts +11 -11
  23. package/admin/components/FieldEditor/FieldEditorContext.js +41 -41
  24. package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
  25. package/admin/components/FieldEditor/LayoutCell.d.ts +3 -3
  26. package/admin/components/FieldEditor/LayoutCell.js +6 -6
  27. package/admin/components/FieldEditor/LayoutCell.js.map +1 -1
  28. package/admin/hooks/useCms.d.ts +1 -1
  29. package/admin/hooks/useCms.js +1 -1
  30. package/admin/hooks/useCms.js.map +1 -1
  31. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +2 -2
  32. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
  33. package/admin/plugins/fieldRenderers/checkboxes.js +2 -2
  34. package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
  35. package/admin/plugins/fieldRenderers/dateTime/Input.js +2 -2
  36. package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
  37. package/admin/plugins/fieldRenderers/dateTime/Select.js +2 -2
  38. package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
  39. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js +2 -2
  40. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js.map +1 -1
  41. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js +2 -2
  42. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js.map +1 -1
  43. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js +2 -2
  44. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js.map +1 -1
  45. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js +2 -2
  46. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js.map +1 -1
  47. package/admin/plugins/fieldRenderers/longText/longText.js +2 -2
  48. package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
  49. package/admin/plugins/fieldRenderers/longText/longTexts.js +2 -2
  50. package/admin/plugins/fieldRenderers/longText/longTexts.js.map +1 -1
  51. package/admin/plugins/fieldRenderers/number/numberInput.js +2 -2
  52. package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
  53. package/admin/plugins/fieldRenderers/number/numberInputs.js +2 -2
  54. package/admin/plugins/fieldRenderers/number/numberInputs.js.map +1 -1
  55. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js +2 -2
  56. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js.map +1 -1
  57. package/admin/plugins/fieldRenderers/radioButtons.js +2 -2
  58. package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
  59. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js +2 -2
  60. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js.map +1 -1
  61. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js +2 -2
  62. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js.map +1 -1
  63. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +2 -2
  64. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
  65. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js +2 -2
  66. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js.map +1 -1
  67. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js +2 -2
  68. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js.map +1 -1
  69. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js +2 -2
  70. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js.map +1 -1
  71. package/admin/plugins/fieldRenderers/select.js +2 -2
  72. package/admin/plugins/fieldRenderers/select.js.map +1 -1
  73. package/admin/plugins/fieldRenderers/text/tags.js +2 -2
  74. package/admin/plugins/fieldRenderers/text/tags.js.map +1 -1
  75. package/admin/plugins/fieldRenderers/text/textInput.js +2 -2
  76. package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
  77. package/admin/plugins/fieldRenderers/text/textInputs.js +2 -2
  78. package/admin/plugins/fieldRenderers/text/textInputs.js.map +1 -1
  79. package/admin/plugins/fields/ui/TabsLayoutEditor.d.ts +4 -4
  80. package/admin/plugins/fields/ui/TabsLayoutEditor.js +65 -61
  81. package/admin/plugins/fields/ui/TabsLayoutEditor.js.map +1 -1
  82. package/admin/plugins/fields/ui/alert.d.ts +2 -2
  83. package/admin/plugins/fields/ui/alert.js +25 -22
  84. package/admin/plugins/fields/ui/alert.js.map +1 -1
  85. package/admin/plugins/fields/ui/separator.d.ts +2 -2
  86. package/admin/plugins/fields/ui/separator.js +24 -21
  87. package/admin/plugins/fields/ui/separator.js.map +1 -1
  88. package/admin/plugins/fields/ui/tabs.d.ts +2 -2
  89. package/admin/plugins/fields/ui/tabs.js +10 -10
  90. package/admin/plugins/fields/ui/tabs.js.map +1 -1
  91. package/admin/views/contentModels/importing/ImportContentModelsDialog.js +15 -13
  92. package/admin/views/contentModels/importing/ImportContentModelsDialog.js.map +1 -1
  93. package/allPlugins.d.ts +1 -1
  94. package/exports/admin/cms/model.d.ts +2 -1
  95. package/exports/admin/cms/model.js +2 -1
  96. package/exports/admin/cms/model.js.map +1 -1
  97. package/exports/admin/cms.d.ts +7 -0
  98. package/exports/admin/cms.js +7 -0
  99. package/exports/admin/cms.js.map +1 -1
  100. package/legacyPluginAdapters/CmsContentFormRenderer.d.ts +4 -0
  101. package/legacyPluginAdapters/CmsContentFormRenderer.js +15 -0
  102. package/legacyPluginAdapters/CmsContentFormRenderer.js.map +1 -0
  103. package/legacyPluginAdapters/CmsModelFieldRenderer.d.ts +4 -0
  104. package/legacyPluginAdapters/CmsModelFieldRenderer.js +14 -0
  105. package/legacyPluginAdapters/CmsModelFieldRenderer.js.map +1 -0
  106. package/legacyPluginAdapters/CmsModelFieldType.d.ts +4 -0
  107. package/legacyPluginAdapters/CmsModelFieldType.js +14 -0
  108. package/legacyPluginAdapters/CmsModelFieldType.js.map +1 -0
  109. package/legacyPluginAdapters/CmsModelFieldValidator.d.ts +4 -0
  110. package/legacyPluginAdapters/CmsModelFieldValidator.js +14 -0
  111. package/legacyPluginAdapters/CmsModelFieldValidator.js.map +1 -0
  112. package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.d.ts +13 -0
  113. package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.js +15 -0
  114. package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.js.map +1 -0
  115. package/legacyPluginAdapters/CmsModelLayoutFieldType.d.ts +2 -0
  116. package/legacyPluginAdapters/CmsModelLayoutFieldType.js +14 -0
  117. package/legacyPluginAdapters/CmsModelLayoutFieldType.js.map +1 -0
  118. package/package.json +24 -24
  119. package/types.d.ts +1 -1
  120. package/types.js +1 -1
  121. package/types.js.map +1 -1
  122. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.js.map +0 -1
  123. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.d.ts +0 -4
  124. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js.map +0 -1
  125. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js.map +0 -1
  126. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.d.ts +0 -1
  127. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js +0 -3
  128. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js.map +0 -1
  129. /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.d.ts +0 -0
  130. /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.js +0 -0
  131. /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.js.map +0 -0
  132. /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 { PermissionsTab } from "../../../components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js";
22
- import { RulesTab } from "../../../components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js";
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(Tabs, {
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(PermissionsTab, {
63
- gridClassName: "mt-md"
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(RulesTab, {
70
- gridClassName: "mt-md",
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(PermissionsTab, {
109
- gridClassName: "mt-md"
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(RulesTab, {
116
- gridClassName: "mt-md",
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
- descriptor,
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 descriptor
208
- const updatedTabs = [...descriptor.tabs];
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
- ...descriptor,
218
+ ...field,
215
219
  tabs: updatedTabs
216
220
  });
217
- }, [tab, index, descriptor, tabFields, onUpdate, onInsertField, onRemoveField, onUpdateField]);
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 = [...descriptor.tabs];
226
+ const tabs = [...field.tabs];
223
227
  [tabs[index - 1], tabs[index]] = [tabs[index], tabs[index - 1]];
224
228
  onUpdate({
225
- ...descriptor,
229
+ ...field,
226
230
  tabs
227
231
  });
228
- }, [descriptor, index, isFirst, onUpdate]);
232
+ }, [field, index, isFirst, onUpdate]);
229
233
  const moveTabDown = useCallback(() => {
230
234
  if (isLast) {
231
235
  return;
232
236
  }
233
- const tabs = [...descriptor.tabs];
237
+ const tabs = [...field.tabs];
234
238
  [tabs[index + 1], tabs[index]] = [tabs[index], tabs[index + 1]];
235
239
  onUpdate({
236
- ...descriptor,
240
+ ...field,
237
241
  tabs
238
242
  });
239
- }, [descriptor, index, isLast, onUpdate]);
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 = descriptor.tabs.filter((_, i) => i !== index);
254
+ const tabs = field.tabs.filter((_, i) => i !== index);
251
255
  onUpdate({
252
- ...descriptor,
256
+ ...field,
253
257
  tabs
254
258
  });
255
259
  });
256
- }, [descriptor, index, tab, onUpdate, onRemoveField, showConfirmation]);
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 = [...descriptor.tabs];
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
- ...descriptor,
284
+ ...field,
281
285
  tabs: updatedTabs
282
286
  });
283
287
  }
284
288
  });
285
- }, [dialogs, descriptor, index, tab, onUpdate]);
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
- descriptor,
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 descriptor from the parent's fields
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 descriptor
344
+ // Collect all field IDs that exist in any tab of this field
341
345
  const allFieldIds = new Set();
342
- for (const tab of descriptor.tabs) {
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 field = parentEditor.getField({
359
+ const f = parentEditor.getField({
356
360
  id
357
361
  });
358
- if (field) {
359
- resolved.push(field);
362
+ if (f) {
363
+ resolved.push(f);
360
364
  }
361
365
  }
362
366
  return resolved;
363
- }, [descriptor, parentEditor]);
364
- const handleInsertField = useCallback(field => {
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: field.id
371
+ id: f.id
368
372
  });
369
373
  if (!existingField) {
370
- parentEditor.addField(field);
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(field => {
378
- parentEditor.updateField(field);
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 ${descriptor.tabs.length + 1}`,
389
+ label: `Tab ${field.tabs.length + 1}`,
386
390
  layout: []
387
391
  };
388
392
  onUpdate({
389
- ...descriptor,
390
- tabs: [...descriptor.tabs, newTab]
393
+ ...field,
394
+ tabs: [...field.tabs, newTab]
391
395
  });
392
- }, [descriptor, onUpdate]);
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: descriptor.label ?? "",
406
- description: descriptor.description ?? "",
407
- help: descriptor.help ?? "",
408
- rules: descriptor.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
- ...descriptor,
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
- }, [descriptor, onUpdate]);
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
- }, descriptor.label || "No label")), /*#__PURE__*/React.createElement(Text, {
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
- }))), descriptor.tabs.length > 0 && /*#__PURE__*/React.createElement(Accordion, null, descriptor.tabs.map((tab, index) => /*#__PURE__*/React.createElement(TabItem, {
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: descriptor.tabs.length,
454
- descriptor: descriptor,
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 { CmsLayoutFieldTypePlugin } from "@webiny/app-headless-cms-common/types/index.js";
2
- export declare const uiAlertField: CmsLayoutFieldTypePlugin;
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 { PermissionsTab } from "../../../components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js";
10
- import { RulesTab } from "../../../components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js";
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(Tabs, {
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(PermissionsTab, {
61
- gridClassName: "mt-md"
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(RulesTab, {
68
- gridClassName: "mt-md",
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
- descriptor,
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: descriptor.label,
91
- alertType: descriptor.alertType,
92
- rules: descriptor.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
- ...descriptor,
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
- }, descriptor.label ? /*#__PURE__*/React.createElement(Alert, {
112
- type: descriptor.alertType
113
- }, descriptor.label) : /*#__PURE__*/React.createElement(Text, {
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
- createDescriptor() {
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
- descriptor,
150
+ field,
148
151
  onUpdate,
149
152
  onDelete
150
153
  }) {
151
154
  return /*#__PURE__*/React.createElement(AlertLayoutCell, {
152
- descriptor: descriptor,
155
+ field: field,
153
156
  onUpdate: onUpdate,
154
157
  onDelete: onDelete
155
158
  });