@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.
Files changed (99) hide show
  1. package/admin/components/CmsModelFieldRenderer.d.ts +4 -0
  2. package/admin/components/CmsModelFieldRenderer.js +14 -0
  3. package/admin/components/CmsModelFieldRenderer.js.map +1 -0
  4. package/admin/components/CmsModelFieldType.d.ts +4 -0
  5. package/admin/components/CmsModelFieldType.js +14 -0
  6. package/admin/components/CmsModelFieldType.js.map +1 -0
  7. package/admin/components/CmsModelLayoutFieldRenderer.d.ts +13 -0
  8. package/admin/components/CmsModelLayoutFieldRenderer.js +15 -0
  9. package/admin/components/CmsModelLayoutFieldRenderer.js.map +1 -0
  10. package/admin/components/CmsModelLayoutFieldType.d.ts +2 -0
  11. package/admin/components/CmsModelLayoutFieldType.js +14 -0
  12. package/admin/components/CmsModelLayoutFieldType.js.map +1 -0
  13. package/admin/components/ContentModelEditor/ContentModelEditorProvider.js.map +1 -1
  14. package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
  15. package/admin/components/FieldEditor/EditFieldDialog/getValidators.d.ts +3 -3
  16. package/admin/components/FieldEditor/EditFieldDialog/getValidators.js.map +1 -1
  17. package/admin/components/FieldEditor/FieldEditor.js +10 -10
  18. package/admin/components/FieldEditor/FieldEditor.js.map +1 -1
  19. package/admin/components/FieldEditor/FieldEditorContext.d.ts +11 -11
  20. package/admin/components/FieldEditor/FieldEditorContext.js +41 -41
  21. package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
  22. package/admin/components/FieldEditor/LayoutCell.d.ts +3 -3
  23. package/admin/components/FieldEditor/LayoutCell.js +6 -6
  24. package/admin/components/FieldEditor/LayoutCell.js.map +1 -1
  25. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +2 -2
  26. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
  27. package/admin/plugins/fieldRenderers/checkboxes.js +2 -2
  28. package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
  29. package/admin/plugins/fieldRenderers/dateTime/Input.js +2 -2
  30. package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
  31. package/admin/plugins/fieldRenderers/dateTime/Select.js +2 -2
  32. package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
  33. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js +2 -2
  34. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js.map +1 -1
  35. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js +2 -2
  36. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js.map +1 -1
  37. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js +2 -2
  38. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js.map +1 -1
  39. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js +2 -2
  40. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js.map +1 -1
  41. package/admin/plugins/fieldRenderers/longText/longText.js +2 -2
  42. package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
  43. package/admin/plugins/fieldRenderers/longText/longTexts.js +2 -2
  44. package/admin/plugins/fieldRenderers/longText/longTexts.js.map +1 -1
  45. package/admin/plugins/fieldRenderers/number/numberInput.js +2 -2
  46. package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
  47. package/admin/plugins/fieldRenderers/number/numberInputs.js +2 -2
  48. package/admin/plugins/fieldRenderers/number/numberInputs.js.map +1 -1
  49. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js +2 -2
  50. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js.map +1 -1
  51. package/admin/plugins/fieldRenderers/radioButtons.js +2 -2
  52. package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
  53. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js +2 -2
  54. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js.map +1 -1
  55. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js +2 -2
  56. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js.map +1 -1
  57. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +2 -2
  58. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
  59. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js +2 -2
  60. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js.map +1 -1
  61. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js +2 -2
  62. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js.map +1 -1
  63. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js +2 -2
  64. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js.map +1 -1
  65. package/admin/plugins/fieldRenderers/select.js +2 -2
  66. package/admin/plugins/fieldRenderers/select.js.map +1 -1
  67. package/admin/plugins/fieldRenderers/text/tags.js +2 -2
  68. package/admin/plugins/fieldRenderers/text/tags.js.map +1 -1
  69. package/admin/plugins/fieldRenderers/text/textInput.js +2 -2
  70. package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
  71. package/admin/plugins/fieldRenderers/text/textInputs.js +2 -2
  72. package/admin/plugins/fieldRenderers/text/textInputs.js.map +1 -1
  73. package/admin/plugins/fields/ui/TabsLayoutEditor.d.ts +4 -4
  74. package/admin/plugins/fields/ui/TabsLayoutEditor.js +44 -44
  75. package/admin/plugins/fields/ui/TabsLayoutEditor.js.map +1 -1
  76. package/admin/plugins/fields/ui/alert.d.ts +2 -2
  77. package/admin/plugins/fields/ui/alert.js +11 -11
  78. package/admin/plugins/fields/ui/alert.js.map +1 -1
  79. package/admin/plugins/fields/ui/separator.d.ts +2 -2
  80. package/admin/plugins/fields/ui/separator.js +10 -10
  81. package/admin/plugins/fields/ui/separator.js.map +1 -1
  82. package/admin/plugins/fields/ui/tabs.d.ts +2 -2
  83. package/admin/plugins/fields/ui/tabs.js +10 -10
  84. package/admin/plugins/fields/ui/tabs.js.map +1 -1
  85. package/allPlugins.d.ts +1 -1
  86. package/exports/admin/cms/{fieldRenderers/dynamicZone.js → field-renderers/dynamic-zone.js} +1 -1
  87. package/exports/admin/cms/field-renderers/dynamic-zone.js.map +1 -0
  88. package/exports/admin/cms.d.ts +4 -0
  89. package/exports/admin/cms.js +4 -0
  90. package/exports/admin/cms.js.map +1 -1
  91. package/package.json +23 -23
  92. package/types.d.ts +1 -1
  93. package/types.js +1 -1
  94. package/types.js.map +1 -1
  95. package/exports/admin/cms/fieldRenderers/dynamicZone.js.map +0 -1
  96. /package/exports/admin/cms/{fieldRenderers/dynamicZone.d.ts → field-renderers/dynamic-zone.d.ts} +0 -0
  97. /package/exports/admin/cms/{fieldRenderers → field-renderers}/object.d.ts +0 -0
  98. /package/exports/admin/cms/{fieldRenderers → field-renderers}/object.js +0 -0
  99. /package/exports/admin/cms/{fieldRenderers → field-renderers}/object.js.map +0 -0
@@ -0,0 +1,4 @@
1
+ import type { CmsModelFieldRendererPlugin } from "@webiny/app-headless-cms-common/types/index.js";
2
+ type CmsModelFieldRendererProps = CmsModelFieldRendererPlugin["renderer"];
3
+ export declare const CmsModelFieldRenderer: (props: CmsModelFieldRendererProps) => null;
4
+ export {};
@@ -0,0 +1,14 @@
1
+ import { useEffect } from "react";
2
+ import { plugins } from "@webiny/plugins";
3
+ export const CmsModelFieldRenderer = props => {
4
+ useEffect(() => {
5
+ plugins.register({
6
+ type: "cms-editor-field-renderer",
7
+ name: `cms-editor-field-renderer-${props.rendererName}`,
8
+ renderer: props
9
+ });
10
+ }, []);
11
+ return null;
12
+ };
13
+
14
+ //# sourceMappingURL=CmsModelFieldRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","plugins","CmsModelFieldRenderer","props","register","type","name","rendererName","renderer"],"sources":["CmsModelFieldRenderer.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport type { CmsModelFieldRendererPlugin } from \"@webiny/app-headless-cms-common/types/index.js\";\n\ntype CmsModelFieldRendererProps = CmsModelFieldRendererPlugin[\"renderer\"];\n\nexport const CmsModelFieldRenderer = (props: CmsModelFieldRendererProps) => {\n useEffect(() => {\n plugins.register({\n type: \"cms-editor-field-renderer\",\n name: `cms-editor-field-renderer-${props.rendererName}`,\n renderer: props\n } satisfies CmsModelFieldRendererPlugin);\n }, []);\n return null;\n};\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,OAAO,QAAQ,iBAAiB;AAKzC,OAAO,MAAMC,qBAAqB,GAAIC,KAAiC,IAAK;EACxEH,SAAS,CAAC,MAAM;IACZC,OAAO,CAACG,QAAQ,CAAC;MACbC,IAAI,EAAE,2BAA2B;MACjCC,IAAI,EAAE,6BAA6BH,KAAK,CAACI,YAAY,EAAE;MACvDC,QAAQ,EAAEL;IACd,CAAuC,CAAC;EAC5C,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import type { CmsModelFieldTypePlugin } from "@webiny/app-headless-cms-common/types/index.js";
2
+ type CmsModelFieldTypeProps = CmsModelFieldTypePlugin["field"];
3
+ export declare const CmsModelFieldType: (props: CmsModelFieldTypeProps) => null;
4
+ export {};
@@ -0,0 +1,14 @@
1
+ import { useEffect } from "react";
2
+ import { plugins } from "@webiny/plugins";
3
+ export const CmsModelFieldType = props => {
4
+ useEffect(() => {
5
+ plugins.register({
6
+ type: "cms-editor-field-type",
7
+ name: `cms-editor-field-type-${props.type}`,
8
+ field: props
9
+ });
10
+ }, []);
11
+ return null;
12
+ };
13
+
14
+ //# sourceMappingURL=CmsModelFieldType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","plugins","CmsModelFieldType","props","register","type","name","field"],"sources":["CmsModelFieldType.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport type { CmsModelFieldTypePlugin } from \"@webiny/app-headless-cms-common/types/index.js\";\n\ntype CmsModelFieldTypeProps = CmsModelFieldTypePlugin[\"field\"];\n\nexport const CmsModelFieldType = (props: CmsModelFieldTypeProps) => {\n useEffect(() => {\n plugins.register({\n type: \"cms-editor-field-type\",\n name: `cms-editor-field-type-${props.type}`,\n field: props\n } satisfies CmsModelFieldTypePlugin);\n }, []);\n return null;\n};\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,OAAO,QAAQ,iBAAiB;AAKzC,OAAO,MAAMC,iBAAiB,GAAIC,KAA6B,IAAK;EAChEH,SAAS,CAAC,MAAM;IACZC,OAAO,CAACG,QAAQ,CAAC;MACbC,IAAI,EAAE,uBAAuB;MAC7BC,IAAI,EAAE,yBAAyBH,KAAK,CAACE,IAAI,EAAE;MAC3CE,KAAK,EAAEJ;IACX,CAAmC,CAAC;EACxC,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import type { BindComponent, CmsModelLayoutField, CmsModel, CmsModelField } from "@webiny/app-headless-cms-common/types/index.js";
3
+ export interface CmsModelLayoutFieldRendererProps<T extends CmsModelLayoutField = CmsModelLayoutField> {
4
+ fieldType: string;
5
+ render(props: {
6
+ field: T;
7
+ Bind: BindComponent;
8
+ fields: CmsModelField[];
9
+ contentModel: CmsModel;
10
+ gridClassName?: string;
11
+ }): React.ReactElement | null;
12
+ }
13
+ export declare const CmsModelLayoutFieldRenderer: <T extends CmsModelLayoutField = CmsModelLayoutField>(props: CmsModelLayoutFieldRendererProps<T>) => null;
@@ -0,0 +1,15 @@
1
+ import { useEffect } from "react";
2
+ import { plugins } from "@webiny/plugins";
3
+ export const CmsModelLayoutFieldRenderer = props => {
4
+ useEffect(() => {
5
+ plugins.register({
6
+ type: "cms-layout-field-renderer",
7
+ name: `cms-layout-field-renderer-${props.fieldType}`,
8
+ fieldType: props.fieldType,
9
+ render: props.render
10
+ });
11
+ }, []);
12
+ return null;
13
+ };
14
+
15
+ //# sourceMappingURL=CmsModelLayoutFieldRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","plugins","CmsModelLayoutFieldRenderer","props","register","type","name","fieldType","render"],"sources":["CmsModelLayoutFieldRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { useEffect } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport type {\n BindComponent,\n CmsModelLayoutField,\n CmsModel,\n CmsModelField,\n CmsModelLayoutFieldRendererPlugin\n} from \"@webiny/app-headless-cms-common/types/index.js\";\n\nexport interface CmsModelLayoutFieldRendererProps<\n T extends CmsModelLayoutField = CmsModelLayoutField\n> {\n fieldType: string;\n render(props: {\n field: T;\n Bind: BindComponent;\n fields: CmsModelField[];\n contentModel: CmsModel;\n gridClassName?: string;\n }): React.ReactElement | null;\n}\n\nexport const CmsModelLayoutFieldRenderer = <T extends CmsModelLayoutField = CmsModelLayoutField>(\n props: CmsModelLayoutFieldRendererProps<T>\n) => {\n useEffect(() => {\n plugins.register({\n type: \"cms-layout-field-renderer\",\n name: `cms-layout-field-renderer-${props.fieldType}`,\n fieldType: props.fieldType,\n render: props.render\n } as CmsModelLayoutFieldRendererPlugin);\n }, []);\n return null;\n};\n"],"mappings":"AACA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,OAAO,QAAQ,iBAAiB;AAsBzC,OAAO,MAAMC,2BAA2B,GACpCC,KAA0C,IACzC;EACDH,SAAS,CAAC,MAAM;IACZC,OAAO,CAACG,QAAQ,CAAC;MACbC,IAAI,EAAE,2BAA2B;MACjCC,IAAI,EAAE,6BAA6BH,KAAK,CAACI,SAAS,EAAE;MACpDA,SAAS,EAAEJ,KAAK,CAACI,SAAS;MAC1BC,MAAM,EAAEL,KAAK,CAACK;IAClB,CAAsC,CAAC;EAC3C,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import type { CmsLayoutField, CmsModelLayoutFieldTypePlugin } from "@webiny/app-headless-cms-common/types/index.js";
2
+ export declare const CmsModelLayoutFieldType: <T extends CmsLayoutField = CmsLayoutField>(props: CmsModelLayoutFieldTypePlugin<T>["field"]) => null;
@@ -0,0 +1,14 @@
1
+ import { useEffect } from "react";
2
+ import { plugins } from "@webiny/plugins";
3
+ export const CmsModelLayoutFieldType = props => {
4
+ useEffect(() => {
5
+ plugins.register({
6
+ type: "cms-editor-layout-field-type",
7
+ name: `cms-editor-layout-field-type-${props.type}`,
8
+ field: props
9
+ });
10
+ }, []);
11
+ return null;
12
+ };
13
+
14
+ //# sourceMappingURL=CmsModelLayoutFieldType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","plugins","CmsModelLayoutFieldType","props","register","type","name","field"],"sources":["CmsModelLayoutFieldType.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport type {\n CmsLayoutField,\n CmsModelLayoutFieldTypePlugin\n} from \"@webiny/app-headless-cms-common/types/index.js\";\n\nexport const CmsModelLayoutFieldType = <T extends CmsLayoutField = CmsLayoutField>(\n props: CmsModelLayoutFieldTypePlugin<T>[\"field\"]\n) => {\n useEffect(() => {\n plugins.register({\n type: \"cms-editor-layout-field-type\",\n name: `cms-editor-layout-field-type-${props.type}`,\n field: props as unknown as CmsModelLayoutFieldTypePlugin[\"field\"]\n } satisfies CmsModelLayoutFieldTypePlugin);\n }, []);\n return null;\n};\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,OAAO,QAAQ,iBAAiB;AAMzC,OAAO,MAAMC,uBAAuB,GAChCC,KAAgD,IAC/C;EACDH,SAAS,CAAC,MAAM;IACZC,OAAO,CAACG,QAAQ,CAAC;MACbC,IAAI,EAAE,8BAA8B;MACpCC,IAAI,EAAE,gCAAgCH,KAAK,CAACE,IAAI,EAAE;MAClDE,KAAK,EAAEJ;IACX,CAAyC,CAAC;EAC9C,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useReducer","get","pick","useSnackbar","useRouter","GET_CONTENT_MODEL","UPDATE_CONTENT_MODEL","LIST_MENU_CONTENT_GROUPS_MODELS","ModelProvider","createHashing","Routes","buildFieldOptions","buildFieldLabelPrefixes","plugins","contentModelEditorContext","createContext","undefined","contentModelEditorReducer","prev","action","data","type","hashModel","cleanupModelDataFields","fields","map","field","predefinedValues","enabled","values","label","value","selected","String","cleanupModelData","createDefaultState","modelId","isPristine","activeTabIndex","ContentModelEditorProvider","children","apolloClient","state","dispatch","goToRoute","showSnackbar","setPristine","flag","saveContentModel","modelData","response","mutate","mutation","variables","refetchQueries","query","updateContentModel","error","setActiveTabIndex","setData","setter","saveModel","existingHash","newHash","getContentModel","Error","message","catch","ContentModels","List","layoutFieldPlugins","byType","fieldOptions","model","prefixes","layout","contentModel","Provider","createElement"],"sources":["ContentModelEditorProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useReducer } from \"react\";\nimport get from \"lodash/get.js\";\nimport pick from \"lodash/pick.js\";\nimport type { ApolloClient } from \"apollo-client\";\nimport { useSnackbar, useRouter } from \"@webiny/app-admin\";\nimport type {\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables,\n UpdateCmsModelMutationResponse,\n UpdateCmsModelMutationVariables\n} from \"~/admin/graphql/contentModels.js\";\nimport { GET_CONTENT_MODEL, UPDATE_CONTENT_MODEL } from \"~/admin/graphql/contentModels.js\";\nimport { LIST_MENU_CONTENT_GROUPS_MODELS } from \"~/admin/viewsGraphql.js\";\nimport type { CmsModel, CmsModelField } from \"~/types.js\";\nimport type { CmsLayoutFieldTypePlugin } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport type { FetchResult } from \"apollo-link\";\nimport { ModelProvider } from \"~/admin/components/ModelProvider/index.js\";\nimport { createHashing } from \"@webiny/app/utils/index.js\";\nimport { Routes } from \"~/routes.js\";\nimport type { FieldOption } from \"@webiny/app-headless-cms-common/Fields/fieldOptions.js\";\nimport {\n buildFieldOptions,\n buildFieldLabelPrefixes\n} from \"@webiny/app-headless-cms-common/Fields/fieldOptions.js\";\nimport { plugins } from \"@webiny/plugins\";\n\nexport interface ContentModelEditorProviderContext {\n apolloClient: ApolloClient<any>;\n data: CmsModel;\n contentModel: CmsModel;\n isPristine: boolean;\n getContentModel: (modelId: string) => Promise<FetchResult<GetCmsModelQueryResponse>>;\n saveContentModel: (\n data?: CmsModel\n ) => Promise<UpdateCmsModelMutationResponse[\"updateContentModel\"]>;\n setData: (setter: (model: CmsModel) => void, saveContentModel?: boolean) => Promise<any>;\n activeTabIndex: number;\n setActiveTabIndex: (index: number) => void;\n fieldOptions: FieldOption[];\n}\n\nexport const contentModelEditorContext = React.createContext<\n ContentModelEditorProviderContext | undefined\n>(undefined);\n\ntype PickedCmsModel = Pick<\n CmsModel,\n \"layout\" | \"fields\" | \"name\" | \"settings\" | \"description\" | \"titleFieldId\" | \"group\"\n>;\ninterface State {\n modelId: string | null;\n isPristine: boolean;\n data: CmsModel;\n activeTabIndex: number;\n}\ninterface Action {\n data: Partial<State> | Partial<CmsModel>;\n type: \"state\" | \"data\";\n}\ninterface Reducer {\n (prev: State, action: Action): State;\n}\nexport const contentModelEditorReducer: Reducer = (prev: State, action: Action): State => {\n const { data, type } = action;\n switch (type) {\n case \"state\":\n return { ...prev, ...data };\n\n case \"data\":\n return { ...prev, data: data as CmsModel };\n default:\n return prev;\n }\n};\n\nconst hashModel = createHashing(\"SHA-256\");\n\n/**\n * Cleanup is required because backend always expects string value in predefined values entries\n */\nconst cleanupModelDataFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.map(field => {\n const { predefinedValues } = field;\n const { enabled = false, values = [] } = predefinedValues || {};\n return {\n ...field,\n predefinedValues: {\n enabled,\n values: values.map(({ label, value, selected }) => {\n return {\n label,\n selected: selected || false,\n value: String(value)\n };\n })\n }\n };\n });\n};\n\nconst cleanupModelData = (data: PickedCmsModel): PickedCmsModel => {\n return {\n ...data,\n fields: cleanupModelDataFields(data.fields)\n };\n};\n\ninterface ContentModelEditorProviderProps {\n apolloClient: ApolloClient<any>;\n modelId?: string;\n children: React.ReactElement;\n}\n\nconst createDefaultState = (modelId?: string): State => {\n return {\n modelId: modelId || null,\n isPristine: true,\n data: null as unknown as CmsModel,\n activeTabIndex: 0\n };\n};\n\nexport const ContentModelEditorProvider = ({\n children,\n apolloClient,\n modelId\n}: ContentModelEditorProviderProps) => {\n const [state, dispatch] = useReducer(contentModelEditorReducer, createDefaultState(modelId));\n\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const setPristine = (flag: boolean): void => {\n dispatch({ type: \"state\", data: { isPristine: flag } });\n };\n\n const saveContentModel = async (\n data?: CmsModel\n ): Promise<UpdateCmsModelMutationResponse[\"updateContentModel\"]> => {\n if (!data) {\n data = state.data;\n }\n const modelData: PickedCmsModel = pick(data, [\n \"group\",\n \"layout\",\n \"fields\",\n \"tags\",\n \"name\",\n \"settings\",\n \"description\",\n \"titleFieldId\",\n \"descriptionFieldId\",\n \"imageFieldId\",\n \"icon\"\n ]);\n const response = await apolloClient.mutate<\n UpdateCmsModelMutationResponse,\n UpdateCmsModelMutationVariables\n >({\n mutation: UPDATE_CONTENT_MODEL,\n variables: {\n modelId: data.modelId,\n data: cleanupModelData(modelData)\n },\n refetchQueries: [\n {\n query: LIST_MENU_CONTENT_GROUPS_MODELS\n }\n ]\n });\n\n setPristine(true);\n\n if (!response.data || !response.data.updateContentModel) {\n return {\n data: null,\n error: null\n };\n }\n\n return response.data.updateContentModel;\n };\n\n const setActiveTabIndex = useCallback((activeTabIndex: number) => {\n dispatch({ type: \"state\", data: { activeTabIndex } });\n }, []);\n\n /**\n * Set form data by providing a callback, which receives a fresh copy of data on which you can work on.\n * Return new data once finished.\n */\n const setData = async (setter: (value: any) => any, saveModel = false): Promise<void> => {\n const data = setter(state.data);\n const existingHash = await hashModel(state.data);\n const newHash = await hashModel(data);\n if (existingHash === newHash) {\n return;\n }\n setPristine(false);\n dispatch({ type: \"data\", data });\n if (!saveModel) {\n return;\n }\n await saveContentModel(data);\n };\n\n const getContentModel = async (\n modelId: string\n ): Promise<FetchResult<GetCmsModelQueryResponse>> => {\n const response = await apolloClient.query<\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables\n >({\n query: GET_CONTENT_MODEL,\n variables: {\n modelId\n }\n });\n\n const { data, error } = get(response, \"data.getContentModel\");\n if (error) {\n throw new Error(error.message);\n }\n\n await setData(() => data, false);\n\n setPristine(true);\n return response;\n };\n\n useEffect(() => {\n if (!modelId) {\n return;\n }\n getContentModel(modelId).catch(() => {\n goToRoute(Routes.ContentModels.List);\n showSnackbar(`Could not load content model with given ID.`);\n });\n }, [modelId]);\n\n const layoutFieldPlugins = plugins.byType<CmsLayoutFieldTypePlugin>(\n \"cms-editor-layout-field-type\"\n );\n\n const fieldOptions = useMemo(() => {\n const model = state.data;\n if (!model) {\n return [];\n }\n const prefixes = model.layout\n ? buildFieldLabelPrefixes(model.layout, layoutFieldPlugins)\n : undefined;\n return buildFieldOptions(model.fields ?? [], \"\", \"\", prefixes, layoutFieldPlugins);\n }, [state.data?.fields, state.data?.layout]);\n\n const value = useMemo<ContentModelEditorProviderContext>(\n () => ({\n // Keeping `data` for compatibility\n data: state.data,\n contentModel: state.data,\n modelId,\n apolloClient,\n dispatch,\n isPristine: state.isPristine,\n getContentModel,\n saveContentModel,\n setData,\n activeTabIndex: state.activeTabIndex,\n setActiveTabIndex,\n fieldOptions\n }),\n [state, apolloClient, fieldOptions]\n );\n\n const { Provider } = contentModelEditorContext;\n\n return (\n <Provider value={value}>\n <ModelProvider model={value.contentModel}>{children}</ModelProvider>\n </Provider>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useReducer","get","pick","useSnackbar","useRouter","GET_CONTENT_MODEL","UPDATE_CONTENT_MODEL","LIST_MENU_CONTENT_GROUPS_MODELS","ModelProvider","createHashing","Routes","buildFieldOptions","buildFieldLabelPrefixes","plugins","contentModelEditorContext","createContext","undefined","contentModelEditorReducer","prev","action","data","type","hashModel","cleanupModelDataFields","fields","map","field","predefinedValues","enabled","values","label","value","selected","String","cleanupModelData","createDefaultState","modelId","isPristine","activeTabIndex","ContentModelEditorProvider","children","apolloClient","state","dispatch","goToRoute","showSnackbar","setPristine","flag","saveContentModel","modelData","response","mutate","mutation","variables","refetchQueries","query","updateContentModel","error","setActiveTabIndex","setData","setter","saveModel","existingHash","newHash","getContentModel","Error","message","catch","ContentModels","List","layoutFieldPlugins","byType","fieldOptions","model","prefixes","layout","contentModel","Provider","createElement"],"sources":["ContentModelEditorProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useReducer } from \"react\";\nimport get from \"lodash/get.js\";\nimport pick from \"lodash/pick.js\";\nimport type { ApolloClient } from \"apollo-client\";\nimport { useSnackbar, useRouter } from \"@webiny/app-admin\";\nimport type {\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables,\n UpdateCmsModelMutationResponse,\n UpdateCmsModelMutationVariables\n} from \"~/admin/graphql/contentModels.js\";\nimport { GET_CONTENT_MODEL, UPDATE_CONTENT_MODEL } from \"~/admin/graphql/contentModels.js\";\nimport { LIST_MENU_CONTENT_GROUPS_MODELS } from \"~/admin/viewsGraphql.js\";\nimport type { CmsModel, CmsModelField } from \"~/types.js\";\nimport type { CmsModelLayoutFieldTypePlugin } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport type { FetchResult } from \"apollo-link\";\nimport { ModelProvider } from \"~/admin/components/ModelProvider/index.js\";\nimport { createHashing } from \"@webiny/app/utils/index.js\";\nimport { Routes } from \"~/routes.js\";\nimport type { FieldOption } from \"@webiny/app-headless-cms-common/Fields/fieldOptions.js\";\nimport {\n buildFieldOptions,\n buildFieldLabelPrefixes\n} from \"@webiny/app-headless-cms-common/Fields/fieldOptions.js\";\nimport { plugins } from \"@webiny/plugins\";\n\nexport interface ContentModelEditorProviderContext {\n apolloClient: ApolloClient<any>;\n data: CmsModel;\n contentModel: CmsModel;\n isPristine: boolean;\n getContentModel: (modelId: string) => Promise<FetchResult<GetCmsModelQueryResponse>>;\n saveContentModel: (\n data?: CmsModel\n ) => Promise<UpdateCmsModelMutationResponse[\"updateContentModel\"]>;\n setData: (setter: (model: CmsModel) => void, saveContentModel?: boolean) => Promise<any>;\n activeTabIndex: number;\n setActiveTabIndex: (index: number) => void;\n fieldOptions: FieldOption[];\n}\n\nexport const contentModelEditorContext = React.createContext<\n ContentModelEditorProviderContext | undefined\n>(undefined);\n\ntype PickedCmsModel = Pick<\n CmsModel,\n \"layout\" | \"fields\" | \"name\" | \"settings\" | \"description\" | \"titleFieldId\" | \"group\"\n>;\ninterface State {\n modelId: string | null;\n isPristine: boolean;\n data: CmsModel;\n activeTabIndex: number;\n}\ninterface Action {\n data: Partial<State> | Partial<CmsModel>;\n type: \"state\" | \"data\";\n}\ninterface Reducer {\n (prev: State, action: Action): State;\n}\nexport const contentModelEditorReducer: Reducer = (prev: State, action: Action): State => {\n const { data, type } = action;\n switch (type) {\n case \"state\":\n return { ...prev, ...data };\n\n case \"data\":\n return { ...prev, data: data as CmsModel };\n default:\n return prev;\n }\n};\n\nconst hashModel = createHashing(\"SHA-256\");\n\n/**\n * Cleanup is required because backend always expects string value in predefined values entries\n */\nconst cleanupModelDataFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.map(field => {\n const { predefinedValues } = field;\n const { enabled = false, values = [] } = predefinedValues || {};\n return {\n ...field,\n predefinedValues: {\n enabled,\n values: values.map(({ label, value, selected }) => {\n return {\n label,\n selected: selected || false,\n value: String(value)\n };\n })\n }\n };\n });\n};\n\nconst cleanupModelData = (data: PickedCmsModel): PickedCmsModel => {\n return {\n ...data,\n fields: cleanupModelDataFields(data.fields)\n };\n};\n\ninterface ContentModelEditorProviderProps {\n apolloClient: ApolloClient<any>;\n modelId?: string;\n children: React.ReactElement;\n}\n\nconst createDefaultState = (modelId?: string): State => {\n return {\n modelId: modelId || null,\n isPristine: true,\n data: null as unknown as CmsModel,\n activeTabIndex: 0\n };\n};\n\nexport const ContentModelEditorProvider = ({\n children,\n apolloClient,\n modelId\n}: ContentModelEditorProviderProps) => {\n const [state, dispatch] = useReducer(contentModelEditorReducer, createDefaultState(modelId));\n\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const setPristine = (flag: boolean): void => {\n dispatch({ type: \"state\", data: { isPristine: flag } });\n };\n\n const saveContentModel = async (\n data?: CmsModel\n ): Promise<UpdateCmsModelMutationResponse[\"updateContentModel\"]> => {\n if (!data) {\n data = state.data;\n }\n const modelData: PickedCmsModel = pick(data, [\n \"group\",\n \"layout\",\n \"fields\",\n \"tags\",\n \"name\",\n \"settings\",\n \"description\",\n \"titleFieldId\",\n \"descriptionFieldId\",\n \"imageFieldId\",\n \"icon\"\n ]);\n const response = await apolloClient.mutate<\n UpdateCmsModelMutationResponse,\n UpdateCmsModelMutationVariables\n >({\n mutation: UPDATE_CONTENT_MODEL,\n variables: {\n modelId: data.modelId,\n data: cleanupModelData(modelData)\n },\n refetchQueries: [\n {\n query: LIST_MENU_CONTENT_GROUPS_MODELS\n }\n ]\n });\n\n setPristine(true);\n\n if (!response.data || !response.data.updateContentModel) {\n return {\n data: null,\n error: null\n };\n }\n\n return response.data.updateContentModel;\n };\n\n const setActiveTabIndex = useCallback((activeTabIndex: number) => {\n dispatch({ type: \"state\", data: { activeTabIndex } });\n }, []);\n\n /**\n * Set form data by providing a callback, which receives a fresh copy of data on which you can work on.\n * Return new data once finished.\n */\n const setData = async (setter: (value: any) => any, saveModel = false): Promise<void> => {\n const data = setter(state.data);\n const existingHash = await hashModel(state.data);\n const newHash = await hashModel(data);\n if (existingHash === newHash) {\n return;\n }\n setPristine(false);\n dispatch({ type: \"data\", data });\n if (!saveModel) {\n return;\n }\n await saveContentModel(data);\n };\n\n const getContentModel = async (\n modelId: string\n ): Promise<FetchResult<GetCmsModelQueryResponse>> => {\n const response = await apolloClient.query<\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables\n >({\n query: GET_CONTENT_MODEL,\n variables: {\n modelId\n }\n });\n\n const { data, error } = get(response, \"data.getContentModel\");\n if (error) {\n throw new Error(error.message);\n }\n\n await setData(() => data, false);\n\n setPristine(true);\n return response;\n };\n\n useEffect(() => {\n if (!modelId) {\n return;\n }\n getContentModel(modelId).catch(() => {\n goToRoute(Routes.ContentModels.List);\n showSnackbar(`Could not load content model with given ID.`);\n });\n }, [modelId]);\n\n const layoutFieldPlugins = plugins.byType<CmsModelLayoutFieldTypePlugin>(\n \"cms-editor-layout-field-type\"\n );\n\n const fieldOptions = useMemo(() => {\n const model = state.data;\n if (!model) {\n return [];\n }\n const prefixes = model.layout\n ? buildFieldLabelPrefixes(model.layout, layoutFieldPlugins)\n : undefined;\n return buildFieldOptions(model.fields ?? [], \"\", \"\", prefixes, layoutFieldPlugins);\n }, [state.data?.fields, state.data?.layout]);\n\n const value = useMemo<ContentModelEditorProviderContext>(\n () => ({\n // Keeping `data` for compatibility\n data: state.data,\n contentModel: state.data,\n modelId,\n apolloClient,\n dispatch,\n isPristine: state.isPristine,\n getContentModel,\n saveContentModel,\n setData,\n activeTabIndex: state.activeTabIndex,\n setActiveTabIndex,\n fieldOptions\n }),\n [state, apolloClient, fieldOptions]\n );\n\n const { Provider } = contentModelEditorContext;\n\n return (\n <Provider value={value}>\n <ModelProvider model={value.contentModel}>{children}</ModelProvider>\n </Provider>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["React","plugins","Draggable","Heading","Icon","Text","Field","props","onFieldDragStart","fieldType","type","label","icon","description","createElement","beginDrag","drag","ref","onDragStart","className","size","color","level","LayoutFieldItem","layoutField","layoutFieldType","FieldsSidebar","fieldTypePlugin","byType","filter","p","field","hideInAdmin","layoutFieldPlugins","Fragment","as","map","fieldPlugin","key","length","lp"],"sources":["FieldsSidebar.tsx"],"sourcesContent":["import type { DragEventHandler } from \"react\";\nimport React from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport Draggable from \"../Draggable.js\";\nimport type { CmsModelFieldTypePlugin, CmsLayoutFieldTypePlugin } from \"~/types.js\";\nimport { Heading, Icon, Text } from \"@webiny/admin-ui\";\n\ninterface FieldProps {\n onFieldDragStart: DragEventHandler;\n fieldType: CmsModelFieldTypePlugin[\"field\"];\n}\n\nconst Field = (props: FieldProps) => {\n const {\n onFieldDragStart,\n fieldType: { type, label, icon, description }\n } = props;\n return (\n <Draggable beginDrag={{ type: \"newField\", fieldType: type }}>\n {({ drag }) => (\n <div\n ref={drag}\n data-testid={`cms-editor-fields-field-${type}`}\n onDragStart={onFieldDragStart}\n className={\n \"bg-neutral-base rounded-sm mb-sm py-sm px-md cursor-grab last-of-type:mb-none hover:opacity-80 transition-opacity\"\n }\n >\n <div className={\"flex items-center gap-md\"}>\n <div>\n <Icon\n icon={icon as React.ReactElement}\n label={label}\n size={\"md\"}\n color={\"neutral-light\"}\n />\n </div>\n <div>\n <Heading level={6}>{label}</Heading>\n <Text size={\"sm\"} className={\"text-neutral-strong\"}>\n {description}\n </Text>\n </div>\n </div>\n </div>\n )}\n </Draggable>\n );\n};\n\ninterface LayoutFieldItemProps {\n onFieldDragStart: DragEventHandler;\n layoutField: CmsLayoutFieldTypePlugin[\"field\"];\n}\n\nconst LayoutFieldItem = (props: LayoutFieldItemProps) => {\n const {\n onFieldDragStart,\n layoutField: { type, label, icon, description }\n } = props;\n return (\n <Draggable beginDrag={{ type: \"newLayoutField\", layoutFieldType: type }}>\n {({ drag }) => (\n <div\n ref={drag}\n data-testid={`cms-editor-fields-layout-field-${type}`}\n onDragStart={onFieldDragStart}\n className={\n \"bg-neutral-base rounded-sm mb-sm py-sm px-md cursor-grab last-of-type:mb-none hover:opacity-80 transition-opacity\"\n }\n >\n <div className={\"flex items-center gap-md\"}>\n <div>\n <Icon icon={icon} label={label} size={\"md\"} color={\"neutral-light\"} />\n </div>\n <div>\n <Heading level={6}>{label}</Heading>\n <Text size={\"sm\"} className={\"text-neutral-strong\"}>\n {description}\n </Text>\n </div>\n </div>\n </div>\n )}\n </Draggable>\n );\n};\n\ninterface FieldsSidebarProps {\n onFieldDragStart: DragEventHandler;\n}\n\nexport const FieldsSidebar = ({ onFieldDragStart }: FieldsSidebarProps) => {\n const fieldTypePlugin = plugins\n .byType<CmsModelFieldTypePlugin>(\"cms-editor-field-type\")\n .filter(p => !p.field.hideInAdmin);\n\n const layoutFieldPlugins = plugins.byType<CmsLayoutFieldTypePlugin>(\n \"cms-editor-layout-field-type\"\n );\n\n return (\n <>\n <Text\n as=\"div\"\n size={\"md\"}\n className={\"text-neutral-strong uppercase mt-0 mb-md font-semibold\"}\n >\n Fields\n </Text>\n {fieldTypePlugin.map(fieldPlugin => (\n <Field\n key={fieldPlugin.field.type}\n fieldType={fieldPlugin.field}\n onFieldDragStart={onFieldDragStart}\n />\n ))}\n {layoutFieldPlugins.length > 0 && (\n <>\n <Text\n as=\"div\"\n size={\"md\"}\n className={\"text-neutral-strong uppercase my-md font-semibold\"}\n >\n Layout\n </Text>\n {layoutFieldPlugins.map(lp => (\n <LayoutFieldItem\n key={lp.field.type}\n layoutField={lp.field}\n onFieldDragStart={onFieldDragStart}\n />\n ))}\n </>\n )}\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","plugins","Draggable","Heading","Icon","Text","Field","props","onFieldDragStart","fieldType","type","label","icon","description","createElement","beginDrag","drag","ref","onDragStart","className","size","color","level","LayoutFieldItem","layoutField","layoutFieldType","FieldsSidebar","fieldTypePlugin","byType","filter","p","field","hideInAdmin","layoutFieldPlugins","Fragment","as","map","fieldPlugin","key","length","lp"],"sources":["FieldsSidebar.tsx"],"sourcesContent":["import type { DragEventHandler } from \"react\";\nimport React from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport Draggable from \"../Draggable.js\";\nimport type { CmsModelFieldTypePlugin, CmsModelLayoutFieldTypePlugin } from \"~/types.js\";\nimport { Heading, Icon, Text } from \"@webiny/admin-ui\";\n\ninterface FieldProps {\n onFieldDragStart: DragEventHandler;\n fieldType: CmsModelFieldTypePlugin[\"field\"];\n}\n\nconst Field = (props: FieldProps) => {\n const {\n onFieldDragStart,\n fieldType: { type, label, icon, description }\n } = props;\n return (\n <Draggable beginDrag={{ type: \"newField\", fieldType: type }}>\n {({ drag }) => (\n <div\n ref={drag}\n data-testid={`cms-editor-fields-field-${type}`}\n onDragStart={onFieldDragStart}\n className={\n \"bg-neutral-base rounded-sm mb-sm py-sm px-md cursor-grab last-of-type:mb-none hover:opacity-80 transition-opacity\"\n }\n >\n <div className={\"flex items-center gap-md\"}>\n <div>\n <Icon\n icon={icon as React.ReactElement}\n label={label}\n size={\"md\"}\n color={\"neutral-light\"}\n />\n </div>\n <div>\n <Heading level={6}>{label}</Heading>\n <Text size={\"sm\"} className={\"text-neutral-strong\"}>\n {description}\n </Text>\n </div>\n </div>\n </div>\n )}\n </Draggable>\n );\n};\n\ninterface LayoutFieldItemProps {\n onFieldDragStart: DragEventHandler;\n layoutField: CmsModelLayoutFieldTypePlugin[\"field\"];\n}\n\nconst LayoutFieldItem = (props: LayoutFieldItemProps) => {\n const {\n onFieldDragStart,\n layoutField: { type, label, icon, description }\n } = props;\n return (\n <Draggable beginDrag={{ type: \"newLayoutField\", layoutFieldType: type }}>\n {({ drag }) => (\n <div\n ref={drag}\n data-testid={`cms-editor-fields-layout-field-${type}`}\n onDragStart={onFieldDragStart}\n className={\n \"bg-neutral-base rounded-sm mb-sm py-sm px-md cursor-grab last-of-type:mb-none hover:opacity-80 transition-opacity\"\n }\n >\n <div className={\"flex items-center gap-md\"}>\n <div>\n <Icon icon={icon} label={label} size={\"md\"} color={\"neutral-light\"} />\n </div>\n <div>\n <Heading level={6}>{label}</Heading>\n <Text size={\"sm\"} className={\"text-neutral-strong\"}>\n {description}\n </Text>\n </div>\n </div>\n </div>\n )}\n </Draggable>\n );\n};\n\ninterface FieldsSidebarProps {\n onFieldDragStart: DragEventHandler;\n}\n\nexport const FieldsSidebar = ({ onFieldDragStart }: FieldsSidebarProps) => {\n const fieldTypePlugin = plugins\n .byType<CmsModelFieldTypePlugin>(\"cms-editor-field-type\")\n .filter(p => !p.field.hideInAdmin);\n\n const layoutFieldPlugins = plugins.byType<CmsModelLayoutFieldTypePlugin>(\n \"cms-editor-layout-field-type\"\n );\n\n return (\n <>\n <Text\n as=\"div\"\n size={\"md\"}\n className={\"text-neutral-strong uppercase mt-0 mb-md font-semibold\"}\n >\n Fields\n </Text>\n {fieldTypePlugin.map(fieldPlugin => (\n <Field\n key={fieldPlugin.field.type}\n fieldType={fieldPlugin.field}\n onFieldDragStart={onFieldDragStart}\n />\n ))}\n {layoutFieldPlugins.length > 0 && (\n <>\n <Text\n as=\"div\"\n size={\"md\"}\n className={\"text-neutral-strong uppercase my-md font-semibold\"}\n >\n Layout\n </Text>\n {layoutFieldPlugins.map(lp => (\n <LayoutFieldItem\n key={lp.field.type}\n layoutField={lp.field}\n onFieldDragStart={onFieldDragStart}\n />\n ))}\n </>\n )}\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { CmsModelField, CmsEditorFieldTypePlugin, CmsModelFieldValidatorPlugin } from "../../../../types.js";
1
+ import type { CmsModelField, CmsModelFieldTypePlugin, CmsModelFieldValidatorPlugin } from "../../../../types.js";
2
2
  import { CmsModelFieldValidatorConfigAdapter } from "../../../../utils/CmsModelFieldValidatorConfigAdapter.js";
3
3
  export interface Validator {
4
4
  optional: boolean;
@@ -9,5 +9,5 @@ export interface ValidationSection {
9
9
  description?: string;
10
10
  validators: CmsModelFieldValidatorConfigAdapter[];
11
11
  }
12
- export declare const getListValidators: (field: CmsModelField, fieldPlugin: CmsEditorFieldTypePlugin) => ValidationSection;
13
- export declare const getFieldValidators: (field: CmsModelField, fieldPlugin: CmsEditorFieldTypePlugin) => ValidationSection;
12
+ export declare const getListValidators: (field: CmsModelField, fieldPlugin: CmsModelFieldTypePlugin) => ValidationSection;
13
+ export declare const getFieldValidators: (field: CmsModelField, fieldPlugin: CmsModelFieldTypePlugin) => ValidationSection;
@@ -1 +1 @@
1
- {"version":3,"names":["plugins","CmsModelFieldValidatorConfigAdapter","isValidatorDefinition","obj","Array","isArray","isValidatorDefinitionFactory","getValidatorPlugin","name","plugin","byType","find","validator","Error","getValidatorConfigs","field","validators","configs","resolvedValidator","push","getValidators","fieldPlugin","key","defaultValidators","title","description","fieldValidators","resolvedValidators","getListValidators","getFieldValidators"],"sources":["getValidators.ts"],"sourcesContent":["import { plugins } from \"@webiny/plugins\";\nimport type {\n CmsModelField,\n CmsEditorFieldTypePlugin,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorsGroup,\n CmsModelFieldValidatorConfig,\n CmsModelFieldValidatorsFactory\n} from \"~/types.js\";\nimport { CmsModelFieldValidatorConfigAdapter } from \"~/utils/CmsModelFieldValidatorConfigAdapter.js\";\n\nexport interface Validator {\n optional: boolean;\n validator: CmsModelFieldValidatorPlugin[\"validator\"];\n}\n\nconst isValidatorDefinition = (obj: unknown): obj is CmsModelFieldValidatorsGroup => {\n return obj ? !Array.isArray(obj) : false;\n};\n\nconst isValidatorDefinitionFactory = (obj: unknown): obj is CmsModelFieldValidatorsFactory => {\n return typeof obj === \"function\";\n};\n\ninterface GetValidatorsParams {\n field: CmsModelField;\n fieldPlugin: CmsEditorFieldTypePlugin;\n key: \"validators\" | \"listValidators\";\n defaultValidators: string[];\n}\n\nexport interface ValidationSection {\n title?: string;\n description?: string;\n validators: CmsModelFieldValidatorConfigAdapter[];\n}\n\nconst getValidatorPlugin = (name: string) => {\n const plugin = plugins\n .byType<CmsModelFieldValidatorPlugin>(\"cms-model-field-validator\")\n .find(plugin => plugin.validator.name === name);\n\n if (!plugin) {\n throw new Error(`Missing CMS field validator plugin \"${name}\"!`);\n }\n\n return plugin.validator as CmsModelFieldValidatorConfig;\n};\n\nconst getValidatorConfigs = (\n field: CmsModelField,\n validators: Array<CmsModelFieldValidatorConfig | string>\n) => {\n const configs: CmsModelFieldValidatorConfigAdapter[] = [];\n\n for (const validator of validators) {\n let resolvedValidator;\n if (typeof validator === \"string\") {\n resolvedValidator = getValidatorPlugin(validator);\n } else {\n resolvedValidator = validator;\n }\n\n configs.push(new CmsModelFieldValidatorConfigAdapter(field, resolvedValidator));\n }\n\n return configs;\n};\n\nconst getValidators = ({\n field,\n fieldPlugin,\n key,\n defaultValidators\n}: GetValidatorsParams): ValidationSection => {\n let title = \"\";\n let description = \"\";\n let fieldValidators = fieldPlugin.field[key];\n\n if (isValidatorDefinitionFactory(fieldValidators)) {\n fieldValidators = fieldValidators(field);\n }\n\n let resolvedValidators: (string | CmsModelFieldValidatorConfig)[] | undefined;\n if (isValidatorDefinition(fieldValidators)) {\n title = fieldValidators.title || \"\";\n description = fieldValidators.description || \"\";\n resolvedValidators = fieldValidators.validators;\n } else {\n resolvedValidators = fieldValidators;\n }\n\n const validators = getValidatorConfigs(field, resolvedValidators || defaultValidators);\n\n return {\n title,\n description,\n validators\n };\n};\n\nexport const getListValidators = (field: CmsModelField, fieldPlugin: CmsEditorFieldTypePlugin) => {\n return getValidators({\n field,\n fieldPlugin,\n key: \"listValidators\",\n defaultValidators: [\"minLength\", \"maxLength\"]\n });\n};\n\nexport const getFieldValidators = (field: CmsModelField, fieldPlugin: CmsEditorFieldTypePlugin) => {\n return getValidators({\n field,\n fieldPlugin,\n key: \"validators\",\n defaultValidators: []\n });\n};\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,iBAAiB;AASzC,SAASC,mCAAmC;AAO5C,MAAMC,qBAAqB,GAAIC,GAAY,IAA0C;EACjF,OAAOA,GAAG,GAAG,CAACC,KAAK,CAACC,OAAO,CAACF,GAAG,CAAC,GAAG,KAAK;AAC5C,CAAC;AAED,MAAMG,4BAA4B,GAAIH,GAAY,IAA4C;EAC1F,OAAO,OAAOA,GAAG,KAAK,UAAU;AACpC,CAAC;AAeD,MAAMI,kBAAkB,GAAIC,IAAY,IAAK;EACzC,MAAMC,MAAM,GAAGT,OAAO,CACjBU,MAAM,CAA+B,2BAA2B,CAAC,CACjEC,IAAI,CAACF,MAAM,IAAIA,MAAM,CAACG,SAAS,CAACJ,IAAI,KAAKA,IAAI,CAAC;EAEnD,IAAI,CAACC,MAAM,EAAE;IACT,MAAM,IAAII,KAAK,CAAC,uCAAuCL,IAAI,IAAI,CAAC;EACpE;EAEA,OAAOC,MAAM,CAACG,SAAS;AAC3B,CAAC;AAED,MAAME,mBAAmB,GAAGA,CACxBC,KAAoB,EACpBC,UAAwD,KACvD;EACD,MAAMC,OAA8C,GAAG,EAAE;EAEzD,KAAK,MAAML,SAAS,IAAII,UAAU,EAAE;IAChC,IAAIE,iBAAiB;IACrB,IAAI,OAAON,SAAS,KAAK,QAAQ,EAAE;MAC/BM,iBAAiB,GAAGX,kBAAkB,CAACK,SAAS,CAAC;IACrD,CAAC,MAAM;MACHM,iBAAiB,GAAGN,SAAS;IACjC;IAEAK,OAAO,CAACE,IAAI,CAAC,IAAIlB,mCAAmC,CAACc,KAAK,EAAEG,iBAAiB,CAAC,CAAC;EACnF;EAEA,OAAOD,OAAO;AAClB,CAAC;AAED,MAAMG,aAAa,GAAGA,CAAC;EACnBL,KAAK;EACLM,WAAW;EACXC,GAAG;EACHC;AACiB,CAAC,KAAwB;EAC1C,IAAIC,KAAK,GAAG,EAAE;EACd,IAAIC,WAAW,GAAG,EAAE;EACpB,IAAIC,eAAe,GAAGL,WAAW,CAACN,KAAK,CAACO,GAAG,CAAC;EAE5C,IAAIhB,4BAA4B,CAACoB,eAAe,CAAC,EAAE;IAC/CA,eAAe,GAAGA,eAAe,CAACX,KAAK,CAAC;EAC5C;EAEA,IAAIY,kBAAyE;EAC7E,IAAIzB,qBAAqB,CAACwB,eAAe,CAAC,EAAE;IACxCF,KAAK,GAAGE,eAAe,CAACF,KAAK,IAAI,EAAE;IACnCC,WAAW,GAAGC,eAAe,CAACD,WAAW,IAAI,EAAE;IAC/CE,kBAAkB,GAAGD,eAAe,CAACV,UAAU;EACnD,CAAC,MAAM;IACHW,kBAAkB,GAAGD,eAAe;EACxC;EAEA,MAAMV,UAAU,GAAGF,mBAAmB,CAACC,KAAK,EAAEY,kBAAkB,IAAIJ,iBAAiB,CAAC;EAEtF,OAAO;IACHC,KAAK;IACLC,WAAW;IACXT;EACJ,CAAC;AACL,CAAC;AAED,OAAO,MAAMY,iBAAiB,GAAGA,CAACb,KAAoB,EAAEM,WAAqC,KAAK;EAC9F,OAAOD,aAAa,CAAC;IACjBL,KAAK;IACLM,WAAW;IACXC,GAAG,EAAE,gBAAgB;IACrBC,iBAAiB,EAAE,CAAC,WAAW,EAAE,WAAW;EAChD,CAAC,CAAC;AACN,CAAC;AAED,OAAO,MAAMM,kBAAkB,GAAGA,CAACd,KAAoB,EAAEM,WAAqC,KAAK;EAC/F,OAAOD,aAAa,CAAC;IACjBL,KAAK;IACLM,WAAW;IACXC,GAAG,EAAE,YAAY;IACjBC,iBAAiB,EAAE;EACvB,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["plugins","CmsModelFieldValidatorConfigAdapter","isValidatorDefinition","obj","Array","isArray","isValidatorDefinitionFactory","getValidatorPlugin","name","plugin","byType","find","validator","Error","getValidatorConfigs","field","validators","configs","resolvedValidator","push","getValidators","fieldPlugin","key","defaultValidators","title","description","fieldValidators","resolvedValidators","getListValidators","getFieldValidators"],"sources":["getValidators.ts"],"sourcesContent":["import { plugins } from \"@webiny/plugins\";\nimport type {\n CmsModelField,\n CmsModelFieldTypePlugin,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorsGroup,\n CmsModelFieldValidatorConfig,\n CmsModelFieldValidatorsFactory\n} from \"~/types.js\";\nimport { CmsModelFieldValidatorConfigAdapter } from \"~/utils/CmsModelFieldValidatorConfigAdapter.js\";\n\nexport interface Validator {\n optional: boolean;\n validator: CmsModelFieldValidatorPlugin[\"validator\"];\n}\n\nconst isValidatorDefinition = (obj: unknown): obj is CmsModelFieldValidatorsGroup => {\n return obj ? !Array.isArray(obj) : false;\n};\n\nconst isValidatorDefinitionFactory = (obj: unknown): obj is CmsModelFieldValidatorsFactory => {\n return typeof obj === \"function\";\n};\n\ninterface GetValidatorsParams {\n field: CmsModelField;\n fieldPlugin: CmsModelFieldTypePlugin;\n key: \"validators\" | \"listValidators\";\n defaultValidators: string[];\n}\n\nexport interface ValidationSection {\n title?: string;\n description?: string;\n validators: CmsModelFieldValidatorConfigAdapter[];\n}\n\nconst getValidatorPlugin = (name: string) => {\n const plugin = plugins\n .byType<CmsModelFieldValidatorPlugin>(\"cms-model-field-validator\")\n .find(plugin => plugin.validator.name === name);\n\n if (!plugin) {\n throw new Error(`Missing CMS field validator plugin \"${name}\"!`);\n }\n\n return plugin.validator as CmsModelFieldValidatorConfig;\n};\n\nconst getValidatorConfigs = (\n field: CmsModelField,\n validators: Array<CmsModelFieldValidatorConfig | string>\n) => {\n const configs: CmsModelFieldValidatorConfigAdapter[] = [];\n\n for (const validator of validators) {\n let resolvedValidator;\n if (typeof validator === \"string\") {\n resolvedValidator = getValidatorPlugin(validator);\n } else {\n resolvedValidator = validator;\n }\n\n configs.push(new CmsModelFieldValidatorConfigAdapter(field, resolvedValidator));\n }\n\n return configs;\n};\n\nconst getValidators = ({\n field,\n fieldPlugin,\n key,\n defaultValidators\n}: GetValidatorsParams): ValidationSection => {\n let title = \"\";\n let description = \"\";\n let fieldValidators = fieldPlugin.field[key];\n\n if (isValidatorDefinitionFactory(fieldValidators)) {\n fieldValidators = fieldValidators(field);\n }\n\n let resolvedValidators: (string | CmsModelFieldValidatorConfig)[] | undefined;\n if (isValidatorDefinition(fieldValidators)) {\n title = fieldValidators.title || \"\";\n description = fieldValidators.description || \"\";\n resolvedValidators = fieldValidators.validators;\n } else {\n resolvedValidators = fieldValidators;\n }\n\n const validators = getValidatorConfigs(field, resolvedValidators || defaultValidators);\n\n return {\n title,\n description,\n validators\n };\n};\n\nexport const getListValidators = (field: CmsModelField, fieldPlugin: CmsModelFieldTypePlugin) => {\n return getValidators({\n field,\n fieldPlugin,\n key: \"listValidators\",\n defaultValidators: [\"minLength\", \"maxLength\"]\n });\n};\n\nexport const getFieldValidators = (field: CmsModelField, fieldPlugin: CmsModelFieldTypePlugin) => {\n return getValidators({\n field,\n fieldPlugin,\n key: \"validators\",\n defaultValidators: []\n });\n};\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,iBAAiB;AASzC,SAASC,mCAAmC;AAO5C,MAAMC,qBAAqB,GAAIC,GAAY,IAA0C;EACjF,OAAOA,GAAG,GAAG,CAACC,KAAK,CAACC,OAAO,CAACF,GAAG,CAAC,GAAG,KAAK;AAC5C,CAAC;AAED,MAAMG,4BAA4B,GAAIH,GAAY,IAA4C;EAC1F,OAAO,OAAOA,GAAG,KAAK,UAAU;AACpC,CAAC;AAeD,MAAMI,kBAAkB,GAAIC,IAAY,IAAK;EACzC,MAAMC,MAAM,GAAGT,OAAO,CACjBU,MAAM,CAA+B,2BAA2B,CAAC,CACjEC,IAAI,CAACF,MAAM,IAAIA,MAAM,CAACG,SAAS,CAACJ,IAAI,KAAKA,IAAI,CAAC;EAEnD,IAAI,CAACC,MAAM,EAAE;IACT,MAAM,IAAII,KAAK,CAAC,uCAAuCL,IAAI,IAAI,CAAC;EACpE;EAEA,OAAOC,MAAM,CAACG,SAAS;AAC3B,CAAC;AAED,MAAME,mBAAmB,GAAGA,CACxBC,KAAoB,EACpBC,UAAwD,KACvD;EACD,MAAMC,OAA8C,GAAG,EAAE;EAEzD,KAAK,MAAML,SAAS,IAAII,UAAU,EAAE;IAChC,IAAIE,iBAAiB;IACrB,IAAI,OAAON,SAAS,KAAK,QAAQ,EAAE;MAC/BM,iBAAiB,GAAGX,kBAAkB,CAACK,SAAS,CAAC;IACrD,CAAC,MAAM;MACHM,iBAAiB,GAAGN,SAAS;IACjC;IAEAK,OAAO,CAACE,IAAI,CAAC,IAAIlB,mCAAmC,CAACc,KAAK,EAAEG,iBAAiB,CAAC,CAAC;EACnF;EAEA,OAAOD,OAAO;AAClB,CAAC;AAED,MAAMG,aAAa,GAAGA,CAAC;EACnBL,KAAK;EACLM,WAAW;EACXC,GAAG;EACHC;AACiB,CAAC,KAAwB;EAC1C,IAAIC,KAAK,GAAG,EAAE;EACd,IAAIC,WAAW,GAAG,EAAE;EACpB,IAAIC,eAAe,GAAGL,WAAW,CAACN,KAAK,CAACO,GAAG,CAAC;EAE5C,IAAIhB,4BAA4B,CAACoB,eAAe,CAAC,EAAE;IAC/CA,eAAe,GAAGA,eAAe,CAACX,KAAK,CAAC;EAC5C;EAEA,IAAIY,kBAAyE;EAC7E,IAAIzB,qBAAqB,CAACwB,eAAe,CAAC,EAAE;IACxCF,KAAK,GAAGE,eAAe,CAACF,KAAK,IAAI,EAAE;IACnCC,WAAW,GAAGC,eAAe,CAACD,WAAW,IAAI,EAAE;IAC/CE,kBAAkB,GAAGD,eAAe,CAACV,UAAU;EACnD,CAAC,MAAM;IACHW,kBAAkB,GAAGD,eAAe;EACxC;EAEA,MAAMV,UAAU,GAAGF,mBAAmB,CAACC,KAAK,EAAEY,kBAAkB,IAAIJ,iBAAiB,CAAC;EAEtF,OAAO;IACHC,KAAK;IACLC,WAAW;IACXT;EACJ,CAAC;AACL,CAAC;AAED,OAAO,MAAMY,iBAAiB,GAAGA,CAACb,KAAoB,EAAEM,WAAoC,KAAK;EAC7F,OAAOD,aAAa,CAAC;IACjBL,KAAK;IACLM,WAAW;IACXC,GAAG,EAAE,gBAAgB;IACrBC,iBAAiB,EAAE,CAAC,WAAW,EAAE,WAAW;EAChD,CAAC,CAAC;AACN,CAAC;AAED,OAAO,MAAMM,kBAAkB,GAAGA,CAACd,KAAoB,EAAEM,WAAoC,KAAK;EAC9F,OAAOD,aAAa,CAAC;IACjBL,KAAK;IACLM,WAAW;IACXC,GAAG,EAAE,YAAY;IACjBC,iBAAiB,EAAE;EACvB,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
@@ -9,7 +9,7 @@ import Field from "./Field.js";
9
9
  import { LayoutCell } from "./LayoutCell.js";
10
10
  import { useModelFieldEditor } from "./useModelFieldEditor.js";
11
11
  import { FieldEditorProvider } from "./FieldEditorContext.js";
12
- import { isLayoutDescriptor } from "@webiny/app-headless-cms-common/types/model.js";
12
+ import { isLayoutField } from "@webiny/app-headless-cms-common/types/model.js";
13
13
  import { ModelFieldProvider } from "../ModelFieldProvider/index.js";
14
14
  import { cn, Icon } from "@webiny/admin-ui";
15
15
  const t = i18n.namespace("app-headless-cms/admin/components/editor");
@@ -37,13 +37,13 @@ const Editor = () => {
37
37
  * Collect all data fields referenced inside a layout descriptor (e.g. fields inside tabs).
38
38
  * Delegates to the layout field plugin's `collectFields` method if available.
39
39
  */
40
- const collectDescriptorFields = descriptor => {
41
- const plugin = getLayoutFieldPlugin(descriptor.type);
40
+ const collectLayoutFieldFields = layoutField => {
41
+ const plugin = getLayoutFieldPlugin(layoutField.type);
42
42
  if (!plugin?.field.collectFields) {
43
43
  return [];
44
44
  }
45
45
  return plugin.field.collectFields({
46
- descriptor,
46
+ field: layoutField,
47
47
  getField: id => getField({
48
48
  id
49
49
  })
@@ -101,12 +101,12 @@ const Editor = () => {
101
101
  })
102
102
  }, t`Drop your first field here`), fields.map((row, index) => {
103
103
  // Build a stable key for the row
104
- const rowKey = row.map(cell => isLayoutDescriptor(cell) ? cell.id : cell.fieldId).join(".");
104
+ const rowKey = row.map(cell => isLayoutField(cell) ? cell.id : cell.fieldId).join(".");
105
105
  return /*#__PURE__*/React.createElement(Draggable, {
106
106
  beginDrag: {
107
107
  parent: parent ? parent.fieldId : null,
108
108
  type: "row",
109
- fields: row.filter(cell => !isLayoutDescriptor(cell)),
109
+ fields: row.filter(cell => !isLayoutField(cell)),
110
110
  pos: {
111
111
  row: index
112
112
  }
@@ -137,14 +137,14 @@ const Editor = () => {
137
137
  className: cn(["w-full flex justify-between", "pl-xl pr-sm py-sm"]),
138
138
  "data-testid": "cms.editor.field-row"
139
139
  }, row.map((cell, fieldIndex) => {
140
- if (isLayoutDescriptor(cell)) {
140
+ if (isLayoutField(cell)) {
141
141
  return /*#__PURE__*/React.createElement(Draggable, {
142
142
  key: cell.id,
143
143
  beginDrag: {
144
144
  parent: parent ? parent.fieldId : null,
145
145
  type: "layoutField",
146
- descriptor: cell,
147
- fields: collectDescriptorFields(cell)
146
+ layoutField: cell,
147
+ fields: collectLayoutFieldFields(cell)
148
148
  },
149
149
  endDrag: onEndDrag
150
150
  }, ({
@@ -155,7 +155,7 @@ const Editor = () => {
155
155
  }, /*#__PURE__*/React.createElement("div", {
156
156
  className: "cursor-grab bg-neutral-base p-md shadow-sm rounded-xs"
157
157
  }, /*#__PURE__*/React.createElement(LayoutCell, {
158
- descriptor: cell,
158
+ field: cell,
159
159
  rowIndex: index,
160
160
  cellIndex: fieldIndex
161
161
  }))));
@@ -1 +1 @@
1
- {"version":3,"names":["React","Fragment","get","i18n","ReactComponent","DragIcon","Center","Horizontal","Vertical","Draggable","EditFieldDialog","Field","LayoutCell","useModelFieldEditor","FieldEditorProvider","isLayoutDescriptor","ModelFieldProvider","cn","Icon","t","namespace","fieldTypes","Editor","parent","depth","insertField","updateField","deleteField","fields","noConflict","editField","onFieldDrop","onEndDrag","field","dropTarget","getFieldPlugin","getLayoutFieldPlugin","getField","collectDescriptorFields","descriptor","plugin","type","collectFields","id","canDropIntoField","draggable","fieldPlugin","canAccept","isVerticalDropzoneVisible","cb","item","allowLayout","isHorizontalDropzoneVisible","createElement","length","isDroppable","onDrop","row","index","map","rowKey","cell","fieldId","join","beginDrag","filter","pos","endDrag","key","drag","isDragging","className","ref","icon","label","color","size","isVisible","fieldIndex","rowIndex","cellIndex","includes","onEdit","onDelete","last","onClose","onSubmit","position","FieldEditor","props"],"sources":["FieldEditor.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport get from \"lodash/get.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { ReactComponent as DragIcon } from \"@webiny/icons/drag_indicator.svg\";\nimport { Center, Horizontal, Vertical } from \"../DropZone/index.js\";\nimport Draggable from \"../Draggable.js\";\nimport EditFieldDialog from \"./EditFieldDialog.js\";\nimport Field from \"./Field.js\";\nimport { LayoutCell } from \"./LayoutCell.js\";\nimport { useModelFieldEditor } from \"./useModelFieldEditor.js\";\nimport type { IsVisibleCallable } from \"./FieldEditorContext.js\";\nimport { FieldEditorProvider } from \"./FieldEditorContext.js\";\nimport type { CmsEditorFieldsLayout, CmsModelField, DragSource } from \"~/types.js\";\nimport type { CmsLayoutDescriptor } from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { isLayoutDescriptor } from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { ModelFieldProvider } from \"~/admin/components/ModelFieldProvider/index.js\";\nimport { cn, Icon } from \"@webiny/admin-ui\";\n\nconst t = i18n.namespace(\"app-headless-cms/admin/components/editor\");\n\nconst fieldTypes: string[] = [\"field\", \"newField\"];\n\nconst Editor = () => {\n const {\n parent,\n depth,\n insertField,\n updateField,\n deleteField,\n fields,\n noConflict,\n editField,\n onFieldDrop,\n onEndDrag,\n field,\n dropTarget,\n getFieldPlugin,\n getLayoutFieldPlugin,\n getField\n } = useModelFieldEditor();\n\n /**\n * Collect all data fields referenced inside a layout descriptor (e.g. fields inside tabs).\n * Delegates to the layout field plugin's `collectFields` method if available.\n */\n const collectDescriptorFields = (descriptor: CmsLayoutDescriptor): CmsModelField[] => {\n const plugin = getLayoutFieldPlugin(descriptor.type);\n if (!plugin?.field.collectFields) {\n return [];\n }\n return plugin.field.collectFields({\n descriptor,\n getField: (id: string) => getField({ id })\n });\n };\n\n const canDropIntoField = (field: CmsModelField, draggable: DragSource) => {\n const fieldPlugin = getFieldPlugin(field.type);\n if (!fieldPlugin) {\n return true;\n }\n const canAccept = fieldPlugin.field.canAccept;\n if (typeof canAccept === \"function\" && !canAccept(field, draggable)) {\n return false;\n }\n\n return true;\n };\n\n const isVerticalDropzoneVisible = (cb: IsVisibleCallable) => {\n return (item: DragSource) => {\n // Layout fields always occupy full row — no side-by-side layout\n if (item.type === \"newLayoutField\" || item.type === \"layoutField\") {\n return false;\n }\n\n if (!parent) {\n return cb(item);\n }\n\n const fieldPlugin = getFieldPlugin(parent.type);\n if (fieldPlugin) {\n const allowLayout = fieldPlugin.field.allowLayout ?? true;\n if (!allowLayout) {\n return false;\n }\n }\n\n if (!canDropIntoField(parent, item)) {\n return false;\n }\n\n return cb(item);\n };\n };\n\n const isHorizontalDropzoneVisible = (cb: IsVisibleCallable) => {\n return (item: DragSource) => {\n if (!parent) {\n return cb(item);\n }\n\n if (!canDropIntoField(parent, item)) {\n return false;\n }\n\n return cb(item);\n };\n };\n\n return (\n <Fragment>\n {fields.length === 0 && (\n <Center\n isDroppable={isHorizontalDropzoneVisible(() => true)}\n onDrop={item =>\n onFieldDrop(item, {\n row: 0,\n index: 0\n })\n }\n >\n {t`Drop your first field here`}\n </Center>\n )}\n\n {fields.map((row, index) => {\n // Build a stable key for the row\n const rowKey = row\n .map(cell =>\n isLayoutDescriptor(cell) ? cell.id : (cell as CmsModelField).fieldId\n )\n .join(\".\");\n\n return (\n <Draggable\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"row\",\n fields: row.filter(\n cell => !isLayoutDescriptor(cell)\n ) as CmsModelField[],\n pos: { row: index }\n }}\n endDrag={onEndDrag}\n key={rowKey}\n >\n {(\n {\n drag,\n isDragging\n } /* RowContainer start - includes drag handle, drop zones and the Row itself. */\n ) => (\n <div\n className={cn([\n \"flex flex-column\",\n \"relative\",\n \"mb-md last-of-type:mb-none\",\n \"bg-neutral-dimmed\",\n isDragging ? \"opacity-30\" : \"opacity-100\"\n ])}\n >\n <div\n className={cn([\n \"cursor-grab\",\n \"absolute left-sm-plus top-sm-plus z-10\"\n ])}\n ref={drag}\n >\n <Icon\n icon={<DragIcon />}\n label={\"Drag to move this row\"}\n color={\"neutral-light\"}\n size={\"sm\"}\n />\n </div>\n <Horizontal\n isVisible={isHorizontalDropzoneVisible(noConflict())}\n data-testid={`cms-editor-row-droppable-top-${index}`}\n onDrop={item => onFieldDrop(item, { row: index, index: null })}\n />\n {/* Row start - includes field drop zones and fields */}\n <div\n className={cn([\n \"w-full flex justify-between\",\n \"pl-xl pr-sm py-sm\"\n ])}\n data-testid={\"cms.editor.field-row\"}\n >\n {row.map((cell, fieldIndex) => {\n if (isLayoutDescriptor(cell)) {\n return (\n <Draggable\n key={cell.id}\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"layoutField\",\n descriptor: cell,\n fields: collectDescriptorFields(cell)\n }}\n endDrag={onEndDrag}\n >\n {({ drag }) => (\n <div\n ref={drag}\n className={cn([\n \"relative\",\n \"flex-1 basis-full\",\n \"mx-sm\"\n ])}\n >\n <div\n className={\n \"cursor-grab bg-neutral-base p-md shadow-sm rounded-xs\"\n }\n >\n <LayoutCell\n descriptor={cell}\n rowIndex={index}\n cellIndex={fieldIndex}\n />\n </div>\n </div>\n )}\n </Draggable>\n );\n }\n\n const field = cell as CmsModelField;\n return (\n <ModelFieldProvider field={field} key={field.fieldId}>\n <Draggable\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"field\",\n field,\n pos: {\n row: index,\n index: fieldIndex\n }\n }}\n endDrag={onEndDrag}\n >\n {({ drag }) => (\n <div\n className={cn([\n \"relative\",\n \"flex-1 basis-full\",\n \"mx-sm\"\n ])}\n ref={drag}\n >\n <Vertical\n depth={depth}\n onDrop={item =>\n onFieldDrop(item, {\n row: index,\n index: fieldIndex\n })\n }\n isVisible={isVerticalDropzoneVisible(\n noConflict(\n item =>\n fieldTypes.includes(\n item.type\n ) &&\n (row.length < 4 ||\n get(\n item,\n \"pos.row\"\n ) === index)\n )\n )}\n />\n\n <div\n className={\n \"cursor-grab bg-neutral-base p-md shadow-sm rounded-xs\"\n }\n >\n <Field\n parent={parent}\n field={field}\n onEdit={editField}\n onDelete={deleteField}\n />\n </div>\n\n {/* Field end */}\n {fieldIndex === row.length - 1 && (\n <Vertical\n last\n depth={depth}\n isVisible={isVerticalDropzoneVisible(\n noConflict(item => {\n return (\n fieldTypes.includes(\n item.type\n ) &&\n (row.length < 4 ||\n get(\n item,\n \"pos.row\"\n ) === index)\n );\n })\n )}\n onDrop={item =>\n onFieldDrop(item, {\n row: index,\n index: fieldIndex + 1\n })\n }\n />\n )}\n </div>\n )}\n </Draggable>\n </ModelFieldProvider>\n );\n })}\n </div>\n {/* Row end */}\n {index === fields.length - 1 ? (\n <Horizontal\n data-testid={`cms-editor-row-droppable-bottom-${index}`}\n last\n isVisible={isHorizontalDropzoneVisible(noConflict())}\n onDrop={item =>\n onFieldDrop(item, {\n row: index + 1,\n index: null\n })\n }\n />\n ) : null}\n </div>\n )}\n </Draggable>\n );\n })}\n\n {field ? (\n <ModelFieldProvider field={field}>\n <EditFieldDialog\n onClose={() => editField(null)}\n onSubmit={field => {\n if (field.id) {\n updateField(field);\n editField(null);\n return;\n }\n insertField({ field, position: dropTarget });\n\n editField(null);\n }}\n />\n </ModelFieldProvider>\n ) : null}\n </Fragment>\n );\n};\n\nexport interface FieldEditorProps {\n parent?: CmsModelField;\n layout: CmsEditorFieldsLayout;\n fields: CmsModelField[];\n onChange: (params: { fields: CmsModelField[]; layout: CmsEditorFieldsLayout }) => void;\n}\n\nexport const FieldEditor = (props: FieldEditorProps) => {\n return (\n <FieldEditorProvider {...props}>\n <Editor />\n </FieldEditorProvider>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Fragment","get","i18n","ReactComponent","DragIcon","Center","Horizontal","Vertical","Draggable","EditFieldDialog","Field","LayoutCell","useModelFieldEditor","FieldEditorProvider","isLayoutField","ModelFieldProvider","cn","Icon","t","namespace","fieldTypes","Editor","parent","depth","insertField","updateField","deleteField","fields","noConflict","editField","onFieldDrop","onEndDrag","field","dropTarget","getFieldPlugin","getLayoutFieldPlugin","getField","collectLayoutFieldFields","layoutField","plugin","type","collectFields","id","canDropIntoField","draggable","fieldPlugin","canAccept","isVerticalDropzoneVisible","cb","item","allowLayout","isHorizontalDropzoneVisible","createElement","length","isDroppable","onDrop","row","index","map","rowKey","cell","fieldId","join","beginDrag","filter","pos","endDrag","key","drag","isDragging","className","ref","icon","label","color","size","isVisible","fieldIndex","rowIndex","cellIndex","includes","onEdit","onDelete","last","onClose","onSubmit","position","FieldEditor","props"],"sources":["FieldEditor.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport get from \"lodash/get.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { ReactComponent as DragIcon } from \"@webiny/icons/drag_indicator.svg\";\nimport { Center, Horizontal, Vertical } from \"../DropZone/index.js\";\nimport Draggable from \"../Draggable.js\";\nimport EditFieldDialog from \"./EditFieldDialog.js\";\nimport Field from \"./Field.js\";\nimport { LayoutCell } from \"./LayoutCell.js\";\nimport { useModelFieldEditor } from \"./useModelFieldEditor.js\";\nimport type { IsVisibleCallable } from \"./FieldEditorContext.js\";\nimport { FieldEditorProvider } from \"./FieldEditorContext.js\";\nimport type { CmsEditorFieldsLayout, CmsModelField, DragSource } from \"~/types.js\";\nimport type { CmsLayoutField } from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { isLayoutField } from \"@webiny/app-headless-cms-common/types/model.js\";\nimport { ModelFieldProvider } from \"~/admin/components/ModelFieldProvider/index.js\";\nimport { cn, Icon } from \"@webiny/admin-ui\";\n\nconst t = i18n.namespace(\"app-headless-cms/admin/components/editor\");\n\nconst fieldTypes: string[] = [\"field\", \"newField\"];\n\nconst Editor = () => {\n const {\n parent,\n depth,\n insertField,\n updateField,\n deleteField,\n fields,\n noConflict,\n editField,\n onFieldDrop,\n onEndDrag,\n field,\n dropTarget,\n getFieldPlugin,\n getLayoutFieldPlugin,\n getField\n } = useModelFieldEditor();\n\n /**\n * Collect all data fields referenced inside a layout descriptor (e.g. fields inside tabs).\n * Delegates to the layout field plugin's `collectFields` method if available.\n */\n const collectLayoutFieldFields = (layoutField: CmsLayoutField): CmsModelField[] => {\n const plugin = getLayoutFieldPlugin(layoutField.type);\n if (!plugin?.field.collectFields) {\n return [];\n }\n return plugin.field.collectFields({\n field: layoutField,\n getField: (id: string) => getField({ id })\n });\n };\n\n const canDropIntoField = (field: CmsModelField, draggable: DragSource) => {\n const fieldPlugin = getFieldPlugin(field.type);\n if (!fieldPlugin) {\n return true;\n }\n const canAccept = fieldPlugin.field.canAccept;\n if (typeof canAccept === \"function\" && !canAccept(field, draggable)) {\n return false;\n }\n\n return true;\n };\n\n const isVerticalDropzoneVisible = (cb: IsVisibleCallable) => {\n return (item: DragSource) => {\n // Layout fields always occupy full row — no side-by-side layout\n if (item.type === \"newLayoutField\" || item.type === \"layoutField\") {\n return false;\n }\n\n if (!parent) {\n return cb(item);\n }\n\n const fieldPlugin = getFieldPlugin(parent.type);\n if (fieldPlugin) {\n const allowLayout = fieldPlugin.field.allowLayout ?? true;\n if (!allowLayout) {\n return false;\n }\n }\n\n if (!canDropIntoField(parent, item)) {\n return false;\n }\n\n return cb(item);\n };\n };\n\n const isHorizontalDropzoneVisible = (cb: IsVisibleCallable) => {\n return (item: DragSource) => {\n if (!parent) {\n return cb(item);\n }\n\n if (!canDropIntoField(parent, item)) {\n return false;\n }\n\n return cb(item);\n };\n };\n\n return (\n <Fragment>\n {fields.length === 0 && (\n <Center\n isDroppable={isHorizontalDropzoneVisible(() => true)}\n onDrop={item =>\n onFieldDrop(item, {\n row: 0,\n index: 0\n })\n }\n >\n {t`Drop your first field here`}\n </Center>\n )}\n\n {fields.map((row, index) => {\n // Build a stable key for the row\n const rowKey = row\n .map(cell => (isLayoutField(cell) ? cell.id : (cell as CmsModelField).fieldId))\n .join(\".\");\n\n return (\n <Draggable\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"row\",\n fields: row.filter(cell => !isLayoutField(cell)) as CmsModelField[],\n pos: { row: index }\n }}\n endDrag={onEndDrag}\n key={rowKey}\n >\n {(\n {\n drag,\n isDragging\n } /* RowContainer start - includes drag handle, drop zones and the Row itself. */\n ) => (\n <div\n className={cn([\n \"flex flex-column\",\n \"relative\",\n \"mb-md last-of-type:mb-none\",\n \"bg-neutral-dimmed\",\n isDragging ? \"opacity-30\" : \"opacity-100\"\n ])}\n >\n <div\n className={cn([\n \"cursor-grab\",\n \"absolute left-sm-plus top-sm-plus z-10\"\n ])}\n ref={drag}\n >\n <Icon\n icon={<DragIcon />}\n label={\"Drag to move this row\"}\n color={\"neutral-light\"}\n size={\"sm\"}\n />\n </div>\n <Horizontal\n isVisible={isHorizontalDropzoneVisible(noConflict())}\n data-testid={`cms-editor-row-droppable-top-${index}`}\n onDrop={item => onFieldDrop(item, { row: index, index: null })}\n />\n {/* Row start - includes field drop zones and fields */}\n <div\n className={cn([\n \"w-full flex justify-between\",\n \"pl-xl pr-sm py-sm\"\n ])}\n data-testid={\"cms.editor.field-row\"}\n >\n {row.map((cell, fieldIndex) => {\n if (isLayoutField(cell)) {\n return (\n <Draggable\n key={cell.id}\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"layoutField\",\n layoutField: cell,\n fields: collectLayoutFieldFields(cell)\n }}\n endDrag={onEndDrag}\n >\n {({ drag }) => (\n <div\n ref={drag}\n className={cn([\n \"relative\",\n \"flex-1 basis-full\",\n \"mx-sm\"\n ])}\n >\n <div\n className={\n \"cursor-grab bg-neutral-base p-md shadow-sm rounded-xs\"\n }\n >\n <LayoutCell\n field={cell}\n rowIndex={index}\n cellIndex={fieldIndex}\n />\n </div>\n </div>\n )}\n </Draggable>\n );\n }\n\n const field = cell as CmsModelField;\n return (\n <ModelFieldProvider field={field} key={field.fieldId}>\n <Draggable\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"field\",\n field,\n pos: {\n row: index,\n index: fieldIndex\n }\n }}\n endDrag={onEndDrag}\n >\n {({ drag }) => (\n <div\n className={cn([\n \"relative\",\n \"flex-1 basis-full\",\n \"mx-sm\"\n ])}\n ref={drag}\n >\n <Vertical\n depth={depth}\n onDrop={item =>\n onFieldDrop(item, {\n row: index,\n index: fieldIndex\n })\n }\n isVisible={isVerticalDropzoneVisible(\n noConflict(\n item =>\n fieldTypes.includes(\n item.type\n ) &&\n (row.length < 4 ||\n get(\n item,\n \"pos.row\"\n ) === index)\n )\n )}\n />\n\n <div\n className={\n \"cursor-grab bg-neutral-base p-md shadow-sm rounded-xs\"\n }\n >\n <Field\n parent={parent}\n field={field}\n onEdit={editField}\n onDelete={deleteField}\n />\n </div>\n\n {/* Field end */}\n {fieldIndex === row.length - 1 && (\n <Vertical\n last\n depth={depth}\n isVisible={isVerticalDropzoneVisible(\n noConflict(item => {\n return (\n fieldTypes.includes(\n item.type\n ) &&\n (row.length < 4 ||\n get(\n item,\n \"pos.row\"\n ) === index)\n );\n })\n )}\n onDrop={item =>\n onFieldDrop(item, {\n row: index,\n index: fieldIndex + 1\n })\n }\n />\n )}\n </div>\n )}\n </Draggable>\n </ModelFieldProvider>\n );\n })}\n </div>\n {/* Row end */}\n {index === fields.length - 1 ? (\n <Horizontal\n data-testid={`cms-editor-row-droppable-bottom-${index}`}\n last\n isVisible={isHorizontalDropzoneVisible(noConflict())}\n onDrop={item =>\n onFieldDrop(item, {\n row: index + 1,\n index: null\n })\n }\n />\n ) : null}\n </div>\n )}\n </Draggable>\n );\n })}\n\n {field ? (\n <ModelFieldProvider field={field}>\n <EditFieldDialog\n onClose={() => editField(null)}\n onSubmit={field => {\n if (field.id) {\n updateField(field);\n editField(null);\n return;\n }\n insertField({ field, position: dropTarget });\n\n editField(null);\n }}\n />\n </ModelFieldProvider>\n ) : null}\n </Fragment>\n );\n};\n\nexport interface FieldEditorProps {\n parent?: CmsModelField;\n layout: CmsEditorFieldsLayout;\n fields: CmsModelField[];\n onChange: (params: { fields: CmsModelField[]; layout: CmsEditorFieldsLayout }) => void;\n}\n\nexport const FieldEditor = (props: FieldEditorProps) => {\n return (\n <FieldEditorProvider {...props}>\n <Editor />\n </FieldEditorProvider>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
- import type { CmsEditorFieldId, CmsEditorFieldRendererPlugin, CmsEditorFieldsLayout, CmsEditorFieldTypePlugin, CmsLayoutFieldTypePlugin, CmsModelField, DragSource, FieldLayoutPosition } from "../../../types.js";
3
- import type { CmsLayoutDescriptor } from "@webiny/app-headless-cms-common/types/model.js";
2
+ import type { CmsEditorFieldId, CmsModelFieldRendererPlugin, CmsEditorFieldsLayout, CmsModelFieldTypePlugin, CmsModelLayoutFieldTypePlugin, CmsModelField, DragSource, FieldLayoutPosition } from "../../../types.js";
3
+ import type { CmsLayoutField } from "@webiny/app-headless-cms-common/types/model.js";
4
4
  import type { FieldEditorProps } from "./FieldEditor.js";
5
5
  import type { DragSourceMonitor } from "react-dnd";
6
6
  interface DropTarget {
@@ -29,31 +29,31 @@ interface MoveFieldParams {
29
29
  position: FieldLayoutPosition;
30
30
  }
31
31
  interface GetFieldsInLayoutCallable {
32
- (): (CmsModelField | CmsLayoutDescriptor)[][];
32
+ (): (CmsModelField | CmsLayoutField)[][];
33
33
  }
34
34
  interface InsertLayoutCellCallable {
35
- (descriptor: Omit<CmsLayoutDescriptor, "id"> | CmsLayoutDescriptor, position: FieldLayoutPosition): void;
35
+ (field: Omit<CmsLayoutField, "id"> | CmsLayoutField, position: FieldLayoutPosition): void;
36
36
  }
37
37
  interface UpdateLayoutCellCallable {
38
- (descriptorId: string, descriptor: CmsLayoutDescriptor): void;
38
+ (fieldId: string, field: CmsLayoutField): void;
39
39
  }
40
40
  interface DeleteLayoutCellCallable {
41
- (descriptorId: string): void;
41
+ (fieldId: string): void;
42
42
  }
43
43
  interface MoveLayoutCellCallable {
44
- (descriptorId: string, position: FieldLayoutPosition): void;
44
+ (fieldId: string, position: FieldLayoutPosition): void;
45
45
  }
46
46
  interface GetLayoutFieldPluginCallable {
47
- (type: string): CmsLayoutFieldTypePlugin | undefined;
47
+ (type: string): CmsModelLayoutFieldTypePlugin | undefined;
48
48
  }
49
49
  interface GetFieldPluginCallable {
50
- (type: string): CmsEditorFieldTypePlugin | undefined;
50
+ (type: string): CmsModelFieldTypePlugin | undefined;
51
51
  }
52
52
  interface GetFieldCallable {
53
53
  (query: GetFieldParams): CmsModelField | undefined;
54
54
  }
55
55
  interface GetFieldRendererCallable {
56
- (rendererName: string): CmsEditorFieldRendererPlugin | undefined;
56
+ (rendererName: string): CmsModelFieldRendererPlugin | undefined;
57
57
  }
58
58
  interface OnFieldDropCallable {
59
59
  (source: Partial<DragSource>, target: DropTarget): void;
@@ -83,7 +83,7 @@ interface NoConflictCallable {
83
83
  (cb?: IsVisibleCallable): (item: DragSource) => boolean;
84
84
  }
85
85
  export interface FieldEditorContext {
86
- fields: (CmsModelField | CmsLayoutDescriptor)[][];
86
+ fields: (CmsModelField | CmsLayoutField)[][];
87
87
  noConflict: NoConflictCallable;
88
88
  layout: CmsEditorFieldsLayout;
89
89
  onChange?: (data: any) => void;