@webiny/app-headless-cms 5.25.0-beta.5 → 5.25.1-beta.0

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 (49) hide show
  1. package/HeadlessCMS.js +2 -1
  2. package/HeadlessCMS.js.map +1 -1
  3. package/admin/contexts/Cms/index.d.ts +2 -2
  4. package/admin/contexts/Cms/index.js +0 -8
  5. package/admin/contexts/Cms/index.js.map +1 -1
  6. package/admin/hooks/useCms.d.ts +2 -2
  7. package/admin/hooks/useCms.js.map +1 -1
  8. package/admin/plugins/fieldRenderers/dateTime/utils.js +1 -1
  9. package/admin/plugins/fieldRenderers/dateTime/utils.js.map +1 -1
  10. package/admin/plugins/fieldRenderers/ref/components/useReference.js +5 -3
  11. package/admin/plugins/fieldRenderers/ref/components/useReference.js.map +1 -1
  12. package/admin/plugins/fieldRenderers/ref/components/useReferences.js +15 -0
  13. package/admin/plugins/fieldRenderers/ref/components/useReferences.js.map +1 -1
  14. package/admin/plugins/index.d.ts +1 -1
  15. package/admin/plugins/routes.js +2 -4
  16. package/admin/plugins/routes.js.map +1 -1
  17. package/admin/plugins/transformers/dateTransformer.js +2 -2
  18. package/admin/plugins/transformers/dateTransformer.js.map +1 -1
  19. package/admin/views/contentEntries/ContentEntriesContext.d.ts +1 -1
  20. package/admin/views/contentEntries/ContentEntriesContext.js +34 -22
  21. package/admin/views/contentEntries/ContentEntriesContext.js.map +1 -1
  22. package/admin/views/contentEntries/ContentEntriesList.js +40 -43
  23. package/admin/views/contentEntries/ContentEntriesList.js.map +1 -1
  24. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js +1 -1
  25. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js.map +1 -1
  26. package/admin/views/contentEntries/ContentEntry/cache.js +1 -1
  27. package/admin/views/contentEntries/ContentEntry/cache.js.map +1 -1
  28. package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js +1 -0
  29. package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js.map +1 -1
  30. package/admin/views/contentEntries/experiment/ContentEntriesModule.d.ts +1 -0
  31. package/admin/views/contentEntries/experiment/ContentEntriesModule.js +50 -0
  32. package/admin/views/contentEntries/experiment/ContentEntriesModule.js.map +1 -0
  33. package/admin/views/contentEntries/experiment/ContentEntriesRenderer.d.ts +2 -0
  34. package/admin/views/contentEntries/experiment/ContentEntriesRenderer.js +12 -0
  35. package/admin/views/contentEntries/experiment/ContentEntriesRenderer.js.map +1 -0
  36. package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.d.ts +35 -0
  37. package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.js +130 -0
  38. package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.js.map +1 -0
  39. package/admin/views/contentEntries/experiment/Property.d.ts +34 -0
  40. package/admin/views/contentEntries/experiment/Property.js +232 -0
  41. package/admin/views/contentEntries/experiment/Property.js.map +1 -0
  42. package/admin/views/contentEntries/hooks/useContentEntriesList.js +2 -1
  43. package/admin/views/contentEntries/hooks/useContentEntriesList.js.map +1 -1
  44. package/admin/views/contentModels/NewContentModelDialog.js +8 -5
  45. package/admin/views/contentModels/NewContentModelDialog.js.map +1 -1
  46. package/index.d.ts +10 -0
  47. package/index.js +11 -1
  48. package/index.js.map +1 -1
  49. package/package.json +23 -22
@@ -1,28 +1,33 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
4
 
4
- var _templateObject, _templateObject2, _templateObject3, _templateObject4;
5
+ var _templateObject, _templateObject2;
5
6
 
6
- import React, { useState, useMemo } from "react";
7
+ import React, { useState, useMemo, useCallback } from "react";
7
8
  import { useSecurity } from "@webiny/app-security";
8
9
  import { i18n } from "@webiny/app/i18n";
10
+ import { useContentEntriesViewConfig } from "./experiment/ContentEntriesViewConfig";
9
11
  var t = i18n.ns("app-headless-cms/admin/contents/entries");
10
- var SORTERS = [{
11
- label: t(_templateObject || (_templateObject = _taggedTemplateLiteral(["Newest to oldest"]))),
12
- value: "savedOn_DESC"
13
- }, {
14
- label: t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["Oldest to newest"]))),
15
- value: "savedOn_ASC"
16
- }];
17
12
  export var Context = /*#__PURE__*/React.createContext({
18
13
  contentModel: null,
19
- sorters: [],
20
14
  canCreate: false,
21
15
  listQueryVariables: {},
16
+ sorters: [],
22
17
  setListQueryVariables: function setListQueryVariables() {
23
18
  return void 0;
24
19
  }
25
20
  });
21
+
22
+ function toEntriesSorters(sorters) {
23
+ return sorters.map(function (s) {
24
+ return {
25
+ label: s.label,
26
+ value: s.name
27
+ };
28
+ });
29
+ }
30
+
26
31
  export var Provider = function Provider(_ref) {
27
32
  var contentModel = _ref.contentModel,
28
33
  children = _ref.children,
@@ -32,13 +37,11 @@ export var Provider = function Provider(_ref) {
32
37
  identity = _useSecurity.identity,
33
38
  getPermission = _useSecurity.getPermission;
34
39
 
35
- var _useState = useState({
36
- sort: [SORTERS[0].value]
37
- }),
38
- _useState2 = _slicedToArray(_useState, 2),
39
- listQueryVariables = _useState2[0],
40
- setListQueryVariables = _useState2[1];
41
-
40
+ var viewConfig = useContentEntriesViewConfig();
41
+ var appliesToContentModel = useCallback(function (_ref2) {
42
+ var modelIds = _ref2.modelIds;
43
+ return modelIds.length === 0 || modelIds.includes(contentModel.modelId);
44
+ }, [contentModel]);
42
45
  var canCreate = useMemo(function () {
43
46
  var permission = getPermission("cms.contentEntry");
44
47
 
@@ -59,21 +62,30 @@ export var Provider = function Provider(_ref) {
59
62
  var titleFieldLabel = titleField ? titleField.label : null;
60
63
 
61
64
  if (!titleFieldLabel) {
62
- return SORTERS;
65
+ return toEntriesSorters(viewConfig.sorters.filter(appliesToContentModel));
63
66
  }
64
67
 
65
- return [].concat(SORTERS, [{
66
- label: t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["{titleFieldLabel} A-Z"])))({
68
+ return [].concat(_toConsumableArray(toEntriesSorters(viewConfig.sorters.filter(appliesToContentModel))), [{
69
+ label: t(_templateObject || (_templateObject = _taggedTemplateLiteral(["{titleFieldLabel} A-Z"])))({
67
70
  titleFieldLabel: titleFieldLabel
68
71
  }),
69
72
  value: "".concat(contentModel.titleFieldId, "_ASC")
70
73
  }, {
71
- label: t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["{titleFieldLabel} Z-A"])))({
74
+ label: t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["{titleFieldLabel} Z-A"])))({
72
75
  titleFieldLabel: titleFieldLabel
73
76
  }),
74
77
  value: "".concat(contentModel.titleFieldId, "_DESC")
75
78
  }]);
76
- }, [contentModel.modelId]);
79
+ }, [viewConfig.sorters, contentModel.modelId]);
80
+
81
+ var _useState = useState({
82
+ sort: [sorters[0].value],
83
+ where: {}
84
+ }),
85
+ _useState2 = _slicedToArray(_useState, 2),
86
+ listQueryVariables = _useState2[0],
87
+ setListQueryVariables = _useState2[1];
88
+
77
89
  var value = {
78
90
  insideDialog: insideDialog,
79
91
  contentModel: contentModel,
@@ -1 +1 @@
1
- {"version":3,"sources":["ContentEntriesContext.tsx"],"names":["React","useState","useMemo","useSecurity","i18n","t","ns","SORTERS","label","value","Context","createContext","contentModel","sorters","canCreate","listQueryVariables","setListQueryVariables","Provider","children","insideDialog","identity","getPermission","sort","permission","rwd","includes","titleField","fields","find","field","fieldId","titleFieldId","titleFieldLabel","modelId","displayName"],"mappings":";;;;;AAAA,OAAOA,KAAP,IAAgBC,QAAhB,EAA0BC,OAA1B,QAAmE,OAAnE;AACA,SAASC,WAAT,QAA4B,sBAA5B;AACA,SAASC,IAAT,QAAqB,kBAArB;AAGA,IAAMC,CAAC,GAAGD,IAAI,CAACE,EAAL,CAAQ,yCAAR,CAAV;AAMA,IAAMC,OAA2B,GAAG,CAChC;AACIC,EAAAA,KAAK,EAAEH,CAAF,qFADT;AAEII,EAAAA,KAAK,EAAE;AAFX,CADgC,EAKhC;AACID,EAAAA,KAAK,EAAEH,CAAF,uFADT;AAEII,EAAAA,KAAK,EAAE;AAFX,CALgC,CAApC;AA4BA,OAAO,IAAMC,OAAO,gBAAGV,KAAK,CAACW,aAAN,CAA2C;AAC9DC,EAAAA,YAAY,EAAE,IADgD;AAE9DC,EAAAA,OAAO,EAAE,EAFqD;AAG9DC,EAAAA,SAAS,EAAE,KAHmD;AAI9DC,EAAAA,kBAAkB,EAAE,EAJ0C;AAK9DC,EAAAA,qBAAqB,EAAE,iCAAM;AACzB,WAAO,KAAK,CAAZ;AACH;AAP6D,CAA3C,CAAhB;AAgBP,OAAO,IAAMC,QAAsD,GAAG,SAAzDA,QAAyD,OAIhE;AAAA,MAHFL,YAGE,QAHFA,YAGE;AAAA,MAFFM,QAEE,QAFFA,QAEE;AAAA,MADFC,YACE,QADFA,YACE;;AACF,qBAAoChB,WAAW,EAA/C;AAAA,MAAQiB,QAAR,gBAAQA,QAAR;AAAA,MAAkBC,aAAlB,gBAAkBA,aAAlB;;AAEA,kBAAoDpB,QAAQ,CAAqB;AAC7EqB,IAAAA,IAAI,EAAE,CAACf,OAAO,CAAC,CAAD,CAAP,CAAWE,KAAZ;AADuE,GAArB,CAA5D;AAAA;AAAA,MAAOM,kBAAP;AAAA,MAA2BC,qBAA3B;;AAIA,MAAMF,SAAS,GAAGZ,OAAO,CAAC,YAAe;AACrC,QAAMqB,UAAU,GAAGF,aAAa,CAAwB,kBAAxB,CAAhC;;AACA,QAAI,CAACE,UAAL,EAAiB;AACb,aAAO,KAAP;AACH;;AAED,QAAI,OAAOA,UAAU,CAACC,GAAlB,KAA0B,QAA9B,EAAwC;AACpC,aAAO,IAAP;AACH;;AAED,WAAOD,UAAU,CAACC,GAAX,CAAeC,QAAf,CAAwB,GAAxB,CAAP;AACH,GAXwB,EAWtB,CAACL,QAAD,CAXsB,CAAzB;AAaA,MAAMP,OAAO,GAAGX,OAAO,CAAC,YAA0B;AAC9C,QAAMwB,UAAU,GAAGd,YAAY,CAACe,MAAb,CAAoBC,IAApB,CACf,UAAAC,KAAK;AAAA,aAAIA,KAAK,CAACC,OAAN,KAAkBlB,YAAY,CAACmB,YAAnC;AAAA,KADU,CAAnB;AAGA,QAAMC,eAAe,GAAGN,UAAU,GAAGA,UAAU,CAAClB,KAAd,GAAsB,IAAxD;;AACA,QAAI,CAACwB,eAAL,EAAsB;AAClB,aAAOzB,OAAP;AACH;;AAED,qBACOA,OADP,GAEI;AACIC,MAAAA,KAAK,EAAEH,CAAC,4FAAD,CAAyB;AAAE2B,QAAAA,eAAe,EAAfA;AAAF,OAAzB,CADX;AAEIvB,MAAAA,KAAK,YAAKG,YAAY,CAACmB,YAAlB;AAFT,KAFJ,EAMI;AACIvB,MAAAA,KAAK,EAAEH,CAAC,4FAAD,CAAyB;AAAE2B,QAAAA,eAAe,EAAfA;AAAF,OAAzB,CADX;AAEIvB,MAAAA,KAAK,YAAKG,YAAY,CAACmB,YAAlB;AAFT,KANJ;AAWH,GApBsB,EAoBpB,CAACnB,YAAY,CAACqB,OAAd,CApBoB,CAAvB;AAsBA,MAAMxB,KAAK,GAAG;AACVU,IAAAA,YAAY,EAAZA,YADU;AAEVP,IAAAA,YAAY,EAAZA,YAFU;AAGVC,IAAAA,OAAO,EAAPA,OAHU;AAIVC,IAAAA,SAAS,EAATA,SAJU;AAKVC,IAAAA,kBAAkB,EAAlBA,kBALU;AAMVC,IAAAA,qBAAqB,EAArBA;AANU,GAAd;AASA,sBAAO,oBAAC,OAAD,CAAS,QAAT;AAAkB,IAAA,KAAK,EAAEP;AAAzB,KAAiCS,QAAjC,CAAP;AACH,CAxDM;AA0DPD,QAAQ,CAACiB,WAAT,GAAuB,wBAAvB","sourcesContent":["import React, { useState, useMemo, Dispatch, SetStateAction } from \"react\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { CmsEditorContentModel, CmsSecurityPermission } from \"~/types\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/contents/entries\");\n\nexport interface CmsEntriesSorter {\n label: string;\n value: string;\n}\nconst SORTERS: CmsEntriesSorter[] = [\n {\n label: t`Newest to oldest`,\n value: \"savedOn_DESC\"\n },\n {\n label: t`Oldest to newest`,\n value: \"savedOn_ASC\"\n }\n];\n\nexport interface ListQueryVariables {\n sort?: string[];\n status?: string;\n where?: {\n [key: string]: any;\n };\n}\n\nexport interface ContentEntriesContext {\n contentModel: CmsEditorContentModel;\n sorters: CmsEntriesSorter[];\n canCreate: boolean;\n listQueryVariables: ListQueryVariables;\n setListQueryVariables: Dispatch<SetStateAction<ListQueryVariables>>;\n insideDialog?: boolean;\n}\n\nexport const Context = React.createContext<ContentEntriesContext>({\n contentModel: null as unknown as CmsEditorContentModel,\n sorters: [],\n canCreate: false,\n listQueryVariables: {},\n setListQueryVariables: () => {\n return void 0;\n }\n});\n\nexport interface ContentEntriesContextProviderProps {\n contentModel: CmsEditorContentModel;\n children: React.ReactNode;\n insideDialog?: boolean;\n}\n\nexport const Provider: React.FC<ContentEntriesContextProviderProps> = ({\n contentModel,\n children,\n insideDialog\n}) => {\n const { identity, getPermission } = useSecurity();\n\n const [listQueryVariables, setListQueryVariables] = useState<ListQueryVariables>({\n sort: [SORTERS[0].value]\n });\n\n const canCreate = useMemo((): boolean => {\n const permission = getPermission<CmsSecurityPermission>(\"cms.contentEntry\");\n if (!permission) {\n return false;\n }\n\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n\n return permission.rwd.includes(\"w\");\n }, [identity]);\n\n const sorters = useMemo((): CmsEntriesSorter[] => {\n const titleField = contentModel.fields.find(\n field => field.fieldId === contentModel.titleFieldId\n );\n const titleFieldLabel = titleField ? titleField.label : null;\n if (!titleFieldLabel) {\n return SORTERS;\n }\n\n return [\n ...SORTERS,\n {\n label: t`{titleFieldLabel} A-Z`({ titleFieldLabel }),\n value: `${contentModel.titleFieldId}_ASC`\n },\n {\n label: t`{titleFieldLabel} Z-A`({ titleFieldLabel }),\n value: `${contentModel.titleFieldId}_DESC`\n }\n ];\n }, [contentModel.modelId]);\n\n const value = {\n insideDialog,\n contentModel,\n sorters,\n canCreate,\n listQueryVariables,\n setListQueryVariables\n };\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nProvider.displayName = \"ContentEntriesProvider\";\n"]}
1
+ {"version":3,"sources":["ContentEntriesContext.tsx"],"names":["React","useState","useMemo","useCallback","useSecurity","i18n","useContentEntriesViewConfig","t","ns","Context","createContext","contentModel","canCreate","listQueryVariables","sorters","setListQueryVariables","toEntriesSorters","map","s","label","value","name","Provider","children","insideDialog","identity","getPermission","viewConfig","appliesToContentModel","modelIds","length","includes","modelId","permission","rwd","titleField","fields","find","field","fieldId","titleFieldId","titleFieldLabel","filter","sort","where","displayName"],"mappings":"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","sourcesContent":["import React, { useState, useMemo, Dispatch, SetStateAction, useCallback } from \"react\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { CmsEditorContentModel, CmsSecurityPermission } from \"~/types\";\nimport {\n useContentEntriesViewConfig,\n ContentEntriesViewConfigSorter\n} from \"./experiment/ContentEntriesViewConfig\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/contents/entries\");\n\nexport interface CmsEntriesSorter {\n label: string;\n value: string;\n}\n\nexport interface ListQueryVariables {\n sort?: string[];\n status?: string;\n where?: {\n [key: string]: any;\n };\n}\n\nexport interface ContentEntriesContext {\n contentModel: CmsEditorContentModel;\n canCreate: boolean;\n listQueryVariables: ListQueryVariables;\n sorters: CmsEntriesSorter[];\n setListQueryVariables: Dispatch<SetStateAction<ListQueryVariables>>;\n insideDialog?: boolean;\n}\n\nexport const Context = React.createContext<ContentEntriesContext>({\n contentModel: null as unknown as CmsEditorContentModel,\n canCreate: false,\n listQueryVariables: {},\n sorters: [],\n setListQueryVariables: () => {\n return void 0;\n }\n});\n\nexport interface ContentEntriesContextProviderProps {\n contentModel: CmsEditorContentModel;\n children: React.ReactNode;\n insideDialog?: boolean;\n}\n\nfunction toEntriesSorters(sorters: ContentEntriesViewConfigSorter[]) {\n return sorters.map(s => ({ label: s.label, value: s.name }));\n}\n\nexport const Provider: React.FC<ContentEntriesContextProviderProps> = ({\n contentModel,\n children,\n insideDialog\n}) => {\n const { identity, getPermission } = useSecurity();\n const viewConfig = useContentEntriesViewConfig();\n\n const appliesToContentModel = useCallback(\n ({ modelIds }: ContentEntriesViewConfigSorter) => {\n return modelIds.length === 0 || modelIds.includes(contentModel.modelId);\n },\n [contentModel]\n );\n\n const canCreate = useMemo((): boolean => {\n const permission = getPermission<CmsSecurityPermission>(\"cms.contentEntry\");\n if (!permission) {\n return false;\n }\n\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n\n return permission.rwd.includes(\"w\");\n }, [identity]);\n\n const sorters = useMemo((): CmsEntriesSorter[] => {\n const titleField = contentModel.fields.find(\n field => field.fieldId === contentModel.titleFieldId\n );\n\n const titleFieldLabel = titleField ? titleField.label : null;\n if (!titleFieldLabel) {\n return toEntriesSorters(viewConfig.sorters.filter(appliesToContentModel));\n }\n\n return [\n ...toEntriesSorters(viewConfig.sorters.filter(appliesToContentModel)),\n {\n label: t`{titleFieldLabel} A-Z`({ titleFieldLabel }),\n value: `${contentModel.titleFieldId}_ASC`\n },\n {\n label: t`{titleFieldLabel} Z-A`({ titleFieldLabel }),\n value: `${contentModel.titleFieldId}_DESC`\n }\n ];\n }, [viewConfig.sorters, contentModel.modelId]);\n\n const [listQueryVariables, setListQueryVariables] = useState<ListQueryVariables>({\n sort: [sorters[0].value],\n where: {}\n });\n\n const value = {\n insideDialog,\n contentModel,\n sorters,\n canCreate,\n listQueryVariables,\n setListQueryVariables\n };\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nProvider.displayName = \"ContentEntriesProvider\";\n"]}
@@ -1,8 +1,10 @@
1
1
  import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
3
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
3
4
 
4
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12;
5
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
5
6
 
7
+ var _excluded = ["sort", "status"];
6
8
  import React, { useMemo } from "react";
7
9
  import debounce from "lodash/debounce";
8
10
  import { css } from "emotion";
@@ -20,14 +22,15 @@ import { Typography } from "@webiny/ui/Typography";
20
22
  import * as UIList from "@webiny/ui/List";
21
23
  import { ButtonIcon, ButtonSecondary } from "@webiny/ui/Button";
22
24
  import { Cell, Grid } from "@webiny/ui/Grid";
23
- import { Select } from "@webiny/ui/Select";
24
25
  import { Scrollbar } from "@webiny/ui/Scrollbar";
26
+ import { Select } from "@webiny/ui/Select";
25
27
  import { ReactComponent as AddIcon } from "@webiny/app-admin/assets/icons/add-18px.svg";
26
28
  import { ReactComponent as FilterIcon } from "@webiny/app-admin/assets/icons/filter-24px.svg";
27
29
  import SearchUI from "@webiny/app-admin/components/SearchUI";
28
30
  import statusLabels from "../../constants/statusLabels";
29
31
  import { useCallback } from "react";
30
32
  import { useContentEntriesList } from "./hooks/useContentEntriesList";
33
+ import { useContentEntriesViewConfig } from "./experiment/ContentEntriesViewConfig";
31
34
  var t = i18n.ns("app-headless-cms/admin/contents/data-list");
32
35
  var rightAlign = /*#__PURE__*/css({
33
36
  alignItems: "flex-end !important",
@@ -74,6 +77,7 @@ var ContentEntriesList = function ContentEntriesList() {
74
77
  filter = _useContentEntriesLis.filter,
75
78
  setFilter = _useContentEntriesLis.setFilter;
76
79
 
80
+ var viewConfig = useContentEntriesViewConfig();
77
81
  var loadMoreOnScroll = useCallback(debounce(function (scrollFrame) {
78
82
  if (scrollFrame.top > 0.9) {
79
83
  loadMore();
@@ -84,56 +88,49 @@ var ContentEntriesList = function ContentEntriesList() {
84
88
  sort: listQueryVariables.sort ? listQueryVariables.sort[0] : ""
85
89
  });
86
90
 
91
+ var appliesToContentModel = useCallback(function (_ref) {
92
+ var modelIds = _ref.modelIds;
93
+ return modelIds.length === 0 || modelIds.includes(contentModel.modelId);
94
+ }, [contentModel]);
87
95
  var entriesDataListModalOverlay = useMemo(function () {
88
96
  return /*#__PURE__*/React.createElement(UIList.DataListModalOverlay, null, /*#__PURE__*/React.createElement(Form, {
89
97
  data: formInitialData,
90
- onChange: function onChange(_ref) {
91
- var status = _ref.status,
92
- sort = _ref.sort;
93
- setListQueryVariables(function (prevState) {
94
- return _objectSpread(_objectSpread({}, prevState), {}, {
95
- sort: sort,
96
- status: status
97
- });
98
+ onChange: function onChange(_ref2) {
99
+ var sort = _ref2.sort,
100
+ status = _ref2.status,
101
+ data = _objectWithoutProperties(_ref2, _excluded);
102
+
103
+ setListQueryVariables(function () {
104
+ return _objectSpread({
105
+ status: status,
106
+ // GraphQL Schema requires "sort" to be an array.
107
+ sort: [sort]
108
+ }, data);
98
109
  });
99
110
  }
100
- }, function (_ref2) {
101
- var Bind = _ref2.Bind;
111
+ }, function (_ref3) {
112
+ var Bind = _ref3.Bind;
102
113
  return /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
103
114
  span: 12
104
115
  }, /*#__PURE__*/React.createElement(Bind, {
105
116
  name: "sort"
106
117
  }, /*#__PURE__*/React.createElement(Select, {
107
118
  label: t(_templateObject || (_templateObject = _taggedTemplateLiteral(["Sort by"])))
108
- }, sorters.map(function (_ref3) {
109
- var label = _ref3.label,
110
- value = _ref3.value;
119
+ }, sorters.map(function (_ref4) {
120
+ var value = _ref4.value,
121
+ label = _ref4.label;
111
122
  return /*#__PURE__*/React.createElement("option", {
112
- key: label,
123
+ key: value,
113
124
  value: value
114
125
  }, label);
115
- })))), /*#__PURE__*/React.createElement(Cell, {
116
- span: 12
117
- }, /*#__PURE__*/React.createElement(Bind, {
118
- name: "status"
119
- }, /*#__PURE__*/React.createElement(Select, {
120
- label: t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["Filter by status"]))),
121
- description: "Filter by a specific page status."
122
- }, /*#__PURE__*/React.createElement("option", {
123
- value: "all"
124
- }, t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["All"])))), /*#__PURE__*/React.createElement("option", {
125
- value: "draft"
126
- }, t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Draft"])))), /*#__PURE__*/React.createElement("option", {
127
- value: "published"
128
- }, t(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["Published"])))), /*#__PURE__*/React.createElement("option", {
129
- value: "unpublished"
130
- }, t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["Unpublished"])))), /*#__PURE__*/React.createElement("option", {
131
- value: "reviewRequested"
132
- }, t(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["Review requested"])))), /*#__PURE__*/React.createElement("option", {
133
- value: "changesRequested"
134
- }, t(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["Changes requested"]))))))));
126
+ })))), viewConfig.filters.filter(appliesToContentModel).map(function (filter) {
127
+ return /*#__PURE__*/React.createElement(Cell, {
128
+ span: 12,
129
+ key: filter.name
130
+ }, filter.element);
131
+ }));
135
132
  }));
136
- }, [listQueryVariables]);
133
+ }, [listQueryVariables, viewConfig.filters]);
137
134
  return /*#__PURE__*/React.createElement(UIList.DataList, {
138
135
  loading: loading,
139
136
  data: data,
@@ -145,11 +142,11 @@ var ContentEntriesList = function ContentEntriesList() {
145
142
  onClick: onCreate
146
143
  }, /*#__PURE__*/React.createElement(ButtonIcon, {
147
144
  icon: /*#__PURE__*/React.createElement(AddIcon, null)
148
- }), " ", t(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["New Entry"])))) : null,
145
+ }), " ", t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["New Entry"])))) : null,
149
146
  search: /*#__PURE__*/React.createElement(SearchUI, {
150
147
  value: filter,
151
148
  onChange: setFilter,
152
- inputPlaceholder: t(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["Search {title}"])))({
149
+ inputPlaceholder: t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["Search {title}"])))({
153
150
  title: pluralize(contentModel.name)
154
151
  })
155
152
  }),
@@ -158,8 +155,8 @@ var ContentEntriesList = function ContentEntriesList() {
158
155
  icon: /*#__PURE__*/React.createElement(FilterIcon, null),
159
156
  "data-testid": "default-data-list.filter"
160
157
  })
161
- }, function (_ref4) {
162
- var data = _ref4.data;
158
+ }, function (_ref5) {
159
+ var data = _ref5.data;
163
160
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Scrollbar, {
164
161
  "data-testid": "default-data-list",
165
162
  onScrollFrame: function onScrollFrame(scrollFrame) {
@@ -172,7 +169,7 @@ var ContentEntriesList = function ContentEntriesList() {
172
169
  selected: item.id === id
173
170
  }, /*#__PURE__*/React.createElement(UIList.ListItemText, {
174
171
  onClick: editEntry(item)
175
- }, item.meta.title || "Untitled", /*#__PURE__*/React.createElement(UIList.ListItemTextSecondary, null, t(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["Last modified: {time}."])))({
172
+ }, item.meta.title || "Untitled", /*#__PURE__*/React.createElement(UIList.ListItemTextSecondary, null, t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Last modified: {time}."])))({
176
173
  time: /*#__PURE__*/React.createElement(TimeAgo, {
177
174
  datetime: item.savedOn
178
175
  })
@@ -183,7 +180,7 @@ var ContentEntriesList = function ContentEntriesList() {
183
180
  }, statusLabels[item.meta.status], " (v", item.meta.version, ")")));
184
181
  })), loadMoreLoading && /*#__PURE__*/React.createElement(InlineLoaderWrapper, null, /*#__PURE__*/React.createElement(Typography, {
185
182
  use: "overline"
186
- }, t(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["Loading more entries..."]))))));
183
+ }, t(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["Loading more entries..."]))))));
187
184
  });
188
185
  };
189
186
 
@@ -1 +1 @@
1
- {"version":3,"sources":["ContentEntriesList.tsx"],"names":["React","useMemo","debounce","css","TimeAgo","pluralize","styled","i18n","Form","Typography","UIList","ButtonIcon","ButtonSecondary","Cell","Grid","Select","Scrollbar","ReactComponent","AddIcon","FilterIcon","SearchUI","statusLabels","useCallback","useContentEntriesList","t","ns","rightAlign","alignItems","justifyContent","ModelId","color","InlineLoaderWrapper","position","bottom","left","display","width","height","backgroundColor","listItemMinHeight","minHeight","ContentEntriesList","contentModel","id","loading","canCreate","onCreate","data","editEntry","loadMore","loadMoreLoading","listQueryVariables","setListQueryVariables","sorters","filter","setFilter","loadMoreOnScroll","scrollFrame","top","formInitialData","sort","entriesDataListModalOverlay","status","prevState","Bind","map","label","value","name","modelId","title","item","meta","time","savedOn","version"],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport debounce from \"lodash/debounce\";\nimport { css } from \"emotion\";\n/**\n * Package timeago-react does not have types.\n */\n// @ts-ignore\nimport TimeAgo from \"timeago-react\";\nimport pluralize from \"pluralize\";\nimport styled from \"@emotion/styled\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Form } from \"@webiny/form\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport * as UIList from \"@webiny/ui/List\";\nimport { ButtonIcon, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { Scrollbar } from \"@webiny/ui/Scrollbar\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport statusLabels from \"../../constants/statusLabels\";\nimport { useCallback } from \"react\";\nimport { useContentEntriesList } from \"~/admin/views/contentEntries/hooks/useContentEntriesList\";\nimport { positionValues as PositionValues } from \"react-custom-scrollbars\";\nimport { CmsEditorContentEntry } from \"~/types\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/contents/data-list\");\n\nconst rightAlign = css({\n alignItems: \"flex-end !important\",\n justifyContent: \"center !important\"\n});\n\nconst ModelId = styled(\"span\")({\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n});\n\nconst InlineLoaderWrapper = styled(\"div\")({\n position: \"absolute\",\n bottom: 0,\n left: 0,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n height: 40,\n backgroundColor: \"var(--mdc-theme-surface)\"\n});\n\nconst listItemMinHeight = css({\n minHeight: \"66px !important\"\n});\n\nconst ContentEntriesList: React.FC = () => {\n const {\n contentModel,\n id,\n loading,\n canCreate,\n onCreate,\n data,\n editEntry,\n loadMore,\n loadMoreLoading,\n listQueryVariables,\n setListQueryVariables,\n sorters,\n filter,\n setFilter\n } = useContentEntriesList();\n\n const loadMoreOnScroll = useCallback(\n debounce((scrollFrame: PositionValues) => {\n if (scrollFrame.top > 0.9) {\n loadMore();\n }\n }, 500),\n [data]\n );\n\n const formInitialData = {\n ...listQueryVariables,\n sort: listQueryVariables.sort ? listQueryVariables.sort[0] : \"\"\n };\n\n const entriesDataListModalOverlay = useMemo(\n () => (\n <UIList.DataListModalOverlay>\n <Form\n data={formInitialData}\n onChange={({ status, sort }) => {\n setListQueryVariables(prevState => ({ ...prevState, sort, status }));\n }}\n >\n {({ Bind }) => (\n <Grid>\n <Cell span={12}>\n <Bind name={\"sort\"}>\n <Select label={t`Sort by`}>\n {sorters.map(({ label, value }) => {\n return (\n <option key={label} value={value}>\n {label}\n </option>\n );\n })}\n </Select>\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind name={\"status\"}>\n <Select\n label={t`Filter by status`}\n description={\"Filter by a specific page status.\"}\n >\n <option value={\"all\"}>{t`All`}</option>\n <option value={\"draft\"}>{t`Draft`}</option>\n <option value={\"published\"}>{t`Published`}</option>\n <option value={\"unpublished\"}>{t`Unpublished`}</option>\n <option\n value={\"reviewRequested\"}\n >{t`Review requested`}</option>\n <option\n value={\"changesRequested\"}\n >{t`Changes requested`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n )}\n </Form>\n </UIList.DataListModalOverlay>\n ),\n [listQueryVariables]\n );\n\n return (\n <UIList.DataList\n loading={loading}\n data={data}\n title={\n <span>\n {pluralize(contentModel.name)}\n <br />\n <Typography use={\"subtitle1\"}>\n <ModelId>Model ID: {contentModel.modelId}</ModelId>\n </Typography>\n </span>\n }\n actions={\n canCreate ? (\n <ButtonSecondary data-testid=\"new-record-button\" onClick={onCreate}>\n <ButtonIcon icon={<AddIcon />} /> {t`New Entry`}\n </ButtonSecondary>\n ) : null\n }\n search={\n <SearchUI\n value={filter}\n onChange={setFilter}\n inputPlaceholder={t`Search {title}`({ title: pluralize(contentModel.name) })}\n />\n }\n modalOverlay={entriesDataListModalOverlay}\n modalOverlayAction={\n <UIList.DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\n }\n >\n {({ data }: { data: CmsEditorContentEntry[] }) => (\n <>\n <Scrollbar\n data-testid=\"default-data-list\"\n onScrollFrame={scrollFrame => loadMoreOnScroll(scrollFrame)}\n >\n {data.map(item => (\n <UIList.ListItem\n key={item.id}\n className={listItemMinHeight}\n selected={item.id === id}\n >\n <UIList.ListItemText onClick={editEntry(item)}>\n {item.meta.title || \"Untitled\"}\n <UIList.ListItemTextSecondary>\n {t`Last modified: {time}.`({\n time: <TimeAgo datetime={item.savedOn} />\n })}\n </UIList.ListItemTextSecondary>\n </UIList.ListItemText>\n\n <UIList.ListItemMeta className={rightAlign}>\n <Typography use={\"subtitle2\"}>\n {statusLabels[item.meta.status]} (v{item.meta.version})\n </Typography>\n </UIList.ListItemMeta>\n </UIList.ListItem>\n ))}\n </Scrollbar>\n {loadMoreLoading && (\n <InlineLoaderWrapper>\n <Typography use={\"overline\"}>{t`Loading more entries...`}</Typography>\n </InlineLoaderWrapper>\n )}\n </>\n )}\n </UIList.DataList>\n );\n};\n\nexport default ContentEntriesList;\n"]}
1
+ {"version":3,"sources":["ContentEntriesList.tsx"],"names":["React","useMemo","debounce","css","TimeAgo","pluralize","styled","i18n","Form","Typography","UIList","ButtonIcon","ButtonSecondary","Cell","Grid","Scrollbar","Select","ReactComponent","AddIcon","FilterIcon","SearchUI","statusLabels","useCallback","useContentEntriesList","useContentEntriesViewConfig","t","ns","rightAlign","alignItems","justifyContent","ModelId","color","InlineLoaderWrapper","position","bottom","left","display","width","height","backgroundColor","listItemMinHeight","minHeight","ContentEntriesList","contentModel","id","loading","canCreate","onCreate","data","editEntry","loadMore","loadMoreLoading","listQueryVariables","setListQueryVariables","sorters","filter","setFilter","viewConfig","loadMoreOnScroll","scrollFrame","top","formInitialData","sort","appliesToContentModel","modelIds","length","includes","modelId","entriesDataListModalOverlay","status","Bind","map","value","label","filters","name","element","title","item","meta","time","savedOn","version"],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport debounce from \"lodash/debounce\";\nimport { css } from \"emotion\";\n/**\n * Package timeago-react does not have types.\n */\n// @ts-ignore\nimport TimeAgo from \"timeago-react\";\nimport pluralize from \"pluralize\";\nimport styled from \"@emotion/styled\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Form } from \"@webiny/form\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport * as UIList from \"@webiny/ui/List\";\nimport { ButtonIcon, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Scrollbar } from \"@webiny/ui/Scrollbar\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport statusLabels from \"../../constants/statusLabels\";\nimport { useCallback } from \"react\";\nimport { useContentEntriesList } from \"~/admin/views/contentEntries/hooks/useContentEntriesList\";\nimport { positionValues as PositionValues } from \"react-custom-scrollbars\";\nimport { CmsEditorContentEntry } from \"~/types\";\nimport {\n useContentEntriesViewConfig,\n ContentEntriesViewConfigFilter\n} from \"./experiment/ContentEntriesViewConfig\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/contents/data-list\");\n\nconst rightAlign = css({\n alignItems: \"flex-end !important\",\n justifyContent: \"center !important\"\n});\n\nconst ModelId = styled(\"span\")({\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n});\n\nconst InlineLoaderWrapper = styled(\"div\")({\n position: \"absolute\",\n bottom: 0,\n left: 0,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n height: 40,\n backgroundColor: \"var(--mdc-theme-surface)\"\n});\n\nconst listItemMinHeight = css({\n minHeight: \"66px !important\"\n});\n\nconst ContentEntriesList: React.FC = () => {\n const {\n contentModel,\n id,\n loading,\n canCreate,\n onCreate,\n data,\n editEntry,\n loadMore,\n loadMoreLoading,\n listQueryVariables,\n setListQueryVariables,\n sorters,\n filter,\n setFilter\n } = useContentEntriesList();\n\n const viewConfig = useContentEntriesViewConfig();\n\n const loadMoreOnScroll = useCallback(\n debounce((scrollFrame: PositionValues) => {\n if (scrollFrame.top > 0.9) {\n loadMore();\n }\n }, 500),\n [data]\n );\n\n const formInitialData = {\n ...listQueryVariables,\n sort: listQueryVariables.sort ? listQueryVariables.sort[0] : \"\"\n };\n\n const appliesToContentModel = useCallback(\n ({ modelIds }: ContentEntriesViewConfigFilter) => {\n return modelIds.length === 0 || modelIds.includes(contentModel.modelId);\n },\n [contentModel]\n );\n\n const entriesDataListModalOverlay = useMemo(\n () => (\n <UIList.DataListModalOverlay>\n <Form\n data={formInitialData}\n onChange={({ sort, status, ...data }) => {\n setListQueryVariables(() => ({\n status,\n // GraphQL Schema requires \"sort\" to be an array.\n sort: [sort],\n // Spread the rest of form data\n ...data\n }));\n }}\n >\n {({ Bind }) => (\n <Grid>\n <Cell span={12}>\n <Bind name={\"sort\"}>\n <Select label={t`Sort by`}>\n {sorters.map(({ value, label }) => {\n return (\n <option key={value} value={value}>\n {label}\n </option>\n );\n })}\n </Select>\n </Bind>\n </Cell>\n {viewConfig.filters.filter(appliesToContentModel).map(filter => (\n <Cell span={12} key={filter.name}>\n {filter.element}\n </Cell>\n ))}\n </Grid>\n )}\n </Form>\n </UIList.DataListModalOverlay>\n ),\n [listQueryVariables, viewConfig.filters]\n );\n\n return (\n <UIList.DataList\n loading={loading}\n data={data}\n title={\n <span>\n {pluralize(contentModel.name)}\n <br />\n <Typography use={\"subtitle1\"}>\n <ModelId>Model ID: {contentModel.modelId}</ModelId>\n </Typography>\n </span>\n }\n actions={\n canCreate ? (\n <ButtonSecondary data-testid=\"new-record-button\" onClick={onCreate}>\n <ButtonIcon icon={<AddIcon />} /> {t`New Entry`}\n </ButtonSecondary>\n ) : null\n }\n search={\n <SearchUI\n value={filter}\n onChange={setFilter}\n inputPlaceholder={t`Search {title}`({ title: pluralize(contentModel.name) })}\n />\n }\n modalOverlay={entriesDataListModalOverlay}\n modalOverlayAction={\n <UIList.DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\n }\n >\n {({ data }: { data: CmsEditorContentEntry[] }) => (\n <>\n <Scrollbar\n data-testid=\"default-data-list\"\n onScrollFrame={scrollFrame => loadMoreOnScroll(scrollFrame)}\n >\n {data.map(item => (\n <UIList.ListItem\n key={item.id}\n className={listItemMinHeight}\n selected={item.id === id}\n >\n <UIList.ListItemText onClick={editEntry(item)}>\n {item.meta.title || \"Untitled\"}\n <UIList.ListItemTextSecondary>\n {t`Last modified: {time}.`({\n time: <TimeAgo datetime={item.savedOn} />\n })}\n </UIList.ListItemTextSecondary>\n </UIList.ListItemText>\n\n <UIList.ListItemMeta className={rightAlign}>\n <Typography use={\"subtitle2\"}>\n {statusLabels[item.meta.status]} (v{item.meta.version})\n </Typography>\n </UIList.ListItemMeta>\n </UIList.ListItem>\n ))}\n </Scrollbar>\n {loadMoreLoading && (\n <InlineLoaderWrapper>\n <Typography use={\"overline\"}>{t`Loading more entries...`}</Typography>\n </InlineLoaderWrapper>\n )}\n </>\n )}\n </UIList.DataList>\n );\n};\n\nexport default ContentEntriesList;\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":";;;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"]}
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"]}
@@ -14,7 +14,7 @@ var sortEntries = function sortEntries(list, sort) {
14
14
  if (!sort) {
15
15
  return list;
16
16
  } else if (Array.isArray(sort) === false) {
17
- console.log("Sort is not an Array of string.");
17
+ console.log("Sort is not an Array of strings.");
18
18
  return list;
19
19
  } else if (sort.length === 0) {
20
20
  return list;
@@ -1 +1 @@
1
- {"version":3,"sources":["cache.ts"],"names":["dotProp","orderBy","GQL","parseIdentifier","sortEntries","list","sort","Array","isArray","console","log","length","sortBy","split","key","value","order","toLowerCase","addEntryToListCache","model","cache","entry","variables","gqlParams","query","createListQuery","response","readQuery","content","data","writeQuery","updateLatestRevisionInListCache","revision","id","uniqueId","index","findIndex","item","startsWith","set","removeEntryFromListCache","entryId","delete","removeRevisionFromEntryCache","createRevisionsQuery","revisions","revisionsData","filter","addRevisionToRevisionsCache","unpublishPreviouslyPublishedRevision","publishedId","prevPublished","meta","status"],"mappings":"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","sourcesContent":["import dotProp from \"dot-prop-immutable\";\nimport orderBy from \"lodash/orderBy\";\nimport { CmsContentEntryRevision, CmsEditorContentEntry, CmsModel } from \"~/types\";\nimport * as GQL from \"~/admin/graphql/contentEntries\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { DataProxy } from \"apollo-cache\";\nimport {\n CmsEntriesListQueryResponse,\n CmsEntriesListQueryVariables,\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n} from \"~/admin/graphql/contentEntries\";\n\n/*\n * We need to preserve the order of entries with new entry addition\n * because we're not re-fetching the list but updating it directly inside cache.\n * */\nconst sortEntries = (\n list: CmsEditorContentEntry[],\n sort?: string[] | null\n): CmsEditorContentEntry[] => {\n if (!sort) {\n return list;\n } else if (Array.isArray(sort) === false) {\n console.log(\"Sort is not an Array of string.\");\n return list;\n } else if (sort.length === 0) {\n return list;\n }\n const [sortBy] = sort;\n const [key, value] = sortBy.split(\"_\");\n const order = value.toLowerCase() as \"asc\" | \"desc\";\n return orderBy(list, [key], [order]);\n};\n\nexport const addEntryToListCache = (\n model: CmsModel,\n cache: DataProxy,\n entry: CmsEditorContentEntry,\n variables: CmsEntriesListQueryVariables\n): void => {\n const gqlParams = { query: GQL.createListQuery(model), variables };\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: {\n ...content,\n data: sortEntries([entry, ...content.data], variables.sort)\n }\n }\n });\n};\n\nexport const updateLatestRevisionInListCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision,\n variables: CmsEntriesListQueryVariables\n): void => {\n const gqlParams = { query: GQL.createListQuery(model), variables };\n\n const [uniqueId] = revision.id.split(\"#\");\n\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n const index = content.data.findIndex(item => item.id.startsWith(uniqueId));\n if (index === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: dotProp.set(content, `data.${index}`, revision)\n }\n });\n};\n\nexport const removeEntryFromListCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision,\n variables: CmsEntriesListQueryVariables\n): void => {\n // Delete the item from list cache\n const gqlParams = { query: GQL.createListQuery(model), variables };\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n const { id: entryId } = parseIdentifier(revision.id);\n const index = content.data.findIndex(item => item.id.startsWith(entryId));\n if (index === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: dotProp.delete(content, `data.${index}`)\n }\n });\n};\n\nexport const removeRevisionFromEntryCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision\n): CmsContentEntryRevision[] => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: revision.id.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n if (\n !response ||\n !response.revisions ||\n !response.revisions.data ||\n response.revisions.data.length === 0\n ) {\n return [];\n }\n\n const { revisions: revisionsData } = response;\n\n const revisions = revisionsData.data.filter(item => {\n return item.id !== revision.id;\n });\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions\n }\n });\n\n return revisions;\n};\n\nexport const addRevisionToRevisionsCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision\n): void => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: revision.id.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n\n if (!response || !response.revisions || !response.revisions.data) {\n return;\n }\n const { revisions } = response;\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions: dotProp.set(revisions, `data`, [revision, ...revisions.data])\n }\n });\n};\n\nexport const unpublishPreviouslyPublishedRevision = (\n model: CmsModel,\n cache: DataProxy,\n publishedId: string\n): void => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: publishedId.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n\n if (!response || !response.revisions || !response.revisions.data) {\n return;\n }\n const { revisions } = response;\n\n const prevPublished = revisions.data.findIndex(\n item => item.id !== publishedId && item.meta.status === \"published\"\n );\n\n if (prevPublished === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions: dotProp.set(revisions, `data.${prevPublished}.meta.status`, \"unpublished\")\n }\n });\n};\n"]}
1
+ {"version":3,"sources":["cache.ts"],"names":["dotProp","orderBy","GQL","parseIdentifier","sortEntries","list","sort","Array","isArray","console","log","length","sortBy","split","key","value","order","toLowerCase","addEntryToListCache","model","cache","entry","variables","gqlParams","query","createListQuery","response","readQuery","content","data","writeQuery","updateLatestRevisionInListCache","revision","id","uniqueId","index","findIndex","item","startsWith","set","removeEntryFromListCache","entryId","delete","removeRevisionFromEntryCache","createRevisionsQuery","revisions","revisionsData","filter","addRevisionToRevisionsCache","unpublishPreviouslyPublishedRevision","publishedId","prevPublished","meta","status"],"mappings":"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","sourcesContent":["import dotProp from \"dot-prop-immutable\";\nimport orderBy from \"lodash/orderBy\";\nimport { CmsContentEntryRevision, CmsEditorContentEntry, CmsModel } from \"~/types\";\nimport * as GQL from \"~/admin/graphql/contentEntries\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { DataProxy } from \"apollo-cache\";\nimport {\n CmsEntriesListQueryResponse,\n CmsEntriesListQueryVariables,\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n} from \"~/admin/graphql/contentEntries\";\n\n/*\n * We need to preserve the order of entries with new entry addition\n * because we're not re-fetching the list but updating it directly inside cache.\n * */\nconst sortEntries = (\n list: CmsEditorContentEntry[],\n sort?: string[] | null\n): CmsEditorContentEntry[] => {\n if (!sort) {\n return list;\n } else if (Array.isArray(sort) === false) {\n console.log(\"Sort is not an Array of strings.\");\n return list;\n } else if (sort.length === 0) {\n return list;\n }\n const [sortBy] = sort;\n const [key, value] = sortBy.split(\"_\");\n const order = value.toLowerCase() as \"asc\" | \"desc\";\n return orderBy(list, [key], [order]);\n};\n\nexport const addEntryToListCache = (\n model: CmsModel,\n cache: DataProxy,\n entry: CmsEditorContentEntry,\n variables: CmsEntriesListQueryVariables\n): void => {\n const gqlParams = { query: GQL.createListQuery(model), variables };\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: {\n ...content,\n data: sortEntries([entry, ...content.data], variables.sort)\n }\n }\n });\n};\n\nexport const updateLatestRevisionInListCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision,\n variables: CmsEntriesListQueryVariables\n): void => {\n const gqlParams = { query: GQL.createListQuery(model), variables };\n\n const [uniqueId] = revision.id.split(\"#\");\n\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n const index = content.data.findIndex(item => item.id.startsWith(uniqueId));\n if (index === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: dotProp.set(content, `data.${index}`, revision)\n }\n });\n};\n\nexport const removeEntryFromListCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision,\n variables: CmsEntriesListQueryVariables\n): void => {\n // Delete the item from list cache\n const gqlParams = { query: GQL.createListQuery(model), variables };\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n const { id: entryId } = parseIdentifier(revision.id);\n const index = content.data.findIndex(item => item.id.startsWith(entryId));\n if (index === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: dotProp.delete(content, `data.${index}`)\n }\n });\n};\n\nexport const removeRevisionFromEntryCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision\n): CmsContentEntryRevision[] => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: revision.id.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n if (\n !response ||\n !response.revisions ||\n !response.revisions.data ||\n response.revisions.data.length === 0\n ) {\n return [];\n }\n\n const { revisions: revisionsData } = response;\n\n const revisions = revisionsData.data.filter(item => {\n return item.id !== revision.id;\n });\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions\n }\n });\n\n return revisions;\n};\n\nexport const addRevisionToRevisionsCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision\n): void => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: revision.id.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n\n if (!response || !response.revisions || !response.revisions.data) {\n return;\n }\n const { revisions } = response;\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions: dotProp.set(revisions, `data`, [revision, ...revisions.data])\n }\n });\n};\n\nexport const unpublishPreviouslyPublishedRevision = (\n model: CmsModel,\n cache: DataProxy,\n publishedId: string\n): void => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: publishedId.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n\n if (!response || !response.revisions || !response.revisions.data) {\n return;\n }\n const { revisions } = response;\n\n const prevPublished = revisions.data.findIndex(\n item => item.id !== publishedId && item.meta.status === \"published\"\n );\n\n if (prevPublished === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions: dotProp.set(revisions, `data.${prevPublished}.meta.status`, \"unpublished\")\n }\n });\n};\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":"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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 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"]}
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"]}
@@ -0,0 +1 @@
1
+ export declare const ContentEntriesModule: () => JSX.Element;