@webiny/app-headless-cms 6.0.0-rc.4 → 6.0.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/components/ContentEntryForm/CustomLayout.js +2 -13
- package/admin/components/ContentEntryForm/CustomLayout.js.map +1 -1
- package/admin/components/ContentModelEditor/ContentModelEditorProvider.js.map +1 -1
- package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js +4 -4
- package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/FieldPermissionsSelection.js +5 -8
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/FieldPermissionsSelection.js.map +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.d.ts +2 -0
- package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab/PermissionsTab.js → PermissionsEditor/PermissionsEditor.js} +4 -10
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.js.map +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/{RulesTab/RulesTab.d.ts → RulesEditor/RulesEditor.d.ts} +1 -2
- package/admin/components/FieldEditor/EditFieldDialog/{RulesTab/RulesTab.js → RulesEditor/RulesEditor.js} +3 -6
- package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/RulesEditor.js.map +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.d.ts +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.js +3 -0
- package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.js.map +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/getValidators.d.ts +3 -3
- package/admin/components/FieldEditor/EditFieldDialog/getValidators.js.map +1 -1
- package/admin/components/FieldEditor/FieldEditor.js +10 -10
- package/admin/components/FieldEditor/FieldEditor.js.map +1 -1
- package/admin/components/FieldEditor/FieldEditorContext.d.ts +11 -11
- package/admin/components/FieldEditor/FieldEditorContext.js +41 -41
- package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
- package/admin/components/FieldEditor/LayoutCell.d.ts +3 -3
- package/admin/components/FieldEditor/LayoutCell.js +6 -6
- package/admin/components/FieldEditor/LayoutCell.js.map +1 -1
- package/admin/hooks/useCms.d.ts +1 -1
- package/admin/hooks/useCms.js +1 -1
- package/admin/hooks/useCms.js.map +1 -1
- package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +2 -2
- package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
- package/admin/plugins/fieldRenderers/checkboxes.js +2 -2
- package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
- package/admin/plugins/fieldRenderers/dateTime/Input.js +2 -2
- package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
- package/admin/plugins/fieldRenderers/dateTime/Select.js +2 -2
- package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
- package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js +2 -2
- package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js.map +1 -1
- package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js +2 -2
- package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js.map +1 -1
- package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js +2 -2
- package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js.map +1 -1
- package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js +2 -2
- package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js.map +1 -1
- package/admin/plugins/fieldRenderers/longText/longText.js +2 -2
- package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
- package/admin/plugins/fieldRenderers/longText/longTexts.js +2 -2
- package/admin/plugins/fieldRenderers/longText/longTexts.js.map +1 -1
- package/admin/plugins/fieldRenderers/number/numberInput.js +2 -2
- package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
- package/admin/plugins/fieldRenderers/number/numberInputs.js +2 -2
- package/admin/plugins/fieldRenderers/number/numberInputs.js.map +1 -1
- package/admin/plugins/fieldRenderers/object/MultiValueContainer.js +2 -2
- package/admin/plugins/fieldRenderers/object/MultiValueContainer.js.map +1 -1
- package/admin/plugins/fieldRenderers/radioButtons.js +2 -2
- package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js +2 -2
- package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js +2 -2
- package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +2 -2
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js +2 -2
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js +2 -2
- package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js +2 -2
- package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js.map +1 -1
- package/admin/plugins/fieldRenderers/select.js +2 -2
- package/admin/plugins/fieldRenderers/select.js.map +1 -1
- package/admin/plugins/fieldRenderers/text/tags.js +2 -2
- package/admin/plugins/fieldRenderers/text/tags.js.map +1 -1
- package/admin/plugins/fieldRenderers/text/textInput.js +2 -2
- package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
- package/admin/plugins/fieldRenderers/text/textInputs.js +2 -2
- package/admin/plugins/fieldRenderers/text/textInputs.js.map +1 -1
- package/admin/plugins/fields/ui/TabsLayoutEditor.d.ts +4 -4
- package/admin/plugins/fields/ui/TabsLayoutEditor.js +65 -61
- package/admin/plugins/fields/ui/TabsLayoutEditor.js.map +1 -1
- package/admin/plugins/fields/ui/alert.d.ts +2 -2
- package/admin/plugins/fields/ui/alert.js +25 -22
- package/admin/plugins/fields/ui/alert.js.map +1 -1
- package/admin/plugins/fields/ui/separator.d.ts +2 -2
- package/admin/plugins/fields/ui/separator.js +24 -21
- package/admin/plugins/fields/ui/separator.js.map +1 -1
- package/admin/plugins/fields/ui/tabs.d.ts +2 -2
- package/admin/plugins/fields/ui/tabs.js +10 -10
- package/admin/plugins/fields/ui/tabs.js.map +1 -1
- package/admin/views/contentModels/importing/ImportContentModelsDialog.js +15 -13
- package/admin/views/contentModels/importing/ImportContentModelsDialog.js.map +1 -1
- package/allPlugins.d.ts +1 -1
- package/exports/admin/cms/model.d.ts +2 -1
- package/exports/admin/cms/model.js +2 -1
- package/exports/admin/cms/model.js.map +1 -1
- package/exports/admin/cms.d.ts +7 -0
- package/exports/admin/cms.js +7 -0
- package/exports/admin/cms.js.map +1 -1
- package/legacyPluginAdapters/CmsContentFormRenderer.d.ts +4 -0
- package/legacyPluginAdapters/CmsContentFormRenderer.js +15 -0
- package/legacyPluginAdapters/CmsContentFormRenderer.js.map +1 -0
- package/legacyPluginAdapters/CmsModelFieldRenderer.d.ts +4 -0
- package/legacyPluginAdapters/CmsModelFieldRenderer.js +14 -0
- package/legacyPluginAdapters/CmsModelFieldRenderer.js.map +1 -0
- package/legacyPluginAdapters/CmsModelFieldType.d.ts +4 -0
- package/legacyPluginAdapters/CmsModelFieldType.js +14 -0
- package/legacyPluginAdapters/CmsModelFieldType.js.map +1 -0
- package/legacyPluginAdapters/CmsModelFieldValidator.d.ts +4 -0
- package/legacyPluginAdapters/CmsModelFieldValidator.js +14 -0
- package/legacyPluginAdapters/CmsModelFieldValidator.js.map +1 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.d.ts +13 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.js +15 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.js.map +1 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldType.d.ts +2 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldType.js +14 -0
- package/legacyPluginAdapters/CmsModelLayoutFieldType.js.map +1 -0
- package/package.json +24 -24
- package/types.d.ts +1 -1
- package/types.js +1 -1
- package/types.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.js.map +0 -1
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.d.ts +0 -4
- package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js.map +0 -1
- package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js.map +0 -1
- package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.d.ts +0 -1
- package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js +0 -3
- package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js.map +0 -1
- /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.d.ts +0 -0
- /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.js +0 -0
- /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.js.map +0 -0
- /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/FieldPermissionsSelection.d.ts +0 -0
|
@@ -10,13 +10,7 @@ export const CustomLayout = ({
|
|
|
10
10
|
} = useForm();
|
|
11
11
|
const fields = model.fields.reduce((acc, field) => {
|
|
12
12
|
acc[field.fieldId] = /*#__PURE__*/React.createElement(FieldElement, {
|
|
13
|
-
field: field
|
|
14
|
-
/**
|
|
15
|
-
* TODO @ts-refactor
|
|
16
|
-
* Figure out type for Bind.
|
|
17
|
-
*/
|
|
18
|
-
// @ts-expect-error
|
|
19
|
-
,
|
|
13
|
+
field: field,
|
|
20
14
|
Bind: Bind,
|
|
21
15
|
contentModel: model
|
|
22
16
|
});
|
|
@@ -26,12 +20,7 @@ export const CustomLayout = ({
|
|
|
26
20
|
data,
|
|
27
21
|
contentModel: model,
|
|
28
22
|
fields,
|
|
29
|
-
|
|
30
|
-
* TODO @ts-refactor
|
|
31
|
-
* Figure out type for Bind.
|
|
32
|
-
*/
|
|
33
|
-
// @ts-expect-error
|
|
34
|
-
Bind
|
|
23
|
+
Bind: Bind
|
|
35
24
|
}));
|
|
36
25
|
};
|
|
37
26
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Bind","useForm","FieldElement","CustomLayout","model","formRenderer","data","fields","reduce","acc","field","fieldId","createElement","contentModel","Fragment","render"],"sources":["CustomLayout.tsx"],"sourcesContent":["import React from \"react\";\nimport { Bind, useForm } from \"@webiny/form\";\nimport type {\n CmsContentFormRendererPlugin,\n CmsModel\n} from \"@webiny/app-headless-cms-common/types/index.js\";\nimport { FieldElement } from \"~/admin/components/ContentEntryForm/FieldElement.js\";\n\ninterface CustomLayoutProps {\n model: CmsModel;\n formRenderer: CmsContentFormRendererPlugin;\n}\n\nexport const CustomLayout = ({ model, formRenderer }: CustomLayoutProps) => {\n const { data } = useForm();\n\n const fields = model.fields.reduce(\n (acc, field) => {\n acc[field.fieldId] = (\n <FieldElement
|
|
1
|
+
{"version":3,"names":["React","Bind","useForm","FieldElement","CustomLayout","model","formRenderer","data","fields","reduce","acc","field","fieldId","createElement","contentModel","Fragment","render"],"sources":["CustomLayout.tsx"],"sourcesContent":["import React from \"react\";\nimport { Bind, useForm } from \"@webiny/form\";\nimport type {\n BindComponent,\n CmsContentFormRendererPlugin,\n CmsModel\n} from \"@webiny/app-headless-cms-common/types/index.js\";\nimport { FieldElement } from \"~/admin/components/ContentEntryForm/FieldElement.js\";\n\ninterface CustomLayoutProps {\n model: CmsModel;\n formRenderer: CmsContentFormRendererPlugin;\n}\n\nexport const CustomLayout = ({ model, formRenderer }: CustomLayoutProps) => {\n const { data } = useForm();\n\n const fields = model.fields.reduce(\n (acc, field) => {\n acc[field.fieldId] = (\n <FieldElement field={field} Bind={Bind as BindComponent} contentModel={model} />\n );\n\n return acc;\n },\n {} as Record<string, React.ReactElement>\n );\n\n return (\n <>\n {formRenderer.render({\n data,\n contentModel: model,\n fields,\n Bind: Bind as BindComponent\n })}\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,OAAO,QAAQ,cAAc;AAM5C,SAASC,YAAY;AAOrB,OAAO,MAAMC,YAAY,GAAGA,CAAC;EAAEC,KAAK;EAAEC;AAAgC,CAAC,KAAK;EACxE,MAAM;IAAEC;EAAK,CAAC,GAAGL,OAAO,CAAC,CAAC;EAE1B,MAAMM,MAAM,GAAGH,KAAK,CAACG,MAAM,CAACC,MAAM,CAC9B,CAACC,GAAG,EAAEC,KAAK,KAAK;IACZD,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,gBACdZ,KAAA,CAAAa,aAAA,CAACV,YAAY;MAACQ,KAAK,EAAEA,KAAM;MAACV,IAAI,EAAEA,IAAsB;MAACa,YAAY,EAAET;IAAM,CAAE,CAClF;IAED,OAAOK,GAAG;EACd,CAAC,EACD,CAAC,CACL,CAAC;EAED,oBACIV,KAAA,CAAAa,aAAA,CAAAb,KAAA,CAAAe,QAAA,QACKT,YAAY,CAACU,MAAM,CAAC;IACjBT,IAAI;IACJO,YAAY,EAAET,KAAK;IACnBG,MAAM;IACNP,IAAI,EAAEA;EACV,CAAC,CACH,CAAC;AAEX,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":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,UAAU,QAAQ,OAAO;AAC1E,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,IAAI,MAAM,gBAAgB;AAEjC,SAASC,WAAW,EAAEC,SAAS,QAAQ,mBAAmB;AAO1D,SAASC,iBAAiB,EAAEC,oBAAoB;AAChD,SAASC,+BAA+B;AAIxC,SAASC,aAAa;AACtB,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,MAAM;AAEf,SACIC,iBAAiB,EACjBC,uBAAuB,QACpB,wDAAwD;AAC/D,SAASC,OAAO,QAAQ,iBAAiB;AAiBzC,OAAO,MAAMC,yBAAyB,gBAAGlB,KAAK,CAACmB,aAAa,CAE1DC,SAAS,CAAC;AAmBZ,OAAO,MAAMC,yBAAkC,GAAGA,CAACC,IAAW,EAAEC,MAAc,KAAY;EACtF,MAAM;IAAEC,IAAI;IAAEC;EAAK,CAAC,GAAGF,MAAM;EAC7B,QAAQE,IAAI;IACR,KAAK,OAAO;MACR,OAAO;QAAE,GAAGH,IAAI;QAAE,GAAGE;MAAK,CAAC;IAE/B,KAAK,MAAM;MACP,OAAO;QAAE,GAAGF,IAAI;QAAEE,IAAI,EAAEA;MAAiB,CAAC;IAC9C;MACI,OAAOF,IAAI;EACnB;AACJ,CAAC;AAED,MAAMI,SAAS,GAAGb,aAAa,CAAC,SAAS,CAAC;;AAE1C;AACA;AACA;AACA,MAAMc,sBAAsB,GAAIC,MAAuB,IAAsB;EACzE,OAAOA,MAAM,CAACC,GAAG,CAACC,KAAK,IAAI;IACvB,MAAM;MAAEC;IAAiB,CAAC,GAAGD,KAAK;IAClC,MAAM;MAAEE,OAAO,GAAG,KAAK;MAAEC,MAAM,GAAG;IAAG,CAAC,GAAGF,gBAAgB,IAAI,CAAC,CAAC;IAC/D,OAAO;MACH,GAAGD,KAAK;MACRC,gBAAgB,EAAE;QACdC,OAAO;QACPC,MAAM,EAAEA,MAAM,CAACJ,GAAG,CAAC,CAAC;UAAEK,KAAK;UAAEC,KAAK;UAAEC;QAAS,CAAC,KAAK;UAC/C,OAAO;YACHF,KAAK;YACLE,QAAQ,EAAEA,QAAQ,IAAI,KAAK;YAC3BD,KAAK,EAAEE,MAAM,CAACF,KAAK;UACvB,CAAC;QACL,CAAC;MACL;IACJ,CAAC;EACL,CAAC,CAAC;AACN,CAAC;AAED,MAAMG,gBAAgB,GAAId,IAAoB,IAAqB;EAC/D,OAAO;IACH,GAAGA,IAAI;IACPI,MAAM,EAAED,sBAAsB,CAACH,IAAI,CAACI,MAAM;EAC9C,CAAC;AACL,CAAC;AAQD,MAAMW,kBAAkB,GAAIC,OAAgB,IAAY;EACpD,OAAO;IACHA,OAAO,EAAEA,OAAO,IAAI,IAAI;IACxBC,UAAU,EAAE,IAAI;IAChBjB,IAAI,EAAE,IAA2B;IACjCkB,cAAc,EAAE;EACpB,CAAC;AACL,CAAC;AAED,OAAO,MAAMC,0BAA0B,GAAGA,CAAC;EACvCC,QAAQ;EACRC,YAAY;EACZL;AAC6B,CAAC,KAAK;EACnC,MAAM,CAACM,KAAK,EAAEC,QAAQ,CAAC,GAAG3C,UAAU,CAACiB,yBAAyB,EAAEkB,kBAAkB,CAACC,OAAO,CAAC,CAAC;EAE5F,MAAM;IAAEQ;EAAU,CAAC,GAAGxC,SAAS,CAAC,CAAC;EACjC,MAAM;IAAEyC;EAAa,CAAC,GAAG1C,WAAW,CAAC,CAAC;EAEtC,MAAM2C,WAAW,GAAIC,IAAa,IAAW;IACzCJ,QAAQ,CAAC;MAAEtB,IAAI,EAAE,OAAO;MAAED,IAAI,EAAE;QAAEiB,UAAU,EAAEU;MAAK;IAAE,CAAC,CAAC;EAC3D,CAAC;EAED,MAAMC,gBAAgB,GAAG,MACrB5B,IAAe,IACiD;IAChE,IAAI,CAACA,IAAI,EAAE;MACPA,IAAI,GAAGsB,KAAK,CAACtB,IAAI;IACrB;IACA,MAAM6B,SAAyB,GAAG/C,IAAI,CAACkB,IAAI,EAAE,CACzC,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,UAAU,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,MAAM,CACT,CAAC;IACF,MAAM8B,QAAQ,GAAG,MAAMT,YAAY,CAACU,MAAM,CAGxC;MACEC,QAAQ,EAAE9C,oBAAoB;MAC9B+C,SAAS,EAAE;QACPjB,OAAO,EAAEhB,IAAI,CAACgB,OAAO;QACrBhB,IAAI,EAAEc,gBAAgB,CAACe,SAAS;MACpC,CAAC;MACDK,cAAc,EAAE,CACZ;QACIC,KAAK,EAAEhD;MACX,CAAC;IAET,CAAC,CAAC;IAEFuC,WAAW,CAAC,IAAI,CAAC;IAEjB,IAAI,CAACI,QAAQ,CAAC9B,IAAI,IAAI,CAAC8B,QAAQ,CAAC9B,IAAI,CAACoC,kBAAkB,EAAE;MACrD,OAAO;QACHpC,IAAI,EAAE,IAAI;QACVqC,KAAK,EAAE;MACX,CAAC;IACL;IAEA,OAAOP,QAAQ,CAAC9B,IAAI,CAACoC,kBAAkB;EAC3C,CAAC;EAED,MAAME,iBAAiB,GAAG7D,WAAW,CAAEyC,cAAsB,IAAK;IAC9DK,QAAQ,CAAC;MAAEtB,IAAI,EAAE,OAAO;MAAED,IAAI,EAAE;QAAEkB;MAAe;IAAE,CAAC,CAAC;EACzD,CAAC,EAAE,EAAE,CAAC;;EAEN;AACJ;AACA;AACA;EACI,MAAMqB,OAAO,GAAG,MAAAA,CAAOC,MAA2B,EAAEC,SAAS,GAAG,KAAK,KAAoB;IACrF,MAAMzC,IAAI,GAAGwC,MAAM,CAAClB,KAAK,CAACtB,IAAI,CAAC;IAC/B,MAAM0C,YAAY,GAAG,MAAMxC,SAAS,CAACoB,KAAK,CAACtB,IAAI,CAAC;IAChD,MAAM2C,OAAO,GAAG,MAAMzC,SAAS,CAACF,IAAI,CAAC;IACrC,IAAI0C,YAAY,KAAKC,OAAO,EAAE;MAC1B;IACJ;IACAjB,WAAW,CAAC,KAAK,CAAC;IAClBH,QAAQ,CAAC;MAAEtB,IAAI,EAAE,MAAM;MAAED;IAAK,CAAC,CAAC;IAChC,IAAI,CAACyC,SAAS,EAAE;MACZ;IACJ;IACA,MAAMb,gBAAgB,CAAC5B,IAAI,CAAC;EAChC,CAAC;EAED,MAAM4C,eAAe,GAAG,MACpB5B,OAAe,IACkC;IACjD,MAAMc,QAAQ,GAAG,MAAMT,YAAY,CAACc,KAAK,CAGvC;MACEA,KAAK,EAAElD,iBAAiB;MACxBgD,SAAS,EAAE;QACPjB;MACJ;IACJ,CAAC,CAAC;IAEF,MAAM;MAAEhB,IAAI;MAAEqC;IAAM,CAAC,GAAGxD,GAAG,CAACiD,QAAQ,EAAE,sBAAsB,CAAC;IAC7D,IAAIO,KAAK,EAAE;MACP,MAAM,IAAIQ,KAAK,CAACR,KAAK,CAACS,OAAO,CAAC;IAClC;IAEA,MAAMP,OAAO,CAAC,MAAMvC,IAAI,EAAE,KAAK,CAAC;IAEhC0B,WAAW,CAAC,IAAI,CAAC;IACjB,OAAOI,QAAQ;EACnB,CAAC;EAEDpD,SAAS,CAAC,MAAM;IACZ,IAAI,CAACsC,OAAO,EAAE;MACV;IACJ;IACA4B,eAAe,CAAC5B,OAAO,CAAC,CAAC+B,KAAK,CAAC,MAAM;MACjCvB,SAAS,CAAClC,MAAM,CAAC0D,aAAa,CAACC,IAAI,CAAC;MACpCxB,YAAY,CAAC,6CAA6C,CAAC;IAC/D,CAAC,CAAC;EACN,CAAC,EAAE,CAACT,OAAO,CAAC,CAAC;EAEb,MAAMkC,kBAAkB,GAAGzD,OAAO,CAAC0D,MAAM,CACrC,8BACJ,CAAC;EAED,MAAMC,YAAY,GAAGzE,OAAO,CAAC,MAAM;IAC/B,MAAM0E,KAAK,GAAG/B,KAAK,CAACtB,IAAI;IACxB,IAAI,CAACqD,KAAK,EAAE;MACR,OAAO,EAAE;IACb;IACA,MAAMC,QAAQ,GAAGD,KAAK,CAACE,MAAM,GACvB/D,uBAAuB,CAAC6D,KAAK,CAACE,MAAM,EAAEL,kBAAkB,CAAC,GACzDtD,SAAS;IACf,OAAOL,iBAAiB,CAAC8D,KAAK,CAACjD,MAAM,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAEkD,QAAQ,EAAEJ,kBAAkB,CAAC;EACtF,CAAC,EAAE,CAAC5B,KAAK,CAACtB,IAAI,EAAEI,MAAM,EAAEkB,KAAK,CAACtB,IAAI,EAAEuD,MAAM,CAAC,CAAC;EAE5C,MAAM5C,KAAK,GAAGhC,OAAO,CACjB,OAAO;IACH;IACAqB,IAAI,EAAEsB,KAAK,CAACtB,IAAI;IAChBwD,YAAY,EAAElC,KAAK,CAACtB,IAAI;IACxBgB,OAAO;IACPK,YAAY;IACZE,QAAQ;IACRN,UAAU,EAAEK,KAAK,CAACL,UAAU;IAC5B2B,eAAe;IACfhB,gBAAgB;IAChBW,OAAO;IACPrB,cAAc,EAAEI,KAAK,CAACJ,cAAc;IACpCoB,iBAAiB;IACjBc;EACJ,CAAC,CAAC,EACF,CAAC9B,KAAK,EAAED,YAAY,EAAE+B,YAAY,CACtC,CAAC;EAED,MAAM;IAAEK;EAAS,CAAC,GAAG/D,yBAAyB;EAE9C,oBACIlB,KAAA,CAAAkF,aAAA,CAACD,QAAQ;IAAC9C,KAAK,EAAEA;EAAM,gBACnBnC,KAAA,CAAAkF,aAAA,CAACtE,aAAa;IAACiE,KAAK,EAAE1C,KAAK,CAAC6C;EAAa,GAAEpC,QAAwB,CAC7D,CAAC;AAEnB,CAAC","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,
|
|
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":[]}
|
|
@@ -5,8 +5,8 @@ import GeneralTab from "./GeneralTab.js";
|
|
|
5
5
|
import AppearanceTab from "./AppearanceTab.js";
|
|
6
6
|
import PredefinedValues from "./PredefinedValues.js";
|
|
7
7
|
import { ValidationTab } from "./ValidationTab/index.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { PermissionsEditor } from "./PermissionsEditor/PermissionsEditor.js";
|
|
9
|
+
import { RulesEditor } from "./RulesEditor/RulesEditor.js";
|
|
10
10
|
import { ModelFieldProvider } from "../../ModelFieldProvider/index.js";
|
|
11
11
|
import { useModelEditor } from "../../ContentModelEditor/useModelEditor.js";
|
|
12
12
|
const t = i18n.namespace("app-headless-cms/admin/components/editor");
|
|
@@ -54,12 +54,12 @@ export const FieldSettingsTabs = ({
|
|
|
54
54
|
key: "permissions",
|
|
55
55
|
trigger: t`Permissions`,
|
|
56
56
|
value: "permissions",
|
|
57
|
-
content: /*#__PURE__*/React.createElement(
|
|
57
|
+
content: /*#__PURE__*/React.createElement(PermissionsEditor, null)
|
|
58
58
|
}), /*#__PURE__*/React.createElement(Tabs.Tab, {
|
|
59
59
|
key: "rules",
|
|
60
60
|
trigger: t`Rules`,
|
|
61
61
|
value: "rules",
|
|
62
|
-
content: /*#__PURE__*/React.createElement(
|
|
62
|
+
content: /*#__PURE__*/React.createElement(RulesEditor, {
|
|
63
63
|
fieldOptions: fieldOptions
|
|
64
64
|
})
|
|
65
65
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Tabs","i18n","GeneralTab","AppearanceTab","PredefinedValues","ValidationTab","
|
|
1
|
+
{"version":3,"names":["React","Tabs","i18n","GeneralTab","AppearanceTab","PredefinedValues","ValidationTab","PermissionsEditor","RulesEditor","ModelFieldProvider","useModelEditor","t","namespace","FieldSettingsTabs","shadowField","predefinedValuesTabEnabled","showValidatorsTab","isSubtypeField","fieldOptions","createElement","field","spacing","size","separator","tabs","Tab","key","trigger","value","content","disabled","visible"],"sources":["FieldSettingsTabs.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tabs } from \"@webiny/admin-ui\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport type { CmsModelField } from \"~/types.js\";\nimport GeneralTab from \"./GeneralTab.js\";\nimport AppearanceTab from \"./AppearanceTab.js\";\nimport PredefinedValues from \"./PredefinedValues.js\";\nimport { ValidationTab } from \"./ValidationTab/index.js\";\nimport { PermissionsEditor } from \"./PermissionsEditor/PermissionsEditor.js\";\nimport { RulesEditor } from \"./RulesEditor/RulesEditor.js\";\nimport { ModelFieldProvider } from \"~/admin/components/ModelFieldProvider/index.js\";\nimport { useModelEditor } from \"~/admin/components/ContentModelEditor/useModelEditor.js\";\n\nconst t = i18n.namespace(\"app-headless-cms/admin/components/editor\");\n\ninterface FieldSettingsTabsProps {\n shadowField: CmsModelField;\n predefinedValuesTabEnabled: boolean;\n showValidatorsTab: boolean;\n isSubtypeField: boolean;\n}\n\nexport const FieldSettingsTabs = ({\n shadowField,\n predefinedValuesTabEnabled,\n showValidatorsTab,\n isSubtypeField\n}: FieldSettingsTabsProps) => {\n const { fieldOptions } = useModelEditor();\n\n return (\n <ModelFieldProvider field={shadowField}>\n <Tabs\n spacing={\"lg\"}\n size={\"md\"}\n separator\n tabs={[\n <Tabs.Tab\n key={\"general\"}\n trigger={t`General`}\n value={\"general\"}\n content={<GeneralTab />}\n />,\n <Tabs.Tab\n key={\"predefined\"}\n trigger={t`Predefined values`}\n value={\"predefined\"}\n disabled={!predefinedValuesTabEnabled}\n content={<PredefinedValues />}\n />,\n <Tabs.Tab\n key={\"validations\"}\n trigger={t`Validations`}\n value={\"validations\"}\n content={<ValidationTab field={shadowField} />}\n visible={showValidatorsTab}\n />,\n <Tabs.Tab\n key={\"appearance\"}\n trigger={t`Appearance`}\n value={\"Appearance\"}\n content={<AppearanceTab />}\n disabled={isSubtypeField}\n />,\n <Tabs.Tab\n key={\"permissions\"}\n trigger={t`Permissions`}\n value={\"permissions\"}\n content={<PermissionsEditor />}\n />,\n <Tabs.Tab\n key={\"rules\"}\n trigger={t`Rules`}\n value={\"rules\"}\n content={<RulesEditor fieldOptions={fieldOptions} />}\n />\n ]}\n />\n </ModelFieldProvider>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,IAAI,QAAQ,2BAA2B;AAEhD,OAAOC,UAAU;AACjB,OAAOC,aAAa;AACpB,OAAOC,gBAAgB;AACvB,SAASC,aAAa;AACtB,SAASC,iBAAiB;AAC1B,SAASC,WAAW;AACpB,SAASC,kBAAkB;AAC3B,SAASC,cAAc;AAEvB,MAAMC,CAAC,GAAGT,IAAI,CAACU,SAAS,CAAC,0CAA0C,CAAC;AASpE,OAAO,MAAMC,iBAAiB,GAAGA,CAAC;EAC9BC,WAAW;EACXC,0BAA0B;EAC1BC,iBAAiB;EACjBC;AACoB,CAAC,KAAK;EAC1B,MAAM;IAAEC;EAAa,CAAC,GAAGR,cAAc,CAAC,CAAC;EAEzC,oBACIV,KAAA,CAAAmB,aAAA,CAACV,kBAAkB;IAACW,KAAK,EAAEN;EAAY,gBACnCd,KAAA,CAAAmB,aAAA,CAAClB,IAAI;IACDoB,OAAO,EAAE,IAAK;IACdC,IAAI,EAAE,IAAK;IACXC,SAAS;IACTC,IAAI,EAAE,cACFxB,KAAA,CAAAmB,aAAA,CAAClB,IAAI,CAACwB,GAAG;MACLC,GAAG,EAAE,SAAU;MACfC,OAAO,EAAEhB,CAAC,SAAU;MACpBiB,KAAK,EAAE,SAAU;MACjBC,OAAO,eAAE7B,KAAA,CAAAmB,aAAA,CAAChB,UAAU,MAAE;IAAE,CAC3B,CAAC,eACFH,KAAA,CAAAmB,aAAA,CAAClB,IAAI,CAACwB,GAAG;MACLC,GAAG,EAAE,YAAa;MAClBC,OAAO,EAAEhB,CAAC,mBAAoB;MAC9BiB,KAAK,EAAE,YAAa;MACpBE,QAAQ,EAAE,CAACf,0BAA2B;MACtCc,OAAO,eAAE7B,KAAA,CAAAmB,aAAA,CAACd,gBAAgB,MAAE;IAAE,CACjC,CAAC,eACFL,KAAA,CAAAmB,aAAA,CAAClB,IAAI,CAACwB,GAAG;MACLC,GAAG,EAAE,aAAc;MACnBC,OAAO,EAAEhB,CAAC,aAAc;MACxBiB,KAAK,EAAE,aAAc;MACrBC,OAAO,eAAE7B,KAAA,CAAAmB,aAAA,CAACb,aAAa;QAACc,KAAK,EAAEN;MAAY,CAAE,CAAE;MAC/CiB,OAAO,EAAEf;IAAkB,CAC9B,CAAC,eACFhB,KAAA,CAAAmB,aAAA,CAAClB,IAAI,CAACwB,GAAG;MACLC,GAAG,EAAE,YAAa;MAClBC,OAAO,EAAEhB,CAAC,YAAa;MACvBiB,KAAK,EAAE,YAAa;MACpBC,OAAO,eAAE7B,KAAA,CAAAmB,aAAA,CAACf,aAAa,MAAE,CAAE;MAC3B0B,QAAQ,EAAEb;IAAe,CAC5B,CAAC,eACFjB,KAAA,CAAAmB,aAAA,CAAClB,IAAI,CAACwB,GAAG;MACLC,GAAG,EAAE,aAAc;MACnBC,OAAO,EAAEhB,CAAC,aAAc;MACxBiB,KAAK,EAAE,aAAc;MACrBC,OAAO,eAAE7B,KAAA,CAAAmB,aAAA,CAACZ,iBAAiB,MAAE;IAAE,CAClC,CAAC,eACFP,KAAA,CAAAmB,aAAA,CAAClB,IAAI,CAACwB,GAAG;MACLC,GAAG,EAAE,OAAQ;MACbC,OAAO,EAAEhB,CAAC,OAAQ;MAClBiB,KAAK,EAAE,OAAQ;MACfC,OAAO,eAAE7B,KAAA,CAAAmB,aAAA,CAACX,WAAW;QAACU,YAAY,EAAEA;MAAa,CAAE;IAAE,CACxD,CAAC;EACJ,CACL,CACe,CAAC;AAE7B,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useMemo } from "react";
|
|
2
2
|
import { ReactComponent as More } from "@webiny/icons/arrow_drop_down.svg";
|
|
3
|
-
import { Button, DropdownMenu, List,
|
|
3
|
+
import { Button, DropdownMenu, List, Text, Avatar } from "@webiny/admin-ui";
|
|
4
4
|
const FIELD_ACCESS_LEVELS = [{
|
|
5
5
|
id: "hide",
|
|
6
6
|
label: "No Access",
|
|
@@ -105,14 +105,11 @@ export const FieldPermissionsSelection = ({
|
|
|
105
105
|
}
|
|
106
106
|
return null;
|
|
107
107
|
}).filter(Boolean);
|
|
108
|
-
|
|
108
|
+
const hasRules = selection.length > 0;
|
|
109
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, hasRules ? /*#__PURE__*/React.createElement(Text, {
|
|
109
110
|
as: "div",
|
|
110
111
|
className: "mb-md"
|
|
111
|
-
}, "People and teams with access"), /*#__PURE__*/React.createElement(
|
|
112
|
-
style: {
|
|
113
|
-
minHeight: "100px"
|
|
114
|
-
}
|
|
115
|
-
}, /*#__PURE__*/React.createElement(List, null, selection?.map(item => /*#__PURE__*/React.createElement(List.Item, {
|
|
112
|
+
}, "People and teams with access") : null, /*#__PURE__*/React.createElement(List, null, selection?.map(item => /*#__PURE__*/React.createElement(List.Item, {
|
|
116
113
|
key: String(item.rule.value),
|
|
117
114
|
title: /*#__PURE__*/React.createElement(ListItemText, {
|
|
118
115
|
target: item.target
|
|
@@ -125,7 +122,7 @@ export const FieldPermissionsSelection = ({
|
|
|
125
122
|
onRemoveAccess: onRemoveAccess,
|
|
126
123
|
onUpdatePermission: onUpdatePermission
|
|
127
124
|
})
|
|
128
|
-
}))))
|
|
125
|
+
}))));
|
|
129
126
|
};
|
|
130
127
|
|
|
131
128
|
//# sourceMappingURL=FieldPermissionsSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useMemo","ReactComponent","More","Button","DropdownMenu","List","Text","Avatar","FIELD_ACCESS_LEVELS","id","label","description","ListItemGraphic","target","type","createElement","size","image","Image","src","meta","alt","fallback","Fallback","delayMs","name","charAt","ListItemText","as","className","email","Fragment","ListItemMeta","rule","onRemoveAccess","onUpdatePermission","currentLevel","find","level","action","handle","variant","text","icon","iconPosition","trigger","map","CheckboxItem","key","checked","onClick","setTimeout","Separator","Item","FieldPermissionsSelection","rules","targetsList","selection","u","String","value","filter","Boolean","hasRules","length","item","title","actions"],"sources":["FieldPermissionsSelection.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { ReactComponent as More } from \"@webiny/icons/arrow_drop_down.svg\";\nimport { Button, DropdownMenu, List, Text, Avatar } from \"@webiny/admin-ui\";\nimport type { FolderLevelPermissionsTarget } from \"@webiny/app-aco\";\nimport type { FieldRule } from \"~/types.js\";\n\nconst FIELD_ACCESS_LEVELS = [\n {\n id: \"hide\",\n label: \"No Access\",\n description: \"Hide this field from the user.\"\n },\n {\n id: \"disable\",\n label: \"Viewer (Read-only)\",\n description: \"Allow the user to read, but not edit, this field.\"\n }\n];\n\ninterface FieldPermissionsSelectionProps {\n targetsList: FolderLevelPermissionsTarget[];\n rules: FieldRule[];\n onRemoveAccess: (params: { rule: FieldRule }) => void;\n onUpdatePermission: (params: { rule: FieldRule }) => void;\n}\n\ntype Selection = Array<{ rule: FieldRule; target: FolderLevelPermissionsTarget }>;\n\ninterface ListItemGraphicProps {\n target: FolderLevelPermissionsTarget;\n}\n\nconst ListItemGraphic = ({ target }: ListItemGraphicProps) => {\n if (target.type === \"admin\") {\n return (\n <Avatar\n size={\"md\"}\n image={<Avatar.Image src={target.meta.image} alt={\"User's avatar.\"} />}\n fallback={<Avatar.Fallback delayMs={0}>{target.name.charAt(0)}</Avatar.Fallback>}\n />\n );\n }\n\n return (\n <Avatar\n size={\"md\"}\n fallback={<Avatar.Fallback delayMs={0}>{target.name.charAt(0)}</Avatar.Fallback>}\n />\n );\n};\n\ninterface ListItemTextProps {\n target: FolderLevelPermissionsTarget;\n}\n\nconst ListItemText = ({ target }: ListItemTextProps) => {\n if (target.type === \"admin\") {\n return (\n <div>\n <Text as=\"div\">{target.name}</Text>\n <Text as={\"div\"} size={\"sm\"} className={\"text-neutral-strong font-normal\"}>\n {target.meta.email || \"E-mail not available.\"}\n </Text>\n </div>\n );\n }\n\n return <>{target.name}</>;\n};\n\ninterface ListItemMetaProps {\n rule: FieldRule;\n onRemoveAccess: (params: { rule: FieldRule }) => void;\n onUpdatePermission: (params: { rule: FieldRule }) => void;\n}\n\nconst ListItemMeta = ({ rule, onRemoveAccess, onUpdatePermission }: ListItemMetaProps) => {\n const currentLevel = useMemo(() => {\n return FIELD_ACCESS_LEVELS.find(level => level.id === rule.action)!;\n }, [rule.action]);\n\n const handle = (\n <Button variant={\"ghost\"} text={currentLevel.label} icon={<More />} iconPosition={\"end\"} />\n );\n\n return (\n <DropdownMenu trigger={handle}>\n {FIELD_ACCESS_LEVELS.map(level => (\n <DropdownMenu.CheckboxItem\n key={level.id}\n checked={currentLevel.id === level.id}\n text={\n <div>\n <Text as={\"div\"}>{level.label}</Text>\n <Text as={\"div\"} size={\"sm\"} className={\"text-neutral-strong\"}>\n {level.description}\n </Text>\n </div>\n }\n onClick={() => {\n setTimeout(() => {\n onUpdatePermission({\n rule: {\n ...rule,\n action: level.id\n }\n });\n }, 75);\n }}\n />\n ))}\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n onClick={() => onRemoveAccess({ rule })}\n text={\"Remove permission\"}\n />\n </DropdownMenu>\n );\n};\n\nexport const FieldPermissionsSelection = ({\n rules = [],\n targetsList,\n onRemoveAccess,\n onUpdatePermission\n}: FieldPermissionsSelectionProps) => {\n const selection = rules\n .map(rule => {\n const target = targetsList.find(u => u.target === String(rule.value));\n if (target) {\n return { rule, target };\n }\n\n return null;\n })\n .filter(Boolean) as Selection;\n\n const hasRules = selection.length > 0;\n\n return (\n <>\n {hasRules ? (\n <Text as={\"div\"} className={\"mb-md\"}>\n People and teams with access\n </Text>\n ) : null}\n <List>\n {selection?.map(item => (\n <List.Item\n key={String(item.rule.value)}\n title={<ListItemText target={item.target} />}\n icon={<ListItemGraphic target={item.target} />}\n actions={\n <ListItemMeta\n rule={item.rule}\n onRemoveAccess={onRemoveAccess}\n onUpdatePermission={onUpdatePermission}\n />\n }\n />\n ))}\n </List>\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,9 +6,7 @@ import { useWcp } from "@webiny/app-admin";
|
|
|
6
6
|
import { LIST_FOLDER_LEVEL_PERMISSIONS_TARGETS, UsersTeamsMultiAutocomplete } from "@webiny/app-aco";
|
|
7
7
|
import { FieldPermissionsSelection } from "./FieldPermissionsSelection.js";
|
|
8
8
|
import { CannotUsePermissions } from "./CannotUsePermissions.js";
|
|
9
|
-
export const
|
|
10
|
-
gridClassName
|
|
11
|
-
}) => {
|
|
9
|
+
export const PermissionsEditor = () => {
|
|
12
10
|
const wcp = useWcp();
|
|
13
11
|
const bind = useBind({
|
|
14
12
|
name: "rules"
|
|
@@ -47,15 +45,11 @@ export const PermissionsTab = ({
|
|
|
47
45
|
bind.onChange([...otherRules, ...updatedAccessRules]);
|
|
48
46
|
};
|
|
49
47
|
if (!wcp.canUseHcmsFieldPermissions()) {
|
|
50
|
-
return /*#__PURE__*/React.createElement(Grid, {
|
|
51
|
-
className: gridClassName
|
|
52
|
-
}, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
48
|
+
return /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
53
49
|
span: 12
|
|
54
50
|
}, /*#__PURE__*/React.createElement(CannotUsePermissions, null)));
|
|
55
51
|
}
|
|
56
|
-
return /*#__PURE__*/React.createElement(Grid, {
|
|
57
|
-
className: gridClassName
|
|
58
|
-
}, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
52
|
+
return /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
59
53
|
span: 12
|
|
60
54
|
}, /*#__PURE__*/React.createElement(UsersTeamsMultiAutocomplete, {
|
|
61
55
|
options: targetsList,
|
|
@@ -71,4 +65,4 @@ export const PermissionsTab = ({
|
|
|
71
65
|
})));
|
|
72
66
|
};
|
|
73
67
|
|
|
74
|
-
//# sourceMappingURL=
|
|
68
|
+
//# sourceMappingURL=PermissionsEditor.js.map
|
package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useQuery","Grid","useBind","useWcp","LIST_FOLDER_LEVEL_PERMISSIONS_TARGETS","UsersTeamsMultiAutocomplete","FieldPermissionsSelection","CannotUsePermissions","PermissionsEditor","wcp","bind","name","allRules","value","accessRules","filter","r","type","otherRules","listTargetsQuery","targetsList","data","aco","listFolderLevelPermissionsTargets","addPermission","selectedUserOrTeam","length","newRule","target","operator","action","onChange","updatePermission","rule","updatedRule","updatedAccessRules","map","removeUserTeam","removedRule","canUseHcmsFieldPermissions","createElement","Column","span","options","String","rules","onRemoveAccess","onUpdatePermission"],"sources":["PermissionsEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport { Grid } from \"@webiny/admin-ui\";\nimport { useBind } from \"@webiny/form\";\nimport { useWcp } from \"@webiny/app-admin\";\nimport {\n LIST_FOLDER_LEVEL_PERMISSIONS_TARGETS,\n UsersTeamsMultiAutocomplete\n} from \"@webiny/app-aco\";\nimport type { FolderLevelPermissionsTarget } from \"@webiny/app-aco\";\nimport type { FieldRule } from \"~/types.js\";\nimport { FieldPermissionsSelection } from \"./FieldPermissionsSelection.js\";\nimport { CannotUsePermissions } from \"./CannotUsePermissions.js\";\n\nexport const PermissionsEditor = () => {\n const wcp = useWcp();\n const bind = useBind({ name: \"rules\" });\n const allRules: FieldRule[] = bind.value || [];\n const accessRules = allRules.filter(r => r.type === \"accessControl\");\n const otherRules = allRules.filter(r => r.type !== \"accessControl\");\n\n const listTargetsQuery = useQuery(LIST_FOLDER_LEVEL_PERMISSIONS_TARGETS);\n const targetsList: FolderLevelPermissionsTarget[] =\n listTargetsQuery.data?.aco.listFolderLevelPermissionsTargets.data || [];\n\n const addPermission = (value: string[]) => {\n const selectedUserOrTeam = value[value.length - 1];\n const newRule: FieldRule = {\n type: \"accessControl\",\n target: \"identity\",\n operator: \"matches\",\n value: selectedUserOrTeam,\n action: \"disable\"\n };\n\n bind.onChange([...otherRules, ...accessRules, newRule]);\n };\n\n const updatePermission = ({ rule: updatedRule }: { rule: FieldRule }) => {\n const updatedAccessRules = accessRules.map(rule => {\n if (rule.value === updatedRule.value) {\n return updatedRule;\n }\n return rule;\n });\n bind.onChange([...otherRules, ...updatedAccessRules]);\n };\n\n const removeUserTeam = ({ rule: removedRule }: { rule: FieldRule }) => {\n const updatedAccessRules = accessRules.filter(rule => rule.value !== removedRule.value);\n bind.onChange([...otherRules, ...updatedAccessRules]);\n };\n\n if (!wcp.canUseHcmsFieldPermissions()) {\n return (\n <Grid>\n <Grid.Column span={12}>\n <CannotUsePermissions />\n </Grid.Column>\n </Grid>\n );\n }\n\n return (\n <Grid>\n <Grid.Column span={12}>\n <UsersTeamsMultiAutocomplete\n options={targetsList}\n value={accessRules.map(\n rule => String(rule.value) as `admin:${string}` | `team:${string}`\n )}\n onChange={addPermission}\n />\n </Grid.Column>\n <Grid.Column span={12}>\n <FieldPermissionsSelection\n rules={accessRules}\n targetsList={targetsList}\n onRemoveAccess={removeUserTeam}\n onUpdatePermission={updatePermission}\n />\n </Grid.Column>\n </Grid>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,9 +5,8 @@ interface ActionOption {
|
|
|
5
5
|
label: string;
|
|
6
6
|
}
|
|
7
7
|
interface RulesTabProps {
|
|
8
|
-
gridClassName?: string;
|
|
9
8
|
fieldOptions: FieldOption[];
|
|
10
9
|
actionOptions?: ActionOption[];
|
|
11
10
|
}
|
|
12
|
-
export declare const
|
|
11
|
+
export declare const RulesEditor: ({ fieldOptions, actionOptions }: RulesTabProps) => React.JSX.Element;
|
|
13
12
|
export {};
|
|
@@ -146,8 +146,7 @@ const RuleRow = ({
|
|
|
146
146
|
variant: "ghost"
|
|
147
147
|
}))));
|
|
148
148
|
};
|
|
149
|
-
export const
|
|
150
|
-
gridClassName,
|
|
149
|
+
export const RulesEditor = ({
|
|
151
150
|
fieldOptions,
|
|
152
151
|
actionOptions = DEFAULT_ACTION_OPTIONS
|
|
153
152
|
}) => {
|
|
@@ -175,9 +174,7 @@ export const RulesTab = ({
|
|
|
175
174
|
const removeRule = index => {
|
|
176
175
|
bind.onChange([...otherRules, ...entryRules.filter((_, i) => i !== index)]);
|
|
177
176
|
};
|
|
178
|
-
return /*#__PURE__*/React.createElement(Grid, {
|
|
179
|
-
className: gridClassName
|
|
180
|
-
}, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
177
|
+
return /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
181
178
|
span: 12
|
|
182
179
|
}, entryRules.map((rule, index) => /*#__PURE__*/React.createElement(RuleRow, {
|
|
183
180
|
key: index,
|
|
@@ -200,4 +197,4 @@ export const RulesTab = ({
|
|
|
200
197
|
}))));
|
|
201
198
|
};
|
|
202
199
|
|
|
203
|
-
//# sourceMappingURL=
|
|
200
|
+
//# sourceMappingURL=RulesEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","useMemo","Grid","Select","Input","Button","Separator","useBind","ReactComponent","DeleteIcon","AddIcon","getOperatorOptions","VALUE_HIDDEN_OPERATORS","DEFAULT_ACTION_OPTIONS","value","label","RuleRow","rule","index","fieldOptions","actionOptions","onChange","onRemove","selectedFieldOption","find","o","target","operatorOptions","fieldType","operatorSelectOptions","map","fieldSelectOptions","showValue","operator","has","handleFieldChange","newTarget","newFieldOption","newOps","currentOpValid","some","handleOperatorChange","op","handleValueChange","parsed","num","Number","isNaN","handleActionChange","action","isBooleanField","createElement","Fragment","className","variant","labelPosition","Column","span","displayResetAction","options","disabled","String","type","containerClassName","text","icon","onClick","RulesEditor","bind","name","allRules","entryRules","filter","r","otherRules","addRule","newRule","updateRule","updated","next","removeRule","_","i","key","length","size"],"sources":["RulesEditor.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport { Grid, Select, Input, Button, Separator } from \"@webiny/admin-ui\";\nimport { useBind } from \"@webiny/form\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport type { FieldRule, FieldRuleAction } from \"~/types.js\";\nimport type { FieldOption } from \"@webiny/app-headless-cms-common/Fields/fieldOptions.js\";\nimport {\n getOperatorOptions,\n VALUE_HIDDEN_OPERATORS\n} from \"@webiny/app-headless-cms-common/Fields/operatorOptions.js\";\nimport type { Operator } from \"@webiny/app-headless-cms-common/Fields/evaluateExpression.js\";\n\nconst DEFAULT_ACTION_OPTIONS = [\n { value: \"hide\", label: \"Hide\" },\n { value: \"disable\", label: \"Disable\" }\n];\n\ninterface ActionOption {\n value: string;\n label: string;\n}\n\ninterface RuleRowProps {\n rule: FieldRule;\n index: number;\n fieldOptions: FieldOption[];\n actionOptions: ActionOption[];\n onChange: (index: number, updated: FieldRule) => void;\n onRemove: (index: number) => void;\n}\n\nconst RuleRow = ({\n rule,\n index,\n fieldOptions,\n actionOptions,\n onChange,\n onRemove\n}: RuleRowProps) => {\n const selectedFieldOption = useMemo(\n () => fieldOptions.find(o => o.value === rule.target),\n [fieldOptions, rule.target]\n );\n\n const operatorOptions = useMemo(\n () => (selectedFieldOption ? getOperatorOptions(selectedFieldOption.fieldType) : []),\n [selectedFieldOption]\n );\n\n const operatorSelectOptions = useMemo(\n () => operatorOptions.map(o => ({ value: o.value, label: o.label })),\n [operatorOptions]\n );\n\n const fieldSelectOptions = useMemo(\n () => fieldOptions.map(o => ({ value: o.value, label: o.label })),\n [fieldOptions]\n );\n\n const showValue = rule.operator && !VALUE_HIDDEN_OPERATORS.has(rule.operator as Operator);\n\n const handleFieldChange = useCallback(\n (value: string | null) => {\n const newTarget = value ?? \"\";\n const newFieldOption = fieldOptions.find(o => o.value === newTarget);\n // Reset operator and value when field changes\n const newOps = newFieldOption ? getOperatorOptions(newFieldOption.fieldType) : [];\n const currentOpValid = newOps.some(o => o.value === rule.operator);\n onChange(index, {\n ...rule,\n target: newTarget,\n operator: currentOpValid ? rule.operator : \"\",\n value: currentOpValid ? rule.value : null\n });\n },\n [fieldOptions, rule, index, onChange]\n );\n\n const handleOperatorChange = useCallback(\n (value: string | null) => {\n const op = value ?? \"\";\n onChange(index, {\n ...rule,\n operator: op,\n value: VALUE_HIDDEN_OPERATORS.has(op as Operator) ? null : rule.value\n });\n },\n [rule, index, onChange]\n );\n\n const handleValueChange = useCallback(\n (value: string | null) => {\n let parsed: string | number | boolean | null = value ?? \"\";\n\n // Auto-parse numbers for numeric field types\n if (selectedFieldOption?.fieldType === \"number\" && parsed !== \"\") {\n const num = Number(parsed);\n if (!isNaN(num)) {\n parsed = num;\n }\n }\n\n // Auto-parse booleans\n if (selectedFieldOption?.fieldType === \"boolean\") {\n if (parsed === \"true\") {\n parsed = true;\n } else if (parsed === \"false\") {\n parsed = false;\n }\n }\n\n onChange(index, { ...rule, value: parsed });\n },\n [rule, index, onChange, selectedFieldOption]\n );\n\n const handleActionChange = useCallback(\n (value: string | null) => {\n onChange(index, {\n ...rule,\n action: (value ?? actionOptions[0]?.value ?? \"hide\") as FieldRuleAction\n });\n },\n [rule, index, onChange, actionOptions]\n );\n\n // For boolean fields, show a dropdown for value\n const isBooleanField = selectedFieldOption?.fieldType === \"boolean\";\n\n return (\n <>\n <Separator\n className={index === 0 ? \"mb-lg\" : \"my-lg\"}\n variant={\"accent\"}\n labelPosition={\"start\"}\n >\n Rule #{index + 1}\n </Separator>\n <Grid>\n <Grid.Column span={12}>\n <Select\n displayResetAction={false}\n label={\"Field\"}\n value={rule.target}\n options={fieldSelectOptions}\n onChange={handleFieldChange}\n />\n </Grid.Column>\n <Grid.Column span={6}>\n <Select\n displayResetAction={false}\n label={\"Operator\"}\n value={rule.operator}\n options={operatorSelectOptions}\n onChange={handleOperatorChange}\n disabled={!rule.target}\n />\n </Grid.Column>\n <Grid.Column span={6}>\n {isBooleanField ? (\n <Select\n disabled={!showValue}\n displayResetAction={false}\n label={\"Value\"}\n value={String(rule.value ?? \"\")}\n options={[\n { value: \"true\", label: \"True\" },\n { value: \"false\", label: \"False\" }\n ]}\n onChange={handleValueChange}\n />\n ) : (\n <Input\n disabled={!showValue}\n label={\"Value\"}\n value={rule.value != null ? String(rule.value) : \"\"}\n type={selectedFieldOption?.fieldType === \"number\" ? \"number\" : \"text\"}\n onChange={handleValueChange}\n />\n )}\n </Grid.Column>\n <Grid.Column span={12}>\n <Select\n label={\"Action\"}\n displayResetAction={false}\n value={rule.action}\n options={actionOptions}\n onChange={handleActionChange}\n />\n </Grid.Column>\n <Grid.Column span={12} className={\"flex justify-between\"}>\n <Button\n className={\"[&_svg]:fill-destructive text-destructive-primary\"}\n containerClassName={\"flex ml-auto\"}\n text={\"Remove rule\"}\n icon={<DeleteIcon />}\n onClick={() => onRemove(index)}\n variant={\"ghost\"}\n />\n </Grid.Column>\n </Grid>\n </>\n );\n};\n\ninterface RulesTabProps {\n fieldOptions: FieldOption[];\n actionOptions?: ActionOption[];\n}\n\nexport const RulesEditor = ({\n fieldOptions,\n actionOptions = DEFAULT_ACTION_OPTIONS\n}: RulesTabProps) => {\n const bind = useBind({ name: \"rules\" });\n const allRules: FieldRule[] = bind.value || [];\n const entryRules = allRules.filter(r => r.type === \"condition\");\n const otherRules = allRules.filter(r => r.type !== \"condition\");\n\n const addRule = () => {\n const newRule: FieldRule = {\n type: \"condition\",\n target: \"\",\n operator: \"\",\n value: null,\n action: (actionOptions[0]?.value ?? \"hide\") as FieldRuleAction\n };\n bind.onChange([...otherRules, ...entryRules, newRule]);\n };\n\n const updateRule = (index: number, updated: FieldRule) => {\n const next = [...entryRules];\n next[index] = updated;\n bind.onChange([...otherRules, ...next]);\n };\n\n const removeRule = (index: number) => {\n bind.onChange([...otherRules, ...entryRules.filter((_, i) => i !== index)]);\n };\n\n return (\n <Grid>\n <Grid.Column span={12}>\n {entryRules.map((rule, index) => (\n <RuleRow\n key={index}\n rule={rule}\n index={index}\n fieldOptions={fieldOptions}\n actionOptions={actionOptions}\n onChange={updateRule}\n onRemove={removeRule}\n />\n ))}\n {entryRules.length > 0 ? (\n <Separator variant={\"accent\"} className={\"mt-lg\"} />\n ) : null}\n <div className={\"flex justify-center mt-md\"}>\n <Button onClick={addRule} text={\"Add Rule\"} icon={<AddIcon />} size={\"sm\"} />\n </div>\n </Grid.Column>\n </Grid>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACnD,SAASC,IAAI,EAAEC,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAEC,SAAS,QAAQ,kBAAkB;AACzE,SAASC,OAAO,QAAQ,cAAc;AACtC,SAASC,cAAc,IAAIC,UAAU,QAAQ,0BAA0B;AACvE,SAASD,cAAc,IAAIE,OAAO,QAAQ,uBAAuB;AAGjE,SACIC,kBAAkB,EAClBC,sBAAsB,QACnB,2DAA2D;AAGlE,MAAMC,sBAAsB,GAAG,CAC3B;EAAEC,KAAK,EAAE,MAAM;EAAEC,KAAK,EAAE;AAAO,CAAC,EAChC;EAAED,KAAK,EAAE,SAAS;EAAEC,KAAK,EAAE;AAAU,CAAC,CACzC;AAgBD,MAAMC,OAAO,GAAGA,CAAC;EACbC,IAAI;EACJC,KAAK;EACLC,YAAY;EACZC,aAAa;EACbC,QAAQ;EACRC;AACU,CAAC,KAAK;EAChB,MAAMC,mBAAmB,GAAGtB,OAAO,CAC/B,MAAMkB,YAAY,CAACK,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACX,KAAK,KAAKG,IAAI,CAACS,MAAM,CAAC,EACrD,CAACP,YAAY,EAAEF,IAAI,CAACS,MAAM,CAC9B,CAAC;EAED,MAAMC,eAAe,GAAG1B,OAAO,CAC3B,MAAOsB,mBAAmB,GAAGZ,kBAAkB,CAACY,mBAAmB,CAACK,SAAS,CAAC,GAAG,EAAG,EACpF,CAACL,mBAAmB,CACxB,CAAC;EAED,MAAMM,qBAAqB,GAAG5B,OAAO,CACjC,MAAM0B,eAAe,CAACG,GAAG,CAACL,CAAC,KAAK;IAAEX,KAAK,EAAEW,CAAC,CAACX,KAAK;IAAEC,KAAK,EAAEU,CAAC,CAACV;EAAM,CAAC,CAAC,CAAC,EACpE,CAACY,eAAe,CACpB,CAAC;EAED,MAAMI,kBAAkB,GAAG9B,OAAO,CAC9B,MAAMkB,YAAY,CAACW,GAAG,CAACL,CAAC,KAAK;IAAEX,KAAK,EAAEW,CAAC,CAACX,KAAK;IAAEC,KAAK,EAAEU,CAAC,CAACV;EAAM,CAAC,CAAC,CAAC,EACjE,CAACI,YAAY,CACjB,CAAC;EAED,MAAMa,SAAS,GAAGf,IAAI,CAACgB,QAAQ,IAAI,CAACrB,sBAAsB,CAACsB,GAAG,CAACjB,IAAI,CAACgB,QAAoB,CAAC;EAEzF,MAAME,iBAAiB,GAAGnC,WAAW,CAChCc,KAAoB,IAAK;IACtB,MAAMsB,SAAS,GAAGtB,KAAK,IAAI,EAAE;IAC7B,MAAMuB,cAAc,GAAGlB,YAAY,CAACK,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACX,KAAK,KAAKsB,SAAS,CAAC;IACpE;IACA,MAAME,MAAM,GAAGD,cAAc,GAAG1B,kBAAkB,CAAC0B,cAAc,CAACT,SAAS,CAAC,GAAG,EAAE;IACjF,MAAMW,cAAc,GAAGD,MAAM,CAACE,IAAI,CAACf,CAAC,IAAIA,CAAC,CAACX,KAAK,KAAKG,IAAI,CAACgB,QAAQ,CAAC;IAClEZ,QAAQ,CAACH,KAAK,EAAE;MACZ,GAAGD,IAAI;MACPS,MAAM,EAAEU,SAAS;MACjBH,QAAQ,EAAEM,cAAc,GAAGtB,IAAI,CAACgB,QAAQ,GAAG,EAAE;MAC7CnB,KAAK,EAAEyB,cAAc,GAAGtB,IAAI,CAACH,KAAK,GAAG;IACzC,CAAC,CAAC;EACN,CAAC,EACD,CAACK,YAAY,EAAEF,IAAI,EAAEC,KAAK,EAAEG,QAAQ,CACxC,CAAC;EAED,MAAMoB,oBAAoB,GAAGzC,WAAW,CACnCc,KAAoB,IAAK;IACtB,MAAM4B,EAAE,GAAG5B,KAAK,IAAI,EAAE;IACtBO,QAAQ,CAACH,KAAK,EAAE;MACZ,GAAGD,IAAI;MACPgB,QAAQ,EAAES,EAAE;MACZ5B,KAAK,EAAEF,sBAAsB,CAACsB,GAAG,CAACQ,EAAc,CAAC,GAAG,IAAI,GAAGzB,IAAI,CAACH;IACpE,CAAC,CAAC;EACN,CAAC,EACD,CAACG,IAAI,EAAEC,KAAK,EAAEG,QAAQ,CAC1B,CAAC;EAED,MAAMsB,iBAAiB,GAAG3C,WAAW,CAChCc,KAAoB,IAAK;IACtB,IAAI8B,MAAwC,GAAG9B,KAAK,IAAI,EAAE;;IAE1D;IACA,IAAIS,mBAAmB,EAAEK,SAAS,KAAK,QAAQ,IAAIgB,MAAM,KAAK,EAAE,EAAE;MAC9D,MAAMC,GAAG,GAAGC,MAAM,CAACF,MAAM,CAAC;MAC1B,IAAI,CAACG,KAAK,CAACF,GAAG,CAAC,EAAE;QACbD,MAAM,GAAGC,GAAG;MAChB;IACJ;;IAEA;IACA,IAAItB,mBAAmB,EAAEK,SAAS,KAAK,SAAS,EAAE;MAC9C,IAAIgB,MAAM,KAAK,MAAM,EAAE;QACnBA,MAAM,GAAG,IAAI;MACjB,CAAC,MAAM,IAAIA,MAAM,KAAK,OAAO,EAAE;QAC3BA,MAAM,GAAG,KAAK;MAClB;IACJ;IAEAvB,QAAQ,CAACH,KAAK,EAAE;MAAE,GAAGD,IAAI;MAAEH,KAAK,EAAE8B;IAAO,CAAC,CAAC;EAC/C,CAAC,EACD,CAAC3B,IAAI,EAAEC,KAAK,EAAEG,QAAQ,EAAEE,mBAAmB,CAC/C,CAAC;EAED,MAAMyB,kBAAkB,GAAGhD,WAAW,CACjCc,KAAoB,IAAK;IACtBO,QAAQ,CAACH,KAAK,EAAE;MACZ,GAAGD,IAAI;MACPgC,MAAM,EAAGnC,KAAK,IAAIM,aAAa,CAAC,CAAC,CAAC,EAAEN,KAAK,IAAI;IACjD,CAAC,CAAC;EACN,CAAC,EACD,CAACG,IAAI,EAAEC,KAAK,EAAEG,QAAQ,EAAED,aAAa,CACzC,CAAC;;EAED;EACA,MAAM8B,cAAc,GAAG3B,mBAAmB,EAAEK,SAAS,KAAK,SAAS;EAEnE,oBACI7B,KAAA,CAAAoD,aAAA,CAAApD,KAAA,CAAAqD,QAAA,qBACIrD,KAAA,CAAAoD,aAAA,CAAC7C,SAAS;IACN+C,SAAS,EAAEnC,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,OAAQ;IAC3CoC,OAAO,EAAE,QAAS;IAClBC,aAAa,EAAE;EAAQ,GAC1B,QACS,EAACrC,KAAK,GAAG,CACR,CAAC,eACZnB,KAAA,CAAAoD,aAAA,CAACjD,IAAI,qBACDH,KAAA,CAAAoD,aAAA,CAACjD,IAAI,CAACsD,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClB1D,KAAA,CAAAoD,aAAA,CAAChD,MAAM;IACHuD,kBAAkB,EAAE,KAAM;IAC1B3C,KAAK,EAAE,OAAQ;IACfD,KAAK,EAAEG,IAAI,CAACS,MAAO;IACnBiC,OAAO,EAAE5B,kBAAmB;IAC5BV,QAAQ,EAAEc;EAAkB,CAC/B,CACQ,CAAC,eACdpC,KAAA,CAAAoD,aAAA,CAACjD,IAAI,CAACsD,MAAM;IAACC,IAAI,EAAE;EAAE,gBACjB1D,KAAA,CAAAoD,aAAA,CAAChD,MAAM;IACHuD,kBAAkB,EAAE,KAAM;IAC1B3C,KAAK,EAAE,UAAW;IAClBD,KAAK,EAAEG,IAAI,CAACgB,QAAS;IACrB0B,OAAO,EAAE9B,qBAAsB;IAC/BR,QAAQ,EAAEoB,oBAAqB;IAC/BmB,QAAQ,EAAE,CAAC3C,IAAI,CAACS;EAAO,CAC1B,CACQ,CAAC,eACd3B,KAAA,CAAAoD,aAAA,CAACjD,IAAI,CAACsD,MAAM;IAACC,IAAI,EAAE;EAAE,GAChBP,cAAc,gBACXnD,KAAA,CAAAoD,aAAA,CAAChD,MAAM;IACHyD,QAAQ,EAAE,CAAC5B,SAAU;IACrB0B,kBAAkB,EAAE,KAAM;IAC1B3C,KAAK,EAAE,OAAQ;IACfD,KAAK,EAAE+C,MAAM,CAAC5C,IAAI,CAACH,KAAK,IAAI,EAAE,CAAE;IAChC6C,OAAO,EAAE,CACL;MAAE7C,KAAK,EAAE,MAAM;MAAEC,KAAK,EAAE;IAAO,CAAC,EAChC;MAAED,KAAK,EAAE,OAAO;MAAEC,KAAK,EAAE;IAAQ,CAAC,CACpC;IACFM,QAAQ,EAAEsB;EAAkB,CAC/B,CAAC,gBAEF5C,KAAA,CAAAoD,aAAA,CAAC/C,KAAK;IACFwD,QAAQ,EAAE,CAAC5B,SAAU;IACrBjB,KAAK,EAAE,OAAQ;IACfD,KAAK,EAAEG,IAAI,CAACH,KAAK,IAAI,IAAI,GAAG+C,MAAM,CAAC5C,IAAI,CAACH,KAAK,CAAC,GAAG,EAAG;IACpDgD,IAAI,EAAEvC,mBAAmB,EAAEK,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG,MAAO;IACtEP,QAAQ,EAAEsB;EAAkB,CAC/B,CAEI,CAAC,eACd5C,KAAA,CAAAoD,aAAA,CAACjD,IAAI,CAACsD,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClB1D,KAAA,CAAAoD,aAAA,CAAChD,MAAM;IACHY,KAAK,EAAE,QAAS;IAChB2C,kBAAkB,EAAE,KAAM;IAC1B5C,KAAK,EAAEG,IAAI,CAACgC,MAAO;IACnBU,OAAO,EAAEvC,aAAc;IACvBC,QAAQ,EAAE2B;EAAmB,CAChC,CACQ,CAAC,eACdjD,KAAA,CAAAoD,aAAA,CAACjD,IAAI,CAACsD,MAAM;IAACC,IAAI,EAAE,EAAG;IAACJ,SAAS,EAAE;EAAuB,gBACrDtD,KAAA,CAAAoD,aAAA,CAAC9C,MAAM;IACHgD,SAAS,EAAE,mDAAoD;IAC/DU,kBAAkB,EAAE,cAAe;IACnCC,IAAI,EAAE,aAAc;IACpBC,IAAI,eAAElE,KAAA,CAAAoD,aAAA,CAAC1C,UAAU,MAAE,CAAE;IACrByD,OAAO,EAAEA,CAAA,KAAM5C,QAAQ,CAACJ,KAAK,CAAE;IAC/BoC,OAAO,EAAE;EAAQ,CACpB,CACQ,CACX,CACR,CAAC;AAEX,CAAC;AAOD,OAAO,MAAMa,WAAW,GAAGA,CAAC;EACxBhD,YAAY;EACZC,aAAa,GAAGP;AACL,CAAC,KAAK;EACjB,MAAMuD,IAAI,GAAG7D,OAAO,CAAC;IAAE8D,IAAI,EAAE;EAAQ,CAAC,CAAC;EACvC,MAAMC,QAAqB,GAAGF,IAAI,CAACtD,KAAK,IAAI,EAAE;EAC9C,MAAMyD,UAAU,GAAGD,QAAQ,CAACE,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACX,IAAI,KAAK,WAAW,CAAC;EAC/D,MAAMY,UAAU,GAAGJ,QAAQ,CAACE,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACX,IAAI,KAAK,WAAW,CAAC;EAE/D,MAAMa,OAAO,GAAGA,CAAA,KAAM;IAClB,MAAMC,OAAkB,GAAG;MACvBd,IAAI,EAAE,WAAW;MACjBpC,MAAM,EAAE,EAAE;MACVO,QAAQ,EAAE,EAAE;MACZnB,KAAK,EAAE,IAAI;MACXmC,MAAM,EAAG7B,aAAa,CAAC,CAAC,CAAC,EAAEN,KAAK,IAAI;IACxC,CAAC;IACDsD,IAAI,CAAC/C,QAAQ,CAAC,CAAC,GAAGqD,UAAU,EAAE,GAAGH,UAAU,EAAEK,OAAO,CAAC,CAAC;EAC1D,CAAC;EAED,MAAMC,UAAU,GAAGA,CAAC3D,KAAa,EAAE4D,OAAkB,KAAK;IACtD,MAAMC,IAAI,GAAG,CAAC,GAAGR,UAAU,CAAC;IAC5BQ,IAAI,CAAC7D,KAAK,CAAC,GAAG4D,OAAO;IACrBV,IAAI,CAAC/C,QAAQ,CAAC,CAAC,GAAGqD,UAAU,EAAE,GAAGK,IAAI,CAAC,CAAC;EAC3C,CAAC;EAED,MAAMC,UAAU,GAAI9D,KAAa,IAAK;IAClCkD,IAAI,CAAC/C,QAAQ,CAAC,CAAC,GAAGqD,UAAU,EAAE,GAAGH,UAAU,CAACC,MAAM,CAAC,CAACS,CAAC,EAAEC,CAAC,KAAKA,CAAC,KAAKhE,KAAK,CAAC,CAAC,CAAC;EAC/E,CAAC;EAED,oBACInB,KAAA,CAAAoD,aAAA,CAACjD,IAAI,qBACDH,KAAA,CAAAoD,aAAA,CAACjD,IAAI,CAACsD,MAAM;IAACC,IAAI,EAAE;EAAG,GACjBc,UAAU,CAACzC,GAAG,CAAC,CAACb,IAAI,EAAEC,KAAK,kBACxBnB,KAAA,CAAAoD,aAAA,CAACnC,OAAO;IACJmE,GAAG,EAAEjE,KAAM;IACXD,IAAI,EAAEA,IAAK;IACXC,KAAK,EAAEA,KAAM;IACbC,YAAY,EAAEA,YAAa;IAC3BC,aAAa,EAAEA,aAAc;IAC7BC,QAAQ,EAAEwD,UAAW;IACrBvD,QAAQ,EAAE0D;EAAW,CACxB,CACJ,CAAC,EACDT,UAAU,CAACa,MAAM,GAAG,CAAC,gBAClBrF,KAAA,CAAAoD,aAAA,CAAC7C,SAAS;IAACgD,OAAO,EAAE,QAAS;IAACD,SAAS,EAAE;EAAQ,CAAE,CAAC,GACpD,IAAI,eACRtD,KAAA,CAAAoD,aAAA;IAAKE,SAAS,EAAE;EAA4B,gBACxCtD,KAAA,CAAAoD,aAAA,CAAC9C,MAAM;IAAC6D,OAAO,EAAES,OAAQ;IAACX,IAAI,EAAE,UAAW;IAACC,IAAI,eAAElE,KAAA,CAAAoD,aAAA,CAACzC,OAAO,MAAE,CAAE;IAAC2E,IAAI,EAAE;EAAK,CAAE,CAC3E,CACI,CACX,CAAC;AAEf,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { RulesEditor } from "./RulesEditor.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["RulesEditor"],"sources":["index.ts"],"sourcesContent":["export { RulesEditor } from \"./RulesEditor.js\";\n"],"mappings":"AAAA,SAASA,WAAW","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CmsModelField,
|
|
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:
|
|
13
|
-
export declare const getFieldValidators: (field: CmsModelField, fieldPlugin:
|
|
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
|
|
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 {
|
|
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
|
|
41
|
-
const plugin = getLayoutFieldPlugin(
|
|
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
|
-
|
|
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 =>
|
|
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 => !
|
|
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 (
|
|
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
|
-
|
|
147
|
-
fields:
|
|
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
|
-
|
|
158
|
+
field: cell,
|
|
159
159
|
rowIndex: index,
|
|
160
160
|
cellIndex: fieldIndex
|
|
161
161
|
}))));
|