@webiny/app-headless-cms 6.0.0-rc.3 → 6.0.0-rc.5
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/CmsModelFieldRenderer.d.ts +4 -0
- package/admin/components/CmsModelFieldRenderer.js +14 -0
- package/admin/components/CmsModelFieldRenderer.js.map +1 -0
- package/admin/components/CmsModelFieldType.d.ts +4 -0
- package/admin/components/CmsModelFieldType.js +14 -0
- package/admin/components/CmsModelFieldType.js.map +1 -0
- package/admin/components/CmsModelLayoutFieldRenderer.d.ts +13 -0
- package/admin/components/CmsModelLayoutFieldRenderer.js +15 -0
- package/admin/components/CmsModelLayoutFieldRenderer.js.map +1 -0
- package/admin/components/CmsModelLayoutFieldType.d.ts +2 -0
- package/admin/components/CmsModelLayoutFieldType.js +14 -0
- package/admin/components/CmsModelLayoutFieldType.js.map +1 -0
- package/admin/components/ContentModelEditor/ContentModelEditorProvider.js.map +1 -1
- package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
- 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/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 +44 -44
- 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 +11 -11
- 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 +10 -10
- 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/allPlugins.d.ts +1 -1
- package/exports/admin/cms/{fieldRenderers/dynamicZone.js → field-renderers/dynamic-zone.js} +1 -1
- package/exports/admin/cms/field-renderers/dynamic-zone.js.map +1 -0
- package/exports/admin/cms.d.ts +4 -0
- package/exports/admin/cms.js +4 -0
- package/exports/admin/cms.js.map +1 -1
- package/package.json +23 -23
- package/types.d.ts +1 -1
- package/types.js +1 -1
- package/types.js.map +1 -1
- package/exports/admin/cms/fieldRenderers/dynamicZone.js.map +0 -1
- /package/exports/admin/cms/{fieldRenderers/dynamicZone.d.ts → field-renderers/dynamic-zone.d.ts} +0 -0
- /package/exports/admin/cms/{fieldRenderers → field-renderers}/object.d.ts +0 -0
- /package/exports/admin/cms/{fieldRenderers → field-renderers}/object.js +0 -0
- /package/exports/admin/cms/{fieldRenderers → field-renderers}/object.js.map +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useCallback, useState } from "react";
|
|
2
2
|
import dot from "dot-prop-immutable";
|
|
3
3
|
import useDeepCompareEffect from "use-deep-compare-effect";
|
|
4
|
-
import {
|
|
4
|
+
import { isLayoutField } from "@webiny/app-headless-cms-common/types/model.js";
|
|
5
5
|
import { plugins } from "@webiny/plugins";
|
|
6
6
|
import * as utils from "./utils/index.js";
|
|
7
7
|
import { useModelFieldEditor } from "./useModelFieldEditor.js";
|
|
@@ -106,18 +106,18 @@ export const FieldEditorProvider = ({
|
|
|
106
106
|
if (!plugin) {
|
|
107
107
|
return null;
|
|
108
108
|
}
|
|
109
|
-
const
|
|
110
|
-
insertLayoutCell(
|
|
109
|
+
const layoutField = plugin.field.createField();
|
|
110
|
+
insertLayoutCell(layoutField, dropTarget);
|
|
111
111
|
return null;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
// Handle moving an existing layout field to a new position
|
|
115
115
|
if (type === "layoutField") {
|
|
116
|
-
if (source.
|
|
116
|
+
if (source.layoutField) {
|
|
117
117
|
if (parentId !== source.parent) {
|
|
118
|
-
// Cross-parent: insert a copy of the
|
|
119
|
-
insertLayoutCell(source.
|
|
120
|
-
// Also add any fields carried by this
|
|
118
|
+
// Cross-parent: insert a copy of the layout field into this context
|
|
119
|
+
insertLayoutCell(source.layoutField, dropTarget);
|
|
120
|
+
// Also add any fields carried by this layout field (e.g. fields inside tabs)
|
|
121
121
|
if (fields.length > 0) {
|
|
122
122
|
for (const f of fields) {
|
|
123
123
|
addField(f);
|
|
@@ -125,7 +125,7 @@ export const FieldEditorProvider = ({
|
|
|
125
125
|
}
|
|
126
126
|
} else {
|
|
127
127
|
// Same parent: move within this context
|
|
128
|
-
moveLayoutCell(source.
|
|
128
|
+
moveLayoutCell(source.layoutField.id, dropTarget);
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
return onDropTarget;
|
|
@@ -177,7 +177,7 @@ export const FieldEditorProvider = ({
|
|
|
177
177
|
type,
|
|
178
178
|
field,
|
|
179
179
|
fields,
|
|
180
|
-
|
|
180
|
+
layoutField
|
|
181
181
|
}, monitor) => {
|
|
182
182
|
if (!monitor.didDrop()) {
|
|
183
183
|
return;
|
|
@@ -189,18 +189,18 @@ export const FieldEditorProvider = ({
|
|
|
189
189
|
if (monitorResult?.dropTarget === parentId) {
|
|
190
190
|
return;
|
|
191
191
|
}
|
|
192
|
-
if (type === "layoutField" &&
|
|
193
|
-
deleteLayoutCell(
|
|
192
|
+
if (type === "layoutField" && layoutField?.id) {
|
|
193
|
+
deleteLayoutCell(layoutField.id);
|
|
194
194
|
return;
|
|
195
195
|
}
|
|
196
196
|
const removeFields = type === "row" ? fields || [] : field ? [field] : [];
|
|
197
197
|
removeFields.forEach(field => deleteField(field));
|
|
198
198
|
};
|
|
199
199
|
const getFieldsInLayout = () => {
|
|
200
|
-
// Replace every field ID with actual field object, pass through layout
|
|
200
|
+
// Replace every field ID with actual field object, pass through layout fields.
|
|
201
201
|
return state.layout.filter(arr => arr.length).map(row => {
|
|
202
202
|
return row.map(cell => {
|
|
203
|
-
if (
|
|
203
|
+
if (isLayoutField(cell)) {
|
|
204
204
|
return cell;
|
|
205
205
|
}
|
|
206
206
|
return getField({
|
|
@@ -362,12 +362,12 @@ export const FieldEditorProvider = ({
|
|
|
362
362
|
};
|
|
363
363
|
|
|
364
364
|
/**
|
|
365
|
-
* Insert a layout
|
|
365
|
+
* Insert a layout field into the layout at the given position.
|
|
366
366
|
*/
|
|
367
|
-
const insertLayoutCell = (
|
|
368
|
-
// Auto-assign a unique ID to the
|
|
367
|
+
const insertLayoutCell = (layoutField, position) => {
|
|
368
|
+
// Auto-assign a unique ID to the layout field.
|
|
369
369
|
const cell = {
|
|
370
|
-
...
|
|
370
|
+
...layoutField,
|
|
371
371
|
id: generateAlphaNumericLowerCaseId(8)
|
|
372
372
|
};
|
|
373
373
|
setState(prev => {
|
|
@@ -386,15 +386,15 @@ export const FieldEditorProvider = ({
|
|
|
386
386
|
};
|
|
387
387
|
|
|
388
388
|
/**
|
|
389
|
-
* Update a layout
|
|
389
|
+
* Update a layout field found by its ID.
|
|
390
390
|
*/
|
|
391
|
-
const updateLayoutCell = (
|
|
391
|
+
const updateLayoutCell = (fieldId, layoutField) => {
|
|
392
392
|
setState(prev => {
|
|
393
393
|
const newLayout = prev.layout.map(row => row.map(cell => {
|
|
394
|
-
if (
|
|
394
|
+
if (isLayoutField(cell) && cell.id === fieldId) {
|
|
395
395
|
return {
|
|
396
|
-
...
|
|
397
|
-
id:
|
|
396
|
+
...layoutField,
|
|
397
|
+
id: fieldId
|
|
398
398
|
};
|
|
399
399
|
}
|
|
400
400
|
return cell;
|
|
@@ -407,20 +407,20 @@ export const FieldEditorProvider = ({
|
|
|
407
407
|
};
|
|
408
408
|
|
|
409
409
|
/**
|
|
410
|
-
* Delete a layout
|
|
411
|
-
* If it's a tabs
|
|
410
|
+
* Delete a layout field found by its ID.
|
|
411
|
+
* If it's a tabs layout field, also remove all hoisted fields from the fields array.
|
|
412
412
|
*/
|
|
413
|
-
const deleteLayoutCell =
|
|
413
|
+
const deleteLayoutCell = fieldId => {
|
|
414
414
|
setState(prev => {
|
|
415
415
|
let fields = prev.fields;
|
|
416
416
|
|
|
417
417
|
// Find the descriptor to check if it's tabs (need to clean up hoisted fields)
|
|
418
418
|
for (const row of prev.layout) {
|
|
419
419
|
for (const cell of row) {
|
|
420
|
-
if (
|
|
421
|
-
const
|
|
420
|
+
if (isLayoutField(cell) && cell.id === fieldId && cell.type === "tabs") {
|
|
421
|
+
const tabsField = cell;
|
|
422
422
|
const fieldIdsInTabs = new Set();
|
|
423
|
-
|
|
423
|
+
tabsField.tabs.forEach(tab => {
|
|
424
424
|
tab.layout.forEach(r => {
|
|
425
425
|
r.forEach(c => {
|
|
426
426
|
if (typeof c === "string") {
|
|
@@ -435,7 +435,7 @@ export const FieldEditorProvider = ({
|
|
|
435
435
|
}
|
|
436
436
|
}
|
|
437
437
|
}
|
|
438
|
-
const newLayout = prev.layout.map(row => row.filter(cell => !(
|
|
438
|
+
const newLayout = prev.layout.map(row => row.filter(cell => !(isLayoutField(cell) && cell.id === fieldId)));
|
|
439
439
|
return {
|
|
440
440
|
...prev,
|
|
441
441
|
fields,
|
|
@@ -445,31 +445,31 @@ export const FieldEditorProvider = ({
|
|
|
445
445
|
};
|
|
446
446
|
|
|
447
447
|
/**
|
|
448
|
-
* Move a layout
|
|
448
|
+
* Move a layout field (found by its ID) to a new position.
|
|
449
449
|
*/
|
|
450
|
-
const moveLayoutCell = (
|
|
450
|
+
const moveLayoutCell = (fieldId, position) => {
|
|
451
451
|
setState(prev => {
|
|
452
|
-
// Find the
|
|
453
|
-
let
|
|
452
|
+
// Find the layout field by ID.
|
|
453
|
+
let layoutField;
|
|
454
454
|
let sourceRow = -1;
|
|
455
455
|
for (let ri = 0; ri < prev.layout.length; ri++) {
|
|
456
456
|
for (const cell of prev.layout[ri]) {
|
|
457
|
-
if (
|
|
458
|
-
|
|
457
|
+
if (isLayoutField(cell) && cell.id === fieldId) {
|
|
458
|
+
layoutField = cell;
|
|
459
459
|
sourceRow = ri;
|
|
460
460
|
break;
|
|
461
461
|
}
|
|
462
462
|
}
|
|
463
|
-
if (
|
|
463
|
+
if (layoutField) {
|
|
464
464
|
break;
|
|
465
465
|
}
|
|
466
466
|
}
|
|
467
|
-
if (!
|
|
467
|
+
if (!layoutField || sourceRow === -1) {
|
|
468
468
|
return prev;
|
|
469
469
|
}
|
|
470
470
|
|
|
471
|
-
// 1. Remove the
|
|
472
|
-
const withoutSource = prev.layout.map(row => row.filter(cell => !(
|
|
471
|
+
// 1. Remove the layout field from its source position.
|
|
472
|
+
const withoutSource = prev.layout.map(row => row.filter(cell => !(isLayoutField(cell) && cell.id === fieldId)));
|
|
473
473
|
|
|
474
474
|
// 2. Was the source row emptied?
|
|
475
475
|
const sourceRowEmptied = withoutSource[sourceRow].length === 0;
|
|
@@ -485,9 +485,9 @@ export const FieldEditorProvider = ({
|
|
|
485
485
|
// 4. Remove empty rows.
|
|
486
486
|
const cleaned = withoutSource.filter(r => r.length > 0);
|
|
487
487
|
|
|
488
|
-
// 5. Clamp target row and insert the
|
|
488
|
+
// 5. Clamp target row and insert the layout field as its own row.
|
|
489
489
|
targetRow = Math.max(0, Math.min(targetRow, cleaned.length));
|
|
490
|
-
cleaned.splice(targetRow, 0, [
|
|
490
|
+
cleaned.splice(targetRow, 0, [layoutField]);
|
|
491
491
|
return {
|
|
492
492
|
...prev,
|
|
493
493
|
layout: cleaned
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useState","dot","useDeepCompareEffect","isLayoutDescriptor","plugins","utils","useModelFieldEditor","generateAlphaNumericLowerCaseId","FieldEditorContext","createContext","undefined","maxGenerateIdIterations","generateFieldId","layout","id","iteration","includes","Error","FieldEditorProvider","parent","fields","onChange","children","depth","parentEditorContext","editor","state","setState","field","dropTarget","row","index","editField","onDropTarget","fieldId","onFieldDrop","source","pos","type","fieldType","parentId","forEach","insertField","position","moveRow","plugin","getLayoutFieldPlugin","layoutFieldType","descriptor","createDescriptor","insertLayoutCell","length","f","addField","moveLayoutCell","moveField","getFieldPlugin","fieldData","createField","canEditSettings","onEndDrag","monitor","didDrop","monitorResult","getDropResult","deleteLayoutCell","removeFields","deleteField","getFieldsInLayout","filter","arr","map","cell","getField","Boolean","byType","find","getFieldRendererPlugin","name","renderer","rendererName","query","key","flat","c","fieldPlugin","prev","next","concat","data","destination","updateField","i","set","some","removeField","newLayout","splice","r","updateLayoutCell","descriptorId","tabsDescriptor","fieldIdsInTabs","Set","tabs","tab","add","size","has","sourceRow","ri","withoutSource","sourceRowEmptied","targetRow","cleaned","Math","max","min","noConflict","isVisible","item","sameParent","draggedFields","push","join","value","createElement","Provider"],"sources":["FieldEditorContext.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport dot from \"dot-prop-immutable\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport type {\n CmsEditorFieldId,\n CmsEditorFieldRendererPlugin,\n CmsEditorFieldsLayout,\n CmsEditorFieldTypePlugin,\n CmsLayoutFieldTypePlugin,\n CmsModelField,\n DragSource,\n FieldLayoutPosition\n} from \"~/types.js\";\nimport type {\n CmsLayoutDescriptor,\n CmsEditorLayoutCell\n} from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { isLayoutDescriptor } from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { plugins } from \"@webiny/plugins\";\nimport * as utils from \"./utils/index.js\";\nimport type { FieldEditorProps } from \"./FieldEditor.js\";\nimport type { DragSourceMonitor } from \"react-dnd\";\nimport { useModelFieldEditor } from \"~/admin/components/FieldEditor/useModelFieldEditor.js\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\nimport type { DragObject } from \"../Droppable.js\";\n\ninterface DropTarget {\n row: number;\n index: number | null;\n}\n\n/**\n * Property in GetFieldParams can be any key from CmsEditorField, but TS does not allow union types\n */\ninterface GetFieldParams {\n id?: string;\n fieldId?: string;\n}\ninterface InsertFieldParams {\n field: CmsModelField;\n position: FieldLayoutPosition;\n}\ninterface AddFieldCallable {\n (field: CmsModelField): void;\n}\ninterface RemoveFieldCallable {\n (fieldId: string): void;\n}\ninterface MoveFieldParams {\n field: CmsEditorFieldId | CmsModelField;\n position: FieldLayoutPosition;\n}\ninterface GetFieldsInLayoutCallable {\n (): (CmsModelField | CmsLayoutDescriptor)[][];\n}\ninterface InsertLayoutCellCallable {\n (\n descriptor: Omit<CmsLayoutDescriptor, \"id\"> | CmsLayoutDescriptor,\n position: FieldLayoutPosition\n ): void;\n}\ninterface UpdateLayoutCellCallable {\n (descriptorId: string, descriptor: CmsLayoutDescriptor): void;\n}\ninterface DeleteLayoutCellCallable {\n (descriptorId: string): void;\n}\ninterface MoveLayoutCellCallable {\n (descriptorId: string, position: FieldLayoutPosition): void;\n}\ninterface GetLayoutFieldPluginCallable {\n (type: string): CmsLayoutFieldTypePlugin | undefined;\n}\ninterface GetFieldPluginCallable {\n (type: string): CmsEditorFieldTypePlugin | undefined;\n}\ninterface GetFieldCallable {\n (query: GetFieldParams): CmsModelField | undefined;\n}\ninterface GetFieldRendererCallable {\n (rendererName: string): CmsEditorFieldRendererPlugin | undefined;\n}\ninterface OnFieldDropCallable {\n (source: Partial<DragSource>, target: DropTarget): void;\n}\ninterface InsertFieldCallable {\n (params: InsertFieldParams): void;\n}\ninterface MoveFieldCallable {\n (params: MoveFieldParams): void;\n}\ninterface OnEndDragCallable<DragObject = unknown, DropResult = unknown> {\n (item: DragSource, monitor: DragSourceMonitor<DragObject, DropResult>): void;\n}\ninterface MoveRowCallable {\n (source: number, destination: number): void;\n}\ninterface UpdateFieldCallable {\n (field: CmsModelField): void;\n}\ninterface DeleteFieldCallable {\n (field: Pick<CmsModelField, \"id\">): void;\n}\nexport interface IsVisibleCallable {\n (item: DragSource): boolean;\n}\ninterface NoConflictCallable {\n (cb?: IsVisibleCallable): (item: DragSource) => boolean;\n}\nexport interface FieldEditorContext {\n fields: (CmsModelField | CmsLayoutDescriptor)[][];\n noConflict: NoConflictCallable;\n layout: CmsEditorFieldsLayout;\n onChange?: (data: any) => void;\n getFieldsInLayout: GetFieldsInLayoutCallable;\n getFieldPlugin: GetFieldPluginCallable;\n getField: GetFieldCallable;\n getFieldRendererPlugin: GetFieldRendererCallable;\n editField: (field: CmsModelField | null) => void;\n field: CmsModelField | null;\n parent?: CmsModelField;\n parentEditorContext?: FieldEditorContext;\n depth: number;\n dropTarget: DropTarget;\n onFieldDrop: OnFieldDropCallable;\n onEndDrag: OnEndDragCallable;\n insertField: InsertFieldCallable;\n moveField: MoveFieldCallable;\n moveRow: MoveRowCallable;\n updateField: UpdateFieldCallable;\n deleteField: DeleteFieldCallable;\n insertLayoutCell: InsertLayoutCellCallable;\n updateLayoutCell: UpdateLayoutCellCallable;\n deleteLayoutCell: DeleteLayoutCellCallable;\n moveLayoutCell: MoveLayoutCellCallable;\n getLayoutFieldPlugin: GetLayoutFieldPluginCallable;\n addField: AddFieldCallable;\n removeField: RemoveFieldCallable;\n}\n\ninterface FieldEditorProviderProps extends FieldEditorProps {\n children: React.ReactElement;\n}\n\ntype DropResult = {\n dropTarget: string | null;\n};\n\nexport const FieldEditorContext = React.createContext<FieldEditorContext | undefined>(undefined);\n/**\n * We try to generate the random id string but with the check that it does not exist already.\n * Chances that the same string exists are quite small, but let's check it anyway.\n *\n * In most cases, there will be no iterations anyway...\n */\nconst maxGenerateIdIterations = 100;\nconst generateFieldId = (layout: string[]): string => {\n let id = generateAlphaNumericLowerCaseId(8);\n\n let iteration = 0;\n while (layout.includes(id) && iteration < maxGenerateIdIterations) {\n id = generateAlphaNumericLowerCaseId(8);\n iteration++;\n }\n if (iteration >= maxGenerateIdIterations) {\n throw new Error(`Could not generate field ID in ${maxGenerateIdIterations} iterations.`);\n }\n return id;\n};\n\ninterface State {\n layout: CmsEditorFieldsLayout;\n fields: CmsModelField[];\n field: CmsModelField | null;\n dropTarget: DropTarget;\n}\nexport const FieldEditorProvider = ({\n parent,\n fields,\n layout,\n onChange,\n children\n}: FieldEditorProviderProps) => {\n // We need to determine depth of this provider so we can render drop zones with correct z-indexes.\n let depth = 0;\n let parentEditorContext: FieldEditorContext | undefined;\n try {\n const editor = useModelFieldEditor();\n depth = editor.depth + 1;\n parentEditorContext = editor;\n } catch {\n // There's no parent provider, so this is the top-level one.\n }\n\n const [state, setState] = useState<State>({\n layout,\n fields,\n field: null,\n dropTarget: {\n row: -1,\n index: null\n }\n });\n\n useDeepCompareEffect(() => {\n onChange({ fields: state.fields, layout: state.layout });\n }, [state.fields, state.layout]);\n\n const editField = useCallback((field: CmsModelField | null) => {\n setState(state => ({ ...state, field }));\n }, []);\n\n const onDropTarget = {\n dropTarget: parent ? parent.fieldId : null\n };\n\n const onFieldDrop = useCallback<OnFieldDropCallable>((source, dropTarget) => {\n const { pos, type, fieldType, field, fields = [] } = source;\n\n const parentId = parent ? parent.fieldId : null;\n\n if (type === \"row\") {\n if (parentId !== source.parent) {\n // We're dragging an existing row from another fieldset\n fields.forEach((field, index) => {\n insertField({\n field,\n position: {\n row: dropTarget.row,\n index: index === 0 ? null : index\n }\n });\n });\n } else if (pos && pos.row !== undefined) {\n // We're dragging a row within the same fieldset\n moveRow(pos.row, dropTarget.row);\n }\n\n return onDropTarget;\n }\n\n // Handle new layout field drops (separator, alert, tabs, etc.)\n if (type === \"newLayoutField\") {\n const plugin = getLayoutFieldPlugin(source.layoutFieldType || \"\");\n if (!plugin) {\n return null;\n }\n const descriptor = plugin.field.createDescriptor();\n insertLayoutCell(descriptor, dropTarget);\n return null;\n }\n\n // Handle moving an existing layout field to a new position\n if (type === \"layoutField\") {\n if (source.descriptor) {\n if (parentId !== source.parent) {\n // Cross-parent: insert a copy of the descriptor into this context\n insertLayoutCell(source.descriptor, dropTarget);\n // Also add any fields carried by this descriptor (e.g. fields inside tabs)\n if (fields.length > 0) {\n for (const f of fields) {\n addField(f);\n }\n }\n } else {\n // Same parent: move within this context\n moveLayoutCell(source.descriptor.id, dropTarget);\n }\n }\n return onDropTarget;\n }\n\n // If source pos is set, we are moving an existing field.\n if (pos) {\n if (!field) {\n return onDropTarget;\n }\n if (parentId !== source.parent) {\n // We're dragging an existing field from another fieldset\n insertField({ field, position: dropTarget });\n } else {\n // We're dragging a field within the same fieldset\n moveField({ field, position: dropTarget });\n }\n return onDropTarget;\n }\n\n if (!fieldType) {\n return null;\n }\n const plugin = getFieldPlugin(fieldType);\n if (!plugin) {\n return null;\n }\n\n const fieldData = plugin.field.createField() as CmsModelField;\n\n if (plugin.field.canEditSettings !== false) {\n editField(fieldData);\n setState(state => ({\n ...state,\n dropTarget\n }));\n } else {\n insertField({ field: fieldData, position: dropTarget });\n }\n return null;\n }, []);\n\n const onEndDrag: OnEndDragCallable<DragObject, DropResult> = (\n { type, field, fields, descriptor },\n monitor\n ) => {\n if (!monitor.didDrop()) {\n return;\n }\n\n // Check if we dropped outside of the source fieldset, and if yes, remove the item from the original parent.\n const monitorResult = monitor.getDropResult();\n const parentId = parent ? parent.fieldId : null;\n if (monitorResult?.dropTarget === parentId) {\n return;\n }\n\n if (type === \"layoutField\" && descriptor?.id) {\n deleteLayoutCell(descriptor.id);\n return;\n }\n\n const removeFields = type === \"row\" ? fields || [] : field ? [field] : [];\n removeFields.forEach(field => deleteField(field));\n };\n\n const getFieldsInLayout: GetFieldsInLayoutCallable = () => {\n // Replace every field ID with actual field object, pass through layout descriptors.\n return state.layout\n .filter(arr => arr.length)\n .map(row => {\n return row\n .map((cell: CmsEditorLayoutCell) => {\n if (isLayoutDescriptor(cell)) {\n return cell;\n }\n return getField({ id: cell });\n })\n .filter(Boolean);\n })\n .filter(row => {\n return row.length > 0;\n }) as (CmsModelField | CmsLayoutDescriptor)[][];\n };\n\n /**\n * Return field plugin.\n */\n const getFieldPlugin: GetFieldPluginCallable = type => {\n return plugins\n .byType<CmsEditorFieldTypePlugin>(\"cms-editor-field-type\")\n .find(plugin => plugin.field.type === type);\n };\n\n const getFieldRendererPlugin: GetFieldRendererCallable = name => {\n return plugins\n .byType<CmsEditorFieldRendererPlugin>(\"cms-editor-field-renderer\")\n .find(plugin => plugin.renderer.rendererName === name);\n };\n\n /**\n * Checks if field of given type already exists in the list of fields.\n */\n const getField: GetFieldCallable = query => {\n return state.fields.find(field => {\n for (const key in query) {\n if (!(key in field)) {\n return false;\n }\n\n if (field[key as keyof typeof field] !== query[key as keyof typeof query]) {\n return false;\n }\n }\n\n return true;\n });\n };\n\n /**\n * Inserts a new field into the target position.\n */\n const insertField: InsertFieldCallable = ({ field, position }) => {\n if (!field.id) {\n field.id = generateFieldId(\n layout.flat().filter((c): c is string => typeof c === \"string\")\n );\n }\n\n if (!field.type) {\n throw new Error(`Field \"type\" missing.`);\n }\n\n const fieldPlugin = getFieldPlugin(field.type);\n if (!fieldPlugin) {\n throw new Error(`No plugin found for field type \"${field.type}\".`);\n }\n\n setState(prev => {\n const next: State = {\n ...prev,\n fields: (prev.fields || []).concat(field)\n };\n\n // Move field to position where it was dropped.\n return utils.moveField({ field, position, data: next });\n });\n };\n\n /**\n * Moves field to the given target position.\n */\n const moveField: MoveFieldCallable = ({ field, position }) => {\n setState(data => {\n return utils.moveField<State>({ field, position, data });\n });\n };\n\n /**\n * Moves row to a destination row.\n */\n const moveRow: MoveRowCallable = (source, destination) => {\n setState(data => {\n return utils.moveRow({ data, source, destination });\n });\n };\n\n /**\n * Updates field.\n */\n const updateField: UpdateFieldCallable = field => {\n setState(data => {\n for (let i = 0; i < data.fields.length; i++) {\n if (data.fields[i].id === field.id) {\n return dot.set(data, `fields.${i}`, field);\n }\n }\n return data;\n });\n };\n\n /**\n * Deletes a field (both from the list of field and the layout).\n */\n const deleteField: DeleteFieldCallable = field => {\n setState(data => {\n return utils.deleteField({ field, data });\n });\n };\n\n /**\n * Add a field to the fields array without placing it in the layout.\n * Used by tabs to hoist fields to the parent context.\n */\n const addField: AddFieldCallable = field => {\n setState(prev => {\n // Don't add if already exists\n if (prev.fields.some(f => f.id === field.id)) {\n return prev;\n }\n return { ...prev, fields: [...prev.fields, field] };\n });\n };\n\n /**\n * Remove a field from the fields array by ID.\n * Used by tabs to un-hoist fields from the parent context.\n */\n const removeField: RemoveFieldCallable = fieldId => {\n setState(prev => ({\n ...prev,\n fields: prev.fields.filter(f => f.id !== fieldId)\n }));\n };\n\n /**\n * Return layout field plugin by type.\n */\n const getLayoutFieldPlugin: GetLayoutFieldPluginCallable = type => {\n return plugins\n .byType<CmsLayoutFieldTypePlugin>(\"cms-editor-layout-field-type\")\n .find(plugin => plugin.field.type === type);\n };\n\n /**\n * Insert a layout descriptor into the layout at the given position.\n */\n const insertLayoutCell: InsertLayoutCellCallable = (descriptor, position) => {\n // Auto-assign a unique ID to the descriptor.\n const cell = {\n ...descriptor,\n id: generateAlphaNumericLowerCaseId(8)\n } as CmsLayoutDescriptor;\n\n setState(prev => {\n const newLayout = [...prev.layout.map(row => [...row])];\n const { row } = position;\n\n // Layout fields always occupy a full row.\n newLayout.splice(row, 0, [cell]);\n\n return { ...prev, layout: newLayout.filter(r => r.length > 0) };\n });\n };\n\n /**\n * Update a layout descriptor found by its ID.\n */\n const updateLayoutCell: UpdateLayoutCellCallable = (descriptorId, descriptor) => {\n setState(prev => {\n const newLayout = prev.layout.map(row =>\n row.map(cell => {\n if (isLayoutDescriptor(cell) && cell.id === descriptorId) {\n return { ...descriptor, id: descriptorId };\n }\n return cell;\n })\n );\n return { ...prev, layout: newLayout };\n });\n };\n\n /**\n * Delete a layout descriptor found by its ID.\n * If it's a tabs descriptor, also remove all hoisted fields from the fields array.\n */\n const deleteLayoutCell: DeleteLayoutCellCallable = descriptorId => {\n setState(prev => {\n let fields = prev.fields;\n\n // Find the descriptor to check if it's tabs (need to clean up hoisted fields)\n for (const row of prev.layout) {\n for (const cell of row) {\n if (\n isLayoutDescriptor(cell) &&\n cell.id === descriptorId &&\n cell.type === \"tabs\"\n ) {\n const tabsDescriptor =\n cell as import(\"@webiny/app-headless-cms-common/types/model.js\").CmsTabLayoutDescriptor;\n const fieldIdsInTabs = new Set<string>();\n tabsDescriptor.tabs.forEach(tab => {\n tab.layout.forEach(r => {\n r.forEach(c => {\n if (typeof c === \"string\") {\n fieldIdsInTabs.add(c);\n }\n });\n });\n });\n if (fieldIdsInTabs.size > 0) {\n fields = fields.filter(f => !fieldIdsInTabs.has(f.id));\n }\n }\n }\n }\n\n const newLayout = prev.layout.map(row =>\n row.filter(cell => !(isLayoutDescriptor(cell) && cell.id === descriptorId))\n );\n\n return {\n ...prev,\n fields,\n layout: newLayout.filter(r => r.length > 0)\n };\n });\n };\n\n /**\n * Move a layout descriptor (found by its ID) to a new position.\n */\n const moveLayoutCell: MoveLayoutCellCallable = (descriptorId, position) => {\n setState(prev => {\n // Find the descriptor by ID.\n let descriptor: CmsLayoutDescriptor | undefined;\n let sourceRow = -1;\n\n for (let ri = 0; ri < prev.layout.length; ri++) {\n for (const cell of prev.layout[ri]) {\n if (isLayoutDescriptor(cell) && cell.id === descriptorId) {\n descriptor = cell;\n sourceRow = ri;\n break;\n }\n }\n if (descriptor) {\n break;\n }\n }\n\n if (!descriptor || sourceRow === -1) {\n return prev;\n }\n\n // 1. Remove the descriptor from its source position.\n const withoutSource = prev.layout.map(row =>\n row.filter(cell => !(isLayoutDescriptor(cell) && cell.id === descriptorId))\n );\n\n // 2. Was the source row emptied?\n const sourceRowEmptied = withoutSource[sourceRow].length === 0;\n\n // 3. Calculate the effective target row index.\n // The drop target row was computed against the original layout.\n // If we emptied a source row that was BEFORE the target, shift down by 1.\n let targetRow = position.row;\n if (sourceRowEmptied && sourceRow < targetRow) {\n targetRow--;\n }\n\n // 4. Remove empty rows.\n const cleaned = withoutSource.filter(r => r.length > 0);\n\n // 5. Clamp target row and insert the descriptor as its own row.\n targetRow = Math.max(0, Math.min(targetRow, cleaned.length));\n cleaned.splice(targetRow, 0, [descriptor]);\n\n return { ...prev, layout: cleaned };\n });\n };\n\n const noConflict: NoConflictCallable = useCallback(\n (isVisible?: IsVisibleCallable) => item => {\n const sameParent = item.parent === onDropTarget.dropTarget;\n const draggedFields: string[] = [];\n switch (item.type) {\n case \"row\":\n (item.fields || []).forEach(field => draggedFields.push(field.fieldId));\n break;\n case \"field\":\n if (!item.field) {\n break;\n }\n draggedFields.push(item.field.fieldId);\n break;\n default:\n break;\n }\n\n if (\n draggedFields.length &&\n !sameParent &&\n fields.some(field => draggedFields.includes(field.fieldId))\n ) {\n return false;\n }\n\n return typeof isVisible === \"function\" ? isVisible(item) : true;\n },\n [fields.map(f => f.fieldId).join(\".\")]\n );\n\n const value: FieldEditorContext = {\n parent,\n parentEditorContext,\n depth,\n getFieldsInLayout,\n getFieldPlugin,\n getFieldRendererPlugin,\n getField,\n editField,\n field: state.field,\n dropTarget: state.dropTarget,\n onFieldDrop,\n onEndDrag,\n insertField,\n moveField,\n moveRow,\n updateField,\n deleteField,\n insertLayoutCell,\n updateLayoutCell,\n deleteLayoutCell,\n moveLayoutCell,\n getLayoutFieldPlugin,\n addField,\n removeField,\n fields: getFieldsInLayout(),\n noConflict,\n layout: state.layout\n };\n\n return <FieldEditorContext.Provider value={value}>{children}</FieldEditorContext.Provider>;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AACpD,OAAOC,GAAG,MAAM,oBAAoB;AACpC,OAAOC,oBAAoB,MAAM,yBAAyB;AAe1D,SAASC,kBAAkB,QAAQ,gDAAgD;AACnF,SAASC,OAAO,QAAQ,iBAAiB;AACzC,OAAO,KAAKC,KAAK;AAGjB,SAASC,mBAAmB;AAC5B,SAASC,+BAA+B,QAAQ,eAAe;;AAQ/D;AACA;AACA;;AAmHA,OAAO,MAAMC,kBAAkB,gBAAGV,KAAK,CAACW,aAAa,CAAiCC,SAAS,CAAC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,uBAAuB,GAAG,GAAG;AACnC,MAAMC,eAAe,GAAIC,MAAgB,IAAa;EAClD,IAAIC,EAAE,GAAGP,+BAA+B,CAAC,CAAC,CAAC;EAE3C,IAAIQ,SAAS,GAAG,CAAC;EACjB,OAAOF,MAAM,CAACG,QAAQ,CAACF,EAAE,CAAC,IAAIC,SAAS,GAAGJ,uBAAuB,EAAE;IAC/DG,EAAE,GAAGP,+BAA+B,CAAC,CAAC,CAAC;IACvCQ,SAAS,EAAE;EACf;EACA,IAAIA,SAAS,IAAIJ,uBAAuB,EAAE;IACtC,MAAM,IAAIM,KAAK,CAAC,kCAAkCN,uBAAuB,cAAc,CAAC;EAC5F;EACA,OAAOG,EAAE;AACb,CAAC;AAQD,OAAO,MAAMI,mBAAmB,GAAGA,CAAC;EAChCC,MAAM;EACNC,MAAM;EACNP,MAAM;EACNQ,QAAQ;EACRC;AACsB,CAAC,KAAK;EAC5B;EACA,IAAIC,KAAK,GAAG,CAAC;EACb,IAAIC,mBAAmD;EACvD,IAAI;IACA,MAAMC,MAAM,GAAGnB,mBAAmB,CAAC,CAAC;IACpCiB,KAAK,GAAGE,MAAM,CAACF,KAAK,GAAG,CAAC;IACxBC,mBAAmB,GAAGC,MAAM;EAChC,CAAC,CAAC,MAAM;IACJ;EAAA;EAGJ,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG3B,QAAQ,CAAQ;IACtCa,MAAM;IACNO,MAAM;IACNQ,KAAK,EAAE,IAAI;IACXC,UAAU,EAAE;MACRC,GAAG,EAAE,CAAC,CAAC;MACPC,KAAK,EAAE;IACX;EACJ,CAAC,CAAC;EAEF7B,oBAAoB,CAAC,MAAM;IACvBmB,QAAQ,CAAC;MAAED,MAAM,EAAEM,KAAK,CAACN,MAAM;MAAEP,MAAM,EAAEa,KAAK,CAACb;IAAO,CAAC,CAAC;EAC5D,CAAC,EAAE,CAACa,KAAK,CAACN,MAAM,EAAEM,KAAK,CAACb,MAAM,CAAC,CAAC;EAEhC,MAAMmB,SAAS,GAAGjC,WAAW,CAAE6B,KAA2B,IAAK;IAC3DD,QAAQ,CAACD,KAAK,KAAK;MAAE,GAAGA,KAAK;MAAEE;IAAM,CAAC,CAAC,CAAC;EAC5C,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMK,YAAY,GAAG;IACjBJ,UAAU,EAAEV,MAAM,GAAGA,MAAM,CAACe,OAAO,GAAG;EAC1C,CAAC;EAED,MAAMC,WAAW,GAAGpC,WAAW,CAAsB,CAACqC,MAAM,EAAEP,UAAU,KAAK;IACzE,MAAM;MAAEQ,GAAG;MAAEC,IAAI;MAAEC,SAAS;MAAEX,KAAK;MAAER,MAAM,GAAG;IAAG,CAAC,GAAGgB,MAAM;IAE3D,MAAMI,QAAQ,GAAGrB,MAAM,GAAGA,MAAM,CAACe,OAAO,GAAG,IAAI;IAE/C,IAAII,IAAI,KAAK,KAAK,EAAE;MAChB,IAAIE,QAAQ,KAAKJ,MAAM,CAACjB,MAAM,EAAE;QAC5B;QACAC,MAAM,CAACqB,OAAO,CAAC,CAACb,KAAK,EAAEG,KAAK,KAAK;UAC7BW,WAAW,CAAC;YACRd,KAAK;YACLe,QAAQ,EAAE;cACNb,GAAG,EAAED,UAAU,CAACC,GAAG;cACnBC,KAAK,EAAEA,KAAK,KAAK,CAAC,GAAG,IAAI,GAAGA;YAChC;UACJ,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,MAAM,IAAIM,GAAG,IAAIA,GAAG,CAACP,GAAG,KAAKpB,SAAS,EAAE;QACrC;QACAkC,OAAO,CAACP,GAAG,CAACP,GAAG,EAAED,UAAU,CAACC,GAAG,CAAC;MACpC;MAEA,OAAOG,YAAY;IACvB;;IAEA;IACA,IAAIK,IAAI,KAAK,gBAAgB,EAAE;MAC3B,MAAMO,MAAM,GAAGC,oBAAoB,CAACV,MAAM,CAACW,eAAe,IAAI,EAAE,CAAC;MACjE,IAAI,CAACF,MAAM,EAAE;QACT,OAAO,IAAI;MACf;MACA,MAAMG,UAAU,GAAGH,MAAM,CAACjB,KAAK,CAACqB,gBAAgB,CAAC,CAAC;MAClDC,gBAAgB,CAACF,UAAU,EAAEnB,UAAU,CAAC;MACxC,OAAO,IAAI;IACf;;IAEA;IACA,IAAIS,IAAI,KAAK,aAAa,EAAE;MACxB,IAAIF,MAAM,CAACY,UAAU,EAAE;QACnB,IAAIR,QAAQ,KAAKJ,MAAM,CAACjB,MAAM,EAAE;UAC5B;UACA+B,gBAAgB,CAACd,MAAM,CAACY,UAAU,EAAEnB,UAAU,CAAC;UAC/C;UACA,IAAIT,MAAM,CAAC+B,MAAM,GAAG,CAAC,EAAE;YACnB,KAAK,MAAMC,CAAC,IAAIhC,MAAM,EAAE;cACpBiC,QAAQ,CAACD,CAAC,CAAC;YACf;UACJ;QACJ,CAAC,MAAM;UACH;UACAE,cAAc,CAAClB,MAAM,CAACY,UAAU,CAAClC,EAAE,EAAEe,UAAU,CAAC;QACpD;MACJ;MACA,OAAOI,YAAY;IACvB;;IAEA;IACA,IAAII,GAAG,EAAE;MACL,IAAI,CAACT,KAAK,EAAE;QACR,OAAOK,YAAY;MACvB;MACA,IAAIO,QAAQ,KAAKJ,MAAM,CAACjB,MAAM,EAAE;QAC5B;QACAuB,WAAW,CAAC;UAAEd,KAAK;UAAEe,QAAQ,EAAEd;QAAW,CAAC,CAAC;MAChD,CAAC,MAAM;QACH;QACA0B,SAAS,CAAC;UAAE3B,KAAK;UAAEe,QAAQ,EAAEd;QAAW,CAAC,CAAC;MAC9C;MACA,OAAOI,YAAY;IACvB;IAEA,IAAI,CAACM,SAAS,EAAE;MACZ,OAAO,IAAI;IACf;IACA,MAAMM,MAAM,GAAGW,cAAc,CAACjB,SAAS,CAAC;IACxC,IAAI,CAACM,MAAM,EAAE;MACT,OAAO,IAAI;IACf;IAEA,MAAMY,SAAS,GAAGZ,MAAM,CAACjB,KAAK,CAAC8B,WAAW,CAAC,CAAkB;IAE7D,IAAIb,MAAM,CAACjB,KAAK,CAAC+B,eAAe,KAAK,KAAK,EAAE;MACxC3B,SAAS,CAACyB,SAAS,CAAC;MACpB9B,QAAQ,CAACD,KAAK,KAAK;QACf,GAAGA,KAAK;QACRG;MACJ,CAAC,CAAC,CAAC;IACP,CAAC,MAAM;MACHa,WAAW,CAAC;QAAEd,KAAK,EAAE6B,SAAS;QAAEd,QAAQ,EAAEd;MAAW,CAAC,CAAC;IAC3D;IACA,OAAO,IAAI;EACf,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM+B,SAAoD,GAAGA,CACzD;IAAEtB,IAAI;IAAEV,KAAK;IAAER,MAAM;IAAE4B;EAAW,CAAC,EACnCa,OAAO,KACN;IACD,IAAI,CAACA,OAAO,CAACC,OAAO,CAAC,CAAC,EAAE;MACpB;IACJ;;IAEA;IACA,MAAMC,aAAa,GAAGF,OAAO,CAACG,aAAa,CAAC,CAAC;IAC7C,MAAMxB,QAAQ,GAAGrB,MAAM,GAAGA,MAAM,CAACe,OAAO,GAAG,IAAI;IAC/C,IAAI6B,aAAa,EAAElC,UAAU,KAAKW,QAAQ,EAAE;MACxC;IACJ;IAEA,IAAIF,IAAI,KAAK,aAAa,IAAIU,UAAU,EAAElC,EAAE,EAAE;MAC1CmD,gBAAgB,CAACjB,UAAU,CAAClC,EAAE,CAAC;MAC/B;IACJ;IAEA,MAAMoD,YAAY,GAAG5B,IAAI,KAAK,KAAK,GAAGlB,MAAM,IAAI,EAAE,GAAGQ,KAAK,GAAG,CAACA,KAAK,CAAC,GAAG,EAAE;IACzEsC,YAAY,CAACzB,OAAO,CAACb,KAAK,IAAIuC,WAAW,CAACvC,KAAK,CAAC,CAAC;EACrD,CAAC;EAED,MAAMwC,iBAA4C,GAAGA,CAAA,KAAM;IACvD;IACA,OAAO1C,KAAK,CAACb,MAAM,CACdwD,MAAM,CAACC,GAAG,IAAIA,GAAG,CAACnB,MAAM,CAAC,CACzBoB,GAAG,CAACzC,GAAG,IAAI;MACR,OAAOA,GAAG,CACLyC,GAAG,CAAEC,IAAyB,IAAK;QAChC,IAAIrE,kBAAkB,CAACqE,IAAI,CAAC,EAAE;UAC1B,OAAOA,IAAI;QACf;QACA,OAAOC,QAAQ,CAAC;UAAE3D,EAAE,EAAE0D;QAAK,CAAC,CAAC;MACjC,CAAC,CAAC,CACDH,MAAM,CAACK,OAAO,CAAC;IACxB,CAAC,CAAC,CACDL,MAAM,CAACvC,GAAG,IAAI;MACX,OAAOA,GAAG,CAACqB,MAAM,GAAG,CAAC;IACzB,CAAC,CAAC;EACV,CAAC;;EAED;AACJ;AACA;EACI,MAAMK,cAAsC,GAAGlB,IAAI,IAAI;IACnD,OAAOlC,OAAO,CACTuE,MAAM,CAA2B,uBAAuB,CAAC,CACzDC,IAAI,CAAC/B,MAAM,IAAIA,MAAM,CAACjB,KAAK,CAACU,IAAI,KAAKA,IAAI,CAAC;EACnD,CAAC;EAED,MAAMuC,sBAAgD,GAAGC,IAAI,IAAI;IAC7D,OAAO1E,OAAO,CACTuE,MAAM,CAA+B,2BAA2B,CAAC,CACjEC,IAAI,CAAC/B,MAAM,IAAIA,MAAM,CAACkC,QAAQ,CAACC,YAAY,KAAKF,IAAI,CAAC;EAC9D,CAAC;;EAED;AACJ;AACA;EACI,MAAML,QAA0B,GAAGQ,KAAK,IAAI;IACxC,OAAOvD,KAAK,CAACN,MAAM,CAACwD,IAAI,CAAChD,KAAK,IAAI;MAC9B,KAAK,MAAMsD,GAAG,IAAID,KAAK,EAAE;QACrB,IAAI,EAAEC,GAAG,IAAItD,KAAK,CAAC,EAAE;UACjB,OAAO,KAAK;QAChB;QAEA,IAAIA,KAAK,CAACsD,GAAG,CAAuB,KAAKD,KAAK,CAACC,GAAG,CAAuB,EAAE;UACvE,OAAO,KAAK;QAChB;MACJ;MAEA,OAAO,IAAI;IACf,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;EACI,MAAMxC,WAAgC,GAAGA,CAAC;IAAEd,KAAK;IAAEe;EAAS,CAAC,KAAK;IAC9D,IAAI,CAACf,KAAK,CAACd,EAAE,EAAE;MACXc,KAAK,CAACd,EAAE,GAAGF,eAAe,CACtBC,MAAM,CAACsE,IAAI,CAAC,CAAC,CAACd,MAAM,CAAEe,CAAC,IAAkB,OAAOA,CAAC,KAAK,QAAQ,CAClE,CAAC;IACL;IAEA,IAAI,CAACxD,KAAK,CAACU,IAAI,EAAE;MACb,MAAM,IAAIrB,KAAK,CAAC,uBAAuB,CAAC;IAC5C;IAEA,MAAMoE,WAAW,GAAG7B,cAAc,CAAC5B,KAAK,CAACU,IAAI,CAAC;IAC9C,IAAI,CAAC+C,WAAW,EAAE;MACd,MAAM,IAAIpE,KAAK,CAAC,mCAAmCW,KAAK,CAACU,IAAI,IAAI,CAAC;IACtE;IAEAX,QAAQ,CAAC2D,IAAI,IAAI;MACb,MAAMC,IAAW,GAAG;QAChB,GAAGD,IAAI;QACPlE,MAAM,EAAE,CAACkE,IAAI,CAAClE,MAAM,IAAI,EAAE,EAAEoE,MAAM,CAAC5D,KAAK;MAC5C,CAAC;;MAED;MACA,OAAOvB,KAAK,CAACkD,SAAS,CAAC;QAAE3B,KAAK;QAAEe,QAAQ;QAAE8C,IAAI,EAAEF;MAAK,CAAC,CAAC;IAC3D,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;EACI,MAAMhC,SAA4B,GAAGA,CAAC;IAAE3B,KAAK;IAAEe;EAAS,CAAC,KAAK;IAC1DhB,QAAQ,CAAC8D,IAAI,IAAI;MACb,OAAOpF,KAAK,CAACkD,SAAS,CAAQ;QAAE3B,KAAK;QAAEe,QAAQ;QAAE8C;MAAK,CAAC,CAAC;IAC5D,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;EACI,MAAM7C,OAAwB,GAAGA,CAACR,MAAM,EAAEsD,WAAW,KAAK;IACtD/D,QAAQ,CAAC8D,IAAI,IAAI;MACb,OAAOpF,KAAK,CAACuC,OAAO,CAAC;QAAE6C,IAAI;QAAErD,MAAM;QAAEsD;MAAY,CAAC,CAAC;IACvD,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;EACI,MAAMC,WAAgC,GAAG/D,KAAK,IAAI;IAC9CD,QAAQ,CAAC8D,IAAI,IAAI;MACb,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,IAAI,CAACrE,MAAM,CAAC+B,MAAM,EAAEyC,CAAC,EAAE,EAAE;QACzC,IAAIH,IAAI,CAACrE,MAAM,CAACwE,CAAC,CAAC,CAAC9E,EAAE,KAAKc,KAAK,CAACd,EAAE,EAAE;UAChC,OAAOb,GAAG,CAAC4F,GAAG,CAACJ,IAAI,EAAE,UAAUG,CAAC,EAAE,EAAEhE,KAAK,CAAC;QAC9C;MACJ;MACA,OAAO6D,IAAI;IACf,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;EACI,MAAMtB,WAAgC,GAAGvC,KAAK,IAAI;IAC9CD,QAAQ,CAAC8D,IAAI,IAAI;MACb,OAAOpF,KAAK,CAAC8D,WAAW,CAAC;QAAEvC,KAAK;QAAE6D;MAAK,CAAC,CAAC;IAC7C,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;AACA;EACI,MAAMpC,QAA0B,GAAGzB,KAAK,IAAI;IACxCD,QAAQ,CAAC2D,IAAI,IAAI;MACb;MACA,IAAIA,IAAI,CAAClE,MAAM,CAAC0E,IAAI,CAAC1C,CAAC,IAAIA,CAAC,CAACtC,EAAE,KAAKc,KAAK,CAACd,EAAE,CAAC,EAAE;QAC1C,OAAOwE,IAAI;MACf;MACA,OAAO;QAAE,GAAGA,IAAI;QAAElE,MAAM,EAAE,CAAC,GAAGkE,IAAI,CAAClE,MAAM,EAAEQ,KAAK;MAAE,CAAC;IACvD,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;AACA;EACI,MAAMmE,WAAgC,GAAG7D,OAAO,IAAI;IAChDP,QAAQ,CAAC2D,IAAI,KAAK;MACd,GAAGA,IAAI;MACPlE,MAAM,EAAEkE,IAAI,CAAClE,MAAM,CAACiD,MAAM,CAACjB,CAAC,IAAIA,CAAC,CAACtC,EAAE,KAAKoB,OAAO;IACpD,CAAC,CAAC,CAAC;EACP,CAAC;;EAED;AACJ;AACA;EACI,MAAMY,oBAAkD,GAAGR,IAAI,IAAI;IAC/D,OAAOlC,OAAO,CACTuE,MAAM,CAA2B,8BAA8B,CAAC,CAChEC,IAAI,CAAC/B,MAAM,IAAIA,MAAM,CAACjB,KAAK,CAACU,IAAI,KAAKA,IAAI,CAAC;EACnD,CAAC;;EAED;AACJ;AACA;EACI,MAAMY,gBAA0C,GAAGA,CAACF,UAAU,EAAEL,QAAQ,KAAK;IACzE;IACA,MAAM6B,IAAI,GAAG;MACT,GAAGxB,UAAU;MACblC,EAAE,EAAEP,+BAA+B,CAAC,CAAC;IACzC,CAAwB;IAExBoB,QAAQ,CAAC2D,IAAI,IAAI;MACb,MAAMU,SAAS,GAAG,CAAC,GAAGV,IAAI,CAACzE,MAAM,CAAC0D,GAAG,CAACzC,GAAG,IAAI,CAAC,GAAGA,GAAG,CAAC,CAAC,CAAC;MACvD,MAAM;QAAEA;MAAI,CAAC,GAAGa,QAAQ;;MAExB;MACAqD,SAAS,CAACC,MAAM,CAACnE,GAAG,EAAE,CAAC,EAAE,CAAC0C,IAAI,CAAC,CAAC;MAEhC,OAAO;QAAE,GAAGc,IAAI;QAAEzE,MAAM,EAAEmF,SAAS,CAAC3B,MAAM,CAAC6B,CAAC,IAAIA,CAAC,CAAC/C,MAAM,GAAG,CAAC;MAAE,CAAC;IACnE,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;EACI,MAAMgD,gBAA0C,GAAGA,CAACC,YAAY,EAAEpD,UAAU,KAAK;IAC7ErB,QAAQ,CAAC2D,IAAI,IAAI;MACb,MAAMU,SAAS,GAAGV,IAAI,CAACzE,MAAM,CAAC0D,GAAG,CAACzC,GAAG,IACjCA,GAAG,CAACyC,GAAG,CAACC,IAAI,IAAI;QACZ,IAAIrE,kBAAkB,CAACqE,IAAI,CAAC,IAAIA,IAAI,CAAC1D,EAAE,KAAKsF,YAAY,EAAE;UACtD,OAAO;YAAE,GAAGpD,UAAU;YAAElC,EAAE,EAAEsF;UAAa,CAAC;QAC9C;QACA,OAAO5B,IAAI;MACf,CAAC,CACL,CAAC;MACD,OAAO;QAAE,GAAGc,IAAI;QAAEzE,MAAM,EAAEmF;MAAU,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;AACA;EACI,MAAM/B,gBAA0C,GAAGmC,YAAY,IAAI;IAC/DzE,QAAQ,CAAC2D,IAAI,IAAI;MACb,IAAIlE,MAAM,GAAGkE,IAAI,CAAClE,MAAM;;MAExB;MACA,KAAK,MAAMU,GAAG,IAAIwD,IAAI,CAACzE,MAAM,EAAE;QAC3B,KAAK,MAAM2D,IAAI,IAAI1C,GAAG,EAAE;UACpB,IACI3B,kBAAkB,CAACqE,IAAI,CAAC,IACxBA,IAAI,CAAC1D,EAAE,KAAKsF,YAAY,IACxB5B,IAAI,CAAClC,IAAI,KAAK,MAAM,EACtB;YACE,MAAM+D,cAAc,GAChB7B,IAAuF;YAC3F,MAAM8B,cAAc,GAAG,IAAIC,GAAG,CAAS,CAAC;YACxCF,cAAc,CAACG,IAAI,CAAC/D,OAAO,CAACgE,GAAG,IAAI;cAC/BA,GAAG,CAAC5F,MAAM,CAAC4B,OAAO,CAACyD,CAAC,IAAI;gBACpBA,CAAC,CAACzD,OAAO,CAAC2C,CAAC,IAAI;kBACX,IAAI,OAAOA,CAAC,KAAK,QAAQ,EAAE;oBACvBkB,cAAc,CAACI,GAAG,CAACtB,CAAC,CAAC;kBACzB;gBACJ,CAAC,CAAC;cACN,CAAC,CAAC;YACN,CAAC,CAAC;YACF,IAAIkB,cAAc,CAACK,IAAI,GAAG,CAAC,EAAE;cACzBvF,MAAM,GAAGA,MAAM,CAACiD,MAAM,CAACjB,CAAC,IAAI,CAACkD,cAAc,CAACM,GAAG,CAACxD,CAAC,CAACtC,EAAE,CAAC,CAAC;YAC1D;UACJ;QACJ;MACJ;MAEA,MAAMkF,SAAS,GAAGV,IAAI,CAACzE,MAAM,CAAC0D,GAAG,CAACzC,GAAG,IACjCA,GAAG,CAACuC,MAAM,CAACG,IAAI,IAAI,EAAErE,kBAAkB,CAACqE,IAAI,CAAC,IAAIA,IAAI,CAAC1D,EAAE,KAAKsF,YAAY,CAAC,CAC9E,CAAC;MAED,OAAO;QACH,GAAGd,IAAI;QACPlE,MAAM;QACNP,MAAM,EAAEmF,SAAS,CAAC3B,MAAM,CAAC6B,CAAC,IAAIA,CAAC,CAAC/C,MAAM,GAAG,CAAC;MAC9C,CAAC;IACL,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;EACI,MAAMG,cAAsC,GAAGA,CAAC8C,YAAY,EAAEzD,QAAQ,KAAK;IACvEhB,QAAQ,CAAC2D,IAAI,IAAI;MACb;MACA,IAAItC,UAA2C;MAC/C,IAAI6D,SAAS,GAAG,CAAC,CAAC;MAElB,KAAK,IAAIC,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGxB,IAAI,CAACzE,MAAM,CAACsC,MAAM,EAAE2D,EAAE,EAAE,EAAE;QAC5C,KAAK,MAAMtC,IAAI,IAAIc,IAAI,CAACzE,MAAM,CAACiG,EAAE,CAAC,EAAE;UAChC,IAAI3G,kBAAkB,CAACqE,IAAI,CAAC,IAAIA,IAAI,CAAC1D,EAAE,KAAKsF,YAAY,EAAE;YACtDpD,UAAU,GAAGwB,IAAI;YACjBqC,SAAS,GAAGC,EAAE;YACd;UACJ;QACJ;QACA,IAAI9D,UAAU,EAAE;UACZ;QACJ;MACJ;MAEA,IAAI,CAACA,UAAU,IAAI6D,SAAS,KAAK,CAAC,CAAC,EAAE;QACjC,OAAOvB,IAAI;MACf;;MAEA;MACA,MAAMyB,aAAa,GAAGzB,IAAI,CAACzE,MAAM,CAAC0D,GAAG,CAACzC,GAAG,IACrCA,GAAG,CAACuC,MAAM,CAACG,IAAI,IAAI,EAAErE,kBAAkB,CAACqE,IAAI,CAAC,IAAIA,IAAI,CAAC1D,EAAE,KAAKsF,YAAY,CAAC,CAC9E,CAAC;;MAED;MACA,MAAMY,gBAAgB,GAAGD,aAAa,CAACF,SAAS,CAAC,CAAC1D,MAAM,KAAK,CAAC;;MAE9D;MACA;MACA;MACA,IAAI8D,SAAS,GAAGtE,QAAQ,CAACb,GAAG;MAC5B,IAAIkF,gBAAgB,IAAIH,SAAS,GAAGI,SAAS,EAAE;QAC3CA,SAAS,EAAE;MACf;;MAEA;MACA,MAAMC,OAAO,GAAGH,aAAa,CAAC1C,MAAM,CAAC6B,CAAC,IAAIA,CAAC,CAAC/C,MAAM,GAAG,CAAC,CAAC;;MAEvD;MACA8D,SAAS,GAAGE,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAACJ,SAAS,EAAEC,OAAO,CAAC/D,MAAM,CAAC,CAAC;MAC5D+D,OAAO,CAACjB,MAAM,CAACgB,SAAS,EAAE,CAAC,EAAE,CAACjE,UAAU,CAAC,CAAC;MAE1C,OAAO;QAAE,GAAGsC,IAAI;QAAEzE,MAAM,EAAEqG;MAAQ,CAAC;IACvC,CAAC,CAAC;EACN,CAAC;EAED,MAAMI,UAA8B,GAAGvH,WAAW,CAC7CwH,SAA6B,IAAKC,IAAI,IAAI;IACvC,MAAMC,UAAU,GAAGD,IAAI,CAACrG,MAAM,KAAKc,YAAY,CAACJ,UAAU;IAC1D,MAAM6F,aAAuB,GAAG,EAAE;IAClC,QAAQF,IAAI,CAAClF,IAAI;MACb,KAAK,KAAK;QACN,CAACkF,IAAI,CAACpG,MAAM,IAAI,EAAE,EAAEqB,OAAO,CAACb,KAAK,IAAI8F,aAAa,CAACC,IAAI,CAAC/F,KAAK,CAACM,OAAO,CAAC,CAAC;QACvE;MACJ,KAAK,OAAO;QACR,IAAI,CAACsF,IAAI,CAAC5F,KAAK,EAAE;UACb;QACJ;QACA8F,aAAa,CAACC,IAAI,CAACH,IAAI,CAAC5F,KAAK,CAACM,OAAO,CAAC;QACtC;MACJ;QACI;IACR;IAEA,IACIwF,aAAa,CAACvE,MAAM,IACpB,CAACsE,UAAU,IACXrG,MAAM,CAAC0E,IAAI,CAAClE,KAAK,IAAI8F,aAAa,CAAC1G,QAAQ,CAACY,KAAK,CAACM,OAAO,CAAC,CAAC,EAC7D;MACE,OAAO,KAAK;IAChB;IAEA,OAAO,OAAOqF,SAAS,KAAK,UAAU,GAAGA,SAAS,CAACC,IAAI,CAAC,GAAG,IAAI;EACnE,CAAC,EACD,CAACpG,MAAM,CAACmD,GAAG,CAACnB,CAAC,IAAIA,CAAC,CAAClB,OAAO,CAAC,CAAC0F,IAAI,CAAC,GAAG,CAAC,CACzC,CAAC;EAED,MAAMC,KAAyB,GAAG;IAC9B1G,MAAM;IACNK,mBAAmB;IACnBD,KAAK;IACL6C,iBAAiB;IACjBZ,cAAc;IACdqB,sBAAsB;IACtBJ,QAAQ;IACRzC,SAAS;IACTJ,KAAK,EAAEF,KAAK,CAACE,KAAK;IAClBC,UAAU,EAAEH,KAAK,CAACG,UAAU;IAC5BM,WAAW;IACXyB,SAAS;IACTlB,WAAW;IACXa,SAAS;IACTX,OAAO;IACP+C,WAAW;IACXxB,WAAW;IACXjB,gBAAgB;IAChBiD,gBAAgB;IAChBlC,gBAAgB;IAChBX,cAAc;IACdR,oBAAoB;IACpBO,QAAQ;IACR0C,WAAW;IACX3E,MAAM,EAAEgD,iBAAiB,CAAC,CAAC;IAC3BkD,UAAU;IACVzG,MAAM,EAAEa,KAAK,CAACb;EAClB,CAAC;EAED,oBAAOf,KAAA,CAAAgI,aAAA,CAACtH,kBAAkB,CAACuH,QAAQ;IAACF,KAAK,EAAEA;EAAM,GAAEvG,QAAsC,CAAC;AAC9F,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useCallback","useState","dot","useDeepCompareEffect","isLayoutField","plugins","utils","useModelFieldEditor","generateAlphaNumericLowerCaseId","FieldEditorContext","createContext","undefined","maxGenerateIdIterations","generateFieldId","layout","id","iteration","includes","Error","FieldEditorProvider","parent","fields","onChange","children","depth","parentEditorContext","editor","state","setState","field","dropTarget","row","index","editField","onDropTarget","fieldId","onFieldDrop","source","pos","type","fieldType","parentId","forEach","insertField","position","moveRow","plugin","getLayoutFieldPlugin","layoutFieldType","layoutField","createField","insertLayoutCell","length","f","addField","moveLayoutCell","moveField","getFieldPlugin","fieldData","canEditSettings","onEndDrag","monitor","didDrop","monitorResult","getDropResult","deleteLayoutCell","removeFields","deleteField","getFieldsInLayout","filter","arr","map","cell","getField","Boolean","byType","find","getFieldRendererPlugin","name","renderer","rendererName","query","key","flat","c","fieldPlugin","prev","next","concat","data","destination","updateField","i","set","some","removeField","newLayout","splice","r","updateLayoutCell","tabsField","fieldIdsInTabs","Set","tabs","tab","add","size","has","sourceRow","ri","withoutSource","sourceRowEmptied","targetRow","cleaned","Math","max","min","noConflict","isVisible","item","sameParent","draggedFields","push","join","value","createElement","Provider"],"sources":["FieldEditorContext.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport dot from \"dot-prop-immutable\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport type {\n CmsEditorFieldId,\n CmsModelFieldRendererPlugin,\n CmsEditorFieldsLayout,\n CmsModelFieldTypePlugin,\n CmsModelLayoutFieldTypePlugin,\n CmsModelField,\n DragSource,\n FieldLayoutPosition\n} from \"~/types.js\";\nimport type {\n CmsLayoutField,\n CmsEditorLayoutCell\n} from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { isLayoutField } from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { plugins } from \"@webiny/plugins\";\nimport * as utils from \"./utils/index.js\";\nimport type { FieldEditorProps } from \"./FieldEditor.js\";\nimport type { DragSourceMonitor } from \"react-dnd\";\nimport { useModelFieldEditor } from \"~/admin/components/FieldEditor/useModelFieldEditor.js\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\nimport type { DragObject } from \"../Droppable.js\";\n\ninterface DropTarget {\n row: number;\n index: number | null;\n}\n\n/**\n * Property in GetFieldParams can be any key from CmsEditorField, but TS does not allow union types\n */\ninterface GetFieldParams {\n id?: string;\n fieldId?: string;\n}\ninterface InsertFieldParams {\n field: CmsModelField;\n position: FieldLayoutPosition;\n}\ninterface AddFieldCallable {\n (field: CmsModelField): void;\n}\ninterface RemoveFieldCallable {\n (fieldId: string): void;\n}\ninterface MoveFieldParams {\n field: CmsEditorFieldId | CmsModelField;\n position: FieldLayoutPosition;\n}\ninterface GetFieldsInLayoutCallable {\n (): (CmsModelField | CmsLayoutField)[][];\n}\ninterface InsertLayoutCellCallable {\n (field: Omit<CmsLayoutField, \"id\"> | CmsLayoutField, position: FieldLayoutPosition): void;\n}\ninterface UpdateLayoutCellCallable {\n (fieldId: string, field: CmsLayoutField): void;\n}\ninterface DeleteLayoutCellCallable {\n (fieldId: string): void;\n}\ninterface MoveLayoutCellCallable {\n (fieldId: string, position: FieldLayoutPosition): void;\n}\ninterface GetLayoutFieldPluginCallable {\n (type: string): CmsModelLayoutFieldTypePlugin | undefined;\n}\ninterface GetFieldPluginCallable {\n (type: string): CmsModelFieldTypePlugin | undefined;\n}\ninterface GetFieldCallable {\n (query: GetFieldParams): CmsModelField | undefined;\n}\ninterface GetFieldRendererCallable {\n (rendererName: string): CmsModelFieldRendererPlugin | undefined;\n}\ninterface OnFieldDropCallable {\n (source: Partial<DragSource>, target: DropTarget): void;\n}\ninterface InsertFieldCallable {\n (params: InsertFieldParams): void;\n}\ninterface MoveFieldCallable {\n (params: MoveFieldParams): void;\n}\ninterface OnEndDragCallable<DragObject = unknown, DropResult = unknown> {\n (item: DragSource, monitor: DragSourceMonitor<DragObject, DropResult>): void;\n}\ninterface MoveRowCallable {\n (source: number, destination: number): void;\n}\ninterface UpdateFieldCallable {\n (field: CmsModelField): void;\n}\ninterface DeleteFieldCallable {\n (field: Pick<CmsModelField, \"id\">): void;\n}\nexport interface IsVisibleCallable {\n (item: DragSource): boolean;\n}\ninterface NoConflictCallable {\n (cb?: IsVisibleCallable): (item: DragSource) => boolean;\n}\nexport interface FieldEditorContext {\n fields: (CmsModelField | CmsLayoutField)[][];\n noConflict: NoConflictCallable;\n layout: CmsEditorFieldsLayout;\n onChange?: (data: any) => void;\n getFieldsInLayout: GetFieldsInLayoutCallable;\n getFieldPlugin: GetFieldPluginCallable;\n getField: GetFieldCallable;\n getFieldRendererPlugin: GetFieldRendererCallable;\n editField: (field: CmsModelField | null) => void;\n field: CmsModelField | null;\n parent?: CmsModelField;\n parentEditorContext?: FieldEditorContext;\n depth: number;\n dropTarget: DropTarget;\n onFieldDrop: OnFieldDropCallable;\n onEndDrag: OnEndDragCallable;\n insertField: InsertFieldCallable;\n moveField: MoveFieldCallable;\n moveRow: MoveRowCallable;\n updateField: UpdateFieldCallable;\n deleteField: DeleteFieldCallable;\n insertLayoutCell: InsertLayoutCellCallable;\n updateLayoutCell: UpdateLayoutCellCallable;\n deleteLayoutCell: DeleteLayoutCellCallable;\n moveLayoutCell: MoveLayoutCellCallable;\n getLayoutFieldPlugin: GetLayoutFieldPluginCallable;\n addField: AddFieldCallable;\n removeField: RemoveFieldCallable;\n}\n\ninterface FieldEditorProviderProps extends FieldEditorProps {\n children: React.ReactElement;\n}\n\ntype DropResult = {\n dropTarget: string | null;\n};\n\nexport const FieldEditorContext = React.createContext<FieldEditorContext | undefined>(undefined);\n/**\n * We try to generate the random id string but with the check that it does not exist already.\n * Chances that the same string exists are quite small, but let's check it anyway.\n *\n * In most cases, there will be no iterations anyway...\n */\nconst maxGenerateIdIterations = 100;\nconst generateFieldId = (layout: string[]): string => {\n let id = generateAlphaNumericLowerCaseId(8);\n\n let iteration = 0;\n while (layout.includes(id) && iteration < maxGenerateIdIterations) {\n id = generateAlphaNumericLowerCaseId(8);\n iteration++;\n }\n if (iteration >= maxGenerateIdIterations) {\n throw new Error(`Could not generate field ID in ${maxGenerateIdIterations} iterations.`);\n }\n return id;\n};\n\ninterface State {\n layout: CmsEditorFieldsLayout;\n fields: CmsModelField[];\n field: CmsModelField | null;\n dropTarget: DropTarget;\n}\nexport const FieldEditorProvider = ({\n parent,\n fields,\n layout,\n onChange,\n children\n}: FieldEditorProviderProps) => {\n // We need to determine depth of this provider so we can render drop zones with correct z-indexes.\n let depth = 0;\n let parentEditorContext: FieldEditorContext | undefined;\n try {\n const editor = useModelFieldEditor();\n depth = editor.depth + 1;\n parentEditorContext = editor;\n } catch {\n // There's no parent provider, so this is the top-level one.\n }\n\n const [state, setState] = useState<State>({\n layout,\n fields,\n field: null,\n dropTarget: {\n row: -1,\n index: null\n }\n });\n\n useDeepCompareEffect(() => {\n onChange({ fields: state.fields, layout: state.layout });\n }, [state.fields, state.layout]);\n\n const editField = useCallback((field: CmsModelField | null) => {\n setState(state => ({ ...state, field }));\n }, []);\n\n const onDropTarget = {\n dropTarget: parent ? parent.fieldId : null\n };\n\n const onFieldDrop = useCallback<OnFieldDropCallable>((source, dropTarget) => {\n const { pos, type, fieldType, field, fields = [] } = source;\n\n const parentId = parent ? parent.fieldId : null;\n\n if (type === \"row\") {\n if (parentId !== source.parent) {\n // We're dragging an existing row from another fieldset\n fields.forEach((field, index) => {\n insertField({\n field,\n position: {\n row: dropTarget.row,\n index: index === 0 ? null : index\n }\n });\n });\n } else if (pos && pos.row !== undefined) {\n // We're dragging a row within the same fieldset\n moveRow(pos.row, dropTarget.row);\n }\n\n return onDropTarget;\n }\n\n // Handle new layout field drops (separator, alert, tabs, etc.)\n if (type === \"newLayoutField\") {\n const plugin = getLayoutFieldPlugin(source.layoutFieldType || \"\");\n if (!plugin) {\n return null;\n }\n const layoutField = plugin.field.createField();\n insertLayoutCell(layoutField, dropTarget);\n return null;\n }\n\n // Handle moving an existing layout field to a new position\n if (type === \"layoutField\") {\n if (source.layoutField) {\n if (parentId !== source.parent) {\n // Cross-parent: insert a copy of the layout field into this context\n insertLayoutCell(source.layoutField, dropTarget);\n // Also add any fields carried by this layout field (e.g. fields inside tabs)\n if (fields.length > 0) {\n for (const f of fields) {\n addField(f);\n }\n }\n } else {\n // Same parent: move within this context\n moveLayoutCell(source.layoutField.id, dropTarget);\n }\n }\n return onDropTarget;\n }\n\n // If source pos is set, we are moving an existing field.\n if (pos) {\n if (!field) {\n return onDropTarget;\n }\n if (parentId !== source.parent) {\n // We're dragging an existing field from another fieldset\n insertField({ field, position: dropTarget });\n } else {\n // We're dragging a field within the same fieldset\n moveField({ field, position: dropTarget });\n }\n return onDropTarget;\n }\n\n if (!fieldType) {\n return null;\n }\n const plugin = getFieldPlugin(fieldType);\n if (!plugin) {\n return null;\n }\n\n const fieldData = plugin.field.createField() as CmsModelField;\n\n if (plugin.field.canEditSettings !== false) {\n editField(fieldData);\n setState(state => ({\n ...state,\n dropTarget\n }));\n } else {\n insertField({ field: fieldData, position: dropTarget });\n }\n return null;\n }, []);\n\n const onEndDrag: OnEndDragCallable<DragObject, DropResult> = (\n { type, field, fields, layoutField },\n monitor\n ) => {\n if (!monitor.didDrop()) {\n return;\n }\n\n // Check if we dropped outside of the source fieldset, and if yes, remove the item from the original parent.\n const monitorResult = monitor.getDropResult();\n const parentId = parent ? parent.fieldId : null;\n if (monitorResult?.dropTarget === parentId) {\n return;\n }\n\n if (type === \"layoutField\" && layoutField?.id) {\n deleteLayoutCell(layoutField.id);\n return;\n }\n\n const removeFields = type === \"row\" ? fields || [] : field ? [field] : [];\n removeFields.forEach(field => deleteField(field));\n };\n\n const getFieldsInLayout: GetFieldsInLayoutCallable = () => {\n // Replace every field ID with actual field object, pass through layout fields.\n return state.layout\n .filter(arr => arr.length)\n .map(row => {\n return row\n .map((cell: CmsEditorLayoutCell) => {\n if (isLayoutField(cell)) {\n return cell;\n }\n return getField({ id: cell });\n })\n .filter(Boolean);\n })\n .filter(row => {\n return row.length > 0;\n }) as (CmsModelField | CmsLayoutField)[][];\n };\n\n /**\n * Return field plugin.\n */\n const getFieldPlugin: GetFieldPluginCallable = type => {\n return plugins\n .byType<CmsModelFieldTypePlugin>(\"cms-editor-field-type\")\n .find(plugin => plugin.field.type === type);\n };\n\n const getFieldRendererPlugin: GetFieldRendererCallable = name => {\n return plugins\n .byType<CmsModelFieldRendererPlugin>(\"cms-editor-field-renderer\")\n .find(plugin => plugin.renderer.rendererName === name);\n };\n\n /**\n * Checks if field of given type already exists in the list of fields.\n */\n const getField: GetFieldCallable = query => {\n return state.fields.find(field => {\n for (const key in query) {\n if (!(key in field)) {\n return false;\n }\n\n if (field[key as keyof typeof field] !== query[key as keyof typeof query]) {\n return false;\n }\n }\n\n return true;\n });\n };\n\n /**\n * Inserts a new field into the target position.\n */\n const insertField: InsertFieldCallable = ({ field, position }) => {\n if (!field.id) {\n field.id = generateFieldId(\n layout.flat().filter((c): c is string => typeof c === \"string\")\n );\n }\n\n if (!field.type) {\n throw new Error(`Field \"type\" missing.`);\n }\n\n const fieldPlugin = getFieldPlugin(field.type);\n if (!fieldPlugin) {\n throw new Error(`No plugin found for field type \"${field.type}\".`);\n }\n\n setState(prev => {\n const next: State = {\n ...prev,\n fields: (prev.fields || []).concat(field)\n };\n\n // Move field to position where it was dropped.\n return utils.moveField({ field, position, data: next });\n });\n };\n\n /**\n * Moves field to the given target position.\n */\n const moveField: MoveFieldCallable = ({ field, position }) => {\n setState(data => {\n return utils.moveField<State>({ field, position, data });\n });\n };\n\n /**\n * Moves row to a destination row.\n */\n const moveRow: MoveRowCallable = (source, destination) => {\n setState(data => {\n return utils.moveRow({ data, source, destination });\n });\n };\n\n /**\n * Updates field.\n */\n const updateField: UpdateFieldCallable = field => {\n setState(data => {\n for (let i = 0; i < data.fields.length; i++) {\n if (data.fields[i].id === field.id) {\n return dot.set(data, `fields.${i}`, field);\n }\n }\n return data;\n });\n };\n\n /**\n * Deletes a field (both from the list of field and the layout).\n */\n const deleteField: DeleteFieldCallable = field => {\n setState(data => {\n return utils.deleteField({ field, data });\n });\n };\n\n /**\n * Add a field to the fields array without placing it in the layout.\n * Used by tabs to hoist fields to the parent context.\n */\n const addField: AddFieldCallable = field => {\n setState(prev => {\n // Don't add if already exists\n if (prev.fields.some(f => f.id === field.id)) {\n return prev;\n }\n return { ...prev, fields: [...prev.fields, field] };\n });\n };\n\n /**\n * Remove a field from the fields array by ID.\n * Used by tabs to un-hoist fields from the parent context.\n */\n const removeField: RemoveFieldCallable = fieldId => {\n setState(prev => ({\n ...prev,\n fields: prev.fields.filter(f => f.id !== fieldId)\n }));\n };\n\n /**\n * Return layout field plugin by type.\n */\n const getLayoutFieldPlugin: GetLayoutFieldPluginCallable = type => {\n return plugins\n .byType<CmsModelLayoutFieldTypePlugin>(\"cms-editor-layout-field-type\")\n .find(plugin => plugin.field.type === type);\n };\n\n /**\n * Insert a layout field into the layout at the given position.\n */\n const insertLayoutCell: InsertLayoutCellCallable = (layoutField, position) => {\n // Auto-assign a unique ID to the layout field.\n const cell = {\n ...layoutField,\n id: generateAlphaNumericLowerCaseId(8)\n } as CmsLayoutField;\n\n setState(prev => {\n const newLayout = [...prev.layout.map(row => [...row])];\n const { row } = position;\n\n // Layout fields always occupy a full row.\n newLayout.splice(row, 0, [cell]);\n\n return { ...prev, layout: newLayout.filter(r => r.length > 0) };\n });\n };\n\n /**\n * Update a layout field found by its ID.\n */\n const updateLayoutCell: UpdateLayoutCellCallable = (fieldId, layoutField) => {\n setState(prev => {\n const newLayout = prev.layout.map(row =>\n row.map(cell => {\n if (isLayoutField(cell) && cell.id === fieldId) {\n return { ...layoutField, id: fieldId };\n }\n return cell;\n })\n );\n return { ...prev, layout: newLayout };\n });\n };\n\n /**\n * Delete a layout field found by its ID.\n * If it's a tabs layout field, also remove all hoisted fields from the fields array.\n */\n const deleteLayoutCell: DeleteLayoutCellCallable = fieldId => {\n setState(prev => {\n let fields = prev.fields;\n\n // Find the descriptor to check if it's tabs (need to clean up hoisted fields)\n for (const row of prev.layout) {\n for (const cell of row) {\n if (isLayoutField(cell) && cell.id === fieldId && cell.type === \"tabs\") {\n const tabsField =\n cell as import(\"@webiny/app-headless-cms-common/types/model.js\").CmsTabLayoutField;\n const fieldIdsInTabs = new Set<string>();\n tabsField.tabs.forEach(tab => {\n tab.layout.forEach(r => {\n r.forEach(c => {\n if (typeof c === \"string\") {\n fieldIdsInTabs.add(c);\n }\n });\n });\n });\n if (fieldIdsInTabs.size > 0) {\n fields = fields.filter(f => !fieldIdsInTabs.has(f.id));\n }\n }\n }\n }\n\n const newLayout = prev.layout.map(row =>\n row.filter(cell => !(isLayoutField(cell) && cell.id === fieldId))\n );\n\n return {\n ...prev,\n fields,\n layout: newLayout.filter(r => r.length > 0)\n };\n });\n };\n\n /**\n * Move a layout field (found by its ID) to a new position.\n */\n const moveLayoutCell: MoveLayoutCellCallable = (fieldId, position) => {\n setState(prev => {\n // Find the layout field by ID.\n let layoutField: CmsLayoutField | undefined;\n let sourceRow = -1;\n\n for (let ri = 0; ri < prev.layout.length; ri++) {\n for (const cell of prev.layout[ri]) {\n if (isLayoutField(cell) && cell.id === fieldId) {\n layoutField = cell;\n sourceRow = ri;\n break;\n }\n }\n if (layoutField) {\n break;\n }\n }\n\n if (!layoutField || sourceRow === -1) {\n return prev;\n }\n\n // 1. Remove the layout field from its source position.\n const withoutSource = prev.layout.map(row =>\n row.filter(cell => !(isLayoutField(cell) && cell.id === fieldId))\n );\n\n // 2. Was the source row emptied?\n const sourceRowEmptied = withoutSource[sourceRow].length === 0;\n\n // 3. Calculate the effective target row index.\n // The drop target row was computed against the original layout.\n // If we emptied a source row that was BEFORE the target, shift down by 1.\n let targetRow = position.row;\n if (sourceRowEmptied && sourceRow < targetRow) {\n targetRow--;\n }\n\n // 4. Remove empty rows.\n const cleaned = withoutSource.filter(r => r.length > 0);\n\n // 5. Clamp target row and insert the layout field as its own row.\n targetRow = Math.max(0, Math.min(targetRow, cleaned.length));\n cleaned.splice(targetRow, 0, [layoutField]);\n\n return { ...prev, layout: cleaned };\n });\n };\n\n const noConflict: NoConflictCallable = useCallback(\n (isVisible?: IsVisibleCallable) => item => {\n const sameParent = item.parent === onDropTarget.dropTarget;\n const draggedFields: string[] = [];\n switch (item.type) {\n case \"row\":\n (item.fields || []).forEach(field => draggedFields.push(field.fieldId));\n break;\n case \"field\":\n if (!item.field) {\n break;\n }\n draggedFields.push(item.field.fieldId);\n break;\n default:\n break;\n }\n\n if (\n draggedFields.length &&\n !sameParent &&\n fields.some(field => draggedFields.includes(field.fieldId))\n ) {\n return false;\n }\n\n return typeof isVisible === \"function\" ? isVisible(item) : true;\n },\n [fields.map(f => f.fieldId).join(\".\")]\n );\n\n const value: FieldEditorContext = {\n parent,\n parentEditorContext,\n depth,\n getFieldsInLayout,\n getFieldPlugin,\n getFieldRendererPlugin,\n getField,\n editField,\n field: state.field,\n dropTarget: state.dropTarget,\n onFieldDrop,\n onEndDrag,\n insertField,\n moveField,\n moveRow,\n updateField,\n deleteField,\n insertLayoutCell,\n updateLayoutCell,\n deleteLayoutCell,\n moveLayoutCell,\n getLayoutFieldPlugin,\n addField,\n removeField,\n fields: getFieldsInLayout(),\n noConflict,\n layout: state.layout\n };\n\n return <FieldEditorContext.Provider value={value}>{children}</FieldEditorContext.Provider>;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type {
|
|
2
|
+
import type { CmsLayoutField } from "@webiny/app-headless-cms-common/types/model.js";
|
|
3
3
|
interface LayoutCellProps {
|
|
4
|
-
|
|
4
|
+
field: CmsLayoutField;
|
|
5
5
|
rowIndex: number;
|
|
6
6
|
cellIndex: number;
|
|
7
7
|
}
|
|
8
|
-
export declare const LayoutCell: ({
|
|
8
|
+
export declare const LayoutCell: ({ field }: LayoutCellProps) => React.JSX.Element;
|
|
9
9
|
export {};
|
|
@@ -2,29 +2,29 @@ import React from "react";
|
|
|
2
2
|
import { useModelFieldEditor } from "./useModelFieldEditor.js";
|
|
3
3
|
import { Text } from "@webiny/admin-ui";
|
|
4
4
|
export const LayoutCell = ({
|
|
5
|
-
|
|
5
|
+
field
|
|
6
6
|
}) => {
|
|
7
7
|
const {
|
|
8
8
|
getLayoutFieldPlugin,
|
|
9
9
|
updateLayoutCell,
|
|
10
10
|
deleteLayoutCell
|
|
11
11
|
} = useModelFieldEditor();
|
|
12
|
-
const plugin = getLayoutFieldPlugin(
|
|
12
|
+
const plugin = getLayoutFieldPlugin(field.type);
|
|
13
13
|
if (!plugin) {
|
|
14
14
|
return /*#__PURE__*/React.createElement("div", {
|
|
15
15
|
className: "p-md bg-destructive-dimmed rounded-xs"
|
|
16
16
|
}, /*#__PURE__*/React.createElement(Text, {
|
|
17
17
|
size: "sm"
|
|
18
|
-
}, "Unknown layout field type: \"",
|
|
18
|
+
}, "Unknown layout field type: \"", field.type, "\""));
|
|
19
19
|
}
|
|
20
20
|
const onUpdate = d => {
|
|
21
|
-
updateLayoutCell(
|
|
21
|
+
updateLayoutCell(field.id, d);
|
|
22
22
|
};
|
|
23
23
|
const onDelete = () => {
|
|
24
|
-
deleteLayoutCell(
|
|
24
|
+
deleteLayoutCell(field.id);
|
|
25
25
|
};
|
|
26
26
|
return plugin.field.render({
|
|
27
|
-
|
|
27
|
+
field,
|
|
28
28
|
onUpdate,
|
|
29
29
|
onDelete
|
|
30
30
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useModelFieldEditor","Text","LayoutCell","
|
|
1
|
+
{"version":3,"names":["React","useModelFieldEditor","Text","LayoutCell","field","getLayoutFieldPlugin","updateLayoutCell","deleteLayoutCell","plugin","type","createElement","className","size","onUpdate","d","id","onDelete","render"],"sources":["LayoutCell.tsx"],"sourcesContent":["import React from \"react\";\nimport type { CmsLayoutField } from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { useModelFieldEditor } from \"./useModelFieldEditor.js\";\nimport { Text } from \"@webiny/admin-ui\";\n\ninterface LayoutCellProps {\n field: CmsLayoutField;\n rowIndex: number;\n cellIndex: number;\n}\n\nexport const LayoutCell = ({ field }: LayoutCellProps) => {\n const { getLayoutFieldPlugin, updateLayoutCell, deleteLayoutCell } = useModelFieldEditor();\n\n const plugin = getLayoutFieldPlugin(field.type);\n\n if (!plugin) {\n return (\n <div className={\"p-md bg-destructive-dimmed rounded-xs\"}>\n <Text size={\"sm\"}>Unknown layout field type: "{field.type}"</Text>\n </div>\n );\n }\n\n const onUpdate = (d: CmsLayoutField) => {\n updateLayoutCell(field.id, d);\n };\n\n const onDelete = () => {\n deleteLayoutCell(field.id);\n };\n\n return plugin.field.render({ field, onUpdate, onDelete });\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,mBAAmB;AAC5B,SAASC,IAAI,QAAQ,kBAAkB;AAQvC,OAAO,MAAMC,UAAU,GAAGA,CAAC;EAAEC;AAAuB,CAAC,KAAK;EACtD,MAAM;IAAEC,oBAAoB;IAAEC,gBAAgB;IAAEC;EAAiB,CAAC,GAAGN,mBAAmB,CAAC,CAAC;EAE1F,MAAMO,MAAM,GAAGH,oBAAoB,CAACD,KAAK,CAACK,IAAI,CAAC;EAE/C,IAAI,CAACD,MAAM,EAAE;IACT,oBACIR,KAAA,CAAAU,aAAA;MAAKC,SAAS,EAAE;IAAwC,gBACpDX,KAAA,CAAAU,aAAA,CAACR,IAAI;MAACU,IAAI,EAAE;IAAK,GAAC,+BAAiC,EAACR,KAAK,CAACK,IAAI,EAAC,IAAY,CAC1E,CAAC;EAEd;EAEA,MAAMI,QAAQ,GAAIC,CAAiB,IAAK;IACpCR,gBAAgB,CAACF,KAAK,CAACW,EAAE,EAAED,CAAC,CAAC;EACjC,CAAC;EAED,MAAME,QAAQ,GAAGA,CAAA,KAAM;IACnBT,gBAAgB,CAACH,KAAK,CAACW,EAAE,CAAC;EAC9B,CAAC;EAED,OAAOP,MAAM,CAACJ,KAAK,CAACa,MAAM,CAAC;IAAEb,KAAK;IAAES,QAAQ;IAAEG;EAAS,CAAC,CAAC;AAC7D,CAAC","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
import get from "lodash/get.js";
|
|
3
3
|
import { i18n } from "@webiny/app/i18n/index.js";
|
|
4
4
|
import { Switch } from "@webiny/admin-ui";
|
|
5
|
-
import {
|
|
5
|
+
import { useFieldEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
|
|
6
6
|
const t = i18n.ns("app-headless-cms/admin/fields/boolean");
|
|
7
7
|
const plugin = {
|
|
8
8
|
type: "cms-editor-field-renderer",
|
|
@@ -22,7 +22,7 @@ const plugin = {
|
|
|
22
22
|
const {
|
|
23
23
|
field
|
|
24
24
|
} = useModelField();
|
|
25
|
-
const rules =
|
|
25
|
+
const rules = useFieldEffectiveRules(field);
|
|
26
26
|
const Bind = getBind();
|
|
27
27
|
const disabled = !rules.canEdit || rules.disabled;
|
|
28
28
|
return /*#__PURE__*/React.createElement(Bind, null, bindProps => /*#__PURE__*/React.createElement(Switch, Object.assign({}, bindProps, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","get","i18n","Switch","
|
|
1
|
+
{"version":3,"names":["React","get","i18n","Switch","useFieldEffectiveRules","useModelField","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","getBind","rules","Bind","disabled","canEdit","createElement","bindProps","Object","assign","label","note"],"sources":["booleanSwitch.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get.js\";\nimport type { CmsModelFieldRendererPlugin } from \"~/types.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Switch } from \"@webiny/admin-ui\";\nimport { useFieldEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/boolean\");\n\nconst plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-boolean\",\n renderer: {\n rendererName: \"boolean-input\",\n name: t`Boolean Input`,\n description: t`Renders a simple switch button.`,\n canUse({ field }) {\n return (\n field.type === \"boolean\" && !field.list && !get(field, \"predefinedValues.enabled\")\n );\n },\n render({ getBind }) {\n const { field } = useModelField();\n const rules = useFieldEffectiveRules(field);\n const Bind = getBind();\n\n const disabled = !rules.canEdit || rules.disabled;\n\n return (\n <Bind>\n {bindProps => (\n <Switch\n {...bindProps}\n disabled={disabled}\n label={field.label}\n description={field.description}\n note={field.note}\n data-testid={`fr.input.boolean.${field.label}`}\n />\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,MAAM,eAAe;AAE/B,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,sBAAsB,EAAEC,aAAa,QAAQ,iCAAiC;AAEvF,MAAMC,CAAC,GAAGJ,IAAI,CAACK,EAAE,CAAC,uCAAuC,CAAC;AAE1D,MAAMC,MAAmC,GAAG;EACxCC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,mCAAmC;EACzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,eAAe;IAC7BF,IAAI,EAAEJ,CAAC,eAAe;IACtBO,WAAW,EAAEP,CAAC,iCAAiC;IAC/CQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OACIA,KAAK,CAACN,IAAI,KAAK,SAAS,IAAI,CAACM,KAAK,CAACC,IAAI,IAAI,CAACf,GAAG,CAACc,KAAK,EAAE,0BAA0B,CAAC;IAE1F,CAAC;IACDE,MAAMA,CAAC;MAAEC;IAAQ,CAAC,EAAE;MAChB,MAAM;QAAEH;MAAM,CAAC,GAAGV,aAAa,CAAC,CAAC;MACjC,MAAMc,KAAK,GAAGf,sBAAsB,CAACW,KAAK,CAAC;MAC3C,MAAMK,IAAI,GAAGF,OAAO,CAAC,CAAC;MAEtB,MAAMG,QAAQ,GAAG,CAACF,KAAK,CAACG,OAAO,IAAIH,KAAK,CAACE,QAAQ;MAEjD,oBACIrB,KAAA,CAAAuB,aAAA,CAACH,IAAI,QACAI,SAAS,iBACNxB,KAAA,CAAAuB,aAAA,CAACpB,MAAM,EAAAsB,MAAA,CAAAC,MAAA,KACCF,SAAS;QACbH,QAAQ,EAAEA,QAAS;QACnBM,KAAK,EAAEZ,KAAK,CAACY,KAAM;QACnBd,WAAW,EAAEE,KAAK,CAACF,WAAY;QAC/Be,IAAI,EAAEb,KAAK,CAACa,IAAK;QACjB,eAAa,oBAAoBb,KAAK,CAACY,KAAK;MAAG,EAClD,CAEH,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAenB,MAAM","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
import get from "lodash/get.js";
|
|
3
3
|
import { i18n } from "@webiny/app/i18n/index.js";
|
|
4
4
|
import { CheckboxGroup } from "@webiny/admin-ui";
|
|
5
|
-
import {
|
|
5
|
+
import { useFieldEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
|
|
6
6
|
const t = i18n.ns("app-headless-cms/admin/fields/text");
|
|
7
7
|
const adaptToField = (field, value) => {
|
|
8
8
|
return field.type === "number" ? Number(value) : value;
|
|
@@ -25,7 +25,7 @@ const plugin = {
|
|
|
25
25
|
const {
|
|
26
26
|
field
|
|
27
27
|
} = useModelField();
|
|
28
|
-
const rules =
|
|
28
|
+
const rules = useFieldEffectiveRules(field);
|
|
29
29
|
const Bind = getBind();
|
|
30
30
|
const {
|
|
31
31
|
values: predefinedOptions = []
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","get","i18n","CheckboxGroup","
|
|
1
|
+
{"version":3,"names":["React","get","i18n","CheckboxGroup","useFieldEffectiveRules","useModelField","t","ns","adaptToField","field","value","type","Number","plugin","name","renderer","rendererName","description","canUse","list","render","getBind","rules","Bind","values","predefinedOptions","predefinedValues","options","map","opt","defaults","filter","option","selected","defaultValue","length","undefined","disabled","canEdit","createElement","bind","ValidationContainer","Object","assign","label","note","hint","help","items"],"sources":["checkboxes.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get.js\";\nimport type { CmsModelField, CmsModelFieldRendererPlugin } from \"~/types.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { CheckboxGroup } from \"@webiny/admin-ui\";\nimport { useFieldEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst adaptToField = (field: CmsModelField, value: string) => {\n return field.type === \"number\" ? Number(value) : value;\n};\n\nconst plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-checkboxes-buttons\",\n renderer: {\n rendererName: \"checkboxes\",\n name: t`Checkboxes`,\n description: t`Renders checkboxes, allowing selection of multiple values.`,\n canUse({ field }) {\n return !!field.list && !!get(field, \"predefinedValues.enabled\");\n },\n render({ getBind }) {\n const { field } = useModelField();\n const rules = useFieldEffectiveRules(field);\n const Bind = getBind();\n\n const { values: predefinedOptions = [] } = field.predefinedValues || {\n values: []\n };\n\n // For `number` field, we want to convert the value to actual Number.\n const options = predefinedOptions.map(opt => ({\n ...opt,\n value: adaptToField(field, opt.value)\n }));\n\n const defaults = options.filter(option => option.selected);\n const defaultValue = defaults.length > 0 ? defaults.map(opt => opt.value) : undefined;\n\n const disabled = !rules.canEdit || rules.disabled;\n\n return (\n <Bind defaultValue={defaultValue}>\n {bind => (\n <Bind.ValidationContainer>\n <CheckboxGroup\n {...bind}\n disabled={disabled}\n label={field.label}\n description={field.description}\n note={field.note}\n hint={field.help}\n value={bind.value}\n items={options.map(opt => ({\n label: opt.label,\n value: opt.value,\n selected: opt.selected\n }))}\n />\n </Bind.ValidationContainer>\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,MAAM,eAAe;AAE/B,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,sBAAsB,EAAEC,aAAa,QAAQ,iCAAiC;AAEvF,MAAMC,CAAC,GAAGJ,IAAI,CAACK,EAAE,CAAC,oCAAoC,CAAC;AAEvD,MAAMC,YAAY,GAAGA,CAACC,KAAoB,EAAEC,KAAa,KAAK;EAC1D,OAAOD,KAAK,CAACE,IAAI,KAAK,QAAQ,GAAGC,MAAM,CAACF,KAAK,CAAC,GAAGA,KAAK;AAC1D,CAAC;AAED,MAAMG,MAAmC,GAAG;EACxCF,IAAI,EAAE,2BAA2B;EACjCG,IAAI,EAAE,8CAA8C;EACpDC,QAAQ,EAAE;IACNC,YAAY,EAAE,YAAY;IAC1BF,IAAI,EAAER,CAAC,YAAY;IACnBW,WAAW,EAAEX,CAAC,4DAA4D;IAC1EY,MAAMA,CAAC;MAAET;IAAM,CAAC,EAAE;MACd,OAAO,CAAC,CAACA,KAAK,CAACU,IAAI,IAAI,CAAC,CAAClB,GAAG,CAACQ,KAAK,EAAE,0BAA0B,CAAC;IACnE,CAAC;IACDW,MAAMA,CAAC;MAAEC;IAAQ,CAAC,EAAE;MAChB,MAAM;QAAEZ;MAAM,CAAC,GAAGJ,aAAa,CAAC,CAAC;MACjC,MAAMiB,KAAK,GAAGlB,sBAAsB,CAACK,KAAK,CAAC;MAC3C,MAAMc,IAAI,GAAGF,OAAO,CAAC,CAAC;MAEtB,MAAM;QAAEG,MAAM,EAAEC,iBAAiB,GAAG;MAAG,CAAC,GAAGhB,KAAK,CAACiB,gBAAgB,IAAI;QACjEF,MAAM,EAAE;MACZ,CAAC;;MAED;MACA,MAAMG,OAAO,GAAGF,iBAAiB,CAACG,GAAG,CAACC,GAAG,KAAK;QAC1C,GAAGA,GAAG;QACNnB,KAAK,EAAEF,YAAY,CAACC,KAAK,EAAEoB,GAAG,CAACnB,KAAK;MACxC,CAAC,CAAC,CAAC;MAEH,MAAMoB,QAAQ,GAAGH,OAAO,CAACI,MAAM,CAACC,MAAM,IAAIA,MAAM,CAACC,QAAQ,CAAC;MAC1D,MAAMC,YAAY,GAAGJ,QAAQ,CAACK,MAAM,GAAG,CAAC,GAAGL,QAAQ,CAACF,GAAG,CAACC,GAAG,IAAIA,GAAG,CAACnB,KAAK,CAAC,GAAG0B,SAAS;MAErF,MAAMC,QAAQ,GAAG,CAACf,KAAK,CAACgB,OAAO,IAAIhB,KAAK,CAACe,QAAQ;MAEjD,oBACIrC,KAAA,CAAAuC,aAAA,CAAChB,IAAI;QAACW,YAAY,EAAEA;MAAa,GAC5BM,IAAI,iBACDxC,KAAA,CAAAuC,aAAA,CAAChB,IAAI,CAACkB,mBAAmB,qBACrBzC,KAAA,CAAAuC,aAAA,CAACpC,aAAa,EAAAuC,MAAA,CAAAC,MAAA,KACNH,IAAI;QACRH,QAAQ,EAAEA,QAAS;QACnBO,KAAK,EAAEnC,KAAK,CAACmC,KAAM;QACnB3B,WAAW,EAAER,KAAK,CAACQ,WAAY;QAC/B4B,IAAI,EAAEpC,KAAK,CAACoC,IAAK;QACjBC,IAAI,EAAErC,KAAK,CAACsC,IAAK;QACjBrC,KAAK,EAAE8B,IAAI,CAAC9B,KAAM;QAClBsC,KAAK,EAAErB,OAAO,CAACC,GAAG,CAACC,GAAG,KAAK;UACvBe,KAAK,EAAEf,GAAG,CAACe,KAAK;UAChBlC,KAAK,EAAEmB,GAAG,CAACnB,KAAK;UAChBuB,QAAQ,EAAEJ,GAAG,CAACI;QAClB,CAAC,CAAC;MAAE,EACP,CACqB,CAE5B,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAepB,MAAM","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { Input as UiInput, Icon } from "@webiny/admin-ui";
|
|
3
|
-
import {
|
|
3
|
+
import { useFieldEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
|
|
4
4
|
export const Input = ({
|
|
5
5
|
bind,
|
|
6
6
|
trailingIcon,
|
|
@@ -9,7 +9,7 @@ export const Input = ({
|
|
|
9
9
|
const {
|
|
10
10
|
field
|
|
11
11
|
} = useModelField();
|
|
12
|
-
const rules =
|
|
12
|
+
const rules = useFieldEffectiveRules(field);
|
|
13
13
|
const disabled = !rules.canEdit || rules.disabled;
|
|
14
14
|
const endIcon = React.useMemo(() => {
|
|
15
15
|
if (!trailingIcon) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Input","UiInput","Icon","
|
|
1
|
+
{"version":3,"names":["React","Input","UiInput","Icon","useFieldEffectiveRules","useModelField","bind","trailingIcon","props","field","rules","disabled","canEdit","endIcon","useMemo","undefined","createElement","label","icon","onClick","className","Object","assign","onChange","value","type","parseFloat","note","description","placeholder"],"sources":["Input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { CmsModelField } from \"~/types.js\";\nimport type { BindComponentRenderProp } from \"@webiny/form\";\nimport { Input as UiInput, Icon } from \"@webiny/admin-ui\";\nimport { useFieldEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nexport interface TrailingIcon {\n icon: React.ReactNode;\n onClick: any;\n}\n\nexport interface InputProps {\n step?: number;\n type?: string;\n bind: BindComponentRenderProp;\n field: CmsModelField;\n trailingIcon?: TrailingIcon;\n}\n\nexport const Input = ({ bind, trailingIcon, ...props }: InputProps) => {\n const { field } = useModelField();\n const rules = useFieldEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n\n const endIcon = React.useMemo(() => {\n if (!trailingIcon) {\n return undefined;\n }\n\n return (\n <Icon\n label={\"Icon\"}\n icon={trailingIcon?.icon}\n onClick={trailingIcon?.onClick}\n className={\"cursor-pointer\"}\n />\n );\n }, [trailingIcon]);\n\n return (\n <UiInput\n {...props}\n {...bind}\n disabled={disabled}\n onChange={value => {\n if (props.type === \"number\") {\n value = parseFloat(value);\n }\n return bind.onChange(value);\n }}\n label={null}\n note={null}\n description={null}\n placeholder={field.placeholder}\n type={props.type}\n endIcon={endIcon}\n data-testid={`fr.input.${field.label}`}\n />\n );\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAG9B,SAASC,KAAK,IAAIC,OAAO,EAAEC,IAAI,QAAQ,kBAAkB;AACzD,SAASC,sBAAsB,EAAEC,aAAa,QAAQ,iCAAiC;AAevF,OAAO,MAAMJ,KAAK,GAAGA,CAAC;EAAEK,IAAI;EAAEC,YAAY;EAAE,GAAGC;AAAkB,CAAC,KAAK;EACnE,MAAM;IAAEC;EAAM,CAAC,GAAGJ,aAAa,CAAC,CAAC;EACjC,MAAMK,KAAK,GAAGN,sBAAsB,CAACK,KAAK,CAAC;EAC3C,MAAME,QAAQ,GAAG,CAACD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACC,QAAQ;EAEjD,MAAME,OAAO,GAAGb,KAAK,CAACc,OAAO,CAAC,MAAM;IAChC,IAAI,CAACP,YAAY,EAAE;MACf,OAAOQ,SAAS;IACpB;IAEA,oBACIf,KAAA,CAAAgB,aAAA,CAACb,IAAI;MACDc,KAAK,EAAE,MAAO;MACdC,IAAI,EAAEX,YAAY,EAAEW,IAAK;MACzBC,OAAO,EAAEZ,YAAY,EAAEY,OAAQ;MAC/BC,SAAS,EAAE;IAAiB,CAC/B,CAAC;EAEV,CAAC,EAAE,CAACb,YAAY,CAAC,CAAC;EAElB,oBACIP,KAAA,CAAAgB,aAAA,CAACd,OAAO,EAAAmB,MAAA,CAAAC,MAAA,KACAd,KAAK,EACLF,IAAI;IACRK,QAAQ,EAAEA,QAAS;IACnBY,QAAQ,EAAEC,KAAK,IAAI;MACf,IAAIhB,KAAK,CAACiB,IAAI,KAAK,QAAQ,EAAE;QACzBD,KAAK,GAAGE,UAAU,CAACF,KAAK,CAAC;MAC7B;MACA,OAAOlB,IAAI,CAACiB,QAAQ,CAACC,KAAK,CAAC;IAC/B,CAAE;IACFP,KAAK,EAAE,IAAK;IACZU,IAAI,EAAE,IAAK;IACXC,WAAW,EAAE,IAAK;IAClBC,WAAW,EAAEpB,KAAK,CAACoB,WAAY;IAC/BJ,IAAI,EAAEjB,KAAK,CAACiB,IAAK;IACjBZ,OAAO,EAAEA,OAAQ;IACjB,eAAa,YAAYJ,KAAK,CAACQ,KAAK;EAAG,EAC1C,CAAC;AAEV,CAAC","ignoreList":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { Select as UiSelect } from "@webiny/admin-ui";
|
|
3
|
-
import {
|
|
3
|
+
import { useFieldEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
|
|
4
4
|
export const Select = props => {
|
|
5
5
|
const {
|
|
6
6
|
field
|
|
7
7
|
} = useModelField();
|
|
8
|
-
const rules =
|
|
8
|
+
const rules = useFieldEffectiveRules(field);
|
|
9
9
|
const disabled = !rules.canEdit || rules.disabled;
|
|
10
10
|
return /*#__PURE__*/React.createElement(UiSelect, Object.assign({}, props, {
|
|
11
11
|
disabled: disabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Select","UiSelect","
|
|
1
|
+
{"version":3,"names":["React","Select","UiSelect","useFieldEffectiveRules","useModelField","props","field","rules","disabled","canEdit","createElement","Object","assign","options","map","option","value","label"],"sources":["Select.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SelectProps as UiSelectProps } from \"@webiny/admin-ui\";\nimport { Select as UiSelect } from \"@webiny/admin-ui\";\nimport { useFieldEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nexport interface Option {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends UiSelectProps {\n options: Option[];\n}\nexport const Select = (props: SelectProps) => {\n const { field } = useModelField();\n const rules = useFieldEffectiveRules(field);\n\n const disabled = !rules.canEdit || rules.disabled;\n\n return (\n <UiSelect\n {...props}\n disabled={disabled}\n options={props.options.map(option => ({\n value: option.value,\n label: option.label,\n \"data-testid\": `fr.input.${option.label}`\n }))}\n />\n );\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,MAAM,IAAIC,QAAQ,QAAQ,kBAAkB;AACrD,SAASC,sBAAsB,EAAEC,aAAa,QAAQ,iCAAiC;AAUvF,OAAO,MAAMH,MAAM,GAAII,KAAkB,IAAK;EAC1C,MAAM;IAAEC;EAAM,CAAC,GAAGF,aAAa,CAAC,CAAC;EACjC,MAAMG,KAAK,GAAGJ,sBAAsB,CAACG,KAAK,CAAC;EAE3C,MAAME,QAAQ,GAAG,CAACD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACC,QAAQ;EAEjD,oBACIR,KAAA,CAAAU,aAAA,CAACR,QAAQ,EAAAS,MAAA,CAAAC,MAAA,KACDP,KAAK;IACTG,QAAQ,EAAEA,QAAS;IACnBK,OAAO,EAAER,KAAK,CAACQ,OAAO,CAACC,GAAG,CAACC,MAAM,KAAK;MAClCC,KAAK,EAAED,MAAM,CAACC,KAAK;MACnBC,KAAK,EAAEF,MAAM,CAACE,KAAK;MACnB,aAAa,EAAE,YAAYF,MAAM,CAACE,KAAK;IAC3C,CAAC,CAAC;EAAE,EACP,CAAC;AAEV,CAAC","ignoreList":[]}
|