@webiny/app-headless-cms 5.25.0-beta.3 → 5.25.0-beta.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/ContentEntryForm.js +26 -4
- package/admin/components/ContentEntryForm/ContentEntryForm.js.map +1 -1
- package/admin/components/ContentEntryForm/useContentEntryForm.js +4 -7
- package/admin/components/ContentEntryForm/useContentEntryForm.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/components/useReference.js +18 -5
- package/admin/plugins/fieldRenderers/ref/components/useReference.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/components/useReferences.js +15 -0
- package/admin/plugins/fieldRenderers/ref/components/useReferences.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js +1 -1
- package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js +1 -0
- package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js.map +1 -1
- package/package.json +17 -17
|
@@ -19,6 +19,23 @@ var FormWrapper = /*#__PURE__*/styled("div", {
|
|
|
19
19
|
height: "calc(100vh - 260px)",
|
|
20
20
|
overflow: "auto"
|
|
21
21
|
});
|
|
22
|
+
|
|
23
|
+
function omitTypename(key, value) {
|
|
24
|
+
return key === "__typename" ? undefined : value;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var stringify = function stringify(value) {
|
|
28
|
+
return JSON.stringify(value || {}, omitTypename);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
var isDifferent = function isDifferent(value, compare) {
|
|
32
|
+
if (!value && !compare) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return stringify(value) !== stringify(compare);
|
|
37
|
+
};
|
|
38
|
+
|
|
22
39
|
export var ContentEntryForm = function ContentEntryForm(_ref) {
|
|
23
40
|
var onForm = _ref.onForm,
|
|
24
41
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
@@ -27,7 +44,7 @@ export var ContentEntryForm = function ContentEntryForm(_ref) {
|
|
|
27
44
|
|
|
28
45
|
var _useContentEntryForm = useContentEntryForm(props),
|
|
29
46
|
loading = _useContentEntryForm.loading,
|
|
30
|
-
|
|
47
|
+
initialData = _useContentEntryForm.data,
|
|
31
48
|
_onChange = _useContentEntryForm.onChange,
|
|
32
49
|
_onSubmit = _useContentEntryForm.onSubmit,
|
|
33
50
|
invalidFields = _useContentEntryForm.invalidFields;
|
|
@@ -47,7 +64,7 @@ export var ContentEntryForm = function ContentEntryForm(_ref) {
|
|
|
47
64
|
}
|
|
48
65
|
|
|
49
66
|
setIsDirty(false);
|
|
50
|
-
}, [
|
|
67
|
+
}, [initialData]);
|
|
51
68
|
|
|
52
69
|
var _useSnackbar = useSnackbar(),
|
|
53
70
|
showSnackbar = _useSnackbar.showSnackbar;
|
|
@@ -94,14 +111,19 @@ export var ContentEntryForm = function ContentEntryForm(_ref) {
|
|
|
94
111
|
}, [formRenderer]);
|
|
95
112
|
return /*#__PURE__*/React.createElement(Form, {
|
|
96
113
|
onChange: function onChange(data, form) {
|
|
97
|
-
|
|
114
|
+
var different = isDifferent(data, initialData);
|
|
115
|
+
|
|
116
|
+
if (isDirty !== different) {
|
|
117
|
+
setIsDirty(different);
|
|
118
|
+
}
|
|
119
|
+
|
|
98
120
|
return _onChange(data, form);
|
|
99
121
|
},
|
|
100
122
|
onSubmit: function onSubmit(data, form) {
|
|
101
123
|
setIsDirty(false);
|
|
102
124
|
return _onSubmit(data, form);
|
|
103
125
|
},
|
|
104
|
-
data:
|
|
126
|
+
data: initialData,
|
|
105
127
|
ref: ref,
|
|
106
128
|
invalidFields: invalidFields,
|
|
107
129
|
onInvalid: function onInvalid() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ContentEntryForm.tsx"],"names":["React","useCallback","useEffect","useRef","RenderFieldElement","styled","Form","plugins","CircularProgress","useContentEntryForm","Fields","Prompt","useSnackbar","FormWrapper","height","overflow","ContentEntryForm","onForm","props","contentModel","loading","data","onChange","onSubmit","invalidFields","useState","isDirty","setIsDirty","showSnackbar","ref","current","formRenderer","byType","find","pl","modelId","renderCustomLayout","formRenderProps","fields","reduce","acc","field","fieldId","Bind","render","form","formProps","layout"],"mappings":";;;;AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,EAAwCC,MAAxC,QAAsD,OAAtD;AACA,OAAOC,kBAAP;AACA,OAAOC,MAAP,MAAmB,iBAAnB;AACA,SAASC,IAAT,QAAqB,cAArB;AAEA,SAASC,OAAT,QAAwB,iBAAxB;AACA,SAASC,gBAAT,QAAiC,qBAAjC;AAEA,SAASC,mBAAT;AACA,SAASC,MAAT;AACA,SAASC,MAAT,QAAuB,sBAAvB;AACA,SAASC,WAAT,QAA4B,mBAA5B;AAEA,IAAMC,WAAW,gBAAGR,MAAH,CAAU,KAAV;AAAA;AAAA;AAAA,GAAiB;AAC9BS,EAAAA,MAAM,EAAE,qBADsB;AAE9BC,EAAAA,QAAQ,EAAE;AAFoB,CAAjB,CAAjB
|
|
1
|
+
{"version":3,"sources":["ContentEntryForm.tsx"],"names":["React","useCallback","useEffect","useRef","RenderFieldElement","styled","Form","plugins","CircularProgress","useContentEntryForm","Fields","Prompt","useSnackbar","FormWrapper","height","overflow","omitTypename","key","value","undefined","stringify","JSON","isDifferent","compare","ContentEntryForm","onForm","props","contentModel","loading","initialData","data","onChange","onSubmit","invalidFields","useState","isDirty","setIsDirty","showSnackbar","ref","current","formRenderer","byType","find","pl","modelId","renderCustomLayout","formRenderProps","fields","reduce","acc","field","fieldId","Bind","render","form","different","formProps","layout"],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useRef } from \"react\";\nimport RenderFieldElement from \"./RenderFieldElement\";\nimport styled from \"@emotion/styled\";\nimport { Form } from \"@webiny/form\";\nimport { FormAPI, FormRenderPropParams } from \"@webiny/form/types\";\nimport { plugins } from \"@webiny/plugins\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { CmsContentFormRendererPlugin } from \"~/types\";\nimport { useContentEntryForm, UseContentEntryFormParams } from \"./useContentEntryForm\";\nimport { Fields } from \"./Fields\";\nimport { Prompt } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin\";\n\nconst FormWrapper = styled(\"div\")({\n height: \"calc(100vh - 260px)\",\n overflow: \"auto\"\n});\n\ninterface ContentEntryFormProps extends UseContentEntryFormParams {\n onForm?: (form: FormAPI) => void;\n}\n\nfunction omitTypename(key: string, value: string): string | undefined {\n return key === \"__typename\" ? undefined : value;\n}\n\nconst stringify = (value: any): string => {\n return JSON.stringify(value || {}, omitTypename);\n};\n\nconst isDifferent = (value: any, compare: any): boolean => {\n if (!value && !compare) {\n return false;\n }\n return stringify(value) !== stringify(compare);\n};\n\nexport const ContentEntryForm: React.FC<ContentEntryFormProps> = ({ onForm, ...props }) => {\n const { contentModel } = props;\n const {\n loading,\n data: initialData,\n onChange,\n onSubmit,\n invalidFields\n } = useContentEntryForm(props);\n\n const [isDirty, setIsDirty] = React.useState<boolean>(false);\n /**\n * Reset isDirty when the loaded data changes.\n */\n useEffect(() => {\n if (!isDirty) {\n return;\n }\n setIsDirty(false);\n }, [initialData]);\n\n const { showSnackbar } = useSnackbar();\n\n const ref = useRef<FormAPI | null>(null);\n\n useEffect(() => {\n if (typeof onForm !== \"function\" || !ref.current) {\n return;\n }\n onForm(ref.current);\n }, []);\n\n const formRenderer = plugins\n .byType<CmsContentFormRendererPlugin>(\"cms-content-form-renderer\")\n .find(pl => pl.modelId === contentModel.modelId);\n\n const renderCustomLayout = useCallback(\n (formRenderProps: FormRenderPropParams) => {\n const fields = contentModel.fields.reduce((acc, field) => {\n /**\n * TODO @ts-refactor\n * Figure out type for Bind.\n */\n acc[field.fieldId] = (\n <RenderFieldElement\n field={field}\n Bind={formRenderProps.Bind as any}\n contentModel={contentModel}\n />\n );\n\n return acc;\n }, {} as Record<string, React.ReactElement>);\n if (!formRenderer) {\n return <>{`Missing form renderer for modelId \"${contentModel.modelId}\".`}</>;\n }\n return formRenderer.render({\n ...formRenderProps,\n contentModel,\n fields,\n /**\n * TODO @ts-refactor\n * Figure out type for Bind.\n */\n Bind: formRenderProps.Bind as any\n });\n },\n [formRenderer]\n );\n\n return (\n <Form\n onChange={(data, form) => {\n const different = isDifferent(data, initialData);\n if (isDirty !== different) {\n setIsDirty(different);\n }\n return onChange(data, form);\n }}\n onSubmit={(data, form) => {\n setIsDirty(false);\n return onSubmit(data, form);\n }}\n data={initialData}\n ref={ref}\n invalidFields={invalidFields}\n onInvalid={() => {\n setIsDirty(true);\n showSnackbar(\n \"You have fields that did not pass the validation. Please check the form.\"\n );\n }}\n >\n {formProps => {\n return (\n <>\n <Prompt\n when={isDirty}\n message={\n \"There are some unsaved changes! Are you sure you want to navigate away and discard all changes?\"\n }\n />\n <FormWrapper data-testid={\"cms-content-form\"}>\n {loading && <CircularProgress />}\n {formRenderer ? (\n renderCustomLayout(formProps)\n ) : (\n <Fields\n contentModel={contentModel}\n fields={contentModel.fields || []}\n layout={contentModel.layout || []}\n {...formProps}\n Bind={formProps.Bind as any}\n />\n )}\n </FormWrapper>\n </>\n );\n }}\n </Form>\n );\n};\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
1
|
import _createForOfIteratorHelper from "@babel/runtime/helpers/createForOfIteratorHelper";
|
|
3
2
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
4
3
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
@@ -394,8 +393,7 @@ export function useContentEntryForm(params) {
|
|
|
394
393
|
};
|
|
395
394
|
}();
|
|
396
395
|
|
|
397
|
-
var
|
|
398
|
-
var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
396
|
+
var defaultValues = useMemo(function () {
|
|
399
397
|
var values = {};
|
|
400
398
|
/**
|
|
401
399
|
* Assign the default values:
|
|
@@ -477,14 +475,13 @@ export function useContentEntryForm(params) {
|
|
|
477
475
|
_iterator.f();
|
|
478
476
|
}
|
|
479
477
|
|
|
480
|
-
return
|
|
481
|
-
};
|
|
482
|
-
|
|
478
|
+
return values;
|
|
479
|
+
}, [contentModel.modelId]);
|
|
483
480
|
return {
|
|
484
481
|
/**
|
|
485
482
|
* If entry is not set or entry.id does not exist, it means that form is for the new entry, so fetch default values.
|
|
486
483
|
*/
|
|
487
|
-
data: entry && entry.id ? entry :
|
|
484
|
+
data: entry && entry.id ? entry : defaultValues,
|
|
488
485
|
loading: loading,
|
|
489
486
|
setLoading: setLoading,
|
|
490
487
|
onChange: onChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useContentEntryForm.ts"],"names":["useCallback","useMemo","useState","pick","useRouter","useSnackbar","createCreateFromMutation","createCreateMutation","createUpdateMutation","useMutation","GQLCache","prepareFormData","useContentEntry","plugins","convertDefaultValue","field","value","type","Boolean","Number","useContentEntryForm","params","listQueryVariables","contentModel","entry","history","showSnackbar","invalidFields","setInvalidFields","loading","setLoading","renderPlugins","byType","goToRevision","id","push","modelId","encodeURIComponent","CREATE_CONTENT","UPDATE_CONTENT","CREATE_CONTENT_FROM","createMutation","updateMutation","createFromMutation","setInvalidFieldValues","errors","values","reduce","acc","er","fieldId","error","resetInvalidFieldValues","createContent","data","variables","update","cache","response","content","message","addEntryToListCache","name","onSubmit","updateContent","revision","createContentFrom","formData","newRevision","updateLatestRevisionInListCache","addRevisionToRevisionsCache","onChange","form","fieldsIds","fields","map","item","gqlData","meta","isLocked","locked","getDefaultValues","overrides","settings","multipleValues","defaultValue","undefined","predefinedValues","enabled","Array","isArray","selectedValue","find","selected","filter"],"mappings":"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","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 getDefaultValues = (overrides: Record<string, any> = {}): 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, ...overrides };\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 : getDefaultValues(),\n loading,\n setLoading,\n onChange,\n onSubmit,\n invalidFields,\n renderPlugins\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useContentEntryForm.ts"],"names":["useCallback","useMemo","useState","pick","useRouter","useSnackbar","createCreateFromMutation","createCreateMutation","createUpdateMutation","useMutation","GQLCache","prepareFormData","useContentEntry","plugins","convertDefaultValue","field","value","type","Boolean","Number","useContentEntryForm","params","listQueryVariables","contentModel","entry","history","showSnackbar","invalidFields","setInvalidFields","loading","setLoading","renderPlugins","byType","goToRevision","id","push","modelId","encodeURIComponent","CREATE_CONTENT","UPDATE_CONTENT","CREATE_CONTENT_FROM","createMutation","updateMutation","createFromMutation","setInvalidFieldValues","errors","values","reduce","acc","er","fieldId","error","resetInvalidFieldValues","createContent","data","variables","update","cache","response","content","message","addEntryToListCache","name","onSubmit","updateContent","revision","createContentFrom","formData","newRevision","updateLatestRevisionInListCache","addRevisionToRevisionsCache","onChange","form","fieldsIds","fields","map","item","gqlData","meta","isLocked","locked","defaultValues","settings","multipleValues","defaultValue","undefined","predefinedValues","enabled","Array","isArray","selectedValue","find","selected","filter"],"mappings":"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","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"]}
|
|
@@ -7,6 +7,17 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
|
7
7
|
import { useApolloClient } from "../../../../hooks";
|
|
8
8
|
import { SEARCH_CONTENT_ENTRIES, GET_CONTENT_ENTRY } from "./graphql";
|
|
9
9
|
import { convertReferenceEntriesToOptionCollection, convertReferenceEntryToOption } from "./helpers";
|
|
10
|
+
|
|
11
|
+
var getValueHash = function getValueHash(value) {
|
|
12
|
+
if (!value || !value.id && !value.entryId) {
|
|
13
|
+
return null;
|
|
14
|
+
} else if (value.entryId) {
|
|
15
|
+
return value.entryId;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return value.id.split("#").shift();
|
|
19
|
+
};
|
|
20
|
+
|
|
10
21
|
export var useReference = function useReference(_ref) {
|
|
11
22
|
var bind = _ref.bind,
|
|
12
23
|
field = _ref.field;
|
|
@@ -39,9 +50,11 @@ export var useReference = function useReference(_ref) {
|
|
|
39
50
|
setValueEntry = _useState10[1];
|
|
40
51
|
|
|
41
52
|
var models = field.settings ? field.settings.models || [] : [];
|
|
42
|
-
var modelsHash = models.
|
|
53
|
+
var modelsHash = models.map(function (model) {
|
|
54
|
+
return model.modelId;
|
|
55
|
+
}).join(",");
|
|
43
56
|
var value = bind.value;
|
|
44
|
-
var valueHash = value
|
|
57
|
+
var valueHash = getValueHash(value);
|
|
45
58
|
|
|
46
59
|
var searchEntries = /*#__PURE__*/function () {
|
|
47
60
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
@@ -140,7 +153,7 @@ export var useReference = function useReference(_ref) {
|
|
|
140
153
|
return;
|
|
141
154
|
}
|
|
142
155
|
|
|
143
|
-
var entry = allEntries.current[valueHash];
|
|
156
|
+
var entry = valueHash ? allEntries.current[valueHash] : null;
|
|
144
157
|
|
|
145
158
|
if (entry) {
|
|
146
159
|
/**
|
|
@@ -216,14 +229,14 @@ export var useReference = function useReference(_ref) {
|
|
|
216
229
|
|
|
217
230
|
var options = useMemo(function () {
|
|
218
231
|
return Object.values(entries);
|
|
219
|
-
}, [entries]);
|
|
232
|
+
}, [valueHash, entries]);
|
|
220
233
|
/**
|
|
221
234
|
* Format default options for the Autocomplete component.
|
|
222
235
|
*/
|
|
223
236
|
|
|
224
237
|
var defaultOptions = useMemo(function () {
|
|
225
238
|
return Object.values(latestEntries);
|
|
226
|
-
}, [latestEntries]);
|
|
239
|
+
}, [valueHash, latestEntries]);
|
|
227
240
|
var outputOptions = (search && options ? options : defaultOptions) || [];
|
|
228
241
|
|
|
229
242
|
if (valueEntry && outputOptions.some(function (opt) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useReference.ts"],"names":["useCallback","useEffect","useMemo","useRef","useState","useApolloClient","SEARCH_CONTENT_ENTRIES","GET_CONTENT_ENTRY","convertReferenceEntriesToOptionCollection","convertReferenceEntryToOption","useReference","bind","field","allEntries","client","search","setSearch","loading","setLoading","entries","setEntries","latestEntries","setLatestEntries","valueEntry","setValueEntry","models","settings","modelsHash","join","value","valueHash","entryId","searchEntries","query","variables","modelIds","map","m","modelId","limit","data","collection","content","current","length","fetchPolicy","then","latestEntryData","entry","id","res","dataEntry","latest","option","published","prev","onChange","options","Object","values","defaultOptions","outputOptions","some","opt","push"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useApolloClient } from \"~/admin/hooks\";\nimport {\n SEARCH_CONTENT_ENTRIES,\n GET_CONTENT_ENTRY,\n CmsEntryGetQueryResponse,\n CmsEntryGetQueryVariables,\n CmsEntrySearchQueryResponse,\n CmsEntrySearchQueryVariables\n} from \"./graphql\";\nimport { CmsEditorField, CmsModel } from \"~/types\";\nimport { BindComponentRenderProp } from \"@webiny/form\";\nimport { OptionItem, OptionItemCollection } from \"./types\";\nimport {\n convertReferenceEntriesToOptionCollection,\n convertReferenceEntryToOption\n} from \"./helpers\";\n\ninterface UseReferenceHookArgs {\n bind: BindComponentRenderProp;\n field: CmsEditorField;\n}\n\ninterface UseReferenceHookValue {\n onChange: (value: any, entry: OptionItem) => void;\n setSearch: (value: string) => void;\n value: OptionItem | null;\n loading: boolean;\n options: OptionItem[];\n}\n\ntype UseReferenceHook = (args: UseReferenceHookArgs) => UseReferenceHookValue;\n\nexport const useReference: UseReferenceHook = ({ bind, field }) => {\n const allEntries = useRef<OptionItemCollection>({});\n const client = useApolloClient();\n const [search, setSearch] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n const [entries, setEntries] = useState<OptionItemCollection>({});\n const [latestEntries, setLatestEntries] = useState<OptionItemCollection>({});\n const [valueEntry, setValueEntry] = useState<OptionItem | null>(null);\n\n const models = (field.settings ? field.settings.models || [] : []) as Pick<\n CmsModel,\n \"modelId\" | \"name\"\n >[];\n const modelsHash = models.join(\",\");\n\n const value = bind.value;\n const valueHash = value ? value.entryId : null;\n\n const searchEntries = async () => {\n if (!search) {\n return;\n }\n\n setLoading(true);\n const { data } = await client.query<\n CmsEntrySearchQueryResponse,\n CmsEntrySearchQueryVariables\n >({\n query: SEARCH_CONTENT_ENTRIES,\n variables: {\n modelIds: models.map(m => m.modelId),\n query: search,\n limit: 10\n }\n });\n setLoading(false);\n\n const collection = convertReferenceEntriesToOptionCollection(data.content.data);\n if (valueEntry) {\n collection[valueEntry.entryId] = valueEntry;\n }\n allEntries.current = {\n ...allEntries.current,\n ...collection\n };\n\n setEntries(collection);\n };\n\n useEffect(() => {\n searchEntries();\n }, [search]);\n\n useEffect(() => {\n if (models.length === 0) {\n return;\n }\n client\n .query<CmsEntrySearchQueryResponse, CmsEntrySearchQueryVariables>({\n query: SEARCH_CONTENT_ENTRIES,\n variables: {\n modelIds: models.map(m => m.modelId),\n limit: 10\n },\n /**\n * We cannot update this query response in cache after a reference entry being created/deleted,\n * which result in cached response being stale, therefore, we're setting the fetchPolicy to \"network-only\" to by passing cache.\n */\n fetchPolicy: \"network-only\"\n })\n .then(({ data }) => {\n const latestEntryData = convertReferenceEntriesToOptionCollection(\n data.content.data\n );\n if (valueEntry) {\n latestEntryData[valueEntry.entryId] = valueEntry;\n }\n\n setLatestEntries(latestEntryData);\n allEntries.current = {\n ...allEntries.current,\n ...latestEntryData\n };\n });\n }, [modelsHash]);\n\n useEffect(() => {\n if (!value || !models) {\n setValueEntry(() => null);\n return;\n }\n\n const entry = allEntries.current[valueHash];\n if (entry) {\n /**\n * if entry exists set valueEntry to that one so we do not load new one\n */\n setValueEntry(() => {\n return entry;\n });\n return;\n }\n\n setLoading(true);\n /**\n * Query loads both latest and published entries.\n * We do this in a single query because there might not be a published entry so we can use the latest one.\n */\n client\n .query<CmsEntryGetQueryResponse, CmsEntryGetQueryVariables>({\n query: GET_CONTENT_ENTRY,\n variables: {\n entry: {\n modelId: value.modelId,\n id: value.id\n }\n }\n })\n .then(res => {\n setLoading(false);\n const dataEntry = res.data.latest.data;\n if (!dataEntry) {\n return;\n }\n const option: OptionItem = {\n ...convertReferenceEntryToOption(dataEntry),\n latest: dataEntry.id,\n published: res.data.published.data ? res.data.published.data.id : null\n };\n allEntries.current[option.entryId] = option;\n setLatestEntries(prev => {\n return {\n ...prev,\n [option.entryId]: {\n ...option\n }\n };\n });\n /**\n * Calculate a couple of props for the Autocomplete component.\n */\n setValueEntry(() => {\n return option;\n });\n });\n }, [valueHash, modelsHash]);\n\n const onChange = useCallback((value: string, entry: OptionItem) => {\n if (value !== null) {\n setSearch(\"\");\n\n setValueEntry(() => {\n return entry;\n });\n bind.onChange({\n modelId: entry.modelId,\n id: entry.id\n });\n return;\n }\n\n setValueEntry(() => null);\n bind.onChange(null);\n }, []);\n\n /**\n * Format options for the Autocomplete component.\n */\n const options = useMemo(() => Object.values(entries), [entries]);\n\n /**\n * Format default options for the Autocomplete component.\n */\n const defaultOptions = useMemo(() => {\n return Object.values(latestEntries);\n }, [latestEntries]);\n\n const outputOptions: OptionItem[] = (search && options ? options : defaultOptions) || [];\n\n if (valueEntry && outputOptions.some(opt => opt.entryId === valueEntry.entryId) === false) {\n outputOptions.push(valueEntry);\n }\n\n return {\n onChange,\n setSearch,\n value: valueEntry,\n loading,\n options: outputOptions\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["useReference.ts"],"names":["useCallback","useEffect","useMemo","useRef","useState","useApolloClient","SEARCH_CONTENT_ENTRIES","GET_CONTENT_ENTRY","convertReferenceEntriesToOptionCollection","convertReferenceEntryToOption","getValueHash","value","id","entryId","split","shift","useReference","bind","field","allEntries","client","search","setSearch","loading","setLoading","entries","setEntries","latestEntries","setLatestEntries","valueEntry","setValueEntry","models","settings","modelsHash","map","model","modelId","join","valueHash","searchEntries","query","variables","modelIds","m","limit","data","collection","content","current","length","fetchPolicy","then","latestEntryData","entry","res","dataEntry","latest","option","published","prev","onChange","options","Object","values","defaultOptions","outputOptions","some","opt","push"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useApolloClient } from \"~/admin/hooks\";\nimport {\n SEARCH_CONTENT_ENTRIES,\n GET_CONTENT_ENTRY,\n CmsEntryGetQueryResponse,\n CmsEntryGetQueryVariables,\n CmsEntrySearchQueryResponse,\n CmsEntrySearchQueryVariables\n} from \"./graphql\";\nimport { CmsEditorField, CmsModel } from \"~/types\";\nimport { BindComponentRenderProp } from \"@webiny/form\";\nimport { OptionItem, OptionItemCollection } from \"./types\";\nimport {\n convertReferenceEntriesToOptionCollection,\n convertReferenceEntryToOption\n} from \"./helpers\";\n\ninterface UseReferenceHookArgs {\n bind: BindComponentRenderProp;\n field: CmsEditorField;\n}\n\ninterface UseReferenceHookValue {\n onChange: (value: any, entry: OptionItem) => void;\n setSearch: (value: string) => void;\n value: OptionItem | null;\n loading: boolean;\n options: OptionItem[];\n}\n\ntype UseReferenceHook = (args: UseReferenceHookArgs) => UseReferenceHookValue;\n\nconst getValueHash = (value: any): string | null => {\n if (!value || (!value.id && !value.entryId)) {\n return null;\n } else if (value.entryId) {\n return value.entryId;\n }\n return value.id.split(\"#\").shift();\n};\n\nexport const useReference: UseReferenceHook = ({ bind, field }) => {\n const allEntries = useRef<OptionItemCollection>({});\n const client = useApolloClient();\n const [search, setSearch] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n const [entries, setEntries] = useState<OptionItemCollection>({});\n const [latestEntries, setLatestEntries] = useState<OptionItemCollection>({});\n const [valueEntry, setValueEntry] = useState<OptionItem | null>(null);\n\n const models = (field.settings ? field.settings.models || [] : []) as Pick<\n CmsModel,\n \"modelId\" | \"name\"\n >[];\n const modelsHash = models.map(model => model.modelId).join(\",\");\n\n const value = bind.value;\n const valueHash = getValueHash(value);\n\n const searchEntries = async () => {\n if (!search) {\n return;\n }\n\n setLoading(true);\n const { data } = await client.query<\n CmsEntrySearchQueryResponse,\n CmsEntrySearchQueryVariables\n >({\n query: SEARCH_CONTENT_ENTRIES,\n variables: {\n modelIds: models.map(m => m.modelId),\n query: search,\n limit: 10\n }\n });\n setLoading(false);\n\n const collection = convertReferenceEntriesToOptionCollection(data.content.data);\n if (valueEntry) {\n collection[valueEntry.entryId] = valueEntry;\n }\n allEntries.current = {\n ...allEntries.current,\n ...collection\n };\n\n setEntries(collection);\n };\n\n useEffect(() => {\n searchEntries();\n }, [search]);\n\n useEffect(() => {\n if (models.length === 0) {\n return;\n }\n client\n .query<CmsEntrySearchQueryResponse, CmsEntrySearchQueryVariables>({\n query: SEARCH_CONTENT_ENTRIES,\n variables: {\n modelIds: models.map(m => m.modelId),\n limit: 10\n },\n /**\n * We cannot update this query response in cache after a reference entry being created/deleted,\n * which result in cached response being stale, therefore, we're setting the fetchPolicy to \"network-only\" to by passing cache.\n */\n fetchPolicy: \"network-only\"\n })\n .then(({ data }) => {\n const latestEntryData = convertReferenceEntriesToOptionCollection(\n data.content.data\n );\n if (valueEntry) {\n latestEntryData[valueEntry.entryId] = valueEntry;\n }\n\n setLatestEntries(latestEntryData);\n allEntries.current = {\n ...allEntries.current,\n ...latestEntryData\n };\n });\n }, [modelsHash]);\n\n useEffect(() => {\n if (!value || !models) {\n setValueEntry(() => null);\n return;\n }\n\n const entry = valueHash ? allEntries.current[valueHash] : null;\n if (entry) {\n /**\n * if entry exists set valueEntry to that one so we do not load new one\n */\n setValueEntry(() => {\n return entry;\n });\n return;\n }\n\n setLoading(true);\n /**\n * Query loads both latest and published entries.\n * We do this in a single query because there might not be a published entry so we can use the latest one.\n */\n client\n .query<CmsEntryGetQueryResponse, CmsEntryGetQueryVariables>({\n query: GET_CONTENT_ENTRY,\n variables: {\n entry: {\n modelId: value.modelId,\n id: value.id\n }\n }\n })\n .then(res => {\n setLoading(false);\n const dataEntry = res.data.latest.data;\n if (!dataEntry) {\n return;\n }\n const option: OptionItem = {\n ...convertReferenceEntryToOption(dataEntry),\n latest: dataEntry.id,\n published: res.data.published.data ? res.data.published.data.id : null\n };\n allEntries.current[option.entryId] = option;\n setLatestEntries(prev => {\n return {\n ...prev,\n [option.entryId]: {\n ...option\n }\n };\n });\n /**\n * Calculate a couple of props for the Autocomplete component.\n */\n setValueEntry(() => {\n return option;\n });\n });\n }, [valueHash, modelsHash]);\n\n const onChange = useCallback((value: string, entry: OptionItem) => {\n if (value !== null) {\n setSearch(\"\");\n\n setValueEntry(() => {\n return entry;\n });\n bind.onChange({\n modelId: entry.modelId,\n id: entry.id\n });\n return;\n }\n\n setValueEntry(() => null);\n bind.onChange(null);\n }, []);\n\n /**\n * Format options for the Autocomplete component.\n */\n const options = useMemo(() => Object.values(entries), [valueHash, entries]);\n\n /**\n * Format default options for the Autocomplete component.\n */\n const defaultOptions = useMemo(() => {\n return Object.values(latestEntries);\n }, [valueHash, latestEntries]);\n\n const outputOptions: OptionItem[] = (search && options ? options : defaultOptions) || [];\n\n if (valueEntry && outputOptions.some(opt => opt.entryId === valueEntry.entryId) === false) {\n outputOptions.push(valueEntry);\n }\n\n return {\n onChange,\n setSearch,\n value: valueEntry,\n loading,\n options: outputOptions\n };\n};\n"]}
|
|
@@ -9,6 +9,7 @@ import { convertReferenceEntriesToOptionCollection, convertReferenceEntryToOptio
|
|
|
9
9
|
export var useReferences = function useReferences(_ref) {
|
|
10
10
|
var bind = _ref.bind,
|
|
11
11
|
field = _ref.field;
|
|
12
|
+
var isMounted = useRef(true);
|
|
12
13
|
var allEntries = useRef({});
|
|
13
14
|
var client = useApolloClient();
|
|
14
15
|
|
|
@@ -90,6 +91,11 @@ export var useReferences = function useReferences(_ref) {
|
|
|
90
91
|
};
|
|
91
92
|
}();
|
|
92
93
|
|
|
94
|
+
useEffect(function () {
|
|
95
|
+
return function () {
|
|
96
|
+
isMounted.current = false;
|
|
97
|
+
};
|
|
98
|
+
}, []);
|
|
93
99
|
useEffect(function () {
|
|
94
100
|
searchEntries();
|
|
95
101
|
}, [search]);
|
|
@@ -110,6 +116,11 @@ export var useReferences = function useReferences(_ref) {
|
|
|
110
116
|
fetchPolicy: "network-only"
|
|
111
117
|
}).then(function (_ref3) {
|
|
112
118
|
var data = _ref3.data;
|
|
119
|
+
|
|
120
|
+
if (!isMounted.current) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
113
124
|
var collection = convertReferenceEntriesToOptionCollection(data.content.data);
|
|
114
125
|
setLatestEntries(Object.values(collection));
|
|
115
126
|
allEntries.current = _objectSpread({}, collection);
|
|
@@ -135,6 +146,10 @@ export var useReferences = function useReferences(_ref) {
|
|
|
135
146
|
})
|
|
136
147
|
}
|
|
137
148
|
}).then(function (res) {
|
|
149
|
+
if (!isMounted.current) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
|
|
138
153
|
setLoading(false);
|
|
139
154
|
var latest = (res.data.latest.data || []).reduce(function (collection, item) {
|
|
140
155
|
collection[item.entryId] = item;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useReferences.ts"],"names":["useCallback","useEffect","useMemo","useRef","useState","useApolloClient","SEARCH_CONTENT_ENTRIES","GET_CONTENT_ENTRIES","convertReferenceEntriesToOptionCollection","convertReferenceEntryToOption","useReferences","bind","field","allEntries","client","search","setSearch","loading","setLoading","entries","setEntries","latestEntries","setLatestEntries","valueEntries","setValueEntries","models","settings","modelsHash","join","values","value","searchEntries","query","variables","modelIds","map","m","modelId","data","collection","content","current","limit","fetchPolicy","then","Object","length","id","res","latest","reduce","item","entryId","published","existingItem","title","onChange","options","defaultOptions"],"mappings":";;;;AAAA,SAASA,WAAT,EAAsBC,SAAtB,EAAiCC,OAAjC,EAA0CC,MAA1C,EAAkDC,QAAlD,QAAkE,OAAlE;AACA,SAASC,eAAT;AAEA,SACIC,sBADJ,EAEIC,mBAFJ;AAWA,SACIC,yCADJ,EAEIC,6BAFJ;AASA,OAAO,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,OAA0C;AAAA,MAAvCC,IAAuC,QAAvCA,IAAuC;AAAA,MAAjCC,KAAiC,QAAjCA,KAAiC;AACnE,MAAMC,UAAU,GAAGV,MAAM,CAAuB,EAAvB,CAAzB;AACA,MAAMW,MAAM,GAAGT,eAAe,EAA9B;;AACA,kBAA4BD,QAAQ,CAAS,EAAT,CAApC;AAAA;AAAA,MAAOW,MAAP;AAAA,MAAeC,SAAf;;AACA,mBAA8BZ,QAAQ,CAAU,KAAV,CAAtC;AAAA;AAAA,MAAOa,OAAP;AAAA,MAAgBC,UAAhB;;AACA,mBAA8Bd,QAAQ,CAAuB,EAAvB,CAAtC;AAAA;AAAA,MAAOe,OAAP;AAAA,MAAgBC,UAAhB;;AACA,mBAA0ChB,QAAQ,CAAe,EAAf,CAAlD;AAAA;AAAA,MAAOiB,aAAP;AAAA,MAAsBC,gBAAtB;;AACA,mBAAwClB,QAAQ,CAAe,EAAf,CAAhD;AAAA;AAAA,MAAOmB,YAAP;AAAA,MAAqBC,eAArB;;AAEA,MAAMC,MAAM,GAAIb,KAAK,CAACc,QAAN,GAAiBd,KAAK,CAACc,QAAN,CAAeD,MAAf,IAAyB,EAA1C,GAA+C,EAA/D;AAIA,MAAME,UAAU,GAAGF,MAAM,CAACG,IAAP,CAAY,GAAZ,CAAnB;AACA,MAAMC,MAAkC,GAAGlB,IAAI,CAACmB,KAAL,GAAanB,IAAI,CAACmB,KAAlB,GAA0B,EAArE;;AAEA,MAAMC,aAAa;AAAA,yEAAG;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,kBACbhB,MADa;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAKlBG,cAAAA,UAAU,CAAC,IAAD,CAAV;AALkB;AAAA,qBAMKJ,MAAM,CAACkB,KAAP,CAGrB;AACEA,gBAAAA,KAAK,EAAE1B,sBADT;AAEE2B,gBAAAA,SAAS,EAAE;AACPC,kBAAAA,QAAQ,EAAET,MAAM,CAACU,GAAP,CAAW,UAAAC,CAAC;AAAA,2BAAIA,CAAC,CAACC,OAAN;AAAA,mBAAZ,CADH;AAEPL,kBAAAA,KAAK,EAAEjB;AAFA;AAFb,eAHqB,CANL;;AAAA;AAAA;AAMVuB,cAAAA,IANU,uBAMVA,IANU;AAgBlBpB,cAAAA,UAAU,CAAC,KAAD,CAAV;AAEMqB,cAAAA,UAlBY,GAkBC/B,yCAAyC,CAAC8B,IAAI,CAACE,OAAL,CAAaF,IAAd,CAlB1C;AAoBlBzB,cAAAA,UAAU,CAAC4B,OAAX,mCACO5B,UAAU,CAAC4B,OADlB,GAEOF,UAFP;AAKAnB,cAAAA,UAAU,CAACmB,UAAD,CAAV;;AAzBkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAbR,aAAa;AAAA;AAAA;AAAA,KAAnB;;AA4BA9B,EAAAA,SAAS,CAAC,YAAM;AACZ8B,IAAAA,aAAa;AAChB,GAFQ,EAEN,CAAChB,MAAD,CAFM,CAAT;AAIAd,EAAAA,SAAS,CAAC,YAAM;AACZa,IAAAA,MAAM,CACDkB,KADL,CACsE;AAC9DA,MAAAA,KAAK,EAAE1B,sBADuD;AAE9D2B,MAAAA,SAAS,EAAE;AACPC,QAAAA,QAAQ,EAAET,MAAM,CAACU,GAAP,CAAW,UAAAC,CAAC;AAAA,iBAAIA,CAAC,CAACC,OAAN;AAAA,SAAZ,CADH;AAEPK,QAAAA,KAAK,EAAE;AAFA,OAFmD;;AAM9D;AAChB;AACA;AACA;AACgBC,MAAAA,WAAW,EAAE;AAViD,KADtE,EAaKC,IAbL,CAaU,iBAAc;AAAA,UAAXN,IAAW,SAAXA,IAAW;AAChB,UAAMC,UAAU,GAAG/B,yCAAyC,CAAC8B,IAAI,CAACE,OAAL,CAAaF,IAAd,CAA5D;AACAhB,MAAAA,gBAAgB,CAACuB,MAAM,CAAChB,MAAP,CAAcU,UAAd,CAAD,CAAhB;AACA1B,MAAAA,UAAU,CAAC4B,OAAX,qBACOF,UADP;AAGH,KAnBL;AAoBH,GArBQ,EAqBN,CAACZ,UAAD,CArBM,CAAT;AAuBA1B,EAAAA,SAAS,CAAC,YAAM;AACZ,QAAI,CAAC4B,MAAD,IAAWA,MAAM,CAACiB,MAAP,IAAiB,CAAhC,EAAmC;AAC/B;AACH;;AAED5B,IAAAA,UAAU,CAAC,IAAD,CAAV;AAEAJ,IAAAA,MAAM,CACDkB,KADL,CAC8D;AACtDA,MAAAA,KAAK,EAAEzB,mBAD+C;AAEtD0B,MAAAA,SAAS,EAAE;AACP;AACpB;AACA;AACoBd,QAAAA,OAAO,EAAEU,MAAM,CAACM,GAAP,CAAW,UAAAL,KAAK,EAAI;AACzB,iBAAO;AACHO,YAAAA,OAAO,EAAEP,KAAK,CAACO,OADZ;AAEHU,YAAAA,EAAE,EAAEjB,KAAK,CAACiB;AAFP,WAAP;AAIH,SALQ;AAJF;AAF2C,KAD9D,EAeKH,IAfL,CAeU,UAAAI,GAAG,EAAI;AACT9B,MAAAA,UAAU,CAAC,KAAD,CAAV;AAEA,UAAM+B,MAAM,GAAG,CAACD,GAAG,CAACV,IAAJ,CAASW,MAAT,CAAgBX,IAAhB,IAAwB,EAAzB,EAA6BY,MAA7B,CAAoC,UAACX,UAAD,EAAaY,IAAb,EAAsB;AACrEZ,QAAAA,UAAU,CAACY,IAAI,CAACC,OAAN,CAAV,GAA2BD,IAA3B;AACA,eAAOZ,UAAP;AACH,OAHc,EAGZ,EAHY,CAAf;AAKA,UAAMpB,OAAO,GAAG,CAAC6B,GAAG,CAACV,IAAJ,CAASe,SAAT,CAAmBf,IAAnB,IAA2B,EAA5B,EAAgCY,MAAhC,CAAuC,UAACX,UAAD,EAAaY,IAAb,EAAsB;AACzE,YAAMC,OAAO,GAAGD,IAAI,CAACC,OAArB;AACA,YAAME,YAAY,GAAGL,MAAM,CAACG,OAAD,CAA3B;;AACA,YAAIE,YAAJ,EAAkB;AACdf,UAAAA,UAAU,CAACa,OAAD,CAAV,mCACOE,YADP;AAEID,YAAAA,SAAS,EAAE;AACPN,cAAAA,EAAE,EAAEI,IAAI,CAACJ,EADF;AAEPK,cAAAA,OAAO,EAAED,IAAI,CAACC,OAFP;AAGPG,cAAAA,KAAK,EAAEJ,IAAI,CAACI;AAHL;AAFf;AAQA,iBAAOhB,UAAP;AACH;;AACDA,QAAAA,UAAU,CAACa,OAAD,CAAV,GAAsBD,IAAtB;AACA,eAAOZ,UAAP;AACH,OAhBe,EAgBbU,MAhBa,CAAhB,CARS,CA0BT;;AACAzB,MAAAA,eAAe,CAACqB,MAAM,CAAChB,MAAP,CAAcV,OAAd,EAAuBgB,GAAvB,CAA2B1B,6BAA3B,CAAD,CAAf;AACH,KA3CL;AA4CH,GAnDQ,EAmDN,EAnDM,CAAT;AAqDA;AACJ;AACA;AACA;;AACI,MAAM+C,QAAQ,GAAGxD,WAAW,CAAC,UAAC6B,MAAD,EAAgC;AACzDb,IAAAA,SAAS,CAAC,EAAD,CAAT;AACAQ,IAAAA,eAAe,CAACK,MAAD,CAAf,CAFyD,CAIzD;;AACAlB,IAAAA,IAAI,CAAC6C,QAAL,CACI3B,MAAM,CAACM,GAAP,CAAW,UAAAgB,IAAI;AAAA,aAAK;AAChBd,QAAAA,OAAO,EAAEc,IAAI,CAACd,OADE;AAEhBU,QAAAA,EAAE,EAAEI,IAAI,CAACJ;AAFO,OAAL;AAAA,KAAf,CADJ;AAMH,GAX2B,EAWzB,EAXyB,CAA5B,CAhImE,CA6InE;;AACA,MAAMU,OAAO,GAAGvD,OAAO,CAAC;AAAA,WAAM2C,MAAM,CAAChB,MAAP,CAAcV,OAAd,CAAN;AAAA,GAAD,EAA+B,CAACA,OAAD,CAA/B,CAAvB,CA9ImE,CAgJnE;;AACA,MAAMuC,cAAc,GAAGxD,OAAO,CAAC;AAAA,WAAM2C,MAAM,CAAChB,MAAP,CAAcR,aAAd,CAAN;AAAA,GAAD,EAAqC,CAACA,aAAD,CAArC,CAA9B;AAEA,SAAO;AACHmC,IAAAA,QAAQ,EAARA,QADG;AAEHvC,IAAAA,OAAO,EAAPA,OAFG;AAGHD,IAAAA,SAAS,EAATA,SAHG;AAIH;AACAG,IAAAA,OAAO,EAAEI,YALN;AAMH;AACAkC,IAAAA,OAAO,EAAE1C,MAAM,GAAG0C,OAAH,GAAaC,cAAc,IAAI;AAP3C,GAAP;AASH,CA5JM","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useApolloClient } from \"~/admin/hooks\";\nimport { CmsEditorField, CmsModel } from \"~/types\";\nimport {\n SEARCH_CONTENT_ENTRIES,\n GET_CONTENT_ENTRIES,\n CmsEntrySearchQueryResponse,\n CmsEntrySearchQueryVariables,\n CmsEntryGetListResponse,\n CmsEntryGetListVariables,\n CmsEntryGetEntryVariable\n} from \"./graphql\";\nimport { BindComponentRenderProp } from \"@webiny/form\";\nimport { CmsReferenceContentEntry, OptionItem, OptionItemCollection } from \"./types\";\nimport {\n convertReferenceEntriesToOptionCollection,\n convertReferenceEntryToOption\n} from \"~/admin/plugins/fieldRenderers/ref/components/helpers\";\n\ninterface UseReferencesParams {\n bind: BindComponentRenderProp;\n field: CmsEditorField;\n}\nexport const useReferences = ({ bind, field }: UseReferencesParams) => {\n const allEntries = useRef<OptionItemCollection>({});\n const client = useApolloClient();\n const [search, setSearch] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n const [entries, setEntries] = useState<OptionItemCollection>({});\n const [latestEntries, setLatestEntries] = useState<OptionItem[]>([]);\n const [valueEntries, setValueEntries] = useState<OptionItem[]>([]);\n\n const models = (field.settings ? field.settings.models || [] : []) as Pick<\n CmsModel,\n \"modelId\"\n >[];\n const modelsHash = models.join(\",\");\n const values: CmsEntryGetEntryVariable[] = bind.value ? bind.value : [];\n\n const searchEntries = async (): Promise<void> => {\n if (!search) {\n return;\n }\n\n setLoading(true);\n const { data } = await client.query<\n CmsEntrySearchQueryResponse,\n CmsEntrySearchQueryVariables\n >({\n query: SEARCH_CONTENT_ENTRIES,\n variables: {\n modelIds: models.map(m => m.modelId),\n query: search\n }\n });\n setLoading(false);\n\n const collection = convertReferenceEntriesToOptionCollection(data.content.data);\n\n allEntries.current = {\n ...allEntries.current,\n ...collection\n };\n\n setEntries(collection);\n };\n\n useEffect(() => {\n searchEntries();\n }, [search]);\n\n useEffect(() => {\n client\n .query<CmsEntrySearchQueryResponse, CmsEntrySearchQueryVariables>({\n query: SEARCH_CONTENT_ENTRIES,\n variables: {\n modelIds: models.map(m => m.modelId),\n limit: 10\n },\n /**\n * We cannot update this query response in cache after a reference entry being created/deleted,\n * which result in cached response being stale, therefore, we're setting the fetchPolicy to \"network-only\" to by passing cache.\n */\n fetchPolicy: \"network-only\"\n })\n .then(({ data }) => {\n const collection = convertReferenceEntriesToOptionCollection(data.content.data);\n setLatestEntries(Object.values(collection));\n allEntries.current = {\n ...collection\n };\n });\n }, [modelsHash]);\n\n useEffect(() => {\n if (!values || values.length == 0) {\n return;\n }\n\n setLoading(true);\n\n client\n .query<CmsEntryGetListResponse, CmsEntryGetListVariables>({\n query: GET_CONTENT_ENTRIES,\n variables: {\n /**\n * We need make sure nothing else other than modelId and id is passed to entries variable.\n */\n entries: values.map(value => {\n return {\n modelId: value.modelId,\n id: value.id\n };\n })\n }\n })\n .then(res => {\n setLoading(false);\n\n const latest = (res.data.latest.data || []).reduce((collection, item) => {\n collection[item.entryId] = item;\n return collection;\n }, {} as Record<string, CmsReferenceContentEntry>);\n\n const entries = (res.data.published.data || []).reduce((collection, item) => {\n const entryId = item.entryId;\n const existingItem = latest[entryId];\n if (existingItem) {\n collection[entryId] = {\n ...existingItem,\n published: {\n id: item.id,\n entryId: item.entryId,\n title: item.title\n }\n };\n return collection;\n }\n collection[entryId] = item;\n return collection;\n }, latest);\n\n // Calculate a couple of props for the Autocomplete component.\n setValueEntries(Object.values(entries).map(convertReferenceEntryToOption));\n });\n }, []);\n\n /**\n * onChange callback will update internal component state using the previously loaded entries by IDs.\n * It will also format the value to store to the DB.\n */\n const onChange = useCallback((values: OptionItem[]): void => {\n setSearch(\"\");\n setValueEntries(values);\n\n // Update parent form\n bind.onChange(\n values.map(item => ({\n modelId: item.modelId,\n id: item.id\n }))\n );\n }, []);\n\n // Format options for the Autocomplete component.\n const options = useMemo(() => Object.values(entries), [entries]);\n\n // Format default options for the Autocomplete component.\n const defaultOptions = useMemo(() => Object.values(latestEntries), [latestEntries]);\n\n return {\n onChange,\n loading,\n setSearch,\n // Selected entries\n entries: valueEntries,\n // Options to show when the autocomplete dropdown is visible\n options: search ? options : defaultOptions || []\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["useReferences.ts"],"names":["useCallback","useEffect","useMemo","useRef","useState","useApolloClient","SEARCH_CONTENT_ENTRIES","GET_CONTENT_ENTRIES","convertReferenceEntriesToOptionCollection","convertReferenceEntryToOption","useReferences","bind","field","isMounted","allEntries","client","search","setSearch","loading","setLoading","entries","setEntries","latestEntries","setLatestEntries","valueEntries","setValueEntries","models","settings","modelsHash","join","values","value","searchEntries","query","variables","modelIds","map","m","modelId","data","collection","content","current","limit","fetchPolicy","then","Object","length","id","res","latest","reduce","item","entryId","published","existingItem","title","onChange","options","defaultOptions"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useApolloClient } from \"~/admin/hooks\";\nimport { CmsEditorField, CmsModel } from \"~/types\";\nimport {\n SEARCH_CONTENT_ENTRIES,\n GET_CONTENT_ENTRIES,\n CmsEntrySearchQueryResponse,\n CmsEntrySearchQueryVariables,\n CmsEntryGetListResponse,\n CmsEntryGetListVariables,\n CmsEntryGetEntryVariable\n} from \"./graphql\";\nimport { BindComponentRenderProp } from \"@webiny/form\";\nimport { CmsReferenceContentEntry, OptionItem, OptionItemCollection } from \"./types\";\nimport {\n convertReferenceEntriesToOptionCollection,\n convertReferenceEntryToOption\n} from \"~/admin/plugins/fieldRenderers/ref/components/helpers\";\n\ninterface UseReferencesParams {\n bind: BindComponentRenderProp;\n field: CmsEditorField;\n}\nexport const useReferences = ({ bind, field }: UseReferencesParams) => {\n const isMounted = useRef(true);\n const allEntries = useRef<OptionItemCollection>({});\n const client = useApolloClient();\n const [search, setSearch] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n const [entries, setEntries] = useState<OptionItemCollection>({});\n const [latestEntries, setLatestEntries] = useState<OptionItem[]>([]);\n const [valueEntries, setValueEntries] = useState<OptionItem[]>([]);\n\n const models = (field.settings ? field.settings.models || [] : []) as Pick<\n CmsModel,\n \"modelId\"\n >[];\n const modelsHash = models.join(\",\");\n const values: CmsEntryGetEntryVariable[] = bind.value ? bind.value : [];\n\n const searchEntries = async (): Promise<void> => {\n if (!search) {\n return;\n }\n\n setLoading(true);\n const { data } = await client.query<\n CmsEntrySearchQueryResponse,\n CmsEntrySearchQueryVariables\n >({\n query: SEARCH_CONTENT_ENTRIES,\n variables: {\n modelIds: models.map(m => m.modelId),\n query: search\n }\n });\n setLoading(false);\n\n const collection = convertReferenceEntriesToOptionCollection(data.content.data);\n\n allEntries.current = {\n ...allEntries.current,\n ...collection\n };\n\n setEntries(collection);\n };\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n searchEntries();\n }, [search]);\n\n useEffect(() => {\n client\n .query<CmsEntrySearchQueryResponse, CmsEntrySearchQueryVariables>({\n query: SEARCH_CONTENT_ENTRIES,\n variables: {\n modelIds: models.map(m => m.modelId),\n limit: 10\n },\n /**\n * We cannot update this query response in cache after a reference entry being created/deleted,\n * which result in cached response being stale, therefore, we're setting the fetchPolicy to \"network-only\" to by passing cache.\n */\n fetchPolicy: \"network-only\"\n })\n .then(({ data }) => {\n if (!isMounted.current) {\n return;\n }\n\n const collection = convertReferenceEntriesToOptionCollection(data.content.data);\n setLatestEntries(Object.values(collection));\n allEntries.current = {\n ...collection\n };\n });\n }, [modelsHash]);\n\n useEffect(() => {\n if (!values || values.length == 0) {\n return;\n }\n\n setLoading(true);\n\n client\n .query<CmsEntryGetListResponse, CmsEntryGetListVariables>({\n query: GET_CONTENT_ENTRIES,\n variables: {\n /**\n * We need make sure nothing else other than modelId and id is passed to entries variable.\n */\n entries: values.map(value => {\n return {\n modelId: value.modelId,\n id: value.id\n };\n })\n }\n })\n .then(res => {\n if (!isMounted.current) {\n return;\n }\n\n setLoading(false);\n\n const latest = (res.data.latest.data || []).reduce((collection, item) => {\n collection[item.entryId] = item;\n return collection;\n }, {} as Record<string, CmsReferenceContentEntry>);\n\n const entries = (res.data.published.data || []).reduce((collection, item) => {\n const entryId = item.entryId;\n const existingItem = latest[entryId];\n if (existingItem) {\n collection[entryId] = {\n ...existingItem,\n published: {\n id: item.id,\n entryId: item.entryId,\n title: item.title\n }\n };\n return collection;\n }\n collection[entryId] = item;\n return collection;\n }, latest);\n\n // Calculate a couple of props for the Autocomplete component.\n setValueEntries(Object.values(entries).map(convertReferenceEntryToOption));\n });\n }, []);\n\n /**\n * onChange callback will update internal component state using the previously loaded entries by IDs.\n * It will also format the value to store to the DB.\n */\n const onChange = useCallback((values: OptionItem[]): void => {\n setSearch(\"\");\n setValueEntries(values);\n\n // Update parent form\n bind.onChange(\n values.map(item => ({\n modelId: item.modelId,\n id: item.id\n }))\n );\n }, []);\n\n // Format options for the Autocomplete component.\n const options = useMemo(() => Object.values(entries), [entries]);\n\n // Format default options for the Autocomplete component.\n const defaultOptions = useMemo(() => Object.values(latestEntries), [latestEntries]);\n\n return {\n onChange,\n loading,\n setSearch,\n // Selected entries\n entries: valueEntries,\n // Options to show when the autocomplete dropdown is visible\n options: search ? options : defaultOptions || []\n };\n};\n"]}
|
|
@@ -207,7 +207,7 @@ export var Provider = function Provider(_ref) {
|
|
|
207
207
|
entry: entry,
|
|
208
208
|
form: formRef,
|
|
209
209
|
loading: loading,
|
|
210
|
-
revisions: get(getRevisions, "data.revisions.data") ||
|
|
210
|
+
revisions: get(getRevisions, "data.revisions.data") || [],
|
|
211
211
|
refetchContent: getEntry.refetch,
|
|
212
212
|
setFormRef: setFormRef,
|
|
213
213
|
setLoading: setLoading,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ContentEntryContext.tsx"],"names":["React","useRef","useState","useCallback","useMemo","isEmpty","get","useRouter","useSnackbar","useQuery","useContentEntries","parseIdentifier","createReadQuery","createRevisionsQuery","Context","createContext","createEntry","entry","form","current","submit","canCreate","showEmptyView","tabs","setTabsRef","refetchContent","revisions","setLoading","loading","listQueryVariables","setListQueryVariables","contentModel","sorters","setFormRef","useContentEntryProviderProps","location","query","URLSearchParams","search","isNewEntry","getContentId","Provider","children","formRef","tabsRef","history","showSnackbar","isLoading","contentEntryProviderProps","newEntry","contentId","revisionId","decodeURIComponent","entryId","result","id","READ_CONTENT","modelId","GET_REVISIONS","push","getEntry","variables","revision","skip","onCompleted","data","error","content","message","getRevisions","value","refetch","displayName"],"mappings":"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","sourcesContent":["import React, {\n useRef,\n useState,\n useCallback,\n useMemo,\n Dispatch,\n SetStateAction,\n MutableRefObject\n} from \"react\";\nimport isEmpty from \"lodash/isEmpty\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useQuery } from \"~/admin/hooks\";\nimport { ContentEntriesContext } from \"~/admin/views/contentEntries/ContentEntriesContext\";\nimport { useContentEntries } from \"~/admin/views/contentEntries/hooks/useContentEntries\";\nimport { CmsContentEntryRevision, CmsEditorContentEntry, CmsEditorContentModel } from \"~/types\";\nimport { Tabs } from \"@webiny/ui/Tabs\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport {\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables,\n CmsEntryGetQueryResponse,\n CmsEntryGetQueryVariables,\n createReadQuery,\n createRevisionsQuery\n} from \"~/admin/graphql/contentEntries\";\n\ninterface ContentEntryContextForm {\n submit: (ev: React.SyntheticEvent) => Promise<CmsEditorContentEntry | null>;\n}\ntype ContentEntryContextFormRef = MutableRefObject<ContentEntryContextForm>;\ntype ContentEntryContextTabsRef = MutableRefObject<Tabs | null>;\nexport interface ContentEntryContext extends ContentEntriesContext {\n createEntry: () => void;\n entry: CmsEditorContentEntry;\n form: ContentEntryContextFormRef;\n setFormRef: (form: { submit: Function }) => void;\n loading: boolean;\n setLoading: Dispatch<SetStateAction<boolean>>;\n revisions: CmsContentEntryRevision[];\n refetchContent: () => void;\n tabs: ContentEntryContextTabsRef;\n setTabsRef: (tabs: Tabs) => void;\n showEmptyView: boolean;\n}\n\nexport const Context = React.createContext<ContentEntryContext>({\n createEntry: () => {\n return void 0;\n },\n entry: null as unknown as CmsEditorContentEntry,\n form: {\n current: {\n submit: async () => {\n return null;\n }\n }\n },\n canCreate: false,\n showEmptyView: false,\n tabs: {\n current: null\n },\n setTabsRef: () => {\n return void 0;\n },\n refetchContent: () => {\n return void 0;\n },\n revisions: [],\n setLoading: () => {\n return void 0;\n },\n loading: false,\n listQueryVariables: {},\n setListQueryVariables: () => {\n return void 0;\n },\n contentModel: null as unknown as CmsEditorContentModel,\n sorters: [],\n setFormRef: () => {\n return void 0;\n }\n});\n\nexport interface ContentEntryContextProviderProps extends Partial<UseContentEntryProviderProps> {\n children: React.ReactNode;\n}\n\ninterface UseContentEntryProviderProps {\n getContentId: () => string | null;\n isNewEntry: () => boolean;\n}\n\nexport const useContentEntryProviderProps = (): UseContentEntryProviderProps => {\n const { location } = useRouter();\n const query = new URLSearchParams(location.search);\n\n const isNewEntry = (): boolean => {\n return query.get(\"new\") === \"true\";\n };\n\n const getContentId = (): string | null => {\n return query.get(\"id\") || null;\n };\n\n return {\n getContentId,\n isNewEntry\n };\n};\n\nexport const Provider: React.FC<ContentEntryContextProviderProps> = ({\n children,\n isNewEntry,\n getContentId\n}) => {\n const { contentModel, canCreate, listQueryVariables, setListQueryVariables, sorters } =\n useContentEntries();\n\n const formRef = useRef<ContentEntryContextForm>({\n submit: async () => {\n return null;\n }\n });\n const tabsRef = useRef<Tabs | null>(null);\n const { history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const [isLoading, setLoading] = useState(false);\n\n const contentEntryProviderProps = useContentEntryProviderProps();\n\n const newEntry =\n typeof isNewEntry === \"function\" ? isNewEntry() : contentEntryProviderProps.isNewEntry();\n const contentId =\n typeof getContentId === \"function\"\n ? getContentId()\n : contentEntryProviderProps.getContentId();\n\n const revisionId = contentId ? decodeURIComponent(contentId) : null;\n let entryId: string | null = null;\n if (revisionId) {\n const result = parseIdentifier(revisionId);\n entryId = result ? result.id : null;\n }\n\n const { READ_CONTENT } = useMemo(() => {\n return {\n READ_CONTENT: createReadQuery(contentModel)\n };\n }, [contentModel.modelId]);\n\n const { GET_REVISIONS } = useMemo(() => {\n return {\n GET_REVISIONS: createRevisionsQuery(contentModel)\n };\n }, [contentModel.modelId]);\n\n const setFormRef = useCallback(\n form => {\n formRef.current = form;\n },\n [formRef]\n );\n\n const setTabsRef = useCallback(\n (tabs: Tabs) => {\n tabsRef.current = tabs;\n },\n [tabsRef]\n );\n\n const createEntry = useCallback((): void => {\n history.push(`/cms/content-entries/${contentModel.modelId}?new=true`);\n }, [contentModel.modelId]);\n\n const getEntry = useQuery<CmsEntryGetQueryResponse, CmsEntryGetQueryVariables>(READ_CONTENT, {\n variables: {\n revision: revisionId || \"\"\n },\n skip: !revisionId,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.content;\n if (!error) {\n return;\n }\n history.push(`/cms/content-entries/${contentModel.modelId}`);\n showSnackbar(error.message);\n }\n });\n\n const getRevisions = useQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(GET_REVISIONS, {\n variables: {\n id: entryId as string\n },\n skip: !entryId\n });\n\n const loading = isLoading || getEntry.loading || getRevisions.loading;\n const entry: CmsEditorContentEntry = get(getEntry, \"data.content.data\") || {};\n\n const value = {\n canCreate,\n contentModel,\n createEntry,\n listQueryVariables,\n setListQueryVariables,\n sorters,\n entry,\n form: formRef,\n loading,\n revisions: get(getRevisions, \"data.revisions.data\") || {},\n refetchContent: getEntry.refetch,\n setFormRef,\n setLoading,\n setTabsRef,\n showEmptyView: !newEntry && !loading && isEmpty(entry),\n tabs: tabsRef\n };\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nProvider.displayName = \"ContentEntryProvider\";\n"]}
|
|
1
|
+
{"version":3,"sources":["ContentEntryContext.tsx"],"names":["React","useRef","useState","useCallback","useMemo","isEmpty","get","useRouter","useSnackbar","useQuery","useContentEntries","parseIdentifier","createReadQuery","createRevisionsQuery","Context","createContext","createEntry","entry","form","current","submit","canCreate","showEmptyView","tabs","setTabsRef","refetchContent","revisions","setLoading","loading","listQueryVariables","setListQueryVariables","contentModel","sorters","setFormRef","useContentEntryProviderProps","location","query","URLSearchParams","search","isNewEntry","getContentId","Provider","children","formRef","tabsRef","history","showSnackbar","isLoading","contentEntryProviderProps","newEntry","contentId","revisionId","decodeURIComponent","entryId","result","id","READ_CONTENT","modelId","GET_REVISIONS","push","getEntry","variables","revision","skip","onCompleted","data","error","content","message","getRevisions","value","refetch","displayName"],"mappings":"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","sourcesContent":["import React, {\n useRef,\n useState,\n useCallback,\n useMemo,\n Dispatch,\n SetStateAction,\n MutableRefObject\n} from \"react\";\nimport isEmpty from \"lodash/isEmpty\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useQuery } from \"~/admin/hooks\";\nimport { ContentEntriesContext } from \"~/admin/views/contentEntries/ContentEntriesContext\";\nimport { useContentEntries } from \"~/admin/views/contentEntries/hooks/useContentEntries\";\nimport { CmsContentEntryRevision, CmsEditorContentEntry, CmsEditorContentModel } from \"~/types\";\nimport { Tabs } from \"@webiny/ui/Tabs\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport {\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables,\n CmsEntryGetQueryResponse,\n CmsEntryGetQueryVariables,\n createReadQuery,\n createRevisionsQuery\n} from \"~/admin/graphql/contentEntries\";\n\ninterface ContentEntryContextForm {\n submit: (ev: React.SyntheticEvent) => Promise<CmsEditorContentEntry | null>;\n}\ntype ContentEntryContextFormRef = MutableRefObject<ContentEntryContextForm>;\ntype ContentEntryContextTabsRef = MutableRefObject<Tabs | null>;\nexport interface ContentEntryContext extends ContentEntriesContext {\n createEntry: () => void;\n entry: CmsEditorContentEntry;\n form: ContentEntryContextFormRef;\n setFormRef: (form: { submit: Function }) => void;\n loading: boolean;\n setLoading: Dispatch<SetStateAction<boolean>>;\n revisions: CmsContentEntryRevision[];\n refetchContent: () => void;\n tabs: ContentEntryContextTabsRef;\n setTabsRef: (tabs: Tabs) => void;\n showEmptyView: boolean;\n}\n\nexport const Context = React.createContext<ContentEntryContext>({\n createEntry: () => {\n return void 0;\n },\n entry: null as unknown as CmsEditorContentEntry,\n form: {\n current: {\n submit: async () => {\n return null;\n }\n }\n },\n canCreate: false,\n showEmptyView: false,\n tabs: {\n current: null\n },\n setTabsRef: () => {\n return void 0;\n },\n refetchContent: () => {\n return void 0;\n },\n revisions: [],\n setLoading: () => {\n return void 0;\n },\n loading: false,\n listQueryVariables: {},\n setListQueryVariables: () => {\n return void 0;\n },\n contentModel: null as unknown as CmsEditorContentModel,\n sorters: [],\n setFormRef: () => {\n return void 0;\n }\n});\n\nexport interface ContentEntryContextProviderProps extends Partial<UseContentEntryProviderProps> {\n children: React.ReactNode;\n}\n\ninterface UseContentEntryProviderProps {\n getContentId: () => string | null;\n isNewEntry: () => boolean;\n}\n\nexport const useContentEntryProviderProps = (): UseContentEntryProviderProps => {\n const { location } = useRouter();\n const query = new URLSearchParams(location.search);\n\n const isNewEntry = (): boolean => {\n return query.get(\"new\") === \"true\";\n };\n\n const getContentId = (): string | null => {\n return query.get(\"id\") || null;\n };\n\n return {\n getContentId,\n isNewEntry\n };\n};\n\nexport const Provider: React.FC<ContentEntryContextProviderProps> = ({\n children,\n isNewEntry,\n getContentId\n}) => {\n const { contentModel, canCreate, listQueryVariables, setListQueryVariables, sorters } =\n useContentEntries();\n\n const formRef = useRef<ContentEntryContextForm>({\n submit: async () => {\n return null;\n }\n });\n const tabsRef = useRef<Tabs | null>(null);\n const { history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const [isLoading, setLoading] = useState<boolean>(false);\n\n const contentEntryProviderProps = useContentEntryProviderProps();\n\n const newEntry =\n typeof isNewEntry === \"function\" ? isNewEntry() : contentEntryProviderProps.isNewEntry();\n const contentId =\n typeof getContentId === \"function\"\n ? getContentId()\n : contentEntryProviderProps.getContentId();\n\n const revisionId = contentId ? decodeURIComponent(contentId) : null;\n let entryId: string | null = null;\n if (revisionId) {\n const result = parseIdentifier(revisionId);\n entryId = result ? result.id : null;\n }\n\n const { READ_CONTENT } = useMemo(() => {\n return {\n READ_CONTENT: createReadQuery(contentModel)\n };\n }, [contentModel.modelId]);\n\n const { GET_REVISIONS } = useMemo(() => {\n return {\n GET_REVISIONS: createRevisionsQuery(contentModel)\n };\n }, [contentModel.modelId]);\n\n const setFormRef = useCallback(\n form => {\n formRef.current = form;\n },\n [formRef]\n );\n\n const setTabsRef = useCallback(\n (tabs: Tabs) => {\n tabsRef.current = tabs;\n },\n [tabsRef]\n );\n\n const createEntry = useCallback((): void => {\n history.push(`/cms/content-entries/${contentModel.modelId}?new=true`);\n }, [contentModel.modelId]);\n\n const getEntry = useQuery<CmsEntryGetQueryResponse, CmsEntryGetQueryVariables>(READ_CONTENT, {\n variables: {\n revision: revisionId || \"\"\n },\n skip: !revisionId,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.content;\n if (!error) {\n return;\n }\n history.push(`/cms/content-entries/${contentModel.modelId}`);\n showSnackbar(error.message);\n }\n });\n\n const getRevisions = useQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(GET_REVISIONS, {\n variables: {\n id: entryId as string\n },\n skip: !entryId\n });\n\n const loading = isLoading || getEntry.loading || getRevisions.loading;\n const entry: CmsEditorContentEntry = get(getEntry, \"data.content.data\") || {};\n\n const value: ContentEntryContext = {\n canCreate,\n contentModel,\n createEntry,\n listQueryVariables,\n setListQueryVariables,\n sorters,\n entry,\n form: formRef,\n loading,\n revisions: get(getRevisions, \"data.revisions.data\") || [],\n refetchContent: getEntry.refetch,\n setFormRef,\n setLoading,\n setTabsRef,\n showEmptyView: !newEntry && !loading && isEmpty(entry),\n tabs: tabsRef\n };\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nProvider.displayName = \"ContentEntryProvider\";\n"]}
|
|
@@ -106,6 +106,7 @@ var ContentFormOptionsMenu = function ContentFormOptionsMenu() {
|
|
|
106
106
|
return;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
+
setLoading(false);
|
|
109
110
|
removeEntryFromListCache(contentModel, cache, entry, listQueryVariables);
|
|
110
111
|
showSnackbar(t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["{title} was deleted successfully!"])))({
|
|
111
112
|
title: /*#__PURE__*/React.createElement("strong", null, title)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ContentFormOptionsMenu.tsx"],"names":["React","useCallback","useMemo","css","get","IconButton","Menu","MenuItem","ListItemGraphic","Icon","useRouter","useSnackbar","useDialog","useConfirmationDialog","i18n","createDeleteMutation","usePermission","ReactComponent","MoreVerticalIcon","DeleteIcon","removeEntryFromListCache","useMutation","useContentEntry","t","ns","menuStyles","width","right","left","opacity","pointerEvents","ContentFormOptionsMenu","contentModel","entry","loading","setLoading","listQueryVariables","showSnackbar","history","showDialog","canDelete","DELETE_CONTENT","modelId","deleteContentMutation","title","message","dataTestId","showConfirmation","confirmDelete","id","split","uniqueId","variables","revision","update","cache","response","data","error","content","push"],"mappings":";;;;;;;AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,OAA7B,QAA4C,OAA5C;AACA,SAASC,GAAT,QAAoB,SAApB;AACA,OAAOC,GAAP,MAAgB,YAAhB;AACA,SAASC,UAAT,QAA2B,mBAA3B;AACA,SAASC,IAAT,EAAeC,QAAf,QAA+B,iBAA/B;AACA,SAASC,eAAT,QAAgC,iBAAhC;AACA,SAASC,IAAT,QAAqB,iBAArB;AACA,SAASC,SAAT,QAA0B,sBAA1B;AACA,SAASC,WAAT,QAA4B,qCAA5B;AACA,SAASC,SAAT,QAA0B,mCAA1B;AACA,SAASC,qBAAT,QAAsC,+CAAtC;AACA,SAASC,IAAT,QAAqB,kBAArB;AACA,SAGIC,oBAHJ;AAKA,OAAOC,aAAP;AACA,SAASC,cAAc,IAAIC,gBAA3B;AACA,SAASD,cAAc,IAAIE,UAA3B;AACA,SAASC,wBAAT;AACA,SAASC,WAAT;AACA,SAASC,eAAT;AAEA,IAAMC,CAAC,GAAGT,IAAI,CAACU,EAAL,CACN,iFADM,CAAV;AAIA,IAAMC,UAAU,gBAAGtB,GAAG,CAAC;AACnBuB,EAAAA,KAAK,EAAE,GADY;AAEnBC,EAAAA,KAAK,EAAE,CAAC,GAFW;AAGnBC,EAAAA,IAAI,EAAE,iBAHa;AAInB,eAAa;AACTC,IAAAA,OAAO,EAAE,GADA;AAETC,IAAAA,aAAa,EAAE;AAFN;AAJM,CAAD,sBAAtB;;AAUA,IAAMC,sBAAgC,GAAG,SAAnCA,sBAAmC,GAAM;AAC3C,yBAAyET,eAAe,EAAxF;AAAA,MAAQU,YAAR,oBAAQA,YAAR;AAAA,MAAsBC,KAAtB,oBAAsBA,KAAtB;AAAA,MAA6BC,OAA7B,oBAA6BA,OAA7B;AAAA,MAAsCC,UAAtC,oBAAsCA,UAAtC;AAAA,MAAkDC,kBAAlD,oBAAkDA,kBAAlD;;AACA,qBAAyBzB,WAAW,EAApC;AAAA,MAAQ0B,YAAR,gBAAQA,YAAR;;AACA,mBAAoB3B,SAAS,EAA7B;AAAA,MAAQ4B,OAAR,cAAQA,OAAR;;AACA,mBAAuB1B,SAAS,EAAhC;AAAA,MAAQ2B,UAAR,cAAQA,UAAR;;AACA,uBAAsBvB,aAAa,EAAnC;AAAA,MAAQwB,SAAR,kBAAQA,SAAR;;AAEA,MAAMC,cAAc,GAAGvC,OAAO,CAAC,YAAM;AACjC,WAAOa,oBAAoB,CAACiB,YAAD,CAA3B;AACH,GAF6B,EAE3B,CAACA,YAAY,CAACU,OAAd,CAF2B,CAA9B;;AAIA,qBAAgCrB,WAAW,CAGzCoB,cAHyC,CAA3C;AAAA;AAAA,MAAOE,qBAAP;;AAKA,MAAMC,KAAK,GAAGxC,GAAG,CAAC6B,KAAD,EAAQ,YAAR,CAAjB;;AAEA,8BAA6BpB,qBAAqB,CAAC;AAC/C+B,IAAAA,KAAK,EAAErB,CAAF,yFAD0C;AAE/CsB,IAAAA,OAAO,eACH,+BACKtB,CADL,0JAEI,+BAFJ,EAGKA,CAAC,2HAAD,CAAwD;AACrDqB,MAAAA,KAAK,eAAE,oCAASA,KAAT;AAD8C,KAAxD,CAHL,CAH2C;AAW/CE,IAAAA,UAAU,EAAE;AAXmC,GAAD,CAAlD;AAAA,MAAQC,gBAAR,yBAAQA,gBAAR;;AAcA,MAAMC,aAAa,GAAG/C,WAAW,CAAC,YAAY;AAC1C8C,IAAAA,gBAAgB,wEAAC;AAAA;;AAAA;AAAA;AAAA;AAAA;AACbZ,cAAAA,UAAU,CAAC,IAAD,CAAV;AADa,gCAEMF,KAAK,CAACgB,EAAN,CAASC,KAAT,CAAe,GAAf,CAFN,yDAENC,QAFM;AAAA;AAAA,qBAGPR,qBAAqB,CAAC;AACxBS,gBAAAA,SAAS,EAAE;AAAEC,kBAAAA,QAAQ,EAAEF;AAAZ,iBADa;AAExBG,gBAAAA,MAFwB,kBAEjBC,KAFiB,EAEVC,QAFU,EAEA;AACpB,sBAAI,CAACA,QAAQ,CAACC,IAAd,EAAoB;AAChBlB,oBAAAA,UAAU,CAAC,iDAAD,EAAoD;AAC1DK,sBAAAA,KAAK,EAAErB,CAAF;AADqD,qBAApD,CAAV;AAGA;AACH;;AACD,sBAAQmC,KAAR,GAAkBF,QAAQ,CAACC,IAAT,CAAcE,OAAhC,CAAQD,KAAR;;AACA,sBAAIA,KAAJ,EAAW;AACPnB,oBAAAA,UAAU,CAACmB,KAAK,CAACb,OAAP,EAAgB;AAAED,sBAAAA,KAAK,EAAErB,CAAF;AAAP,qBAAhB,CAAV;AACA;AACH;;
|
|
1
|
+
{"version":3,"sources":["ContentFormOptionsMenu.tsx"],"names":["React","useCallback","useMemo","css","get","IconButton","Menu","MenuItem","ListItemGraphic","Icon","useRouter","useSnackbar","useDialog","useConfirmationDialog","i18n","createDeleteMutation","usePermission","ReactComponent","MoreVerticalIcon","DeleteIcon","removeEntryFromListCache","useMutation","useContentEntry","t","ns","menuStyles","width","right","left","opacity","pointerEvents","ContentFormOptionsMenu","contentModel","entry","loading","setLoading","listQueryVariables","showSnackbar","history","showDialog","canDelete","DELETE_CONTENT","modelId","deleteContentMutation","title","message","dataTestId","showConfirmation","confirmDelete","id","split","uniqueId","variables","revision","update","cache","response","data","error","content","push"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport { css } from \"emotion\";\nimport get from \"lodash/get\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { Menu, MenuItem } from \"@webiny/ui/Menu\";\nimport { ListItemGraphic } from \"@webiny/ui/List\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useDialog } from \"@webiny/app-admin/hooks/useDialog\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n CmsEntryDeleteMutationResponse,\n CmsEntryDeleteMutationVariables,\n createDeleteMutation\n} from \"~/admin/graphql/contentEntries\";\nimport usePermission from \"~/admin/hooks/usePermission\";\nimport { ReactComponent as MoreVerticalIcon } from \"~/admin/icons/more_vert.svg\";\nimport { ReactComponent as DeleteIcon } from \"~/admin/icons/delete.svg\";\nimport { removeEntryFromListCache } from \"../../cache\";\nimport { useMutation } from \"~/admin/hooks\";\nimport { useContentEntry } from \"~/admin/views/contentEntries/hooks/useContentEntry\";\n\nconst t = i18n.ns(\n \"app-headless-cms/admin/plugins/content-details/header/content-form-options-menu\"\n);\n\nconst menuStyles = css({\n width: 250,\n right: -105,\n left: \"auto !important\",\n \".disabled\": {\n opacity: 0.5,\n pointerEvents: \"none\"\n }\n});\n\nconst ContentFormOptionsMenu: React.FC = () => {\n const { contentModel, entry, loading, setLoading, listQueryVariables } = useContentEntry();\n const { showSnackbar } = useSnackbar();\n const { history } = useRouter();\n const { showDialog } = useDialog();\n const { canDelete } = usePermission();\n\n const DELETE_CONTENT = useMemo(() => {\n return createDeleteMutation(contentModel);\n }, [contentModel.modelId]);\n\n const [deleteContentMutation] = useMutation<\n CmsEntryDeleteMutationResponse,\n CmsEntryDeleteMutationVariables\n >(DELETE_CONTENT);\n\n const title = get(entry, \"meta.title\");\n\n const { showConfirmation } = useConfirmationDialog({\n title: t`Delete content entry`,\n message: (\n <p>\n {t`You are about to delete this content entry and all of its revisions!`}\n <br />\n {t`Are you sure you want to permanently delete {title}?`({\n title: <strong>{title}</strong>\n })}\n </p>\n ),\n dataTestId: \"cms.content-form.header.delete-dialog\"\n });\n\n const confirmDelete = useCallback((): void => {\n showConfirmation(async (): Promise<void> => {\n setLoading(true);\n const [uniqueId] = entry.id.split(\"#\");\n await deleteContentMutation({\n variables: { revision: uniqueId },\n update(cache, response) {\n if (!response.data) {\n showDialog(\"Missing response data on Delete Entry Mutation.\", {\n title: t`Could not delete content`\n });\n return;\n }\n const { error } = response.data.content;\n if (error) {\n showDialog(error.message, { title: t`Could not delete content` });\n return;\n }\n\n setLoading(false);\n removeEntryFromListCache(contentModel, cache, entry, listQueryVariables);\n\n showSnackbar(\n t`{title} was deleted successfully!`({ title: <strong>{title}</strong> })\n );\n history.push(`/cms/content-entries/${contentModel.modelId}`);\n }\n });\n\n setLoading(false);\n });\n }, [entry]);\n\n if (!canDelete(entry, \"cms.contentEntry\")) {\n return null;\n }\n\n return (\n <Menu\n className={menuStyles}\n handle={\n <IconButton\n icon={<MoreVerticalIcon />}\n data-testid={\"cms.content-form.header.more-options\"}\n />\n }\n >\n <MenuItem\n onClick={confirmDelete}\n disabled={!entry.id || loading}\n data-testid={\"cms.content-form.header.delete\"}\n >\n <ListItemGraphic>\n <Icon icon={<DeleteIcon />} />\n </ListItemGraphic>\n Delete\n </MenuItem>\n </Menu>\n );\n};\n\nexport default ContentFormOptionsMenu;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-headless-cms",
|
|
3
|
-
"version": "5.25.0-beta.
|
|
3
|
+
"version": "5.25.0-beta.6",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,19 +26,19 @@
|
|
|
26
26
|
"@fortawesome/react-fontawesome": "0.1.18",
|
|
27
27
|
"@svgr/webpack": "6.2.1",
|
|
28
28
|
"@types/react": "16.14.2",
|
|
29
|
-
"@webiny/app": "5.25.0-beta.
|
|
30
|
-
"@webiny/app-admin": "5.25.0-beta.
|
|
31
|
-
"@webiny/app-graphql-playground": "5.25.0-beta.
|
|
32
|
-
"@webiny/app-i18n": "5.25.0-beta.
|
|
33
|
-
"@webiny/app-plugin-admin-welcome-screen": "5.25.0-beta.
|
|
34
|
-
"@webiny/app-security": "5.25.0-beta.
|
|
35
|
-
"@webiny/error": "5.25.0-beta.
|
|
36
|
-
"@webiny/form": "5.25.0-beta.
|
|
37
|
-
"@webiny/plugins": "5.25.0-beta.
|
|
38
|
-
"@webiny/react-router": "5.25.0-beta.
|
|
39
|
-
"@webiny/ui": "5.25.0-beta.
|
|
40
|
-
"@webiny/utils": "5.25.0-beta.
|
|
41
|
-
"@webiny/validation": "5.25.0-beta.
|
|
29
|
+
"@webiny/app": "5.25.0-beta.6",
|
|
30
|
+
"@webiny/app-admin": "5.25.0-beta.6",
|
|
31
|
+
"@webiny/app-graphql-playground": "5.25.0-beta.6",
|
|
32
|
+
"@webiny/app-i18n": "5.25.0-beta.6",
|
|
33
|
+
"@webiny/app-plugin-admin-welcome-screen": "5.25.0-beta.6",
|
|
34
|
+
"@webiny/app-security": "5.25.0-beta.6",
|
|
35
|
+
"@webiny/error": "5.25.0-beta.6",
|
|
36
|
+
"@webiny/form": "5.25.0-beta.6",
|
|
37
|
+
"@webiny/plugins": "5.25.0-beta.6",
|
|
38
|
+
"@webiny/react-router": "5.25.0-beta.6",
|
|
39
|
+
"@webiny/ui": "5.25.0-beta.6",
|
|
40
|
+
"@webiny/utils": "5.25.0-beta.6",
|
|
41
|
+
"@webiny/validation": "5.25.0-beta.6",
|
|
42
42
|
"apollo-cache": "1.3.5",
|
|
43
43
|
"apollo-client": "2.6.10",
|
|
44
44
|
"apollo-link": "1.2.14",
|
|
@@ -72,8 +72,8 @@
|
|
|
72
72
|
"@babel/preset-env": "^7.16.4",
|
|
73
73
|
"@babel/preset-react": "^7.16.0",
|
|
74
74
|
"@babel/preset-typescript": "^7.16.0",
|
|
75
|
-
"@webiny/cli": "^5.25.0-beta.
|
|
76
|
-
"@webiny/project-utils": "^5.25.0-beta.
|
|
75
|
+
"@webiny/cli": "^5.25.0-beta.6",
|
|
76
|
+
"@webiny/project-utils": "^5.25.0-beta.6",
|
|
77
77
|
"babel-plugin-emotion": "^9.2.8",
|
|
78
78
|
"babel-plugin-lodash": "^3.3.4",
|
|
79
79
|
"babel-plugin-module-resolver": "^4.1.0",
|
|
@@ -105,5 +105,5 @@
|
|
|
105
105
|
]
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
|
-
"gitHead": "
|
|
108
|
+
"gitHead": "a208508363613ea3cb7540d18bb9b2f2250a8466"
|
|
109
109
|
}
|