@webiny/app-headless-cms 5.25.0-beta.2 → 5.25.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/admin/components/ContentEntryForm/ContentEntryForm.js +43 -7
  2. package/admin/components/ContentEntryForm/ContentEntryForm.js.map +1 -1
  3. package/admin/components/ContentEntryForm/useContentEntryForm.d.ts +1 -1
  4. package/admin/components/ContentEntryForm/useContentEntryForm.js +9 -3
  5. package/admin/components/ContentEntryForm/useContentEntryForm.js.map +1 -1
  6. package/admin/graphql/contentEntries.js.map +1 -1
  7. package/admin/icons/draft.svg +3 -0
  8. package/admin/icons/published.svg +3 -0
  9. package/admin/icons/unpublished.svg +3 -0
  10. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
  11. package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
  12. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +29 -3
  13. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
  14. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js +5 -3
  15. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js.map +1 -1
  16. package/admin/plugins/fieldRenderers/ref/components/EntryStatus.d.ts +10 -0
  17. package/admin/plugins/fieldRenderers/ref/components/EntryStatus.js +50 -0
  18. package/admin/plugins/fieldRenderers/ref/components/EntryStatus.js.map +1 -0
  19. package/admin/plugins/fieldRenderers/ref/components/graphql.d.ts +19 -11
  20. package/admin/plugins/fieldRenderers/ref/components/graphql.js +5 -6
  21. package/admin/plugins/fieldRenderers/ref/components/graphql.js.map +1 -1
  22. package/admin/plugins/fieldRenderers/ref/components/helpers.d.ts +6 -0
  23. package/admin/plugins/fieldRenderers/ref/components/helpers.js +41 -0
  24. package/admin/plugins/fieldRenderers/ref/components/helpers.js.map +1 -0
  25. package/admin/plugins/fieldRenderers/ref/components/renderItem.d.ts +4 -2
  26. package/admin/plugins/fieldRenderers/ref/components/renderItem.js +15 -0
  27. package/admin/plugins/fieldRenderers/ref/components/renderItem.js.map +1 -1
  28. package/admin/plugins/fieldRenderers/ref/components/types.d.ts +26 -0
  29. package/admin/plugins/fieldRenderers/ref/components/types.js +1 -0
  30. package/admin/plugins/fieldRenderers/ref/components/types.js.map +1 -0
  31. package/admin/plugins/fieldRenderers/ref/components/useReference.d.ts +1 -1
  32. package/admin/plugins/fieldRenderers/ref/components/useReference.js +61 -66
  33. package/admin/plugins/fieldRenderers/ref/components/useReference.js.map +1 -1
  34. package/admin/plugins/fieldRenderers/ref/components/useReferences.d.ts +4 -10
  35. package/admin/plugins/fieldRenderers/ref/components/useReferences.js +52 -40
  36. package/admin/plugins/fieldRenderers/ref/components/useReferences.js.map +1 -1
  37. package/admin/plugins/index.d.ts +1 -1
  38. package/admin/views/contentEntries/ContentEntries.js +11 -6
  39. package/admin/views/contentEntries/ContentEntries.js.map +1 -1
  40. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js +2 -2
  41. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js.map +1 -1
  42. package/admin/views/contentModels/CloneContentModelDialog.js +55 -40
  43. package/admin/views/contentModels/CloneContentModelDialog.js.map +1 -1
  44. package/package.json +17 -17
  45. package/types.d.ts +3 -8
  46. package/admin/plugins/fieldRenderers/ref/components/getOptions.d.ts +0 -16
  47. package/admin/plugins/fieldRenderers/ref/components/getOptions.js +0 -21
  48. package/admin/plugins/fieldRenderers/ref/components/getOptions.js.map +0 -1
@@ -1,21 +1,15 @@
1
1
  import { CmsEditorField } from "../../../../../types";
2
2
  import { BindComponentRenderProp } from "@webiny/form";
3
- export interface ReferencedCmsEntry {
4
- id: string;
5
- modelId: string;
6
- modelName: string;
7
- published: boolean;
8
- name: string;
9
- }
3
+ import { OptionItem } from "./types";
10
4
  interface UseReferencesParams {
11
5
  bind: BindComponentRenderProp;
12
6
  field: CmsEditorField;
13
7
  }
14
8
  export declare const useReferences: ({ bind, field }: UseReferencesParams) => {
15
- onChange: (values: ReferencedCmsEntry[]) => void;
9
+ onChange: (values: OptionItem[]) => void;
16
10
  loading: boolean;
17
11
  setSearch: import("react").Dispatch<import("react").SetStateAction<string>>;
18
- entries: ReferencedCmsEntry[];
19
- options: import("./getOptions").OptionItem[];
12
+ entries: OptionItem[];
13
+ options: OptionItem[];
20
14
  };
21
15
  export {};
@@ -1,25 +1,15 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
1
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _regeneratorRuntime from "@babel/runtime/regenerator";
5
5
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
6
6
  import { useApolloClient } from "../../../../hooks";
7
- import * as GQL from "./graphql";
8
- import { getOptions } from "./getOptions";
9
-
10
- function distinctBy(key, array) {
11
- var keys = array.map(function (value) {
12
- return value[key];
13
- });
14
- return array.filter(function (value, index) {
15
- return keys.indexOf(value[key]) === index;
16
- });
17
- }
18
-
7
+ import { SEARCH_CONTENT_ENTRIES, GET_CONTENT_ENTRIES } from "./graphql";
8
+ import { convertReferenceEntriesToOptionCollection, convertReferenceEntryToOption } from "./helpers";
19
9
  export var useReferences = function useReferences(_ref) {
20
10
  var bind = _ref.bind,
21
11
  field = _ref.field;
22
- var allEntries = useRef([]);
12
+ var allEntries = useRef({});
23
13
  var client = useApolloClient();
24
14
 
25
15
  var _useState = useState(""),
@@ -32,7 +22,7 @@ export var useReferences = function useReferences(_ref) {
32
22
  loading = _useState4[0],
33
23
  setLoading = _useState4[1];
34
24
 
35
- var _useState5 = useState([]),
25
+ var _useState5 = useState({}),
36
26
  _useState6 = _slicedToArray(_useState5, 2),
37
27
  entries = _useState6[0],
38
28
  setEntries = _useState6[1];
@@ -53,7 +43,7 @@ export var useReferences = function useReferences(_ref) {
53
43
 
54
44
  var searchEntries = /*#__PURE__*/function () {
55
45
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
56
- var _yield$client$query, data;
46
+ var _yield$client$query, data, collection;
57
47
 
58
48
  return _regeneratorRuntime.wrap(function _callee$(_context) {
59
49
  while (1) {
@@ -70,7 +60,7 @@ export var useReferences = function useReferences(_ref) {
70
60
  setLoading(true);
71
61
  _context.next = 5;
72
62
  return client.query({
73
- query: GQL.SEARCH_CONTENT_ENTRIES,
63
+ query: SEARCH_CONTENT_ENTRIES,
74
64
  variables: {
75
65
  modelIds: models.map(function (m) {
76
66
  return m.modelId;
@@ -83,10 +73,11 @@ export var useReferences = function useReferences(_ref) {
83
73
  _yield$client$query = _context.sent;
84
74
  data = _yield$client$query.data;
85
75
  setLoading(false);
86
- allEntries.current = distinctBy("id", [].concat(_toConsumableArray(allEntries.current), _toConsumableArray(data.content.data)));
87
- setEntries(data.content.data);
76
+ collection = convertReferenceEntriesToOptionCollection(data.content.data);
77
+ allEntries.current = _objectSpread(_objectSpread({}, allEntries.current), collection);
78
+ setEntries(collection);
88
79
 
89
- case 10:
80
+ case 11:
90
81
  case "end":
91
82
  return _context.stop();
92
83
  }
@@ -104,12 +95,11 @@ export var useReferences = function useReferences(_ref) {
104
95
  }, [search]);
105
96
  useEffect(function () {
106
97
  client.query({
107
- query: GQL.SEARCH_CONTENT_ENTRIES,
98
+ query: SEARCH_CONTENT_ENTRIES,
108
99
  variables: {
109
100
  modelIds: models.map(function (m) {
110
101
  return m.modelId;
111
102
  }),
112
- query: "__latest__",
113
103
  limit: 10
114
104
  },
115
105
 
@@ -120,34 +110,56 @@ export var useReferences = function useReferences(_ref) {
120
110
  fetchPolicy: "network-only"
121
111
  }).then(function (_ref3) {
122
112
  var data = _ref3.data;
123
- setLatestEntries(data.content.data);
124
- allEntries.current = _toConsumableArray(data.content.data);
113
+ var collection = convertReferenceEntriesToOptionCollection(data.content.data);
114
+ setLatestEntries(Object.values(collection));
115
+ allEntries.current = _objectSpread({}, collection);
125
116
  });
126
117
  }, [modelsHash]);
127
118
  useEffect(function () {
128
- if (!values || !values.length) {
119
+ if (!values || values.length == 0) {
129
120
  return;
130
121
  }
131
122
 
132
123
  setLoading(true);
133
124
  client.query({
134
- query: GQL.GET_CONTENT_ENTRIES,
125
+ query: GET_CONTENT_ENTRIES,
135
126
  variables: {
136
- entries: values
127
+ /**
128
+ * We need make sure nothing else other than modelId and id is passed to entries variable.
129
+ */
130
+ entries: values.map(function (value) {
131
+ return {
132
+ modelId: value.modelId,
133
+ id: value.id
134
+ };
135
+ })
137
136
  }
138
137
  }).then(function (res) {
139
138
  setLoading(false);
140
- var entries = res.data.content.data; // Calculate a couple of props for the Autocomplete component.
141
-
142
- setValueEntries(entries.map(function (entry) {
143
- return {
144
- id: entry.id,
145
- modelId: entry.model.modelId,
146
- modelName: entry.model.name,
147
- published: entry.status === "published",
148
- name: entry.title
149
- };
150
- }));
139
+ var latest = (res.data.latest.data || []).reduce(function (collection, item) {
140
+ collection[item.entryId] = item;
141
+ return collection;
142
+ }, {});
143
+ var entries = (res.data.published.data || []).reduce(function (collection, item) {
144
+ var entryId = item.entryId;
145
+ var existingItem = latest[entryId];
146
+
147
+ if (existingItem) {
148
+ collection[entryId] = _objectSpread(_objectSpread({}, existingItem), {}, {
149
+ published: {
150
+ id: item.id,
151
+ entryId: item.entryId,
152
+ title: item.title
153
+ }
154
+ });
155
+ return collection;
156
+ }
157
+
158
+ collection[entryId] = item;
159
+ return collection;
160
+ }, latest); // Calculate a couple of props for the Autocomplete component.
161
+
162
+ setValueEntries(Object.values(entries).map(convertReferenceEntryToOption));
151
163
  });
152
164
  }, []);
153
165
  /**
@@ -168,11 +180,11 @@ export var useReferences = function useReferences(_ref) {
168
180
  }, []); // Format options for the Autocomplete component.
169
181
 
170
182
  var options = useMemo(function () {
171
- return getOptions(entries);
183
+ return Object.values(entries);
172
184
  }, [entries]); // Format default options for the Autocomplete component.
173
185
 
174
186
  var defaultOptions = useMemo(function () {
175
- return getOptions(latestEntries);
187
+ return Object.values(latestEntries);
176
188
  }, [latestEntries]);
177
189
  return {
178
190
  onChange: onChange,
@@ -1 +1 @@
1
- {"version":3,"sources":["useReferences.ts"],"names":["useCallback","useEffect","useMemo","useRef","useState","useApolloClient","GQL","getOptions","distinctBy","key","array","keys","map","value","filter","index","indexOf","useReferences","bind","field","allEntries","client","search","setSearch","loading","setLoading","entries","setEntries","latestEntries","setLatestEntries","valueEntries","setValueEntries","models","settings","modelsHash","join","values","searchEntries","query","SEARCH_CONTENT_ENTRIES","variables","modelIds","m","modelId","data","current","content","limit","fetchPolicy","then","length","GET_CONTENT_ENTRIES","res","entry","id","model","modelName","name","published","status","title","onChange","item","options","defaultOptions"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useApolloClient } from \"~/admin/hooks\";\nimport * as GQL from \"./graphql\";\nimport { getOptions } from \"./getOptions\";\nimport { CmsEditorField, CmsLatestContentEntry, CmsModel } from \"~/types\";\nimport {\n CmsEntrySearchQueryResponse,\n CmsEntrySearchQueryVariables,\n CmsEntryGetListResponse,\n CmsEntryGetListVariables,\n CmsEntryGetEntryVariable\n} from \"./graphql\";\nimport { BindComponentRenderProp } from \"@webiny/form\";\n\nexport interface ReferencedCmsEntry {\n id: string;\n modelId: string;\n modelName: string;\n published: boolean;\n name: string;\n}\n\nfunction distinctBy(\n key: keyof CmsLatestContentEntry,\n array: CmsLatestContentEntry[]\n): CmsLatestContentEntry[] {\n const keys = array.map(value => value[key]);\n return array.filter((value, index) => keys.indexOf(value[key]) === index);\n}\n\ninterface UseReferencesParams {\n bind: BindComponentRenderProp;\n field: CmsEditorField;\n}\nexport const useReferences = ({ bind, field }: UseReferencesParams) => {\n const allEntries = useRef<CmsLatestContentEntry[]>([]);\n const client = useApolloClient();\n const [search, setSearch] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n const [entries, setEntries] = useState<CmsLatestContentEntry[]>([]);\n const [latestEntries, setLatestEntries] = useState<CmsLatestContentEntry[]>([]);\n const [valueEntries, setValueEntries] = useState<ReferencedCmsEntry[]>([]);\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: GQL.SEARCH_CONTENT_ENTRIES,\n variables: { modelIds: models.map(m => m.modelId), query: search }\n });\n setLoading(false);\n\n allEntries.current = distinctBy(\"id\", [...allEntries.current, ...data.content.data]);\n setEntries(data.content.data);\n };\n\n useEffect(() => {\n searchEntries();\n }, [search]);\n\n useEffect(() => {\n client\n .query<CmsEntrySearchQueryResponse, CmsEntrySearchQueryVariables>({\n query: GQL.SEARCH_CONTENT_ENTRIES,\n variables: {\n modelIds: models.map(m => m.modelId),\n query: \"__latest__\",\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 setLatestEntries(data.content.data);\n allEntries.current = [...data.content.data];\n });\n }, [modelsHash]);\n\n useEffect(() => {\n if (!values || !values.length) {\n return;\n }\n\n setLoading(true);\n\n client\n .query<CmsEntryGetListResponse, CmsEntryGetListVariables>({\n query: GQL.GET_CONTENT_ENTRIES,\n variables: { entries: values }\n })\n .then(res => {\n setLoading(false);\n const entries = res.data.content.data;\n\n // Calculate a couple of props for the Autocomplete component.\n setValueEntries(\n entries.map(entry => ({\n id: entry.id,\n modelId: entry.model.modelId,\n modelName: entry.model.name,\n published: entry.status === \"published\",\n name: entry.title\n }))\n );\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: ReferencedCmsEntry[]) => {\n setSearch(\"\");\n setValueEntries(values);\n\n // Update parent form\n bind.onChange(values.map(item => ({ modelId: item.modelId, id: item.id })));\n }, []);\n\n // Format options for the Autocomplete component.\n const options = useMemo(() => getOptions(entries), [entries]);\n\n // Format default options for the Autocomplete component.\n const defaultOptions = useMemo(() => getOptions(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","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 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,4 +1,4 @@
1
- declare const _default: () => (import("@webiny/app/types").CacheGetObjectIdPlugin | import("@webiny/app-admin/types").AdminInstallationPlugin | import("@webiny/app-admin/types").AdminAppPermissionRendererPlugin | import("../../types").CmsEditorFormSettingsPlugin | import("../../types").CmsIconsPlugin | import("../../types").CmsFieldValueTransformer[] | import("@webiny/app/types").RoutePlugin[] | import("../../types").CmsContentDetailsPlugin[] | {
1
+ declare const _default: () => (import("../../types").CmsEditorFormSettingsPlugin | import("../../types").CmsIconsPlugin | import("../../types").CmsFieldValueTransformer[] | import("@webiny/app/types").CacheGetObjectIdPlugin | import("@webiny/app/types").RoutePlugin[] | import("@webiny/app-admin/types").AdminInstallationPlugin | import("@webiny/app-admin/types").AdminAppPermissionRendererPlugin | import("../../types").CmsContentDetailsPlugin[] | {
2
2
  name: string;
3
3
  type: string;
4
4
  render(): JSX.Element;
@@ -22,7 +22,9 @@ var ContentEntries = function ContentEntries() {
22
22
  var _useRouter = useRouter(),
23
23
  params = _useRouter.params;
24
24
 
25
- var _useState = useState(),
25
+ var modelId = params ? params["modelId"] : null;
26
+
27
+ var _useState = useState(null),
26
28
  _useState2 = _slicedToArray(_useState, 2),
27
29
  contentModel = _useState2[0],
28
30
  setContentModel = _useState2[1];
@@ -30,12 +32,10 @@ var ContentEntries = function ContentEntries() {
30
32
  var _useRouter2 = useRouter(),
31
33
  history = _useRouter2.history;
32
34
 
33
- var modelId = params ? params["modelId"] : null;
34
-
35
35
  var _useSnackbar = useSnackbar(),
36
36
  showSnackbar = _useSnackbar.showSnackbar;
37
37
 
38
- useQuery(GET_CONTENT_MODEL, {
38
+ var _useQuery = useQuery(GET_CONTENT_MODEL, {
39
39
  skip: !modelId,
40
40
  variables: {
41
41
  modelId: modelId
@@ -52,12 +52,17 @@ var ContentEntries = function ContentEntries() {
52
52
  modelId: modelId
53
53
  }));
54
54
  }
55
- });
55
+ }),
56
+ loading = _useQuery.loading,
57
+ error = _useQuery.error;
56
58
 
57
- if (!contentModel) {
59
+ if (!contentModel || loading) {
58
60
  return /*#__PURE__*/React.createElement(CircularProgress, {
59
61
  label: t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["Loading content model..."])))
60
62
  });
63
+ } else if (error) {
64
+ showSnackbar(error.message);
65
+ return null;
61
66
  }
62
67
 
63
68
  return /*#__PURE__*/React.createElement(ContentEntriesProvider, {
@@ -1 +1 @@
1
- {"version":3,"sources":["ContentEntries.tsx"],"names":["React","useState","get","useRouter","useSnackbar","i18n","CircularProgress","LeftPanel","RightPanel","SplitView","Provider","ContentEntriesProvider","GET_CONTENT_MODEL","useQuery","ContentEntriesList","ContentEntry","ContentEntryProvider","t","ns","ContentEntries","params","contentModel","setContentModel","history","modelId","showSnackbar","skip","variables","onCompleted","data","push"],"mappings":";;;;;AAAA,OAAOA,KAAP,IAAgBC,QAAhB,QAAgC,OAAhC;AACA,OAAOC,GAAP,MAAgB,YAAhB;AACA,SAASC,SAAT,QAA0B,sBAA1B;AACA,SAASC,WAAT,QAA4B,qCAA5B;AACA,SAASC,IAAT,QAAqB,kBAArB;AACA,SAASC,gBAAT,QAAiC,qBAAjC;AACA,SAASC,SAAT,EAAoBC,UAApB,EAAgCC,SAAhC,QAAiD,wCAAjD;AACA,SAASC,QAAQ,IAAIC,sBAArB;AACA,SACIC,iBADJ;AAKA,SAASC,QAAT;AACA,OAAOC,kBAAP;AACA,SAASC,YAAT;AACA,SAASL,QAAQ,IAAIM,oBAArB;AAGA,IAAMC,CAAC,GAAGZ,IAAI,CAACa,EAAL,CAAQ,wCAAR,CAAV;;AAEA,IAAMC,cAAwB,GAAG,SAA3BA,cAA2B,GAAM;AACnC,mBAAmBhB,SAAS,EAA5B;AAAA,MAAQiB,MAAR,cAAQA,MAAR;;AACA,kBAAwCnB,QAAQ,EAAhD;AAAA;AAAA,MAAOoB,YAAP;AAAA,MAAqBC,eAArB;;AACA,oBAAoBnB,SAAS,EAA7B;AAAA,MAAQoB,OAAR,eAAQA,OAAR;;AACA,MAAMC,OAAO,GAAGJ,MAAM,GAAGA,MAAM,CAAC,SAAD,CAAT,GAAuB,IAA7C;;AACA,qBAAyBhB,WAAW,EAApC;AAAA,MAAQqB,YAAR,gBAAQA,YAAR;;AAEAZ,EAAAA,QAAQ,CAAsDD,iBAAtD,EAAyE;AAC7Ec,IAAAA,IAAI,EAAE,CAACF,OADsE;AAE7EG,IAAAA,SAAS,EAAE;AAAEH,MAAAA,OAAO,EAAPA;AAAF,KAFkE;AAG7EI,IAAAA,WAAW,EAAE,qBAAAC,IAAI,EAAI;AACjB,UAAMR,YAAY,GAAGnB,GAAG,CAAC2B,IAAD,EAAO,sBAAP,EAA+B,IAA/B,CAAxB;;AACA,UAAIR,YAAJ,EAAkB;AACd,eAAOC,eAAe,CAACD,YAAD,CAAtB;AACH;;AAEDE,MAAAA,OAAO,CAACO,IAAR,CAAa,qBAAb;AACAL,MAAAA,YAAY,CACRR,CAAC,mIAAD,CAAgE;AAC5DO,QAAAA,OAAO,EAAPA;AAD4D,OAAhE,CADQ,CAAZ;AAKH;AAf4E,GAAzE,CAAR;;AAkBA,MAAI,CAACH,YAAL,EAAmB;AACf,wBAAO,oBAAC,gBAAD;AAAkB,MAAA,KAAK,EAAEJ,CAAF;AAAvB,MAAP;AACH;;AAED,sBACI,oBAAC,sBAAD;AAAwB,IAAA,YAAY,EAAEI,YAAtC;AAAoD,IAAA,GAAG,EAAEA,YAAY,CAACG;AAAtE,kBACI,oBAAC,SAAD,qBACI,oBAAC,SAAD;AAAW,IAAA,IAAI,EAAE;AAAjB,kBACI,oBAAC,kBAAD,OADJ,CADJ,eAII,oBAAC,UAAD;AAAY,IAAA,IAAI,EAAE;AAAlB,kBACI,oBAAC,oBAAD,qBACI,oBAAC,YAAD,OADJ,CADJ,CAJJ,CADJ,CADJ;AAcH,CA3CD;;AA6CA,eAAeL,cAAf","sourcesContent":["import React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { LeftPanel, RightPanel, SplitView } from \"@webiny/app-admin/components/SplitView\";\nimport { Provider as ContentEntriesProvider } from \"~/admin/views/contentEntries/ContentEntriesContext\";\nimport {\n GET_CONTENT_MODEL,\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables\n} from \"~/admin/graphql/contentModels\";\nimport { useQuery } from \"../../hooks\";\nimport ContentEntriesList from \"~/admin/views/contentEntries/ContentEntriesList\";\nimport { ContentEntry } from \"~/admin/views/contentEntries/ContentEntry\";\nimport { Provider as ContentEntryProvider } from \"./ContentEntry/ContentEntryContext\";\nimport { CmsModel } from \"~/types\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/content-entries\");\n\nconst ContentEntries: React.FC = () => {\n const { params } = useRouter();\n const [contentModel, setContentModel] = useState<CmsModel>();\n const { history } = useRouter();\n const modelId = params ? params[\"modelId\"] : null;\n const { showSnackbar } = useSnackbar();\n\n useQuery<GetCmsModelQueryResponse, GetCmsModelQueryVariables>(GET_CONTENT_MODEL, {\n skip: !modelId,\n variables: { modelId },\n onCompleted: data => {\n const contentModel = get(data, \"getContentModel.data\", null);\n if (contentModel) {\n return setContentModel(contentModel);\n }\n\n history.push(\"/cms/content-models\");\n showSnackbar(\n t`Could not load content for model \"{modelId}\". Redirecting...`({\n modelId\n })\n );\n }\n });\n\n if (!contentModel) {\n return <CircularProgress label={t`Loading content model...`} />;\n }\n\n return (\n <ContentEntriesProvider contentModel={contentModel} key={contentModel.modelId}>\n <SplitView>\n <LeftPanel span={4}>\n <ContentEntriesList />\n </LeftPanel>\n <RightPanel span={8}>\n <ContentEntryProvider>\n <ContentEntry />\n </ContentEntryProvider>\n </RightPanel>\n </SplitView>\n </ContentEntriesProvider>\n );\n};\n\nexport default ContentEntries;\n"]}
1
+ {"version":3,"sources":["ContentEntries.tsx"],"names":["React","useState","get","useRouter","useSnackbar","i18n","CircularProgress","LeftPanel","RightPanel","SplitView","Provider","ContentEntriesProvider","GET_CONTENT_MODEL","useQuery","ContentEntriesList","ContentEntry","ContentEntryProvider","t","ns","ContentEntries","params","modelId","contentModel","setContentModel","history","showSnackbar","skip","variables","onCompleted","data","push","loading","error","message"],"mappings":";;;;;AAAA,OAAOA,KAAP,IAAgBC,QAAhB,QAAgC,OAAhC;AACA,OAAOC,GAAP,MAAgB,YAAhB;AACA,SAASC,SAAT,QAA0B,sBAA1B;AACA,SAASC,WAAT,QAA4B,qCAA5B;AACA,SAASC,IAAT,QAAqB,kBAArB;AACA,SAASC,gBAAT,QAAiC,qBAAjC;AACA,SAASC,SAAT,EAAoBC,UAApB,EAAgCC,SAAhC,QAAiD,wCAAjD;AACA,SAASC,QAAQ,IAAIC,sBAArB;AACA,SACIC,iBADJ;AAKA,SAASC,QAAT;AACA,OAAOC,kBAAP;AACA,SAASC,YAAT;AACA,SAASL,QAAQ,IAAIM,oBAArB;AAGA,IAAMC,CAAC,GAAGZ,IAAI,CAACa,EAAL,CAAQ,wCAAR,CAAV;;AAEA,IAAMC,cAAwB,GAAG,SAA3BA,cAA2B,GAAM;AACnC,mBAAmBhB,SAAS,EAA5B;AAAA,MAAQiB,MAAR,cAAQA,MAAR;;AACA,MAAMC,OAAO,GAAGD,MAAM,GAAGA,MAAM,CAAC,SAAD,CAAT,GAAuB,IAA7C;;AACA,kBAAwCnB,QAAQ,CAAkB,IAAlB,CAAhD;AAAA;AAAA,MAAOqB,YAAP;AAAA,MAAqBC,eAArB;;AACA,oBAAoBpB,SAAS,EAA7B;AAAA,MAAQqB,OAAR,eAAQA,OAAR;;AACA,qBAAyBpB,WAAW,EAApC;AAAA,MAAQqB,YAAR,gBAAQA,YAAR;;AAEA,kBAA2BZ,QAAQ,CAC/BD,iBAD+B,EAE/B;AACIc,IAAAA,IAAI,EAAE,CAACL,OADX;AAEIM,IAAAA,SAAS,EAAE;AACPN,MAAAA,OAAO,EAAPA;AADO,KAFf;AAKIO,IAAAA,WAAW,EAAE,qBAAAC,IAAI,EAAI;AACjB,UAAMP,YAAY,GAAGpB,GAAG,CAAC2B,IAAD,EAAO,sBAAP,EAA+B,IAA/B,CAAxB;;AACA,UAAIP,YAAJ,EAAkB;AACd,eAAOC,eAAe,CAACD,YAAD,CAAtB;AACH;;AAEDE,MAAAA,OAAO,CAACM,IAAR,CAAa,qBAAb;AACAL,MAAAA,YAAY,CACRR,CAAC,mIAAD,CAAgE;AAC5DI,QAAAA,OAAO,EAAPA;AAD4D,OAAhE,CADQ,CAAZ;AAKH;AAjBL,GAF+B,CAAnC;AAAA,MAAQU,OAAR,aAAQA,OAAR;AAAA,MAAiBC,KAAjB,aAAiBA,KAAjB;;AAuBA,MAAI,CAACV,YAAD,IAAiBS,OAArB,EAA8B;AAC1B,wBAAO,oBAAC,gBAAD;AAAkB,MAAA,KAAK,EAAEd,CAAF;AAAvB,MAAP;AACH,GAFD,MAEO,IAAIe,KAAJ,EAAW;AACdP,IAAAA,YAAY,CAACO,KAAK,CAACC,OAAP,CAAZ;AACA,WAAO,IAAP;AACH;;AAED,sBACI,oBAAC,sBAAD;AAAwB,IAAA,YAAY,EAAEX,YAAtC;AAAoD,IAAA,GAAG,EAAEA,YAAY,CAACD;AAAtE,kBACI,oBAAC,SAAD,qBACI,oBAAC,SAAD;AAAW,IAAA,IAAI,EAAE;AAAjB,kBACI,oBAAC,kBAAD,OADJ,CADJ,eAII,oBAAC,UAAD;AAAY,IAAA,IAAI,EAAE;AAAlB,kBACI,oBAAC,oBAAD,qBACI,oBAAC,YAAD,OADJ,CADJ,CAJJ,CADJ,CADJ;AAcH,CAnDD;;AAqDA,eAAeF,cAAf","sourcesContent":["import React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { LeftPanel, RightPanel, SplitView } from \"@webiny/app-admin/components/SplitView\";\nimport { Provider as ContentEntriesProvider } from \"~/admin/views/contentEntries/ContentEntriesContext\";\nimport {\n GET_CONTENT_MODEL,\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables\n} from \"~/admin/graphql/contentModels\";\nimport { useQuery } from \"../../hooks\";\nimport ContentEntriesList from \"~/admin/views/contentEntries/ContentEntriesList\";\nimport { ContentEntry } from \"~/admin/views/contentEntries/ContentEntry\";\nimport { Provider as ContentEntryProvider } from \"./ContentEntry/ContentEntryContext\";\nimport { CmsModel } from \"~/types\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/content-entries\");\n\nconst ContentEntries: React.FC = () => {\n const { params } = useRouter();\n const modelId = params ? params[\"modelId\"] : null;\n const [contentModel, setContentModel] = useState<CmsModel | null>(null);\n const { history } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const { loading, error } = useQuery<GetCmsModelQueryResponse, GetCmsModelQueryVariables>(\n GET_CONTENT_MODEL,\n {\n skip: !modelId,\n variables: {\n modelId\n },\n onCompleted: data => {\n const contentModel = get(data, \"getContentModel.data\", null);\n if (contentModel) {\n return setContentModel(contentModel);\n }\n\n history.push(\"/cms/content-models\");\n showSnackbar(\n t`Could not load content for model \"{modelId}\". Redirecting...`({\n modelId\n })\n );\n }\n }\n );\n\n if (!contentModel || loading) {\n return <CircularProgress label={t`Loading content model...`} />;\n } else if (error) {\n showSnackbar(error.message);\n return null;\n }\n\n return (\n <ContentEntriesProvider contentModel={contentModel} key={contentModel.modelId}>\n <SplitView>\n <LeftPanel span={4}>\n <ContentEntriesList />\n </LeftPanel>\n <RightPanel span={8}>\n <ContentEntryProvider>\n <ContentEntry />\n </ContentEntryProvider>\n </RightPanel>\n </SplitView>\n </ContentEntriesProvider>\n );\n};\n\nexport default ContentEntries;\n"]}
@@ -171,9 +171,9 @@ export var Provider = function Provider(_ref) {
171
171
  }, [contentModel.modelId]);
172
172
  var getEntry = useQuery(READ_CONTENT, {
173
173
  variables: {
174
- revision: contentId ? decodeURIComponent(contentId) : ""
174
+ revision: revisionId || ""
175
175
  },
176
- skip: !contentId,
176
+ skip: !revisionId,
177
177
  onCompleted: function onCompleted(data) {
178
178
  if (!data) {
179
179
  return;
@@ -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 = 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: contentId ? decodeURIComponent(contentId) : \"\"\n },\n skip: !contentId,\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":";;;AAAA,OAAOA,KAAP,IACIC,MADJ,EAEIC,QAFJ,EAGIC,WAHJ,EAIIC,OAJJ,QAQO,OARP;AASA,OAAOC,OAAP,MAAoB,gBAApB;AACA,OAAOC,GAAP,MAAgB,YAAhB;AACA,SAASC,SAAT,QAA0B,sBAA1B;AACA,SAASC,WAAT,QAA4B,qCAA5B;AACA,SAASC,QAAT;AAEA,SAASC,iBAAT;AAGA,SAASC,eAAT,QAAgC,eAAhC;AACA,SAKIC,eALJ,EAMIC,oBANJ;AA4BA,OAAO,IAAMC,OAAO,gBAAGd,KAAK,CAACe,aAAN,CAAyC;AAC5DC,EAAAA,WAAW,EAAE,uBAAM;AACf,WAAO,KAAK,CAAZ;AACH,GAH2D;AAI5DC,EAAAA,KAAK,EAAE,IAJqD;AAK5DC,EAAAA,IAAI,EAAE;AACFC,IAAAA,OAAO,EAAE;AACLC,MAAAA,MAAM;AAAA,+EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,mDACG,IADH;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA;AADD;AADP,GALsD;AAY5DC,EAAAA,SAAS,EAAE,KAZiD;AAa5DC,EAAAA,aAAa,EAAE,KAb6C;AAc5DC,EAAAA,IAAI,EAAE;AACFJ,IAAAA,OAAO,EAAE;AADP,GAdsD;AAiB5DK,EAAAA,UAAU,EAAE,sBAAM;AACd,WAAO,KAAK,CAAZ;AACH,GAnB2D;AAoB5DC,EAAAA,cAAc,EAAE,0BAAM;AAClB,WAAO,KAAK,CAAZ;AACH,GAtB2D;AAuB5DC,EAAAA,SAAS,EAAE,EAvBiD;AAwB5DC,EAAAA,UAAU,EAAE,sBAAM;AACd,WAAO,KAAK,CAAZ;AACH,GA1B2D;AA2B5DC,EAAAA,OAAO,EAAE,KA3BmD;AA4B5DC,EAAAA,kBAAkB,EAAE,EA5BwC;AA6B5DC,EAAAA,qBAAqB,EAAE,iCAAM;AACzB,WAAO,KAAK,CAAZ;AACH,GA/B2D;AAgC5DC,EAAAA,YAAY,EAAE,IAhC8C;AAiC5DC,EAAAA,OAAO,EAAE,EAjCmD;AAkC5DC,EAAAA,UAAU,EAAE,sBAAM;AACd,WAAO,KAAK,CAAZ;AACH;AApC2D,CAAzC,CAAhB;AAgDP,OAAO,IAAMC,4BAA4B,GAAG,SAA/BA,4BAA+B,GAAoC;AAC5E,mBAAqB3B,SAAS,EAA9B;AAAA,MAAQ4B,QAAR,cAAQA,QAAR;;AACA,MAAMC,KAAK,GAAG,IAAIC,eAAJ,CAAoBF,QAAQ,CAACG,MAA7B,CAAd;;AAEA,MAAMC,UAAU,GAAG,SAAbA,UAAa,GAAe;AAC9B,WAAOH,KAAK,CAAC9B,GAAN,CAAU,KAAV,MAAqB,MAA5B;AACH,GAFD;;AAIA,MAAMkC,YAAY,GAAG,SAAfA,YAAe,GAAqB;AACtC,WAAOJ,KAAK,CAAC9B,GAAN,CAAU,IAAV,KAAmB,IAA1B;AACH,GAFD;;AAIA,SAAO;AACHkC,IAAAA,YAAY,EAAZA,YADG;AAEHD,IAAAA,UAAU,EAAVA;AAFG,GAAP;AAIH,CAhBM;AAkBP,OAAO,IAAME,QAAoD,GAAG,SAAvDA,QAAuD,OAI9D;AAAA,MAHFC,QAGE,QAHFA,QAGE;AAAA,MAFFH,UAEE,QAFFA,UAEE;AAAA,MADFC,YACE,QADFA,YACE;;AACF,2BACI9B,iBAAiB,EADrB;AAAA,MAAQqB,YAAR,sBAAQA,YAAR;AAAA,MAAsBV,SAAtB,sBAAsBA,SAAtB;AAAA,MAAiCQ,kBAAjC,sBAAiCA,kBAAjC;AAAA,MAAqDC,qBAArD,sBAAqDA,qBAArD;AAAA,MAA4EE,OAA5E,sBAA4EA,OAA5E;;AAGA,MAAMW,OAAO,GAAG1C,MAAM,CAA0B;AAC5CmB,IAAAA,MAAM;AAAA,8EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,kDACG,IADH;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA;AADsC,GAA1B,CAAtB;AAKA,MAAMwB,OAAO,GAAG3C,MAAM,CAAc,IAAd,CAAtB;;AACA,oBAAoBM,SAAS,EAA7B;AAAA,MAAQsC,OAAR,eAAQA,OAAR;;AACA,qBAAyBrC,WAAW,EAApC;AAAA,MAAQsC,YAAR,gBAAQA,YAAR;;AACA,kBAAgC5C,QAAQ,CAAC,KAAD,CAAxC;AAAA;AAAA,MAAO6C,SAAP;AAAA,MAAkBpB,UAAlB;;AAEA,MAAMqB,yBAAyB,GAAGd,4BAA4B,EAA9D;AAEA,MAAMe,QAAQ,GACV,OAAOV,UAAP,KAAsB,UAAtB,GAAmCA,UAAU,EAA7C,GAAkDS,yBAAyB,CAACT,UAA1B,EADtD;AAEA,MAAMW,SAAS,GACX,OAAOV,YAAP,KAAwB,UAAxB,GACMA,YAAY,EADlB,GAEMQ,yBAAyB,CAACR,YAA1B,EAHV;AAKA,MAAMW,UAAU,GAAGD,SAAS,GAAGE,kBAAkB,CAACF,SAAD,CAArB,GAAmC,IAA/D;AACA,MAAIG,OAAsB,GAAG,IAA7B;;AACA,MAAIF,UAAJ,EAAgB;AACZ,QAAMG,MAAM,GAAG3C,eAAe,CAACwC,UAAD,CAA9B;AACAE,IAAAA,OAAO,GAAGC,MAAM,GAAGA,MAAM,CAACC,EAAV,GAAe,IAA/B;AACH;;AAED,iBAAyBnD,OAAO,CAAC,YAAM;AACnC,WAAO;AACHoD,MAAAA,YAAY,EAAE5C,eAAe,CAACmB,YAAD;AAD1B,KAAP;AAGH,GAJ+B,EAI7B,CAACA,YAAY,CAAC0B,OAAd,CAJ6B,CAAhC;AAAA,MAAQD,YAAR,YAAQA,YAAR;;AAMA,kBAA0BpD,OAAO,CAAC,YAAM;AACpC,WAAO;AACHsD,MAAAA,aAAa,EAAE7C,oBAAoB,CAACkB,YAAD;AADhC,KAAP;AAGH,GAJgC,EAI9B,CAACA,YAAY,CAAC0B,OAAd,CAJ8B,CAAjC;AAAA,MAAQC,aAAR,aAAQA,aAAR;;AAMA,MAAMzB,UAAU,GAAG9B,WAAW,CAC1B,UAAAe,IAAI,EAAI;AACJyB,IAAAA,OAAO,CAACxB,OAAR,GAAkBD,IAAlB;AACH,GAHyB,EAI1B,CAACyB,OAAD,CAJ0B,CAA9B;AAOA,MAAMnB,UAAU,GAAGrB,WAAW,CAC1B,UAACoB,IAAD,EAAgB;AACZqB,IAAAA,OAAO,CAACzB,OAAR,GAAkBI,IAAlB;AACH,GAHyB,EAI1B,CAACqB,OAAD,CAJ0B,CAA9B;AAOA,MAAM5B,WAAW,GAAGb,WAAW,CAAC,YAAY;AACxC0C,IAAAA,OAAO,CAACc,IAAR,gCAAqC5B,YAAY,CAAC0B,OAAlD;AACH,GAF8B,EAE5B,CAAC1B,YAAY,CAAC0B,OAAd,CAF4B,CAA/B;AAIA,MAAMG,QAAQ,GAAGnD,QAAQ,CAAsD+C,YAAtD,EAAoE;AACzFK,IAAAA,SAAS,EAAE;AACPC,MAAAA,QAAQ,EAAEX,UAAU,IAAI;AADjB,KAD8E;AAIzFY,IAAAA,IAAI,EAAE,CAACZ,UAJkF;AAKzFa,IAAAA,WAAW,EAAE,qBAAAC,IAAI,EAAI;AACjB,UAAI,CAACA,IAAL,EAAW;AACP;AACH;;AAED,UAAQC,KAAR,GAAkBD,IAAI,CAACE,OAAvB,CAAQD,KAAR;;AACA,UAAI,CAACA,KAAL,EAAY;AACR;AACH;;AACDrB,MAAAA,OAAO,CAACc,IAAR,gCAAqC5B,YAAY,CAAC0B,OAAlD;AACAX,MAAAA,YAAY,CAACoB,KAAK,CAACE,OAAP,CAAZ;AACH;AAhBwF,GAApE,CAAzB;AAmBA,MAAMC,YAAY,GAAG5D,QAAQ,CAG3BiD,aAH2B,EAGZ;AACbG,IAAAA,SAAS,EAAE;AACPN,MAAAA,EAAE,EAAEF;AADG,KADE;AAIbU,IAAAA,IAAI,EAAE,CAACV;AAJM,GAHY,CAA7B;AAUA,MAAMzB,OAAO,GAAGmB,SAAS,IAAIa,QAAQ,CAAChC,OAAtB,IAAiCyC,YAAY,CAACzC,OAA9D;AACA,MAAMX,KAA4B,GAAGX,GAAG,CAACsD,QAAD,EAAW,mBAAX,CAAH,IAAsC,EAA3E;AAEA,MAAMU,KAAK,GAAG;AACVjD,IAAAA,SAAS,EAATA,SADU;AAEVU,IAAAA,YAAY,EAAZA,YAFU;AAGVf,IAAAA,WAAW,EAAXA,WAHU;AAIVa,IAAAA,kBAAkB,EAAlBA,kBAJU;AAKVC,IAAAA,qBAAqB,EAArBA,qBALU;AAMVE,IAAAA,OAAO,EAAPA,OANU;AAOVf,IAAAA,KAAK,EAALA,KAPU;AAQVC,IAAAA,IAAI,EAAEyB,OARI;AASVf,IAAAA,OAAO,EAAPA,OATU;AAUVF,IAAAA,SAAS,EAAEpB,GAAG,CAAC+D,YAAD,EAAe,qBAAf,CAAH,IAA4C,EAV7C;AAWV5C,IAAAA,cAAc,EAAEmC,QAAQ,CAACW,OAXf;AAYVtC,IAAAA,UAAU,EAAVA,UAZU;AAaVN,IAAAA,UAAU,EAAVA,UAbU;AAcVH,IAAAA,UAAU,EAAVA,UAdU;AAeVF,IAAAA,aAAa,EAAE,CAAC2B,QAAD,IAAa,CAACrB,OAAd,IAAyBvB,OAAO,CAACY,KAAD,CAfrC;AAgBVM,IAAAA,IAAI,EAAEqB;AAhBI,GAAd;AAmBA,sBAAO,oBAAC,OAAD,CAAS,QAAT;AAAkB,IAAA,KAAK,EAAE0B;AAAzB,KAAiC5B,QAAjC,CAAP;AACH,CApHM;AAsHPD,QAAQ,CAAC+B,WAAT,GAAuB,sBAAvB","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"]}
@@ -4,7 +4,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
 
5
5
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
6
6
 
7
- import React, { useCallback } from "react";
7
+ import React, { useState, useCallback, useEffect } from "react";
8
8
  import { css } from "emotion";
9
9
  import get from "lodash/get";
10
10
  import { useRouter } from "@webiny/react-router";
@@ -40,7 +40,7 @@ var noPadding = /*#__PURE__*/css({
40
40
  var disallowedModelIdEndingList = ["Response", "List", "Meta", "Input", "Sorter"];
41
41
 
42
42
  var getSelectedGroup = function getSelectedGroup(groups, model) {
43
- if (groups.length === 0 || !model) {
43
+ if (!groups || groups.length === 0 || !model) {
44
44
  return "";
45
45
  }
46
46
 
@@ -65,10 +65,10 @@ var CloneContentModelDialog = function CloneContentModelDialog(_ref) {
65
65
  contentModel = _ref.contentModel,
66
66
  closeModal = _ref.closeModal;
67
67
 
68
- var _React$useState = React.useState(false),
69
- _React$useState2 = _slicedToArray(_React$useState, 2),
70
- loading = _React$useState2[0],
71
- setLoading = _React$useState2[1];
68
+ var _useState = useState(false),
69
+ _useState2 = _slicedToArray(_useState, 2),
70
+ loading = _useState2[0],
71
+ setLoading = _useState2[1];
72
72
 
73
73
  var _useSnackbar = useSnackbar(),
74
74
  showSnackbar = _useSnackbar.showSnackbar;
@@ -83,10 +83,15 @@ var CloneContentModelDialog = function CloneContentModelDialog(_ref) {
83
83
 
84
84
  var currentLocale = getCurrentLocale();
85
85
 
86
- var _React$useState3 = React.useState(currentLocale || ""),
87
- _React$useState4 = _slicedToArray(_React$useState3, 2),
88
- locale = _React$useState4[0],
89
- setLocale = _React$useState4[1];
86
+ var _useState3 = useState(currentLocale || ""),
87
+ _useState4 = _slicedToArray(_useState3, 2),
88
+ locale = _useState4[0],
89
+ setLocale = _useState4[1];
90
+
91
+ var _useState5 = useState(null),
92
+ _useState6 = _slicedToArray(_useState5, 2),
93
+ groups = _useState6[0],
94
+ setGroups = _useState6[1];
90
95
 
91
96
  var _useMutation = useMutation(CREATE_CONTENT_MODEL_FROM, {
92
97
  onError: function onError(error) {
@@ -124,19 +129,34 @@ var CloneContentModelDialog = function CloneContentModelDialog(_ref) {
124
129
  _useMutation2 = _slicedToArray(_useMutation, 1),
125
130
  createContentModelFrom = _useMutation2[0];
126
131
 
132
+ var locales = getLocales().map(function (_ref2) {
133
+ var code = _ref2.code;
134
+ return {
135
+ value: code,
136
+ label: code === currentLocale ? "Current locale" : code
137
+ };
138
+ });
139
+
127
140
  var _useQueryLocale = useQueryLocale(LIST_MENU_CONTENT_GROUPS_MODELS, locale, {
128
- skip: !open
141
+ skip: !open || !!groups
129
142
  }),
130
143
  data = _useQueryLocale.data,
131
- loadingGroups = _useQueryLocale.loading;
144
+ groupsLoading = _useQueryLocale.loading;
132
145
 
133
- var contentModelGroups = get(data, "listContentModelGroups.data", []).map(function (item) {
134
- return {
135
- value: item.id,
136
- label: item.name
137
- };
138
- });
139
- var selectedGroup = getSelectedGroup(contentModelGroups, contentModel);
146
+ useEffect(function () {
147
+ if (!data || groupsLoading) {
148
+ return;
149
+ }
150
+
151
+ var contentModelGroups = get(data, "listContentModelGroups.data", []).map(function (item) {
152
+ return {
153
+ value: item.id,
154
+ label: item.name
155
+ };
156
+ });
157
+ setGroups(contentModelGroups);
158
+ }, [data, groupsLoading]);
159
+ var selectedGroup = getSelectedGroup(groups, contentModel);
140
160
  var nameValidator = useCallback(function (name) {
141
161
  var target = (name || "").trim();
142
162
 
@@ -171,18 +191,12 @@ var CloneContentModelDialog = function CloneContentModelDialog(_ref) {
171
191
 
172
192
  return true;
173
193
  }, []);
174
- var locales = getLocales().map(function (locale) {
175
- return {
176
- value: locale.code,
177
- label: locale.code === currentLocale ? "Current locale" : locale.code
178
- };
179
- });
180
194
  return /*#__PURE__*/React.createElement(UID.Dialog, {
181
195
  open: open,
182
196
  onClose: onClose,
183
197
  className: narrowDialog,
184
198
  "data-testid": "cms-clone-content-model-modal"
185
- }, loadingGroups && /*#__PURE__*/React.createElement(CircularProgress, {
199
+ }, (!groups || groupsLoading) && /*#__PURE__*/React.createElement(CircularProgress, {
186
200
  label: "Please wait while we load required information."
187
201
  }), open && /*#__PURE__*/React.createElement(Form, {
188
202
  data: {
@@ -203,9 +217,9 @@ var CloneContentModelDialog = function CloneContentModelDialog(_ref) {
203
217
  }
204
218
  });
205
219
  }
206
- }, function (_ref2) {
207
- var Bind = _ref2.Bind,
208
- submit = _ref2.submit;
220
+ }, function (_ref3) {
221
+ var Bind = _ref3.Bind,
222
+ submit = _ref3.submit;
209
223
  return /*#__PURE__*/React.createElement(React.Fragment, null, loading && /*#__PURE__*/React.createElement(CircularProgress, null), /*#__PURE__*/React.createElement(UID.DialogTitle, null, t(_templateObject || (_templateObject = _taggedTemplateLiteral(["Clone Content Model"])))), /*#__PURE__*/React.createElement(UID.DialogContent, null, /*#__PURE__*/React.createElement(Grid, {
210
224
  className: noPadding
211
225
  }, /*#__PURE__*/React.createElement(Cell, {
@@ -218,15 +232,6 @@ var CloneContentModelDialog = function CloneContentModelDialog(_ref) {
218
232
  description: t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["The name of the content model"])))
219
233
  }))), /*#__PURE__*/React.createElement(Cell, {
220
234
  span: 12
221
- }, /*#__PURE__*/React.createElement(Bind, {
222
- name: "group",
223
- validators: validation.create("required")
224
- }, /*#__PURE__*/React.createElement(Select, {
225
- description: t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Choose a content model group"]))),
226
- label: t(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["Content model group"]))),
227
- options: contentModelGroups
228
- }))), /*#__PURE__*/React.createElement(Cell, {
229
- span: 12
230
235
  }, /*#__PURE__*/React.createElement(Bind, {
231
236
  name: "locale",
232
237
  validators: validation.create("required"),
@@ -236,13 +241,23 @@ var CloneContentModelDialog = function CloneContentModelDialog(_ref) {
236
241
  }
237
242
 
238
243
  setLocale(value);
244
+ setGroups(null);
239
245
  }
240
246
  }, /*#__PURE__*/React.createElement(Select, {
241
- description: t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["Choose a locale into which you wish to clone the model"]))),
242
- label: t(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["Content model locale"]))),
247
+ description: t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Choose a locale into which you wish to clone the model"]))),
248
+ label: t(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["Content model locale"]))),
243
249
  options: locales
244
250
  }))), /*#__PURE__*/React.createElement(Cell, {
245
251
  span: 12
252
+ }, /*#__PURE__*/React.createElement(Bind, {
253
+ name: "group",
254
+ validators: validation.create("required")
255
+ }, /*#__PURE__*/React.createElement(Select, {
256
+ description: t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["Choose a content model group"]))),
257
+ label: t(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["Content model group"]))),
258
+ options: groups || []
259
+ }))), /*#__PURE__*/React.createElement(Cell, {
260
+ span: 12
246
261
  }, /*#__PURE__*/React.createElement(Bind, {
247
262
  name: "description"
248
263
  }, function (props) {