@webiny/app-headless-cms 5.32.0 → 5.33.0-beta.1
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/useContentEntryForm.js +5 -1
- package/admin/components/ContentEntryForm/useContentEntryForm.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js +2 -3
- package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog.js +40 -0
- package/admin/components/FieldEditor/EditFieldDialog.js.map +1 -1
- package/admin/components/FieldEditor/Field.js +28 -15
- package/admin/components/FieldEditor/Field.js.map +1 -1
- package/admin/components/FieldEditor/FieldEditorContext.js +27 -3
- package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
- package/admin/graphql/contentModels.d.ts +1 -1
- package/admin/graphql/contentModels.js +1 -1
- package/admin/graphql/contentModels.js.map +1 -1
- package/admin/plugins/fieldRenderers/file/fileField.js +19 -24
- package/admin/plugins/fieldRenderers/file/fileField.js.map +1 -1
- package/admin/plugins/fieldRenderers/file/fileFields.js +47 -51
- package/admin/plugins/fieldRenderers/file/fileFields.js.map +1 -1
- package/admin/plugins/fieldRenderers/object/multipleObjects.js +4 -4
- package/admin/plugins/fieldRenderers/object/multipleObjects.js.map +1 -1
- package/admin/plugins/index.d.ts +1 -1
- package/admin/plugins/install.js +37 -26
- package/admin/plugins/install.js.map +1 -1
- package/admin/plugins/transformers/dateTransformer.js +1 -0
- package/admin/plugins/transformers/dateTransformer.js.map +1 -1
- package/admin/plugins/upgrades/5.33.0/locales.d.ts +7 -0
- package/admin/plugins/upgrades/5.33.0/locales.js +65 -0
- package/admin/plugins/upgrades/5.33.0/locales.js.map +1 -0
- package/admin/plugins/upgrades/5.33.0/types.d.ts +7 -0
- package/admin/plugins/upgrades/5.33.0/types.js +5 -0
- package/admin/plugins/upgrades/5.33.0/types.js.map +1 -0
- package/admin/plugins/upgrades/5.33.0/upgrade.d.ts +8 -0
- package/admin/plugins/upgrades/5.33.0/upgrade.js +81 -0
- package/admin/plugins/upgrades/5.33.0/upgrade.js.map +1 -0
- package/admin/plugins/upgrades/v5.33.0.d.ts +6 -0
- package/admin/plugins/upgrades/v5.33.0.js +191 -0
- package/admin/plugins/upgrades/v5.33.0.js.map +1 -0
- package/admin/views/contentEntries/ContentEntry/prepareFormData.d.ts +2 -2
- package/admin/views/contentEntries/ContentEntry/prepareFormData.js +91 -36
- package/admin/views/contentEntries/ContentEntry/prepareFormData.js.map +1 -1
- package/admin/views/contentEntries/experiment/Property.js +3 -3
- package/admin/views/contentEntries/experiment/Property.js.map +1 -1
- package/package.json +18 -21
- package/types.d.ts +1 -0
- package/types.js.map +1 -1
|
@@ -114,6 +114,10 @@ function useContentEntryForm(params) {
|
|
|
114
114
|
|
|
115
115
|
|
|
116
116
|
var setInvalidFieldValues = function setInvalidFieldValues(errors) {
|
|
117
|
+
if (Array.isArray(errors) === false || !errors) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
117
121
|
var values = (errors || []).reduce(function (acc, er) {
|
|
118
122
|
acc[er.fieldId] = er.error;
|
|
119
123
|
return acc;
|
|
@@ -382,7 +386,7 @@ function useContentEntryForm(params) {
|
|
|
382
386
|
return item.fieldId;
|
|
383
387
|
});
|
|
384
388
|
formData = (0, _pick.default)(data, (0, _toConsumableArray2.default)(fieldsIds));
|
|
385
|
-
gqlData = (0, _prepareFormData.prepareFormData)(formData, contentModel);
|
|
389
|
+
gqlData = (0, _prepareFormData.prepareFormData)(formData, contentModel.fields);
|
|
386
390
|
|
|
387
391
|
if (entry.id) {
|
|
388
392
|
_context4.next = 5;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["convertDefaultValue","field","value","type","Boolean","Number","useContentEntryForm","params","useContentEntry","listQueryVariables","contentModel","entry","useRouter","history","useSnackbar","showSnackbar","useState","invalidFields","setInvalidFields","loading","setLoading","renderPlugins","useMemo","plugins","byType","goToRevision","useCallback","id","push","modelId","encodeURIComponent","CREATE_CONTENT","createCreateMutation","UPDATE_CONTENT","createUpdateMutation","CREATE_CONTENT_FROM","createCreateFromMutation","useMutation","createMutation","updateMutation","createFromMutation","setInvalidFieldValues","errors","values","reduce","acc","er","fieldId","error","resetInvalidFieldValues","createContent","data","variables","update","cache","response","content","message","addEntryToListCache","GQLCache","name","onSubmit","updateContent","revision","createContentFrom","formData","newRevision","updateLatestRevisionInListCache","addRevisionToRevisionsCache","onChange","form","fieldsIds","fields","map","item","pick","gqlData","prepareFormData","meta","isLocked","locked","defaultValues","settings","multipleValues","defaultValue","undefined","predefinedValues","enabled","Array","isArray","selectedValue","find","selected","filter"],"sources":["useContentEntryForm.ts"],"sourcesContent":["import { Dispatch, SetStateAction, useCallback, useMemo, useState } from \"react\";\nimport pick from \"lodash/pick\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { FormOnSubmit } from \"@webiny/form\";\nimport {\n createCreateFromMutation,\n createCreateMutation,\n createUpdateMutation,\n CmsEntryCreateMutationResponse,\n CmsEntryCreateMutationVariables,\n CmsEntryUpdateMutationResponse,\n CmsEntryUpdateMutationVariables,\n CmsEntryCreateFromMutationResponse,\n CmsEntryCreateFromMutationVariables\n} from \"~/admin/graphql/contentEntries\";\nimport { useMutation } from \"~/admin/hooks\";\nimport * as GQLCache from \"~/admin/views/contentEntries/ContentEntry/cache\";\nimport { prepareFormData } from \"~/admin/views/contentEntries/ContentEntry/prepareFormData\";\nimport {\n CmsEditorContentEntry,\n CmsEditorContentModel,\n CmsEditorField,\n CmsEditorFieldRendererPlugin\n} from \"~/types\";\nimport { useContentEntry } from \"~/admin/views/contentEntries/hooks/useContentEntry\";\nimport { plugins } from \"@webiny/plugins\";\n\n/**\n * Used for some fields to convert their values.\n */\nconst convertDefaultValue = (field: CmsEditorField, value: any): string | number | boolean => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\n\ninterface InvalidFieldError {\n fieldId: string;\n error: string;\n}\n\ninterface UseContentEntryForm {\n data: Record<string, any>;\n loading: boolean;\n setLoading: Dispatch<SetStateAction<boolean>>;\n onChange: FormOnSubmit;\n onSubmit: FormOnSubmit;\n invalidFields: Record<string, string>;\n renderPlugins: CmsEditorFieldRendererPlugin[];\n}\n\nexport interface UseContentEntryFormParams {\n contentModel: CmsEditorContentModel;\n entry: Partial<CmsEditorContentEntry>;\n onChange?: FormOnSubmit;\n onSubmit?: FormOnSubmit;\n addEntryToListCache: boolean;\n}\n\nexport function useContentEntryForm(params: UseContentEntryFormParams): UseContentEntryForm {\n const { listQueryVariables } = useContentEntry();\n const { contentModel, entry } = params;\n const { history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const [invalidFields, setInvalidFields] = useState<Record<string, string>>({});\n const [loading, setLoading] = useState(false);\n\n const renderPlugins = useMemo(\n () => plugins.byType<CmsEditorFieldRendererPlugin>(\"cms-editor-field-renderer\"),\n []\n );\n\n const goToRevision = useCallback(id => {\n history.push(`/cms/content-entries/${contentModel.modelId}?id=${encodeURIComponent(id)}`);\n }, []);\n\n const { CREATE_CONTENT, UPDATE_CONTENT, CREATE_CONTENT_FROM } = useMemo(() => {\n return {\n // LIST_CONTENT: createListQuery(contentModel),\n CREATE_CONTENT: createCreateMutation(contentModel),\n UPDATE_CONTENT: createUpdateMutation(contentModel),\n CREATE_CONTENT_FROM: createCreateFromMutation(contentModel)\n };\n }, [contentModel.modelId]);\n\n const [createMutation] = useMutation<\n CmsEntryCreateMutationResponse,\n CmsEntryCreateMutationVariables\n >(CREATE_CONTENT);\n const [updateMutation] = useMutation<\n CmsEntryUpdateMutationResponse,\n CmsEntryUpdateMutationVariables\n >(UPDATE_CONTENT);\n const [createFromMutation] = useMutation<\n CmsEntryCreateFromMutationResponse,\n CmsEntryCreateFromMutationVariables\n >(CREATE_CONTENT_FROM);\n\n /**\n * Note that when passing error.data variable we cast as InvalidFieldError[] because we know it is so.\n */\n const setInvalidFieldValues = (errors?: InvalidFieldError[]): void => {\n const values = (errors || []).reduce((acc, er) => {\n acc[er.fieldId] = er.error;\n return acc;\n }, {} as Record<string, string>);\n setInvalidFields(() => values);\n };\n\n const resetInvalidFieldValues = (): void => {\n setInvalidFields(() => ({}));\n };\n\n const createContent = useCallback(\n async data => {\n setLoading(true);\n const response = await createMutation({\n variables: { data },\n update(cache, response) {\n if (!response.data) {\n showSnackbar(\"Missing response data in Create Entry.\");\n return;\n }\n const { data } = response;\n const { data: entry, error } = data.content || {};\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return;\n } else if (!entry) {\n showSnackbar(\n \"Missing entry data in update callback on Create Entry Response.\"\n );\n return;\n }\n resetInvalidFieldValues();\n if (params.addEntryToListCache) {\n GQLCache.addEntryToListCache(\n contentModel,\n cache,\n entry,\n listQueryVariables\n );\n }\n }\n });\n setLoading(false);\n\n const { error, data: entry } = response.data?.content || {};\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return null;\n } else if (!entry) {\n showSnackbar(\"Missing entry data in Create Entry Response.\");\n return null;\n }\n resetInvalidFieldValues();\n showSnackbar(`${contentModel.name} entry created successfully!`);\n if (typeof params.onSubmit === \"function\") {\n params.onSubmit(entry);\n } else {\n goToRevision(entry.id);\n }\n return entry;\n },\n [contentModel.modelId, listQueryVariables, params.onSubmit, params.addEntryToListCache]\n );\n\n const updateContent = useCallback(\n async (revision, data) => {\n setLoading(true);\n const response = await updateMutation({\n variables: { revision, data }\n });\n setLoading(false);\n if (!response.data) {\n showSnackbar(\"Missing response data on Update Entry Response.\");\n return;\n }\n\n const { error } = response.data.content;\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return null;\n }\n\n resetInvalidFieldValues();\n showSnackbar(\"Content saved successfully.\");\n const { data: entry } = response.data.content;\n return entry;\n },\n [contentModel.modelId]\n );\n\n const createContentFrom = useCallback(\n async (revision: string, formData: Record<string, any>) => {\n setLoading(true);\n const response = await createFromMutation({\n variables: { revision, data: formData },\n update(cache, response) {\n if (!response.data) {\n showSnackbar(\n \"Missing data in update callback on Create From Entry Response.\"\n );\n return;\n }\n const { data: newRevision, error } = response.data.content;\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return;\n } else if (!newRevision) {\n showSnackbar(\"Missing entry data in update callback on Create From Entry.\");\n return;\n }\n resetInvalidFieldValues();\n GQLCache.updateLatestRevisionInListCache(\n contentModel,\n cache,\n newRevision,\n listQueryVariables\n );\n GQLCache.addRevisionToRevisionsCache(contentModel, cache, newRevision);\n\n showSnackbar(\"A new revision was created!\");\n goToRevision(newRevision.id);\n }\n });\n setLoading(false);\n\n if (!response.data) {\n showSnackbar(\"Missing response data on Create From Entry Mutation.\");\n return;\n }\n\n const { data, error } = response.data.content;\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return null;\n }\n resetInvalidFieldValues();\n\n return data;\n },\n [contentModel.modelId, listQueryVariables]\n );\n\n const onChange: FormOnSubmit = (data, form) => {\n if (!params.onChange) {\n return;\n }\n return params.onChange(data, form);\n };\n\n const onSubmit = async (data: Record<string, any>) => {\n const fieldsIds = contentModel.fields.map(item => item.fieldId);\n const formData = pick(data, [...fieldsIds]);\n\n const gqlData = prepareFormData(formData, contentModel);\n if (!entry.id) {\n return createContent(gqlData);\n }\n\n const { meta } = entry;\n const { locked: isLocked } = meta || {};\n\n if (!isLocked) {\n return updateContent(entry.id, gqlData);\n }\n return createContentFrom(entry.id, gqlData);\n };\n\n const defaultValues = useMemo((): Record<string, any> => {\n const values: Record<string, any> = {};\n /**\n * Assign the default values:\n * * check the settings.defaultValue\n * * check the predefinedValues for selected value\n */\n for (const field of contentModel.fields) {\n /**\n * When checking if defaultValue is set in settings, we do the undefined check because it can be null, 0, empty string, false, etc...\n */\n const { settings, multipleValues = false } = field;\n if (settings && settings.defaultValue !== undefined) {\n /**\n * Special type of field is the boolean one.\n * We MUST set true/false for default value.\n */\n values[field.fieldId] = convertDefaultValue(field, settings.defaultValue);\n continue;\n }\n /**\n * No point in going further if predefined values are not enabled.\n */\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n continue;\n }\n /**\n * When field is not a multiple values one, we find the first possible default selected value and set it as field value.\n */\n if (!multipleValues) {\n const selectedValue = predefinedValues.values.find(({ selected }) => {\n return !!selected;\n });\n if (selectedValue) {\n values[field.fieldId] = convertDefaultValue(field, selectedValue.value);\n }\n continue;\n }\n /**\n *\n */\n values[field.fieldId] = predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n }\n return values;\n }, [contentModel.modelId]);\n\n return {\n /**\n * If entry is not set or entry.id does not exist, it means that form is for the new entry, so fetch default values.\n */\n data: entry && entry.id ? entry : defaultValues,\n loading,\n setLoading,\n onChange,\n onSubmit,\n invalidFields,\n renderPlugins\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["convertDefaultValue","field","value","type","Boolean","Number","useContentEntryForm","params","useContentEntry","listQueryVariables","contentModel","entry","useRouter","history","useSnackbar","showSnackbar","useState","invalidFields","setInvalidFields","loading","setLoading","renderPlugins","useMemo","plugins","byType","goToRevision","useCallback","id","push","modelId","encodeURIComponent","CREATE_CONTENT","createCreateMutation","UPDATE_CONTENT","createUpdateMutation","CREATE_CONTENT_FROM","createCreateFromMutation","useMutation","createMutation","updateMutation","createFromMutation","setInvalidFieldValues","errors","Array","isArray","values","reduce","acc","er","fieldId","error","resetInvalidFieldValues","createContent","data","variables","update","cache","response","content","message","addEntryToListCache","GQLCache","name","onSubmit","updateContent","revision","createContentFrom","formData","newRevision","updateLatestRevisionInListCache","addRevisionToRevisionsCache","onChange","form","fieldsIds","fields","map","item","pick","gqlData","prepareFormData","meta","isLocked","locked","defaultValues","settings","multipleValues","defaultValue","undefined","predefinedValues","enabled","selectedValue","find","selected","filter"],"sources":["useContentEntryForm.ts"],"sourcesContent":["import { Dispatch, SetStateAction, useCallback, useMemo, useState } from \"react\";\nimport pick from \"lodash/pick\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { FormOnSubmit } from \"@webiny/form\";\nimport {\n createCreateFromMutation,\n createCreateMutation,\n createUpdateMutation,\n CmsEntryCreateMutationResponse,\n CmsEntryCreateMutationVariables,\n CmsEntryUpdateMutationResponse,\n CmsEntryUpdateMutationVariables,\n CmsEntryCreateFromMutationResponse,\n CmsEntryCreateFromMutationVariables\n} from \"~/admin/graphql/contentEntries\";\nimport { useMutation } from \"~/admin/hooks\";\nimport * as GQLCache from \"~/admin/views/contentEntries/ContentEntry/cache\";\nimport { prepareFormData } from \"~/admin/views/contentEntries/ContentEntry/prepareFormData\";\nimport {\n CmsEditorContentEntry,\n CmsEditorContentModel,\n CmsEditorField,\n CmsEditorFieldRendererPlugin\n} from \"~/types\";\nimport { useContentEntry } from \"~/admin/views/contentEntries/hooks/useContentEntry\";\nimport { plugins } from \"@webiny/plugins\";\n\n/**\n * Used for some fields to convert their values.\n */\nconst convertDefaultValue = (field: CmsEditorField, value: any): string | number | boolean => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\n\ninterface InvalidFieldError {\n fieldId: string;\n error: string;\n}\n\ninterface UseContentEntryForm {\n data: Record<string, any>;\n loading: boolean;\n setLoading: Dispatch<SetStateAction<boolean>>;\n onChange: FormOnSubmit;\n onSubmit: FormOnSubmit;\n invalidFields: Record<string, string>;\n renderPlugins: CmsEditorFieldRendererPlugin[];\n}\n\nexport interface UseContentEntryFormParams {\n contentModel: CmsEditorContentModel;\n entry: Partial<CmsEditorContentEntry>;\n onChange?: FormOnSubmit;\n onSubmit?: FormOnSubmit;\n addEntryToListCache: boolean;\n}\n\nexport function useContentEntryForm(params: UseContentEntryFormParams): UseContentEntryForm {\n const { listQueryVariables } = useContentEntry();\n const { contentModel, entry } = params;\n const { history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const [invalidFields, setInvalidFields] = useState<Record<string, string>>({});\n const [loading, setLoading] = useState(false);\n\n const renderPlugins = useMemo(\n () => plugins.byType<CmsEditorFieldRendererPlugin>(\"cms-editor-field-renderer\"),\n []\n );\n\n const goToRevision = useCallback(id => {\n history.push(`/cms/content-entries/${contentModel.modelId}?id=${encodeURIComponent(id)}`);\n }, []);\n\n const { CREATE_CONTENT, UPDATE_CONTENT, CREATE_CONTENT_FROM } = useMemo(() => {\n return {\n // LIST_CONTENT: createListQuery(contentModel),\n CREATE_CONTENT: createCreateMutation(contentModel),\n UPDATE_CONTENT: createUpdateMutation(contentModel),\n CREATE_CONTENT_FROM: createCreateFromMutation(contentModel)\n };\n }, [contentModel.modelId]);\n\n const [createMutation] = useMutation<\n CmsEntryCreateMutationResponse,\n CmsEntryCreateMutationVariables\n >(CREATE_CONTENT);\n const [updateMutation] = useMutation<\n CmsEntryUpdateMutationResponse,\n CmsEntryUpdateMutationVariables\n >(UPDATE_CONTENT);\n const [createFromMutation] = useMutation<\n CmsEntryCreateFromMutationResponse,\n CmsEntryCreateFromMutationVariables\n >(CREATE_CONTENT_FROM);\n\n /**\n * Note that when passing error.data variable we cast as InvalidFieldError[] because we know it is so.\n */\n const setInvalidFieldValues = (errors?: InvalidFieldError[]): void => {\n if (Array.isArray(errors) === false || !errors) {\n return;\n }\n const values = (errors || []).reduce((acc, er) => {\n acc[er.fieldId] = er.error;\n return acc;\n }, {} as Record<string, string>);\n setInvalidFields(() => values);\n };\n\n const resetInvalidFieldValues = (): void => {\n setInvalidFields(() => ({}));\n };\n\n const createContent = useCallback(\n async data => {\n setLoading(true);\n const response = await createMutation({\n variables: { data },\n update(cache, response) {\n if (!response.data) {\n showSnackbar(\"Missing response data in Create Entry.\");\n return;\n }\n const { data } = response;\n const { data: entry, error } = data.content || {};\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return;\n } else if (!entry) {\n showSnackbar(\n \"Missing entry data in update callback on Create Entry Response.\"\n );\n return;\n }\n resetInvalidFieldValues();\n if (params.addEntryToListCache) {\n GQLCache.addEntryToListCache(\n contentModel,\n cache,\n entry,\n listQueryVariables\n );\n }\n }\n });\n setLoading(false);\n\n const { error, data: entry } = response.data?.content || {};\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return null;\n } else if (!entry) {\n showSnackbar(\"Missing entry data in Create Entry Response.\");\n return null;\n }\n resetInvalidFieldValues();\n showSnackbar(`${contentModel.name} entry created successfully!`);\n if (typeof params.onSubmit === \"function\") {\n params.onSubmit(entry);\n } else {\n goToRevision(entry.id);\n }\n return entry;\n },\n [contentModel.modelId, listQueryVariables, params.onSubmit, params.addEntryToListCache]\n );\n\n const updateContent = useCallback(\n async (revision, data) => {\n setLoading(true);\n const response = await updateMutation({\n variables: { revision, data }\n });\n setLoading(false);\n if (!response.data) {\n showSnackbar(\"Missing response data on Update Entry Response.\");\n return;\n }\n\n const { error } = response.data.content;\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return null;\n }\n\n resetInvalidFieldValues();\n showSnackbar(\"Content saved successfully.\");\n const { data: entry } = response.data.content;\n return entry;\n },\n [contentModel.modelId]\n );\n\n const createContentFrom = useCallback(\n async (revision: string, formData: Record<string, any>) => {\n setLoading(true);\n const response = await createFromMutation({\n variables: { revision, data: formData },\n update(cache, response) {\n if (!response.data) {\n showSnackbar(\n \"Missing data in update callback on Create From Entry Response.\"\n );\n return;\n }\n const { data: newRevision, error } = response.data.content;\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return;\n } else if (!newRevision) {\n showSnackbar(\"Missing entry data in update callback on Create From Entry.\");\n return;\n }\n resetInvalidFieldValues();\n GQLCache.updateLatestRevisionInListCache(\n contentModel,\n cache,\n newRevision,\n listQueryVariables\n );\n GQLCache.addRevisionToRevisionsCache(contentModel, cache, newRevision);\n\n showSnackbar(\"A new revision was created!\");\n goToRevision(newRevision.id);\n }\n });\n setLoading(false);\n\n if (!response.data) {\n showSnackbar(\"Missing response data on Create From Entry Mutation.\");\n return;\n }\n\n const { data, error } = response.data.content;\n if (error) {\n showSnackbar(error.message);\n setInvalidFieldValues(error.data as InvalidFieldError[]);\n return null;\n }\n resetInvalidFieldValues();\n\n return data;\n },\n [contentModel.modelId, listQueryVariables]\n );\n\n const onChange: FormOnSubmit = (data, form) => {\n if (!params.onChange) {\n return;\n }\n return params.onChange(data, form);\n };\n\n const onSubmit = async (data: Record<string, any>) => {\n const fieldsIds = contentModel.fields.map(item => item.fieldId);\n const formData = pick(data, [...fieldsIds]);\n\n const gqlData = prepareFormData(formData, contentModel.fields);\n if (!entry.id) {\n return createContent(gqlData);\n }\n\n const { meta } = entry;\n const { locked: isLocked } = meta || {};\n\n if (!isLocked) {\n return updateContent(entry.id, gqlData);\n }\n return createContentFrom(entry.id, gqlData);\n };\n\n const defaultValues = useMemo((): Record<string, any> => {\n const values: Record<string, any> = {};\n /**\n * Assign the default values:\n * * check the settings.defaultValue\n * * check the predefinedValues for selected value\n */\n for (const field of contentModel.fields) {\n /**\n * When checking if defaultValue is set in settings, we do the undefined check because it can be null, 0, empty string, false, etc...\n */\n const { settings, multipleValues = false } = field;\n if (settings && settings.defaultValue !== undefined) {\n /**\n * Special type of field is the boolean one.\n * We MUST set true/false for default value.\n */\n values[field.fieldId] = convertDefaultValue(field, settings.defaultValue);\n continue;\n }\n /**\n * No point in going further if predefined values are not enabled.\n */\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n continue;\n }\n /**\n * When field is not a multiple values one, we find the first possible default selected value and set it as field value.\n */\n if (!multipleValues) {\n const selectedValue = predefinedValues.values.find(({ selected }) => {\n return !!selected;\n });\n if (selectedValue) {\n values[field.fieldId] = convertDefaultValue(field, selectedValue.value);\n }\n continue;\n }\n /**\n *\n */\n values[field.fieldId] = predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n }\n return values;\n }, [contentModel.modelId]);\n\n return {\n /**\n * If entry is not set or entry.id does not exist, it means that form is for the new entry, so fetch default values.\n */\n data: entry && entry.id ? entry : defaultValues,\n loading,\n setLoading,\n onChange,\n onSubmit,\n invalidFields,\n renderPlugins\n };\n}\n"],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ var GeneralTab = function GeneralTab(_ref) {
|
|
|
34
34
|
var inputRef = (0, _react.useRef)(null);
|
|
35
35
|
|
|
36
36
|
var _useContentModelEdito = (0, _useContentModelEditor.useContentModelEditor)(),
|
|
37
|
-
|
|
37
|
+
contentModel = _useContentModelEdito.data;
|
|
38
38
|
|
|
39
39
|
var _useFieldEditor = (0, _.useFieldEditor)(),
|
|
40
40
|
getField = _useFieldEditor.getField; // Had problems with auto-focusing the "label" field. A couple of comments on this.
|
|
@@ -90,7 +90,7 @@ var GeneralTab = function GeneralTab(_ref) {
|
|
|
90
90
|
form: form,
|
|
91
91
|
afterChangeLabel: afterChangeLabel,
|
|
92
92
|
uniqueFieldIdValidator: uniqueFieldIdValidator,
|
|
93
|
-
contentModel:
|
|
93
|
+
contentModel: contentModel
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -121,7 +121,6 @@ var GeneralTab = function GeneralTab(_ref) {
|
|
|
121
121
|
beforeChange: beforeChangeFieldId
|
|
122
122
|
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
123
123
|
label: "Field ID",
|
|
124
|
-
disabled: !!field.id,
|
|
125
124
|
"data-testid": "cms.editor.field.settings.general.label-".concat(field.id)
|
|
126
125
|
}))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
127
126
|
span: 6
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GeneralTab","field","form","fieldPlugin","Bind","setValue","inputRef","useRef","useContentModelEditor","data","useFieldEditor","getField","useEffect","setTimeout","current","focus","afterChangeLabel","useCallback","value","beforeChangeFieldId","baseOnChange","newValue","trim","fieldIdValidator","fieldId","toLowerCase","Error","uniqueFieldIdValidator","existingField","id","additionalSettings","renderSettings","contentModel","predefinedValuesEnabled","useMemo","allowPredefinedValues","renderPredefinedValues","validation","create","multipleValuesLabel","allowMultipleValues"],"sources":["GeneralTab.tsx"],"sourcesContent":["import React, { useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { camelCase } from \"lodash\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { Switch } from \"@webiny/ui/Switch\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { validation } from \"@webiny/validation\";\nimport { CmsEditorField, CmsEditorFieldTypePlugin } from \"~/types\";\nimport { FormRenderPropParams } from \"@webiny/form/types\";\n\nimport { useFieldEditor } from \"~/admin/components/FieldEditor\";\nimport { useContentModelEditor } from \"~/admin/components/ContentModelEditor/useContentModelEditor\";\n\ninterface GeneralTabProps {\n field: CmsEditorField;\n form: FormRenderPropParams;\n fieldPlugin: CmsEditorFieldTypePlugin;\n}\n\nconst GeneralTab: React.FC<GeneralTabProps> = ({ field, form, fieldPlugin }) => {\n const { Bind, setValue } = form;\n const inputRef = useRef<HTMLInputElement | null>(null);\n const { data } = useContentModelEditor();\n const { getField } = useFieldEditor();\n\n // Had problems with auto-focusing the \"label\" field. A couple of comments on this.\n // 1. It's probably caused by the Tabs component which wraps this component.\n // 2. It seems that the \"autoFocus\" prop on the Input doesn't work. I can't see it attached in the actual DOM.\n // 3. This works, but it's not 100%. Visually, the cursor is frozen, and that's probably caused by a bug / design\n // in the RMWC / Material library. If you were to click somewhere on screen, and then apply focus, then\n // it seems it's behaving correctly. ¯\\_(ツ)_/¯\n useEffect(() => {\n setTimeout(() => {\n if (!inputRef.current) {\n return;\n }\n inputRef.current.focus();\n }, 200);\n }, []);\n\n const afterChangeLabel = useCallback((value: string) => {\n setValue(\"fieldId\", camelCase(value));\n }, []);\n\n const beforeChangeFieldId = useCallback(\n (value: string, baseOnChange: (value: string) => void) => {\n const newValue = value.trim();\n\n baseOnChange(newValue);\n },\n []\n );\n\n const fieldIdValidator = useCallback(fieldId => {\n if (fieldId.trim().toLowerCase() !== \"id\") {\n return true;\n }\n\n throw new Error(`Cannot use \"id\" as Field ID.`);\n }, []);\n\n const uniqueFieldIdValidator = useCallback((fieldId: string) => {\n const existingField = getField({ fieldId });\n if (!existingField) {\n return false;\n }\n\n if (existingField.id === field.id) {\n return true;\n }\n throw new Error(\"Please enter a unique Field ID.\");\n }, []);\n\n let additionalSettings: React.ReactNode | null = null;\n if (typeof fieldPlugin.field.renderSettings === \"function\") {\n additionalSettings = fieldPlugin.field.renderSettings({\n form,\n afterChangeLabel,\n uniqueFieldIdValidator,\n contentModel: data\n });\n }\n\n const predefinedValuesEnabled = useMemo(\n (): boolean =>\n fieldPlugin.field.allowPredefinedValues &&\n typeof fieldPlugin.field.renderPredefinedValues === \"function\",\n [field.fieldId]\n );\n\n return (\n <>\n <Grid>\n <Cell span={6}>\n <Bind\n name={\"label\"}\n validators={validation.create(\"required\")}\n afterChange={(value: string) => {\n if (field.id) {\n return;\n }\n afterChangeLabel(value);\n }}\n >\n <Input\n label={\"Label\"}\n inputRef={inputRef}\n data-testid=\"cms.editor.field.settings.general.label\"\n />\n </Bind>\n </Cell>\n <Cell span={6}>\n <Bind\n name={\"fieldId\"}\n validators={[\n validation.create(\"required\"),\n uniqueFieldIdValidator,\n fieldIdValidator\n ]}\n beforeChange={beforeChangeFieldId}\n >\n <Input\n label={\"Field ID\"}\n disabled={!!field.id}\n data-testid={`cms.editor.field.settings.general.label-${field.id}`}\n />\n </Bind>\n </Cell>\n\n <Cell span={6}>\n <Bind name={\"multipleValues\"}>\n <Switch\n label={fieldPlugin.field.multipleValuesLabel}\n disabled={!fieldPlugin.field.allowMultipleValues}\n data-testid={`cms.editor.field.settings.general.switch-multiplevalues`}\n />\n </Bind>\n </Cell>\n <Cell span={6}>\n <Bind name={\"predefinedValues.enabled\"}>\n <Switch\n label={\"Use predefined values\"}\n disabled={!predefinedValuesEnabled}\n data-testid={`cms.editor.field.settings.general.switch-predefinedvalues`}\n />\n </Bind>\n </Cell>\n\n <Cell span={12}>\n <Bind name={\"helpText\"}>\n <Input\n label={\"Help text\"}\n description={\"Help text (optional)\"}\n data-testid={`cms.editor.field.settings.general.helptext`}\n />\n </Bind>\n </Cell>\n </Grid>\n {additionalSettings}\n </>\n );\n};\n\nexport default GeneralTab;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["GeneralTab","field","form","fieldPlugin","Bind","setValue","inputRef","useRef","useContentModelEditor","contentModel","data","useFieldEditor","getField","useEffect","setTimeout","current","focus","afterChangeLabel","useCallback","value","beforeChangeFieldId","baseOnChange","newValue","trim","fieldIdValidator","fieldId","toLowerCase","Error","uniqueFieldIdValidator","existingField","id","additionalSettings","renderSettings","predefinedValuesEnabled","useMemo","allowPredefinedValues","renderPredefinedValues","validation","create","multipleValuesLabel","allowMultipleValues"],"sources":["GeneralTab.tsx"],"sourcesContent":["import React, { useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { camelCase } from \"lodash\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { Switch } from \"@webiny/ui/Switch\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { validation } from \"@webiny/validation\";\nimport { CmsEditorField, CmsEditorFieldTypePlugin } from \"~/types\";\nimport { FormRenderPropParams } from \"@webiny/form/types\";\n\nimport { useFieldEditor } from \"~/admin/components/FieldEditor\";\nimport { useContentModelEditor } from \"~/admin/components/ContentModelEditor/useContentModelEditor\";\n\ninterface GeneralTabProps {\n field: CmsEditorField;\n form: FormRenderPropParams;\n fieldPlugin: CmsEditorFieldTypePlugin;\n}\n\nconst GeneralTab: React.FC<GeneralTabProps> = ({ field, form, fieldPlugin }) => {\n const { Bind, setValue } = form;\n const inputRef = useRef<HTMLInputElement | null>(null);\n const { data: contentModel } = useContentModelEditor();\n const { getField } = useFieldEditor();\n\n // Had problems with auto-focusing the \"label\" field. A couple of comments on this.\n // 1. It's probably caused by the Tabs component which wraps this component.\n // 2. It seems that the \"autoFocus\" prop on the Input doesn't work. I can't see it attached in the actual DOM.\n // 3. This works, but it's not 100%. Visually, the cursor is frozen, and that's probably caused by a bug / design\n // in the RMWC / Material library. If you were to click somewhere on screen, and then apply focus, then\n // it seems it's behaving correctly. ¯\\_(ツ)_/¯\n useEffect(() => {\n setTimeout(() => {\n if (!inputRef.current) {\n return;\n }\n inputRef.current.focus();\n }, 200);\n }, []);\n\n const afterChangeLabel = useCallback((value: string) => {\n setValue(\"fieldId\", camelCase(value));\n }, []);\n\n const beforeChangeFieldId = useCallback(\n (value: string, baseOnChange: (value: string) => void) => {\n const newValue = value.trim();\n\n baseOnChange(newValue);\n },\n []\n );\n\n const fieldIdValidator = useCallback(fieldId => {\n if (fieldId.trim().toLowerCase() !== \"id\") {\n return true;\n }\n\n throw new Error(`Cannot use \"id\" as Field ID.`);\n }, []);\n\n const uniqueFieldIdValidator = useCallback((fieldId: string) => {\n const existingField = getField({ fieldId });\n if (!existingField) {\n return false;\n }\n\n if (existingField.id === field.id) {\n return true;\n }\n throw new Error(\"Please enter a unique Field ID.\");\n }, []);\n\n let additionalSettings: React.ReactNode | null = null;\n if (typeof fieldPlugin.field.renderSettings === \"function\") {\n additionalSettings = fieldPlugin.field.renderSettings({\n form,\n afterChangeLabel,\n uniqueFieldIdValidator,\n contentModel\n });\n }\n\n const predefinedValuesEnabled = useMemo(\n (): boolean =>\n fieldPlugin.field.allowPredefinedValues &&\n typeof fieldPlugin.field.renderPredefinedValues === \"function\",\n [field.fieldId]\n );\n\n return (\n <>\n <Grid>\n <Cell span={6}>\n <Bind\n name={\"label\"}\n validators={validation.create(\"required\")}\n afterChange={(value: string) => {\n if (field.id) {\n return;\n }\n afterChangeLabel(value);\n }}\n >\n <Input\n label={\"Label\"}\n inputRef={inputRef}\n data-testid=\"cms.editor.field.settings.general.label\"\n />\n </Bind>\n </Cell>\n <Cell span={6}>\n <Bind\n name={\"fieldId\"}\n validators={[\n validation.create(\"required\"),\n uniqueFieldIdValidator,\n fieldIdValidator\n ]}\n beforeChange={beforeChangeFieldId}\n >\n <Input\n label={\"Field ID\"}\n data-testid={`cms.editor.field.settings.general.label-${field.id}`}\n />\n </Bind>\n </Cell>\n\n <Cell span={6}>\n <Bind name={\"multipleValues\"}>\n <Switch\n label={fieldPlugin.field.multipleValuesLabel}\n disabled={!fieldPlugin.field.allowMultipleValues}\n data-testid={`cms.editor.field.settings.general.switch-multiplevalues`}\n />\n </Bind>\n </Cell>\n <Cell span={6}>\n <Bind name={\"predefinedValues.enabled\"}>\n <Switch\n label={\"Use predefined values\"}\n disabled={!predefinedValuesEnabled}\n data-testid={`cms.editor.field.settings.general.switch-predefinedvalues`}\n />\n </Bind>\n </Cell>\n\n <Cell span={12}>\n <Bind name={\"helpText\"}>\n <Input\n label={\"Help text\"}\n description={\"Help text (optional)\"}\n data-testid={`cms.editor.field.settings.general.helptext`}\n />\n </Bind>\n </Cell>\n </Grid>\n {additionalSettings}\n </>\n );\n};\n\nexport default GeneralTab;\n"],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
});
|
|
10
10
|
exports.default = void 0;
|
|
11
11
|
|
|
12
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
13
|
+
|
|
12
14
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
13
15
|
|
|
14
16
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
@@ -51,6 +53,8 @@ var _invariant = _interopRequireDefault(require("invariant"));
|
|
|
51
53
|
|
|
52
54
|
var _Button = require("@webiny/ui/Button");
|
|
53
55
|
|
|
56
|
+
var _useContentModelEditor = require("../ContentModelEditor/useContentModelEditor");
|
|
57
|
+
|
|
54
58
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
|
|
55
59
|
|
|
56
60
|
var _excluded = ["field", "onSubmit"];
|
|
@@ -141,9 +145,19 @@ var EditFieldDialog = function EditFieldDialog(_ref2) {
|
|
|
141
145
|
var _useFieldEditor = (0, _useFieldEditor2.useFieldEditor)(),
|
|
142
146
|
getFieldPlugin = _useFieldEditor.getFieldPlugin;
|
|
143
147
|
|
|
148
|
+
var _useContentModelEdito = (0, _useContentModelEditor.useContentModelEditor)(),
|
|
149
|
+
contentModel = _useContentModelEdito.data,
|
|
150
|
+
setContentModelData = _useContentModelEdito.setData;
|
|
151
|
+
|
|
152
|
+
var _useState3 = (0, _react.useState)(false),
|
|
153
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
154
|
+
isTitleField = _useState4[0],
|
|
155
|
+
setIsTitleField = _useState4[1];
|
|
156
|
+
|
|
144
157
|
(0, _react.useEffect)(function () {
|
|
145
158
|
if (!field) {
|
|
146
159
|
setCurrent(field);
|
|
160
|
+
setIsTitleField(false);
|
|
147
161
|
return;
|
|
148
162
|
}
|
|
149
163
|
|
|
@@ -165,6 +179,12 @@ var EditFieldDialog = function EditFieldDialog(_ref2) {
|
|
|
165
179
|
}
|
|
166
180
|
}
|
|
167
181
|
|
|
182
|
+
if (contentModel.titleFieldId === field.fieldId) {
|
|
183
|
+
setIsTitleField(true);
|
|
184
|
+
} else if (isTitleField === true) {
|
|
185
|
+
setIsTitleField(false);
|
|
186
|
+
}
|
|
187
|
+
|
|
168
188
|
setCurrent(clonedField);
|
|
169
189
|
}, [field]);
|
|
170
190
|
var onClose = (0, _react.useCallback)(function () {
|
|
@@ -266,6 +286,26 @@ var EditFieldDialog = function EditFieldDialog(_ref2) {
|
|
|
266
286
|
}, t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["Cancel"])))), /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
|
|
267
287
|
"data-testid": "cms.editor.field.settings.save",
|
|
268
288
|
onClick: function onClick(ev) {
|
|
289
|
+
/**
|
|
290
|
+
* In case title field fieldID changed, we need to change it in the model data as well.
|
|
291
|
+
*/
|
|
292
|
+
if (isTitleField && contentModel.titleFieldId !== form.data.fieldId) {
|
|
293
|
+
setContentModelData(function (prev) {
|
|
294
|
+
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, prev), {}, {
|
|
295
|
+
titleFieldId: form.data.fieldId
|
|
296
|
+
});
|
|
297
|
+
}).then(function () {
|
|
298
|
+
form.submit(ev);
|
|
299
|
+
}).catch(function (ex) {
|
|
300
|
+
console.error(ex.message);
|
|
301
|
+
});
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Or just continue as usually
|
|
306
|
+
*/
|
|
307
|
+
|
|
308
|
+
|
|
269
309
|
form.submit(ev);
|
|
270
310
|
}
|
|
271
311
|
}, t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Save Field"]))))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["t","i18n","namespace","dialogBody","css","width","height","getValidators","fieldPlugin","key","defaultValidators","mappedValidators","plugins","byType","map","validator","allowedValidators","field","includes","name","optional","filteredValidators","filter","Boolean","sort","a","b","getListValidators","getFieldValidators","fieldEditorDialog","maxWidth","maxHeight","paddingTop","EditFieldDialog","onSubmit","props","useState","current","setCurrent","useFieldEditor","getFieldPlugin","useEffect","clonedField","renderer","item","canUse","renderPlugin","rendererName","onClose","useCallback","render","headerTitle","type","invariant","fieldTypeLabel","label","data","form","hasValidators","Array","isArray","validators","length","showValidatorsTab","multipleValues","predefinedValuesTabEnabled","allowPredefinedValues","predefinedValues","enabled","ev","submit"],"sources":["EditFieldDialog.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\nimport { cloneDeep } from \"lodash\";\nimport { css } from \"emotion\";\nimport { Dialog, DialogContent, DialogTitle, DialogActions } from \"@webiny/ui/Dialog\";\nimport { Form } from \"@webiny/form\";\nimport { Tabs, Tab } from \"@webiny/ui/Tabs\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n CmsEditorField,\n CmsEditorFieldRendererPlugin,\n CmsEditorFieldTypePlugin,\n CmsEditorFieldValidatorPlugin\n} from \"~/types\";\nimport { plugins } from \"@webiny/plugins\";\nimport GeneralTab from \"./EditFieldDialog/GeneralTab\";\nimport AppearanceTab from \"./EditFieldDialog/AppearanceTab\";\nimport PredefinedValues from \"./EditFieldDialog/PredefinedValues\";\nimport ValidatorsTab from \"./EditFieldDialog/ValidatorsTab\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { useFieldEditor } from \"~/admin/components/FieldEditor/useFieldEditor\";\nimport invariant from \"invariant\";\nimport { ButtonDefault, ButtonPrimary } from \"@webiny/ui/Button\";\n\nconst t = i18n.namespace(\"app-headless-cms/admin/components/editor\");\n\nconst dialogBody = css({\n \"&.webiny-ui-dialog__content\": {\n width: 875,\n height: 450\n }\n});\n\ninterface EditFieldDialogProps {\n field: CmsEditorField | null;\n onClose: () => void;\n onSubmit: (data: CmsEditorField) => void;\n}\n\ninterface Validator {\n optional: boolean;\n validator: CmsEditorFieldValidatorPlugin[\"validator\"];\n}\nconst getValidators = (\n fieldPlugin: CmsEditorFieldTypePlugin,\n /**\n * We only have validators and listValidators, thats why the strict string types\n */\n key: \"validators\" | \"listValidators\",\n defaultValidators: string[] = []\n): Validator[] => {\n const mappedValidators = plugins\n .byType<CmsEditorFieldValidatorPlugin>(\"cms-editor-field-validator\")\n .map(({ validator }) => {\n const allowedValidators = fieldPlugin.field[key] || defaultValidators;\n if (allowedValidators.includes(validator.name)) {\n return {\n optional: true,\n validator\n };\n } else if (allowedValidators.includes(`!${validator.name}`)) {\n return {\n optional: false,\n validator\n };\n }\n\n return null;\n });\n\n const filteredValidators = mappedValidators.filter(Boolean) as Validator[];\n\n return (\n filteredValidators\n /**\n * We can safely cast because we are filtering in previous step.\n */\n .sort((a: Validator, b: Validator) => {\n if (!a.optional && b.optional) {\n return -1;\n }\n\n if (a.optional && !b.optional) {\n return 1;\n }\n\n return 0;\n }) as Validator[]\n );\n};\n\nconst getListValidators = (fieldPlugin: CmsEditorFieldTypePlugin) => {\n return getValidators(fieldPlugin, \"listValidators\", [\"minLength\", \"maxLength\"]);\n};\n\nconst getFieldValidators = (fieldPlugin: CmsEditorFieldTypePlugin) => {\n return getValidators(fieldPlugin, \"validators\");\n};\n\nconst fieldEditorDialog = css({\n width: \"100vw\",\n height: \"100vh\",\n \".mdc-dialog__surface\": {\n maxWidth: \"100% !important\",\n maxHeight: \"100% !important\",\n \".webiny-ui-dialog__content\": {\n maxWidth: \"100% !important\",\n maxHeight: \"100% !important\",\n width: \"100vw\",\n height: \"calc(100vh - 155px)\",\n paddingTop: \"0 !important\"\n }\n }\n});\n\nconst EditFieldDialog: React.FC<EditFieldDialogProps> = ({ field, onSubmit, ...props }) => {\n const [current, setCurrent] = useState<CmsEditorField | null>(null);\n\n const { getFieldPlugin } = useFieldEditor();\n\n useEffect((): void => {\n if (!field) {\n setCurrent(field);\n return;\n }\n\n const clonedField = cloneDeep(field);\n\n if (!clonedField.renderer || !clonedField.renderer.name) {\n const [renderPlugin] = plugins\n .byType<CmsEditorFieldRendererPlugin>(\"cms-editor-field-renderer\")\n .filter(item => item.renderer.canUse({ field }));\n\n if (renderPlugin) {\n clonedField.renderer = { name: renderPlugin.renderer.rendererName };\n }\n }\n\n setCurrent(clonedField);\n }, [field]);\n\n const onClose = useCallback((): void => {\n setCurrent(null);\n props.onClose();\n }, []);\n\n let render = null;\n let headerTitle = t`Field Settings`;\n\n if (current) {\n /**\n * Something must be very wrong for field plugin to be missing.\n */\n const fieldPlugin = getFieldPlugin(current.type) as CmsEditorFieldTypePlugin;\n /**\n * We will throw error because of that.\n */\n invariant(fieldPlugin, `Missing field plugin for type \"${current.type}\".`);\n\n headerTitle = t`Field Settings - {fieldTypeLabel}`({\n fieldTypeLabel: fieldPlugin.field.label\n });\n\n render = (\n <Form\n data={current}\n onSubmit={data => {\n /**\n * We know that data is CmsEditorField.\n */\n return onSubmit(data as unknown as CmsEditorField);\n }}\n >\n {form => {\n const hasValidators =\n Array.isArray(fieldPlugin.field.validators) &&\n fieldPlugin.field.validators.length > 0;\n\n const showValidatorsTab =\n form.data.multipleValues ||\n (Array.isArray(fieldPlugin.field.validators) &&\n fieldPlugin.field.validators.length > 0);\n\n const predefinedValuesTabEnabled =\n fieldPlugin.field.allowPredefinedValues &&\n form.data.predefinedValues &&\n form.data.predefinedValues.enabled;\n\n return (\n <>\n <DialogContent className={dialogBody}>\n <Tabs>\n <Tab label={t`General`}>\n <GeneralTab\n form={form}\n field={form.data as CmsEditorField}\n fieldPlugin={fieldPlugin}\n />\n </Tab>\n <Tab\n label={t`Predefined Values`}\n disabled={!predefinedValuesTabEnabled}\n >\n {predefinedValuesTabEnabled && (\n <PredefinedValues\n form={form}\n field={form.data as CmsEditorField}\n fieldPlugin={fieldPlugin}\n />\n )}\n </Tab>\n\n {showValidatorsTab ? (\n <Tab\n label={\"Validators\"}\n data-testid={\"cms.editor.field.tabs.validators\"}\n >\n {form.data.multipleValues ? (\n <>\n <Grid>\n <Cell span={12}>\n <Typography use={\"headline5\"}>\n List validators\n </Typography>\n <br />\n <Typography use={\"body2\"}>\n These validators are applied to the\n entire list of values.\n </Typography>\n </Cell>\n <Cell span={12}>\n <Elevation z={2}>\n <ValidatorsTab\n field={current}\n name={\"listValidation\"}\n validators={getListValidators(\n fieldPlugin\n )}\n form={form}\n />\n </Elevation>\n </Cell>\n </Grid>\n\n <Grid>\n <Cell span={12}>\n <Typography use={\"headline5\"}>\n Individual value validators\n </Typography>\n <br />\n <Typography use={\"body2\"}>\n These validators are applied to each\n value in the list.\n </Typography>\n </Cell>\n <Cell span={12}>\n <Elevation z={2}>\n <ValidatorsTab\n field={current}\n form={form}\n name={\"validation\"}\n validators={getFieldValidators(\n fieldPlugin\n )}\n />\n </Elevation>\n </Cell>\n </Grid>\n </>\n ) : null}\n\n {!form.data.multipleValues && hasValidators ? (\n <ValidatorsTab\n field={current}\n form={form}\n name={\"validation\"}\n validators={getFieldValidators(fieldPlugin)}\n />\n ) : null}\n </Tab>\n ) : null}\n <Tab label={t`Appearance`}>\n <AppearanceTab\n form={form}\n field={form.data as CmsEditorField}\n // TODO @ts-refactor verify that this actually worked? There was no fieldPlugin in AppearanceTab props\n // @ts-ignore\n fieldPlugin={fieldPlugin}\n />\n </Tab>\n </Tabs>\n </DialogContent>\n <DialogActions>\n <ButtonDefault\n data-testid=\"cms.editor.field.settings.cancel\"\n onClick={onClose}\n >{t`Cancel`}</ButtonDefault>\n <ButtonPrimary\n data-testid=\"cms.editor.field.settings.save\"\n onClick={ev => {\n form.submit(ev);\n }}\n >{t`Save Field`}</ButtonPrimary>\n </DialogActions>\n </>\n );\n }}\n </Form>\n );\n }\n\n return (\n <Dialog\n preventOutsideDismiss\n open={!!current}\n onClose={onClose}\n data-testid={\"cms-editor-edit-fields-dialog\"}\n className={fieldEditorDialog}\n >\n <DialogTitle>{headerTitle}</DialogTitle>\n {render}\n </Dialog>\n );\n};\n\nexport default EditFieldDialog;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["t","i18n","namespace","dialogBody","css","width","height","getValidators","fieldPlugin","key","defaultValidators","mappedValidators","plugins","byType","map","validator","allowedValidators","field","includes","name","optional","filteredValidators","filter","Boolean","sort","a","b","getListValidators","getFieldValidators","fieldEditorDialog","maxWidth","maxHeight","paddingTop","EditFieldDialog","onSubmit","props","useState","current","setCurrent","useFieldEditor","getFieldPlugin","useContentModelEditor","contentModel","data","setContentModelData","setData","isTitleField","setIsTitleField","useEffect","clonedField","renderer","item","canUse","renderPlugin","rendererName","titleFieldId","fieldId","onClose","useCallback","render","headerTitle","type","invariant","fieldTypeLabel","label","form","hasValidators","Array","isArray","validators","length","showValidatorsTab","multipleValues","predefinedValuesTabEnabled","allowPredefinedValues","predefinedValues","enabled","ev","prev","then","submit","catch","ex","console","error","message"],"sources":["EditFieldDialog.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\nimport { cloneDeep } from \"lodash\";\nimport { css } from \"emotion\";\nimport { Dialog, DialogContent, DialogTitle, DialogActions } from \"@webiny/ui/Dialog\";\nimport { Form } from \"@webiny/form\";\nimport { Tabs, Tab } from \"@webiny/ui/Tabs\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n CmsEditorField,\n CmsEditorFieldRendererPlugin,\n CmsEditorFieldTypePlugin,\n CmsEditorFieldValidatorPlugin\n} from \"~/types\";\nimport { plugins } from \"@webiny/plugins\";\nimport GeneralTab from \"./EditFieldDialog/GeneralTab\";\nimport AppearanceTab from \"./EditFieldDialog/AppearanceTab\";\nimport PredefinedValues from \"./EditFieldDialog/PredefinedValues\";\nimport ValidatorsTab from \"./EditFieldDialog/ValidatorsTab\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { useFieldEditor } from \"~/admin/components/FieldEditor/useFieldEditor\";\nimport invariant from \"invariant\";\nimport { ButtonDefault, ButtonPrimary } from \"@webiny/ui/Button\";\nimport { useContentModelEditor } from \"~/admin/components/ContentModelEditor/useContentModelEditor\";\n\nconst t = i18n.namespace(\"app-headless-cms/admin/components/editor\");\n\nconst dialogBody = css({\n \"&.webiny-ui-dialog__content\": {\n width: 875,\n height: 450\n }\n});\n\ninterface EditFieldDialogProps {\n field: CmsEditorField | null;\n onClose: () => void;\n onSubmit: (data: CmsEditorField) => void;\n}\n\ninterface Validator {\n optional: boolean;\n validator: CmsEditorFieldValidatorPlugin[\"validator\"];\n}\nconst getValidators = (\n fieldPlugin: CmsEditorFieldTypePlugin,\n /**\n * We only have validators and listValidators, thats why the strict string types\n */\n key: \"validators\" | \"listValidators\",\n defaultValidators: string[] = []\n): Validator[] => {\n const mappedValidators = plugins\n .byType<CmsEditorFieldValidatorPlugin>(\"cms-editor-field-validator\")\n .map(({ validator }) => {\n const allowedValidators = fieldPlugin.field[key] || defaultValidators;\n if (allowedValidators.includes(validator.name)) {\n return {\n optional: true,\n validator\n };\n } else if (allowedValidators.includes(`!${validator.name}`)) {\n return {\n optional: false,\n validator\n };\n }\n\n return null;\n });\n\n const filteredValidators = mappedValidators.filter(Boolean) as Validator[];\n\n return (\n filteredValidators\n /**\n * We can safely cast because we are filtering in previous step.\n */\n .sort((a: Validator, b: Validator) => {\n if (!a.optional && b.optional) {\n return -1;\n }\n\n if (a.optional && !b.optional) {\n return 1;\n }\n\n return 0;\n }) as Validator[]\n );\n};\n\nconst getListValidators = (fieldPlugin: CmsEditorFieldTypePlugin) => {\n return getValidators(fieldPlugin, \"listValidators\", [\"minLength\", \"maxLength\"]);\n};\n\nconst getFieldValidators = (fieldPlugin: CmsEditorFieldTypePlugin) => {\n return getValidators(fieldPlugin, \"validators\");\n};\n\nconst fieldEditorDialog = css({\n width: \"100vw\",\n height: \"100vh\",\n \".mdc-dialog__surface\": {\n maxWidth: \"100% !important\",\n maxHeight: \"100% !important\",\n \".webiny-ui-dialog__content\": {\n maxWidth: \"100% !important\",\n maxHeight: \"100% !important\",\n width: \"100vw\",\n height: \"calc(100vh - 155px)\",\n paddingTop: \"0 !important\"\n }\n }\n});\n\nconst EditFieldDialog: React.FC<EditFieldDialogProps> = ({ field, onSubmit, ...props }) => {\n const [current, setCurrent] = useState<CmsEditorField | null>(null);\n const { getFieldPlugin } = useFieldEditor();\n const { data: contentModel, setData: setContentModelData } = useContentModelEditor();\n\n const [isTitleField, setIsTitleField] = useState<boolean>(false);\n\n useEffect((): void => {\n if (!field) {\n setCurrent(field);\n setIsTitleField(false);\n return;\n }\n\n const clonedField = cloneDeep(field);\n\n if (!clonedField.renderer || !clonedField.renderer.name) {\n const [renderPlugin] = plugins\n .byType<CmsEditorFieldRendererPlugin>(\"cms-editor-field-renderer\")\n .filter(item => item.renderer.canUse({ field }));\n\n if (renderPlugin) {\n clonedField.renderer = { name: renderPlugin.renderer.rendererName };\n }\n }\n if (contentModel.titleFieldId === field.fieldId) {\n setIsTitleField(true);\n } else if (isTitleField === true) {\n setIsTitleField(false);\n }\n setCurrent(clonedField);\n }, [field]);\n\n const onClose = useCallback((): void => {\n setCurrent(null);\n props.onClose();\n }, []);\n\n let render = null;\n let headerTitle = t`Field Settings`;\n\n if (current) {\n /**\n * Something must be very wrong for field plugin to be missing.\n */\n const fieldPlugin = getFieldPlugin(current.type) as CmsEditorFieldTypePlugin;\n /**\n * We will throw error because of that.\n */\n invariant(fieldPlugin, `Missing field plugin for type \"${current.type}\".`);\n\n headerTitle = t`Field Settings - {fieldTypeLabel}`({\n fieldTypeLabel: fieldPlugin.field.label\n });\n\n render = (\n <Form\n data={current}\n onSubmit={data => {\n /**\n * We know that data is CmsEditorField.\n */\n return onSubmit(data as unknown as CmsEditorField);\n }}\n >\n {form => {\n const hasValidators =\n Array.isArray(fieldPlugin.field.validators) &&\n fieldPlugin.field.validators.length > 0;\n\n const showValidatorsTab =\n form.data.multipleValues ||\n (Array.isArray(fieldPlugin.field.validators) &&\n fieldPlugin.field.validators.length > 0);\n\n const predefinedValuesTabEnabled =\n fieldPlugin.field.allowPredefinedValues &&\n form.data.predefinedValues &&\n form.data.predefinedValues.enabled;\n\n return (\n <>\n <DialogContent className={dialogBody}>\n <Tabs>\n <Tab label={t`General`}>\n <GeneralTab\n form={form}\n field={form.data as CmsEditorField}\n fieldPlugin={fieldPlugin}\n />\n </Tab>\n <Tab\n label={t`Predefined Values`}\n disabled={!predefinedValuesTabEnabled}\n >\n {predefinedValuesTabEnabled && (\n <PredefinedValues\n form={form}\n field={form.data as CmsEditorField}\n fieldPlugin={fieldPlugin}\n />\n )}\n </Tab>\n\n {showValidatorsTab ? (\n <Tab\n label={\"Validators\"}\n data-testid={\"cms.editor.field.tabs.validators\"}\n >\n {form.data.multipleValues ? (\n <>\n <Grid>\n <Cell span={12}>\n <Typography use={\"headline5\"}>\n List validators\n </Typography>\n <br />\n <Typography use={\"body2\"}>\n These validators are applied to the\n entire list of values.\n </Typography>\n </Cell>\n <Cell span={12}>\n <Elevation z={2}>\n <ValidatorsTab\n field={current}\n name={\"listValidation\"}\n validators={getListValidators(\n fieldPlugin\n )}\n form={form}\n />\n </Elevation>\n </Cell>\n </Grid>\n\n <Grid>\n <Cell span={12}>\n <Typography use={\"headline5\"}>\n Individual value validators\n </Typography>\n <br />\n <Typography use={\"body2\"}>\n These validators are applied to each\n value in the list.\n </Typography>\n </Cell>\n <Cell span={12}>\n <Elevation z={2}>\n <ValidatorsTab\n field={current}\n form={form}\n name={\"validation\"}\n validators={getFieldValidators(\n fieldPlugin\n )}\n />\n </Elevation>\n </Cell>\n </Grid>\n </>\n ) : null}\n\n {!form.data.multipleValues && hasValidators ? (\n <ValidatorsTab\n field={current}\n form={form}\n name={\"validation\"}\n validators={getFieldValidators(fieldPlugin)}\n />\n ) : null}\n </Tab>\n ) : null}\n <Tab label={t`Appearance`}>\n <AppearanceTab\n form={form}\n field={form.data as CmsEditorField}\n // TODO @ts-refactor verify that this actually worked? There was no fieldPlugin in AppearanceTab props\n // @ts-ignore\n fieldPlugin={fieldPlugin}\n />\n </Tab>\n </Tabs>\n </DialogContent>\n <DialogActions>\n <ButtonDefault\n data-testid=\"cms.editor.field.settings.cancel\"\n onClick={onClose}\n >{t`Cancel`}</ButtonDefault>\n <ButtonPrimary\n data-testid=\"cms.editor.field.settings.save\"\n onClick={ev => {\n /**\n * In case title field fieldID changed, we need to change it in the model data as well.\n */\n if (\n isTitleField &&\n contentModel.titleFieldId !== form.data.fieldId\n ) {\n setContentModelData(prev => {\n return {\n ...prev,\n titleFieldId: form.data.fieldId\n };\n })\n .then(() => {\n form.submit(ev);\n })\n .catch(ex => {\n console.error(ex.message);\n });\n return;\n }\n /**\n * Or just continue as usually\n */\n form.submit(ev);\n }}\n >{t`Save Field`}</ButtonPrimary>\n </DialogActions>\n </>\n );\n }}\n </Form>\n );\n }\n\n return (\n <Dialog\n preventOutsideDismiss\n open={!!current}\n onClose={onClose}\n data-testid={\"cms-editor-edit-fields-dialog\"}\n className={fieldEditorDialog}\n >\n <DialogTitle>{headerTitle}</DialogTitle>\n {render}\n </Dialog>\n );\n};\n\nexport default EditFieldDialog;\n"],"mappings":"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"}
|
|
@@ -11,12 +11,12 @@ exports.default = void 0;
|
|
|
11
11
|
|
|
12
12
|
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
13
13
|
|
|
14
|
-
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
15
|
-
|
|
16
14
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
17
15
|
|
|
18
16
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
19
17
|
|
|
18
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
19
|
+
|
|
20
20
|
var _react = _interopRequireWildcard(require("react"));
|
|
21
21
|
|
|
22
22
|
var _emotion = require("emotion");
|
|
@@ -51,7 +51,9 @@ var _useContentModelEditor = require("../ContentModelEditor/useContentModelEdito
|
|
|
51
51
|
|
|
52
52
|
var _useFieldEditor2 = require("./useFieldEditor");
|
|
53
53
|
|
|
54
|
-
var
|
|
54
|
+
var _appAdmin = require("@webiny/app-admin");
|
|
55
|
+
|
|
56
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
|
|
55
57
|
|
|
56
58
|
var t = _i18n.i18n.ns("app-headless-cms/admin/components/editor/field");
|
|
57
59
|
|
|
@@ -122,9 +124,26 @@ var Field = function Field(props) {
|
|
|
122
124
|
var _useFieldEditor = (0, _useFieldEditor2.useFieldEditor)(),
|
|
123
125
|
getFieldPlugin = _useFieldEditor.getFieldPlugin;
|
|
124
126
|
|
|
127
|
+
var _useConfirmationDialo = (0, _appAdmin.useConfirmationDialog)({
|
|
128
|
+
title: t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Warning - You are trying to delete a locked field!"]))),
|
|
129
|
+
message: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", null, t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["You are about to delete a field which is used in the data storage"])))), /*#__PURE__*/_react.default.createElement("p", null, t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["All data in that field will be lost and there is no going back!"])))), /*#__PURE__*/_react.default.createElement("p", null, "\xA0"), /*#__PURE__*/_react.default.createElement("p", null, t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["Are you sure you want to continue?"])))))
|
|
130
|
+
}),
|
|
131
|
+
showConfirmation = _useConfirmationDialo.showConfirmation;
|
|
132
|
+
|
|
133
|
+
var lockedFields = data ? data.lockedFields || [] : [];
|
|
134
|
+
var isLocked = lockedFields.some(function (lockedField) {
|
|
135
|
+
return lockedField.fieldId === field.storageId;
|
|
136
|
+
});
|
|
125
137
|
var onDelete = (0, _react.useCallback)(function () {
|
|
126
|
-
|
|
127
|
-
|
|
138
|
+
if (!isLocked) {
|
|
139
|
+
props.onDelete(field);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
showConfirmation(function () {
|
|
144
|
+
props.onDelete(field);
|
|
145
|
+
});
|
|
146
|
+
}, [field.fieldId, lockedFields]);
|
|
128
147
|
var setAsTitle = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
|
|
129
148
|
var response;
|
|
130
149
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
@@ -149,7 +168,7 @@ var Field = function Field(props) {
|
|
|
149
168
|
return _context.abrupt("return", showSnackbar(response.error.message));
|
|
150
169
|
|
|
151
170
|
case 5:
|
|
152
|
-
showSnackbar(t(
|
|
171
|
+
showSnackbar(t(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["Title field set successfully."]))));
|
|
153
172
|
|
|
154
173
|
case 6:
|
|
155
174
|
case "end":
|
|
@@ -167,12 +186,11 @@ var Field = function Field(props) {
|
|
|
167
186
|
}
|
|
168
187
|
|
|
169
188
|
var isTitleField = data && field.fieldId === data.titleFieldId && !parent;
|
|
170
|
-
var lockedFields = data ? data.lockedFields || [] : [];
|
|
171
189
|
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(FieldContainer, null, /*#__PURE__*/_react.default.createElement(Info, null, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
172
190
|
use: "subtitle1"
|
|
173
191
|
}, field.label), /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
174
192
|
use: "caption"
|
|
175
|
-
}, fieldPlugin.field.label, " ", field.multipleValues && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "(", t(
|
|
193
|
+
}, fieldPlugin.field.label, " ", field.multipleValues && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "(", t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["multiple values"]))), ")"), isTitleField && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "(", t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["entry title"]))), ")"))), /*#__PURE__*/_react.default.createElement(Actions, null, /*#__PURE__*/_react.default.createElement(_Button.IconButton, {
|
|
176
194
|
"data-testid": "cms.editor.edit-field",
|
|
177
195
|
icon: /*#__PURE__*/_react.default.createElement(_edit.ReactComponent, null),
|
|
178
196
|
onClick: function onClick() {
|
|
@@ -192,16 +210,11 @@ var Field = function Field(props) {
|
|
|
192
210
|
onClick: setAsTitle
|
|
193
211
|
}, /*#__PURE__*/_react.default.createElement(_List.ListItemGraphic, null, /*#__PURE__*/_react.default.createElement(_Icon.Icon, {
|
|
194
212
|
icon: /*#__PURE__*/_react.default.createElement(_title24px.ReactComponent, null)
|
|
195
|
-
})), t(
|
|
196
|
-
disabled: lockedFields.some(function (lockedField) {
|
|
197
|
-
return lockedField.fieldId === field.fieldId;
|
|
198
|
-
}),
|
|
213
|
+
})), t(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["Use as title"])))), /*#__PURE__*/_react.default.createElement(_Menu.MenuItem, {
|
|
199
214
|
onClick: onDelete
|
|
200
215
|
}, /*#__PURE__*/_react.default.createElement(_List.ListItemGraphic, null, /*#__PURE__*/_react.default.createElement(_Icon.Icon, {
|
|
201
216
|
icon: /*#__PURE__*/_react.default.createElement(_delete.ReactComponent, null)
|
|
202
|
-
})),
|
|
203
|
-
return lockedField.fieldId === field.fieldId;
|
|
204
|
-
}) ? t(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["Cannot delete"]))) : t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["Delete"]))))))), /*#__PURE__*/_react.default.createElement("div", {
|
|
217
|
+
})), t(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2.default)(["Delete"]))))))), /*#__PURE__*/_react.default.createElement("div", {
|
|
205
218
|
className: "field-extra"
|
|
206
219
|
}, fieldPlugin.field.render && fieldPlugin.field.render({
|
|
207
220
|
field: field,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["t","i18n","ns","FieldContainer","styled","display","flexDirection","justifyContent","alignItems","Info","flex","lineHeight","Actions","menuStyles","css","width","right","left","opacity","pointerEvents","allowedTitleFieldTypes","isFieldAllowedToBeTitle","field","parent","multipleValues","includes","type","Field","props","onEdit","useSnackbar","showSnackbar","useContentModelEditor","setData","data","useFieldEditor","getFieldPlugin","onDelete","useCallback","fieldId","setAsTitle","titleFieldId","response","error","message","fieldPlugin","editorFieldOptionPlugins","plugins","byType","isTitleField","lockedFields","label","map","pl","React","cloneElement","render","key","name","some","lockedField","find","memo"],"sources":["Field.tsx"],"sourcesContent":["import React, { Fragment, useCallback } from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { ReactComponent as EditIcon } from \"~/admin/icons/edit.svg\";\nimport { ReactComponent as DeleteIcon } from \"~/admin/icons/delete.svg\";\nimport { ReactComponent as TitleIcon } from \"~/admin/icons/title-24px.svg\";\nimport { ReactComponent as MoreVerticalIcon } from \"~/admin/icons/more_vert.svg\";\nimport { Menu, MenuItem } from \"@webiny/ui/Menu\";\nimport { plugins } from \"@webiny/plugins\";\nimport { CmsEditorField, CmsEditorFieldOptionPlugin } from \"~/types\";\nimport { ListItemGraphic } from \"@webiny/ui/List\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useContentModelEditor } from \"~/admin/components/ContentModelEditor/useContentModelEditor\";\nimport { useFieldEditor } from \"~/admin/components/FieldEditor/useFieldEditor\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/components/editor/field\");\n\nconst FieldContainer = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n});\n\nconst Info = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"column\",\n \"> *\": {\n flex: \"1 100%\",\n lineHeight: \"150%\"\n }\n});\n\nconst Actions = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"right\",\n \"> *\": {\n flex: \"1 100%\"\n }\n});\n\nconst menuStyles = css({\n width: 220,\n right: -105,\n left: \"auto !important\",\n \".disabled\": {\n opacity: 0.5,\n pointerEvents: \"none\"\n }\n});\n\nconst allowedTitleFieldTypes: string[] = [\"text\", \"number\"];\n\nconst isFieldAllowedToBeTitle = (field: CmsEditorField, parent?: CmsEditorField) => {\n if (field.multipleValues || parent) {\n return false;\n } else if (allowedTitleFieldTypes.includes(field.type) === false) {\n return false;\n }\n return true;\n};\n\nexport interface FieldProps {\n field: CmsEditorField;\n onDelete: (field: CmsEditorField) => void;\n onEdit: (field: CmsEditorField) => void;\n parent?: CmsEditorField;\n}\nconst Field: React.FC<FieldProps> = props => {\n const { field, onEdit, parent } = props;\n const { showSnackbar } = useSnackbar();\n const { setData, data } = useContentModelEditor();\n const { getFieldPlugin } = useFieldEditor();\n\n const onDelete = useCallback(() => {\n props.onDelete(field);\n }, [field.fieldId]);\n\n const setAsTitle = useCallback(async (): Promise<void> => {\n const response = await setData(data => {\n return { ...data, titleFieldId: field.fieldId };\n });\n\n if (response && response.error) {\n return showSnackbar(response.error.message);\n }\n\n showSnackbar(t`Title field set successfully.`);\n }, [field.fieldId, setData]);\n\n const fieldPlugin = getFieldPlugin(field.type);\n const editorFieldOptionPlugins =\n plugins.byType<CmsEditorFieldOptionPlugin>(\"cms-editor-field-option\");\n\n if (!fieldPlugin) {\n return null;\n }\n\n const isTitleField = data && field.fieldId === data.titleFieldId && !parent;\n\n const lockedFields = data ? data.lockedFields || [] : [];\n return (\n <Fragment>\n <FieldContainer>\n <Info>\n <Typography use={\"subtitle1\"}>{field.label}</Typography>\n <Typography use={\"caption\"}>\n {fieldPlugin.field.label}{\" \"}\n {field.multipleValues && <>({t`multiple values`})</>}\n {isTitleField && <>({t`entry title`})</>}\n </Typography>\n </Info>\n <Actions>\n <IconButton\n data-testid={\"cms.editor.edit-field\"}\n icon={<EditIcon />}\n onClick={() => onEdit(field)}\n />\n <Menu\n className={menuStyles}\n handle={<IconButton icon={<MoreVerticalIcon />} />}\n >\n {editorFieldOptionPlugins.map(pl =>\n React.cloneElement(pl.render(), { key: pl.name })\n )}\n {/* We only allow this action for top-level fields. */}\n <MenuItem\n disabled={!isFieldAllowedToBeTitle(field, parent)}\n onClick={setAsTitle}\n >\n <ListItemGraphic>\n <Icon icon={<TitleIcon />} />\n </ListItemGraphic>\n {t`Use as title`}\n </MenuItem>\n <MenuItem\n disabled={lockedFields.some(\n lockedField => lockedField.fieldId === field.fieldId\n )}\n onClick={onDelete}\n >\n <ListItemGraphic>\n <Icon icon={<DeleteIcon />} />\n </ListItemGraphic>\n {lockedFields.find(lockedField => lockedField.fieldId === field.fieldId)\n ? t`Cannot delete`\n : t`Delete`}\n </MenuItem>\n </Menu>\n </Actions>\n </FieldContainer>\n <div className={\"field-extra\"}>\n {fieldPlugin.field.render && fieldPlugin.field.render({ field, data, setData })}\n </div>\n </Fragment>\n );\n};\n\nexport default React.memo(Field);\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,gDAAR,CAAV;;AAEA,IAAMC,cAAc,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACjCC,OAAO,EAAE,MADwB;EAEjCC,aAAa,EAAE,KAFkB;EAGjCC,cAAc,EAAE,eAHiB;EAIjCC,UAAU,EAAE;AAJqB,CAAjB,CAApB;AAOA,IAAMC,IAAI,oBAAGL,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACvBC,OAAO,EAAE,MADc;EAEvBC,aAAa,EAAE,QAFQ;EAGvB,OAAO;IACHI,IAAI,EAAE,QADH;IAEHC,UAAU,EAAE;EAFT;AAHgB,CAAjB,CAAV;AASA,IAAMC,OAAO,oBAAGR,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC1BC,OAAO,EAAE,MADiB;EAE1BC,aAAa,EAAE,KAFW;EAG1BE,UAAU,EAAE,OAHc;EAI1B,OAAO;IACHE,IAAI,EAAE;EADH;AAJmB,CAAjB,CAAb;AASA,IAAMG,UAAU,gBAAG,IAAAC,YAAA,EAAI;EACnBC,KAAK,EAAE,GADY;EAEnBC,KAAK,EAAE,CAAC,GAFW;EAGnBC,IAAI,EAAE,iBAHa;EAInB,aAAa;IACTC,OAAO,EAAE,GADA;IAETC,aAAa,EAAE;EAFN;AAJM,CAAJ,sBAAnB;AAUA,IAAMC,sBAAgC,GAAG,CAAC,MAAD,EAAS,QAAT,CAAzC;;AAEA,IAAMC,uBAAuB,GAAG,SAA1BA,uBAA0B,CAACC,KAAD,EAAwBC,MAAxB,EAAoD;EAChF,IAAID,KAAK,CAACE,cAAN,IAAwBD,MAA5B,EAAoC;IAChC,OAAO,KAAP;EACH,CAFD,MAEO,IAAIH,sBAAsB,CAACK,QAAvB,CAAgCH,KAAK,CAACI,IAAtC,MAAgD,KAApD,EAA2D;IAC9D,OAAO,KAAP;EACH;;EACD,OAAO,IAAP;AACH,CAPD;;AAeA,IAAMC,KAA2B,GAAG,SAA9BA,KAA8B,CAAAC,KAAK,EAAI;EACzC,IAAQN,KAAR,GAAkCM,KAAlC,CAAQN,KAAR;EAAA,IAAeO,MAAf,GAAkCD,KAAlC,CAAeC,MAAf;EAAA,IAAuBN,MAAvB,GAAkCK,KAAlC,CAAuBL,MAAvB;;EACA,mBAAyB,IAAAO,yBAAA,GAAzB;EAAA,IAAQC,YAAR,gBAAQA,YAAR;;EACA,4BAA0B,IAAAC,4CAAA,GAA1B;EAAA,IAAQC,OAAR,yBAAQA,OAAR;EAAA,IAAiBC,IAAjB,yBAAiBA,IAAjB;;EACA,sBAA2B,IAAAC,+BAAA,GAA3B;EAAA,IAAQC,cAAR,mBAAQA,cAAR;;EAEA,IAAMC,QAAQ,GAAG,IAAAC,kBAAA,EAAY,YAAM;IAC/BV,KAAK,CAACS,QAAN,CAAef,KAAf;EACH,CAFgB,EAEd,CAACA,KAAK,CAACiB,OAAP,CAFc,CAAjB;EAIA,IAAMC,UAAU,GAAG,IAAAF,kBAAA,uGAAY;IAAA;IAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OACJL,OAAO,CAAC,UAAAC,IAAI,EAAI;cACnC,mEAAYA,IAAZ;gBAAkBO,YAAY,EAAEnB,KAAK,CAACiB;cAAtC;YACH,CAF6B,CADH;;UAAA;YACrBG,QADqB;;YAAA,MAKvBA,QAAQ,IAAIA,QAAQ,CAACC,KALE;cAAA;cAAA;YAAA;;YAAA,iCAMhBZ,YAAY,CAACW,QAAQ,CAACC,KAAT,CAAeC,OAAhB,CANI;;UAAA;YAS3Bb,YAAY,CAAC/B,CAAD,iHAAZ;;UAT2B;UAAA;YAAA;QAAA;MAAA;IAAA;EAAA,CAAZ,IAUhB,CAACsB,KAAK,CAACiB,OAAP,EAAgBN,OAAhB,CAVgB,CAAnB;EAYA,IAAMY,WAAW,GAAGT,cAAc,CAACd,KAAK,CAACI,IAAP,CAAlC;;EACA,IAAMoB,wBAAwB,GAC1BC,gBAAA,CAAQC,MAAR,CAA2C,yBAA3C,CADJ;;EAGA,IAAI,CAACH,WAAL,EAAkB;IACd,OAAO,IAAP;EACH;;EAED,IAAMI,YAAY,GAAGf,IAAI,IAAIZ,KAAK,CAACiB,OAAN,KAAkBL,IAAI,CAACO,YAA/B,IAA+C,CAAClB,MAArE;EAEA,IAAM2B,YAAY,GAAGhB,IAAI,GAAGA,IAAI,CAACgB,YAAL,IAAqB,EAAxB,GAA6B,EAAtD;EACA,oBACI,6BAAC,eAAD,qBACI,6BAAC,cAAD,qBACI,6BAAC,IAAD,qBACI,6BAAC,sBAAD;IAAY,GAAG,EAAE;EAAjB,GAA+B5B,KAAK,CAAC6B,KAArC,CADJ,eAEI,6BAAC,sBAAD;IAAY,GAAG,EAAE;EAAjB,GACKN,WAAW,CAACvB,KAAZ,CAAkB6B,KADvB,EAC8B,GAD9B,EAEK7B,KAAK,CAACE,cAAN,iBAAwB,iEAAIxB,CAAJ,0GAF7B,EAGKiD,YAAY,iBAAI,iEAAIjD,CAAJ,sGAHrB,CAFJ,CADJ,eASI,6BAAC,OAAD,qBACI,6BAAC,kBAAD;IACI,eAAa,uBADjB;IAEI,IAAI,eAAE,6BAAC,oBAAD,OAFV;IAGI,OAAO,EAAE;MAAA,OAAM6B,MAAM,CAACP,KAAD,CAAZ;IAAA;EAHb,EADJ,eAMI,6BAAC,UAAD;IACI,SAAS,EAAET,UADf;IAEI,MAAM,eAAE,6BAAC,kBAAD;MAAY,IAAI,eAAE,6BAAC,yBAAD;IAAlB;EAFZ,GAIKiC,wBAAwB,CAACM,GAAzB,CAA6B,UAAAC,EAAE;IAAA,oBAC5BC,cAAA,CAAMC,YAAN,CAAmBF,EAAE,CAACG,MAAH,EAAnB,EAAgC;MAAEC,GAAG,EAAEJ,EAAE,CAACK;IAAV,CAAhC,CAD4B;EAAA,CAA/B,CAJL,eAQI,6BAAC,cAAD;IACI,QAAQ,EAAE,CAACrC,uBAAuB,CAACC,KAAD,EAAQC,MAAR,CADtC;IAEI,OAAO,EAAEiB;EAFb,gBAII,6BAAC,qBAAD,qBACI,6BAAC,UAAD;IAAM,IAAI,eAAE,6BAAC,yBAAD;EAAZ,EADJ,CAJJ,EAOKxC,CAPL,kGARJ,eAiBI,6BAAC,cAAD;IACI,QAAQ,EAAEkD,YAAY,CAACS,IAAb,CACN,UAAAC,WAAW;MAAA,OAAIA,WAAW,CAACrB,OAAZ,KAAwBjB,KAAK,CAACiB,OAAlC;IAAA,CADL,CADd;IAII,OAAO,EAAEF;EAJb,gBAMI,6BAAC,qBAAD,qBACI,6BAAC,UAAD;IAAM,IAAI,eAAE,6BAAC,sBAAD;EAAZ,EADJ,CANJ,EASKa,YAAY,CAACW,IAAb,CAAkB,UAAAD,WAAW;IAAA,OAAIA,WAAW,CAACrB,OAAZ,KAAwBjB,KAAK,CAACiB,OAAlC;EAAA,CAA7B,IACKvC,CADL,qGAEKA,CAFL,2FATL,CAjBJ,CANJ,CATJ,CADJ,eAiDI;IAAK,SAAS,EAAE;EAAhB,GACK6C,WAAW,CAACvB,KAAZ,CAAkBkC,MAAlB,IAA4BX,WAAW,CAACvB,KAAZ,CAAkBkC,MAAlB,CAAyB;IAAElC,KAAK,EAALA,KAAF;IAASY,IAAI,EAAJA,IAAT;IAAeD,OAAO,EAAPA;EAAf,CAAzB,CADjC,CAjDJ,CADJ;AAuDH,CAxFD;;4BA0FeqB,cAAA,CAAMQ,IAAN,CAAWnC,KAAX,C"}
|
|
1
|
+
{"version":3,"names":["t","i18n","ns","FieldContainer","styled","display","flexDirection","justifyContent","alignItems","Info","flex","lineHeight","Actions","menuStyles","css","width","right","left","opacity","pointerEvents","allowedTitleFieldTypes","isFieldAllowedToBeTitle","field","parent","multipleValues","includes","type","Field","props","onEdit","useSnackbar","showSnackbar","useContentModelEditor","setData","data","useFieldEditor","getFieldPlugin","useConfirmationDialog","title","message","showConfirmation","lockedFields","isLocked","some","lockedField","fieldId","storageId","onDelete","useCallback","setAsTitle","titleFieldId","response","error","fieldPlugin","editorFieldOptionPlugins","plugins","byType","isTitleField","label","map","pl","React","cloneElement","render","key","name","memo"],"sources":["Field.tsx"],"sourcesContent":["import React, { Fragment, useCallback } from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { ReactComponent as EditIcon } from \"~/admin/icons/edit.svg\";\nimport { ReactComponent as DeleteIcon } from \"~/admin/icons/delete.svg\";\nimport { ReactComponent as TitleIcon } from \"~/admin/icons/title-24px.svg\";\nimport { ReactComponent as MoreVerticalIcon } from \"~/admin/icons/more_vert.svg\";\nimport { Menu, MenuItem } from \"@webiny/ui/Menu\";\nimport { plugins } from \"@webiny/plugins\";\nimport { CmsEditorField, CmsEditorFieldOptionPlugin } from \"~/types\";\nimport { ListItemGraphic } from \"@webiny/ui/List\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useContentModelEditor } from \"~/admin/components/ContentModelEditor/useContentModelEditor\";\nimport { useFieldEditor } from \"~/admin/components/FieldEditor/useFieldEditor\";\nimport { useConfirmationDialog } from \"@webiny/app-admin\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/components/editor/field\");\n\nconst FieldContainer = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n});\n\nconst Info = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"column\",\n \"> *\": {\n flex: \"1 100%\",\n lineHeight: \"150%\"\n }\n});\n\nconst Actions = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"right\",\n \"> *\": {\n flex: \"1 100%\"\n }\n});\n\nconst menuStyles = css({\n width: 220,\n right: -105,\n left: \"auto !important\",\n \".disabled\": {\n opacity: 0.5,\n pointerEvents: \"none\"\n }\n});\n\nconst allowedTitleFieldTypes: string[] = [\"text\", \"number\"];\n\nconst isFieldAllowedToBeTitle = (field: CmsEditorField, parent?: CmsEditorField) => {\n if (field.multipleValues || parent) {\n return false;\n } else if (allowedTitleFieldTypes.includes(field.type) === false) {\n return false;\n }\n return true;\n};\n\nexport interface FieldProps {\n field: CmsEditorField;\n onDelete: (field: CmsEditorField) => void;\n onEdit: (field: CmsEditorField) => void;\n parent?: CmsEditorField;\n}\nconst Field: React.FC<FieldProps> = props => {\n const { field, onEdit, parent } = props;\n const { showSnackbar } = useSnackbar();\n const { setData, data } = useContentModelEditor();\n const { getFieldPlugin } = useFieldEditor();\n\n const { showConfirmation } = useConfirmationDialog({\n title: t`Warning - You are trying to delete a locked field!`,\n message: (\n <>\n <p>{t`You are about to delete a field which is used in the data storage`}</p>\n <p>{t`All data in that field will be lost and there is no going back!`}</p>\n <p> </p>\n <p>{t`Are you sure you want to continue?`}</p>\n </>\n )\n });\n const lockedFields = data ? data.lockedFields || [] : [];\n const isLocked = lockedFields.some(lockedField => lockedField.fieldId === field.storageId);\n\n const onDelete = useCallback(() => {\n if (!isLocked) {\n props.onDelete(field);\n return;\n }\n showConfirmation(() => {\n props.onDelete(field);\n });\n }, [field.fieldId, lockedFields]);\n\n const setAsTitle = useCallback(async (): Promise<void> => {\n const response = await setData(data => {\n return { ...data, titleFieldId: field.fieldId };\n });\n\n if (response && response.error) {\n return showSnackbar(response.error.message);\n }\n\n showSnackbar(t`Title field set successfully.`);\n }, [field.fieldId, setData]);\n\n const fieldPlugin = getFieldPlugin(field.type);\n const editorFieldOptionPlugins =\n plugins.byType<CmsEditorFieldOptionPlugin>(\"cms-editor-field-option\");\n\n if (!fieldPlugin) {\n return null;\n }\n\n const isTitleField = data && field.fieldId === data.titleFieldId && !parent;\n\n return (\n <Fragment>\n <FieldContainer>\n <Info>\n <Typography use={\"subtitle1\"}>{field.label}</Typography>\n <Typography use={\"caption\"}>\n {fieldPlugin.field.label}{\" \"}\n {field.multipleValues && <>({t`multiple values`})</>}\n {isTitleField && <>({t`entry title`})</>}\n </Typography>\n </Info>\n <Actions>\n <IconButton\n data-testid={\"cms.editor.edit-field\"}\n icon={<EditIcon />}\n onClick={() => onEdit(field)}\n />\n <Menu\n className={menuStyles}\n handle={<IconButton icon={<MoreVerticalIcon />} />}\n >\n {editorFieldOptionPlugins.map(pl =>\n React.cloneElement(pl.render(), { key: pl.name })\n )}\n {/* We only allow this action for top-level fields. */}\n <MenuItem\n disabled={!isFieldAllowedToBeTitle(field, parent)}\n onClick={setAsTitle}\n >\n <ListItemGraphic>\n <Icon icon={<TitleIcon />} />\n </ListItemGraphic>\n {t`Use as title`}\n </MenuItem>\n <MenuItem onClick={onDelete}>\n <ListItemGraphic>\n <Icon icon={<DeleteIcon />} />\n </ListItemGraphic>\n {t`Delete`}\n </MenuItem>\n </Menu>\n </Actions>\n </FieldContainer>\n <div className={\"field-extra\"}>\n {fieldPlugin.field.render && fieldPlugin.field.render({ field, data, setData })}\n </div>\n </Fragment>\n );\n};\n\nexport default React.memo(Field);\n"],"mappings":"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"}
|