@webiny/app-headless-cms 5.29.0 → 5.30.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 (107) hide show
  1. package/HeadlessCMS.js +5 -1
  2. package/HeadlessCMS.js.map +1 -1
  3. package/admin/components/ContentEntryForm/useBind.js +23 -1
  4. package/admin/components/ContentEntryForm/useBind.js.map +1 -1
  5. package/admin/components/ContentModelEditor/Editor.js +1 -1
  6. package/admin/components/ContentModelEditor/Editor.js.map +1 -1
  7. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js +1 -1
  8. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js.map +1 -1
  9. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js +10 -5
  10. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js.map +1 -1
  11. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js +1 -0
  12. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js.map +1 -1
  13. package/admin/components/FieldEditor/EditFieldDialog.js +8 -7
  14. package/admin/components/FieldEditor/EditFieldDialog.js.map +1 -1
  15. package/admin/contexts/Cms/index.d.ts +60 -0
  16. package/admin/contexts/Cms/index.js +107 -9
  17. package/admin/contexts/Cms/index.js.map +1 -1
  18. package/admin/plugins/editor/defaultBar/SaveContentModelButton.js +1 -0
  19. package/admin/plugins/editor/defaultBar/SaveContentModelButton.js.map +1 -1
  20. package/admin/plugins/entry/DefaultOnEntryDelete.d.ts +2 -0
  21. package/admin/plugins/entry/DefaultOnEntryDelete.js +204 -0
  22. package/admin/plugins/entry/DefaultOnEntryDelete.js.map +1 -0
  23. package/admin/plugins/entry/DefaultOnEntryPublish.d.ts +2 -0
  24. package/admin/plugins/entry/DefaultOnEntryPublish.js +176 -0
  25. package/admin/plugins/entry/DefaultOnEntryPublish.js.map +1 -0
  26. package/admin/plugins/fieldRenderers/Accordion.js +3 -0
  27. package/admin/plugins/fieldRenderers/Accordion.js.map +1 -1
  28. package/admin/plugins/fieldRenderers/DynamicSection.d.ts +11 -8
  29. package/admin/plugins/fieldRenderers/DynamicSection.js +0 -3
  30. package/admin/plugins/fieldRenderers/DynamicSection.js.map +1 -1
  31. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +2 -1
  32. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
  33. package/admin/plugins/fieldRenderers/checkboxes.js +2 -1
  34. package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
  35. package/admin/plugins/fieldRenderers/dateTime/Input.js +2 -1
  36. package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
  37. package/admin/plugins/fieldRenderers/dateTime/Select.js +2 -1
  38. package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
  39. package/admin/plugins/fieldRenderers/dateTime/utils.d.ts +3 -3
  40. package/admin/plugins/fieldRenderers/file/fileField.js +2 -1
  41. package/admin/plugins/fieldRenderers/file/fileField.js.map +1 -1
  42. package/admin/plugins/fieldRenderers/file/fileFields.js +4 -2
  43. package/admin/plugins/fieldRenderers/file/fileFields.js.map +1 -1
  44. package/admin/plugins/fieldRenderers/longText/longText.js +2 -1
  45. package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
  46. package/admin/plugins/fieldRenderers/number/numberInput.js +2 -1
  47. package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
  48. package/admin/plugins/fieldRenderers/object/StyledComponents.d.ts +2 -0
  49. package/admin/plugins/fieldRenderers/object/StyledComponents.js +37 -2
  50. package/admin/plugins/fieldRenderers/object/StyledComponents.js.map +1 -1
  51. package/admin/plugins/fieldRenderers/object/arrow_drop_down.svg +1 -0
  52. package/admin/plugins/fieldRenderers/object/arrow_drop_up.svg +1 -0
  53. package/admin/plugins/fieldRenderers/object/multipleObjects.js +101 -47
  54. package/admin/plugins/fieldRenderers/object/multipleObjects.js.map +1 -1
  55. package/admin/plugins/fieldRenderers/radioButtons.js +2 -1
  56. package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
  57. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +5 -5
  58. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
  59. package/admin/plugins/fieldRenderers/ref/components/useReference.js +6 -1
  60. package/admin/plugins/fieldRenderers/ref/components/useReference.js.map +1 -1
  61. package/admin/plugins/fieldRenderers/richText/richTextInput.js +2 -1
  62. package/admin/plugins/fieldRenderers/richText/richTextInput.js.map +1 -1
  63. package/admin/plugins/fieldRenderers/richText/richTextInputs.js +2 -2
  64. package/admin/plugins/fieldRenderers/richText/richTextInputs.js.map +1 -1
  65. package/admin/plugins/fieldRenderers/select.js +2 -1
  66. package/admin/plugins/fieldRenderers/select.js.map +1 -1
  67. package/admin/plugins/fieldRenderers/text/textInput.js +2 -1
  68. package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
  69. package/admin/plugins/fieldValidators/date/availableValidators.d.ts +1 -1
  70. package/admin/plugins/index.d.ts +1 -1
  71. package/admin/plugins/validators/unique.d.ts +1 -1
  72. package/admin/views/contentEntries/ContentEntriesList.js +7 -2
  73. package/admin/views/contentEntries/ContentEntriesList.js.map +1 -1
  74. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.d.ts +4 -6
  75. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js +12 -71
  76. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js.map +1 -1
  77. package/admin/views/contentEntries/ContentEntry/PublishEntryRevisionListItem.d.ts +1 -0
  78. package/admin/views/contentEntries/ContentEntry/PublishEntryRevisionListItem.js +35 -0
  79. package/admin/views/contentEntries/ContentEntry/PublishEntryRevisionListItem.js.map +1 -0
  80. package/admin/views/contentEntries/ContentEntry/RevisionListItem.js +9 -11
  81. package/admin/views/contentEntries/ContentEntry/RevisionListItem.js.map +1 -1
  82. package/admin/views/contentEntries/ContentEntry/cache.js +47 -21
  83. package/admin/views/contentEntries/ContentEntry/cache.js.map +1 -1
  84. package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js +32 -46
  85. package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js.map +1 -1
  86. package/admin/views/contentEntries/ContentEntry/header/index.js +6 -6
  87. package/admin/views/contentEntries/ContentEntry/header/index.js.map +1 -1
  88. package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.d.ts +1 -2
  89. package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.js +6 -4
  90. package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.js.map +1 -1
  91. package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.d.ts +1 -3
  92. package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.js +6 -4
  93. package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.js.map +1 -1
  94. package/admin/views/contentEntries/ContentEntry/header/saveAndPublishContent/SaveAndPublishContent.d.ts +1 -3
  95. package/admin/views/contentEntries/ContentEntry/header/saveAndPublishContent/SaveAndPublishContent.js +45 -38
  96. package/admin/views/contentEntries/ContentEntry/header/saveAndPublishContent/SaveAndPublishContent.js.map +1 -1
  97. package/admin/views/contentEntries/ContentEntry/useRevision.js +57 -70
  98. package/admin/views/contentEntries/ContentEntry/useRevision.js.map +1 -1
  99. package/admin/views/contentEntries/ContentEntry.js +2 -4
  100. package/admin/views/contentEntries/ContentEntry.js.map +1 -1
  101. package/admin/views/contentEntries/hooks/useContentEntry.js +7 -1
  102. package/admin/views/contentEntries/hooks/useContentEntry.js.map +1 -1
  103. package/admin/views/contentModels/NewContentModelDialog.js +6 -3
  104. package/admin/views/contentModels/NewContentModelDialog.js.map +1 -1
  105. package/package.json +21 -20
  106. package/types.d.ts +10 -7
  107. package/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","ns","RequestReview","useContentEntry","entry","useRevision","revision","requestReview","usePermission","canRequestReview","useConfirmationDialog","title","message","showConfirmation","onClick","useCallback","id","buttonEnabled","meta","status"],"sources":["RequestReview.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ReactComponent as RequestReviewIcon } from \"./emoji_people-24px.svg\";\nimport { useRevision } from \"~/admin/views/contentEntries/ContentEntry/useRevision\";\nimport usePermission from \"~/admin/hooks/usePermission\";\nimport { useContentEntry } from \"~/admin/views/contentEntries/hooks/useContentEntry\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/content-details/header/request-review\");\n\nconst RequestReview: React.FC = () => {\n const { entry } = useContentEntry();\n const { requestReview } = useRevision({ revision: entry });\n const { canRequestReview } = usePermission();\n\n const { showConfirmation } = useConfirmationDialog({\n title: t`Request Review`,\n message: (\n <p>{t`You are about to request a review of this content entry. Are you sure you want to continue?`}</p>\n )\n });\n\n const onClick = useCallback((): void => {\n showConfirmation(async (): Promise<void> => {\n await requestReview(entry.id);\n });\n }, [entry.id]);\n\n if (!canRequestReview(\"cms.contentEntry\")) {\n return null;\n }\n\n const buttonEnabled =\n entry.id && (entry.meta.status === \"draft\" || entry.meta.status === \"changesRequested\");\n\n return (\n <React.Fragment>\n <Tooltip content={t`Request Review`} placement={\"top\"}>\n <IconButton\n disabled={!buttonEnabled}\n icon={<RequestReviewIcon />}\n onClick={onClick}\n />\n </Tooltip>\n </React.Fragment>\n );\n};\n\nexport default RequestReview;\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,8DAAR,CAAV;;AAEA,IAAMC,aAAuB,GAAG,SAA1BA,aAA0B,GAAM;EAClC,uBAAkB,IAAAC,iCAAA,GAAlB;EAAA,IAAQC,KAAR,oBAAQA,KAAR;;EACA,mBAA0B,IAAAC,yBAAA,EAAY;IAAEC,QAAQ,EAAEF;EAAZ,CAAZ,CAA1B;EAAA,IAAQG,aAAR,gBAAQA,aAAR;;EACA,qBAA6B,IAAAC,uBAAA,GAA7B;EAAA,IAAQC,gBAAR,kBAAQA,gBAAR;;EAEA,4BAA6B,IAAAC,4CAAA,EAAsB;IAC/CC,KAAK,EAAEZ,CAAF,iGAD0C;IAE/Ca,OAAO,eACH,wCAAIb,CAAJ;EAH2C,CAAtB,CAA7B;EAAA,IAAQc,gBAAR,yBAAQA,gBAAR;;EAOA,IAAMC,OAAO,GAAG,IAAAC,kBAAA,EAAY,YAAY;IACpCF,gBAAgB,sGAAC;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACPN,aAAa,CAACH,KAAK,CAACY,EAAP,CADN;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAD,GAAhB;EAGH,CAJe,EAIb,CAACZ,KAAK,CAACY,EAAP,CAJa,CAAhB;;EAMA,IAAI,CAACP,gBAAgB,CAAC,kBAAD,CAArB,EAA2C;IACvC,OAAO,IAAP;EACH;;EAED,IAAMQ,aAAa,GACfb,KAAK,CAACY,EAAN,KAAaZ,KAAK,CAACc,IAAN,CAAWC,MAAX,KAAsB,OAAtB,IAAiCf,KAAK,CAACc,IAAN,CAAWC,MAAX,KAAsB,kBAApE,CADJ;EAGA,oBACI,6BAAC,cAAD,CAAO,QAAP,qBACI,6BAAC,gBAAD;IAAS,OAAO,EAAEpB,CAAF,mGAAhB;IAAqC,SAAS,EAAE;EAAhD,gBACI,6BAAC,kBAAD;IACI,QAAQ,EAAE,CAACkB,aADf;IAEI,IAAI,eAAE,6BAAC,gCAAD,OAFV;IAGI,OAAO,EAAEH;EAHb,EADJ,CADJ,CADJ;AAWH,CApCD;;eAsCeZ,a"}
1
+ {"version":3,"names":["t","i18n","ns","RequestReviewComponent","useContentEntry","entry","useRevision","revision","requestReview","usePermission","canRequestReview","useConfirmationDialog","title","message","showConfirmation","onClick","useCallback","id","buttonEnabled","meta","status","RequestReview","makeComposable"],"sources":["RequestReview.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ReactComponent as RequestReviewIcon } from \"./emoji_people-24px.svg\";\nimport { useRevision } from \"~/admin/views/contentEntries/ContentEntry/useRevision\";\nimport usePermission from \"~/admin/hooks/usePermission\";\nimport { useContentEntry } from \"~/admin/views/contentEntries/hooks/useContentEntry\";\nimport { makeComposable } from \"@webiny/react-composition\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/content-details/header/request-review\");\n\nconst RequestReviewComponent: React.FC = () => {\n const { entry } = useContentEntry();\n const { requestReview } = useRevision({ revision: entry });\n const { canRequestReview } = usePermission();\n\n const { showConfirmation } = useConfirmationDialog({\n title: t`Request Review`,\n message: (\n <p>{t`You are about to request a review of this content entry. Are you sure you want to continue?`}</p>\n )\n });\n\n const onClick = useCallback((): void => {\n showConfirmation(async (): Promise<void> => {\n await requestReview(entry.id);\n });\n }, [entry.id]);\n\n if (!canRequestReview(\"cms.contentEntry\")) {\n return null;\n }\n\n const buttonEnabled =\n entry.id && (entry.meta.status === \"draft\" || entry.meta.status === \"changesRequested\");\n\n return (\n <React.Fragment>\n <Tooltip content={t`Request Review`} placement={\"top\"}>\n <IconButton\n disabled={!buttonEnabled}\n icon={<RequestReviewIcon />}\n onClick={onClick}\n />\n </Tooltip>\n </React.Fragment>\n );\n};\n\nexport const RequestReview = makeComposable(\"RequestReview\", RequestReviewComponent);\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,8DAAR,CAAV;;AAEA,IAAMC,sBAAgC,GAAG,SAAnCA,sBAAmC,GAAM;EAC3C,uBAAkB,IAAAC,iCAAA,GAAlB;EAAA,IAAQC,KAAR,oBAAQA,KAAR;;EACA,mBAA0B,IAAAC,yBAAA,EAAY;IAAEC,QAAQ,EAAEF;EAAZ,CAAZ,CAA1B;EAAA,IAAQG,aAAR,gBAAQA,aAAR;;EACA,qBAA6B,IAAAC,uBAAA,GAA7B;EAAA,IAAQC,gBAAR,kBAAQA,gBAAR;;EAEA,4BAA6B,IAAAC,4CAAA,EAAsB;IAC/CC,KAAK,EAAEZ,CAAF,iGAD0C;IAE/Ca,OAAO,eACH,wCAAIb,CAAJ;EAH2C,CAAtB,CAA7B;EAAA,IAAQc,gBAAR,yBAAQA,gBAAR;;EAOA,IAAMC,OAAO,GAAG,IAAAC,kBAAA,EAAY,YAAY;IACpCF,gBAAgB,sGAAC;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACPN,aAAa,CAACH,KAAK,CAACY,EAAP,CADN;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAD,GAAhB;EAGH,CAJe,EAIb,CAACZ,KAAK,CAACY,EAAP,CAJa,CAAhB;;EAMA,IAAI,CAACP,gBAAgB,CAAC,kBAAD,CAArB,EAA2C;IACvC,OAAO,IAAP;EACH;;EAED,IAAMQ,aAAa,GACfb,KAAK,CAACY,EAAN,KAAaZ,KAAK,CAACc,IAAN,CAAWC,MAAX,KAAsB,OAAtB,IAAiCf,KAAK,CAACc,IAAN,CAAWC,MAAX,KAAsB,kBAApE,CADJ;EAGA,oBACI,6BAAC,cAAD,CAAO,QAAP,qBACI,6BAAC,gBAAD;IAAS,OAAO,EAAEpB,CAAF,mGAAhB;IAAqC,SAAS,EAAE;EAAhD,gBACI,6BAAC,kBAAD;IACI,QAAQ,EAAE,CAACkB,aADf;IAEI,IAAI,eAAE,6BAAC,gCAAD,OAFV;IAGI,OAAO,EAAEH;EAHb,EADJ,CADJ,CADJ;AAWH,CApCD;;AAsCO,IAAMM,aAAa,GAAG,IAAAC,gCAAA,EAAe,eAAf,EAAgCnB,sBAAhC,CAAtB"}
@@ -1,3 +1 @@
1
- import React from "react";
2
- declare const SaveAndPublishButton: React.FC;
3
- export default SaveAndPublishButton;
1
+ export declare const SaveAndPublishButton: import("@webiny/react-composition").ComposableFC<{}>;
@@ -2,10 +2,12 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
8
- exports.default = void 0;
10
+ exports.SaveAndPublishButton = void 0;
9
11
 
10
12
  var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
11
13
 
@@ -13,7 +15,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
13
15
 
14
16
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
15
17
 
16
- var _react = _interopRequireDefault(require("react"));
18
+ var _react = _interopRequireWildcard(require("react"));
17
19
 
18
20
  var _emotion = require("emotion");
19
21
 
@@ -29,6 +31,8 @@ var _useContentEntry2 = require("../../../hooks/useContentEntry");
29
31
 
30
32
  var _usePermission2 = _interopRequireDefault(require("../../../../../hooks/usePermission"));
31
33
 
34
+ var _reactComposition = require("@webiny/react-composition");
35
+
32
36
  var _templateObject, _templateObject2, _templateObject3;
33
37
 
34
38
  var t = _i18n.i18n.ns("app-headless-cms/admin/plugins/content-details/header/publish-revision");
@@ -37,7 +41,7 @@ var buttonStyles = /*#__PURE__*/(0, _emotion.css)({
37
41
  marginLeft: 16
38
42
  }, "label:buttonStyles;");
39
43
 
40
- var SaveAndPublishButton = function SaveAndPublishButton() {
44
+ var SaveAndPublishButtonComponent = function SaveAndPublishButtonComponent() {
41
45
  var _useContentEntry = (0, _useContentEntry2.useContentEntry)(),
42
46
  form = _useContentEntry.form,
43
47
  loading = _useContentEntry.loading,
@@ -59,47 +63,50 @@ var SaveAndPublishButton = function SaveAndPublishButton() {
59
63
  canEdit = _usePermission.canEdit,
60
64
  canPublish = _usePermission.canPublish;
61
65
 
66
+ var onPublishClick = (0, _react.useCallback)(function (ev) {
67
+ showConfirmation( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
68
+ var entry;
69
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
70
+ while (1) {
71
+ switch (_context.prev = _context.next) {
72
+ case 0:
73
+ _context.next = 2;
74
+ return form.current.submit(ev);
75
+
76
+ case 2:
77
+ entry = _context.sent;
78
+
79
+ if (!(!entry || !entry.id)) {
80
+ _context.next = 5;
81
+ break;
82
+ }
83
+
84
+ return _context.abrupt("return");
85
+
86
+ case 5:
87
+ _context.next = 7;
88
+ return publishRevision(entry.id);
89
+
90
+ case 7:
91
+ case "end":
92
+ return _context.stop();
93
+ }
94
+ }
95
+ }, _callee);
96
+ })));
97
+ }, [showConfirmation]);
98
+
62
99
  if (!canEdit(entry, "cms.contentEntry") || !canPublish("cms.contentEntry")) {
63
100
  return null;
64
101
  }
65
102
 
66
103
  return /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
67
104
  className: buttonStyles,
68
- onClick: function onClick(ev) {
69
- showConfirmation( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
70
- var entry;
71
- return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
72
- while (1) {
73
- switch (_context.prev = _context.next) {
74
- case 0:
75
- _context.next = 2;
76
- return form.current.submit(ev);
77
-
78
- case 2:
79
- entry = _context.sent;
80
-
81
- if (entry) {
82
- _context.next = 5;
83
- break;
84
- }
85
-
86
- return _context.abrupt("return");
87
-
88
- case 5:
89
- _context.next = 7;
90
- return publishRevision(entry.id);
91
-
92
- case 7:
93
- case "end":
94
- return _context.stop();
95
- }
96
- }
97
- }, _callee);
98
- })));
99
- },
100
- disabled: loading
105
+ onClick: onPublishClick,
106
+ disabled: loading,
107
+ "data-testid": "cms-content-save-publish-content-button"
101
108
  }, t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["Save & Publish"]))));
102
109
  };
103
110
 
104
- var _default = SaveAndPublishButton;
105
- exports.default = _default;
111
+ var SaveAndPublishButton = (0, _reactComposition.makeComposable)("SaveAndPublishButton", SaveAndPublishButtonComponent);
112
+ exports.SaveAndPublishButton = SaveAndPublishButton;
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","ns","buttonStyles","css","marginLeft","SaveAndPublishButton","useContentEntry","form","loading","entry","useRevision","revision","publishRevision","useConfirmationDialog","title","message","dataTestId","showConfirmation","usePermission","canEdit","canPublish","ev","current","submit","id"],"sources":["SaveAndPublishContent.tsx"],"sourcesContent":["import React from \"react\";\nimport { css } from \"emotion\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport { useRevision } from \"~/admin/views/contentEntries/ContentEntry/useRevision\";\nimport { useContentEntry } from \"~/admin/views/contentEntries/hooks/useContentEntry\";\nimport usePermission from \"~/admin/hooks/usePermission\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/plugins/content-details/header/publish-revision\");\n\nconst buttonStyles = css({\n marginLeft: 16\n});\n\nconst SaveAndPublishButton: React.FC = () => {\n const { form, loading, entry } = useContentEntry();\n const { publishRevision } = useRevision({ revision: entry });\n\n const { showConfirmation } = useConfirmationDialog({\n title: t`Publish content`,\n message: (\n <p>{t`You are about to publish a new revision. Are you sure you want to continue?`}</p>\n ),\n dataTestId: \"cms-confirm-save-and-publish\"\n });\n\n const { canEdit, canPublish } = usePermission();\n\n if (!canEdit(entry, \"cms.contentEntry\") || !canPublish(\"cms.contentEntry\")) {\n return null;\n }\n\n return (\n <ButtonPrimary\n className={buttonStyles}\n onClick={ev => {\n showConfirmation(async () => {\n const entry = await form.current.submit(ev);\n if (!entry) {\n return;\n }\n await publishRevision(entry.id);\n });\n }}\n disabled={loading}\n >\n {t`Save & Publish`}\n </ButtonPrimary>\n );\n};\n\nexport default SaveAndPublishButton;\n"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,wEAAR,CAAV;;AAEA,IAAMC,YAAY,gBAAG,IAAAC,YAAA,EAAI;EACrBC,UAAU,EAAE;AADS,CAAJ,wBAArB;;AAIA,IAAMC,oBAA8B,GAAG,SAAjCA,oBAAiC,GAAM;EACzC,uBAAiC,IAAAC,iCAAA,GAAjC;EAAA,IAAQC,IAAR,oBAAQA,IAAR;EAAA,IAAcC,OAAd,oBAAcA,OAAd;EAAA,IAAuBC,KAAvB,oBAAuBA,KAAvB;;EACA,mBAA4B,IAAAC,yBAAA,EAAY;IAAEC,QAAQ,EAAEF;EAAZ,CAAZ,CAA5B;EAAA,IAAQG,eAAR,gBAAQA,eAAR;;EAEA,4BAA6B,IAAAC,4CAAA,EAAsB;IAC/CC,KAAK,EAAEf,CAAF,kGAD0C;IAE/CgB,OAAO,eACH,wCAAIhB,CAAJ,iKAH2C;IAK/CiB,UAAU,EAAE;EALmC,CAAtB,CAA7B;EAAA,IAAQC,gBAAR,yBAAQA,gBAAR;;EAQA,qBAAgC,IAAAC,uBAAA,GAAhC;EAAA,IAAQC,OAAR,kBAAQA,OAAR;EAAA,IAAiBC,UAAjB,kBAAiBA,UAAjB;;EAEA,IAAI,CAACD,OAAO,CAACV,KAAD,EAAQ,kBAAR,CAAR,IAAuC,CAACW,UAAU,CAAC,kBAAD,CAAtD,EAA4E;IACxE,OAAO,IAAP;EACH;;EAED,oBACI,6BAAC,qBAAD;IACI,SAAS,EAAElB,YADf;IAEI,OAAO,EAAE,iBAAAmB,EAAE,EAAI;MACXJ,gBAAgB,sGAAC;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACOV,IAAI,CAACe,OAAL,CAAaC,MAAb,CAAoBF,EAApB,CADP;;cAAA;gBACPZ,KADO;;gBAAA,IAERA,KAFQ;kBAAA;kBAAA;gBAAA;;gBAAA;;cAAA;gBAAA;gBAAA,OAKPG,eAAe,CAACH,KAAK,CAACe,EAAP,CALR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAAD,GAAhB;IAOH,CAVL;IAWI,QAAQ,EAAEhB;EAXd,GAaKT,CAbL,oGADJ;AAiBH,CAnCD;;eAqCeM,oB"}
1
+ {"version":3,"names":["t","i18n","ns","buttonStyles","css","marginLeft","SaveAndPublishButtonComponent","useContentEntry","form","loading","entry","useRevision","revision","publishRevision","useConfirmationDialog","title","message","dataTestId","showConfirmation","usePermission","canEdit","canPublish","onPublishClick","useCallback","ev","current","submit","id","SaveAndPublishButton","makeComposable"],"sources":["SaveAndPublishContent.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { css } from \"emotion\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport { useRevision } from \"~/admin/views/contentEntries/ContentEntry/useRevision\";\nimport { useContentEntry } from \"~/admin/views/contentEntries/hooks/useContentEntry\";\nimport usePermission from \"~/admin/hooks/usePermission\";\nimport { makeComposable } from \"@webiny/react-composition\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/plugins/content-details/header/publish-revision\");\n\nconst buttonStyles = css({\n marginLeft: 16\n});\n\nconst SaveAndPublishButtonComponent: React.FC = () => {\n const { form, loading, entry } = useContentEntry();\n const { publishRevision } = useRevision({ revision: entry });\n\n const { showConfirmation } = useConfirmationDialog({\n title: t`Publish content`,\n message: (\n <p>{t`You are about to publish a new revision. Are you sure you want to continue?`}</p>\n ),\n dataTestId: \"cms-confirm-save-and-publish\"\n });\n\n const { canEdit, canPublish } = usePermission();\n\n const onPublishClick = useCallback(\n (ev: React.MouseEvent) => {\n showConfirmation(async () => {\n const entry = await form.current.submit(ev);\n if (!entry || !entry.id) {\n return;\n }\n await publishRevision(entry.id);\n });\n },\n [showConfirmation]\n );\n\n if (!canEdit(entry, \"cms.contentEntry\") || !canPublish(\"cms.contentEntry\")) {\n return null;\n }\n\n return (\n <ButtonPrimary\n className={buttonStyles}\n onClick={onPublishClick}\n disabled={loading}\n data-testid=\"cms-content-save-publish-content-button\"\n >\n {t`Save & Publish`}\n </ButtonPrimary>\n );\n};\n\nexport const SaveAndPublishButton = makeComposable(\n \"SaveAndPublishButton\",\n SaveAndPublishButtonComponent\n);\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,wEAAR,CAAV;;AAEA,IAAMC,YAAY,gBAAG,IAAAC,YAAA,EAAI;EACrBC,UAAU,EAAE;AADS,CAAJ,wBAArB;;AAIA,IAAMC,6BAAuC,GAAG,SAA1CA,6BAA0C,GAAM;EAClD,uBAAiC,IAAAC,iCAAA,GAAjC;EAAA,IAAQC,IAAR,oBAAQA,IAAR;EAAA,IAAcC,OAAd,oBAAcA,OAAd;EAAA,IAAuBC,KAAvB,oBAAuBA,KAAvB;;EACA,mBAA4B,IAAAC,yBAAA,EAAY;IAAEC,QAAQ,EAAEF;EAAZ,CAAZ,CAA5B;EAAA,IAAQG,eAAR,gBAAQA,eAAR;;EAEA,4BAA6B,IAAAC,4CAAA,EAAsB;IAC/CC,KAAK,EAAEf,CAAF,kGAD0C;IAE/CgB,OAAO,eACH,wCAAIhB,CAAJ,iKAH2C;IAK/CiB,UAAU,EAAE;EALmC,CAAtB,CAA7B;EAAA,IAAQC,gBAAR,yBAAQA,gBAAR;;EAQA,qBAAgC,IAAAC,uBAAA,GAAhC;EAAA,IAAQC,OAAR,kBAAQA,OAAR;EAAA,IAAiBC,UAAjB,kBAAiBA,UAAjB;;EAEA,IAAMC,cAAc,GAAG,IAAAC,kBAAA,EACnB,UAACC,EAAD,EAA0B;IACtBN,gBAAgB,sGAAC;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACOV,IAAI,CAACiB,OAAL,CAAaC,MAAb,CAAoBF,EAApB,CADP;;YAAA;cACPd,KADO;;cAAA,MAET,CAACA,KAAD,IAAU,CAACA,KAAK,CAACiB,EAFR;gBAAA;gBAAA;cAAA;;cAAA;;YAAA;cAAA;cAAA,OAKPd,eAAe,CAACH,KAAK,CAACiB,EAAP,CALR;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAD,GAAhB;EAOH,CATkB,EAUnB,CAACT,gBAAD,CAVmB,CAAvB;;EAaA,IAAI,CAACE,OAAO,CAACV,KAAD,EAAQ,kBAAR,CAAR,IAAuC,CAACW,UAAU,CAAC,kBAAD,CAAtD,EAA4E;IACxE,OAAO,IAAP;EACH;;EAED,oBACI,6BAAC,qBAAD;IACI,SAAS,EAAElB,YADf;IAEI,OAAO,EAAEmB,cAFb;IAGI,QAAQ,EAAEb,OAHd;IAII,eAAY;EAJhB,GAMKT,CANL,oGADJ;AAUH,CAzCD;;AA2CO,IAAM4B,oBAAoB,GAAG,IAAAC,gCAAA,EAChC,sBADgC,EAEhCvB,6BAFgC,CAA7B"}
@@ -32,6 +32,10 @@ var _useContentEntry2 = require("../hooks/useContentEntry");
32
32
  var useRevision = function useRevision(_ref) {
33
33
  var revision = _ref.revision;
34
34
 
35
+ var _useCms = (0, _hooks.useCms)(),
36
+ publishEntryRevision = _useCms.publishEntryRevision,
37
+ deleteEntry = _useCms.deleteEntry;
38
+
35
39
  var _useContentEntry = (0, _useContentEntry2.useContentEntry)(),
36
40
  contentModel = _useContentEntry.contentModel,
37
41
  entry = _useContentEntry.entry,
@@ -50,16 +54,12 @@ var useRevision = function useRevision(_ref) {
50
54
  var _useMemo = (0, _react.useMemo)(function () {
51
55
  return {
52
56
  CREATE_REVISION: GQL.createCreateFromMutation(contentModel),
53
- DELETE_REVISION: GQL.createDeleteMutation(contentModel),
54
- PUBLISH_REVISION: GQL.createPublishMutation(contentModel),
55
57
  UNPUBLISH_REVISION: GQL.createUnpublishMutation(contentModel),
56
58
  REQUEST_REVIEW: GQL.createRequestReviewMutation(contentModel),
57
59
  REQUEST_CHANGES: GQL.createRequestChangesMutation(contentModel)
58
60
  };
59
61
  }, [modelId]),
60
62
  CREATE_REVISION = _useMemo.CREATE_REVISION,
61
- DELETE_REVISION = _useMemo.DELETE_REVISION,
62
- PUBLISH_REVISION = _useMemo.PUBLISH_REVISION,
63
63
  UNPUBLISH_REVISION = _useMemo.UNPUBLISH_REVISION,
64
64
  REQUEST_REVIEW = _useMemo.REQUEST_REVIEW,
65
65
  REQUEST_CHANGES = _useMemo.REQUEST_CHANGES;
@@ -158,47 +158,40 @@ var useRevision = function useRevision(_ref) {
158
158
  var entry = _ref3.entry;
159
159
  return /*#__PURE__*/function () {
160
160
  var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2(id) {
161
+ var _yield$deleteEntry, error, targetRevision;
162
+
161
163
  return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
162
164
  while (1) {
163
165
  switch (_context2.prev = _context2.next) {
164
166
  case 0:
165
167
  setLoading(true);
166
168
  _context2.next = 3;
167
- return client.mutate({
168
- mutation: DELETE_REVISION,
169
- variables: {
170
- revision: id || revision.id
171
- },
172
- update: function update(cache, result) {
173
- if (!result || !result.data) {
174
- showSnackbar("Missing result in update callback on Delete Mutation.");
175
- return;
176
- }
177
-
178
- var error = result.data.content.error;
179
-
180
- if (error) {
181
- showSnackbar(error.message);
182
- return;
183
- } // We have other revisions, update entry's cache
184
-
185
-
186
- var revisions = GQLCache.removeRevisionFromEntryCache(contentModel, cache, revision);
187
-
188
- if (revision.id !== entry.id) {
189
- return;
190
- }
191
-
192
- GQLCache.updateLatestRevisionInListCache(contentModel, cache, revisions[0], listQueryVariables); // Redirect to the first revision in the list of all entry revisions.
193
-
194
- history.push("/cms/content-entries/".concat(modelId, "?id=") + encodeURIComponent(revisions[0].id));
195
- }
169
+ return deleteEntry({
170
+ model: contentModel,
171
+ entry: entry,
172
+ id: id || entry.id,
173
+ listQueryVariables: listQueryVariables
196
174
  });
197
175
 
198
176
  case 3:
177
+ _yield$deleteEntry = _context2.sent;
178
+ error = _yield$deleteEntry.error;
179
+ targetRevision = _yield$deleteEntry.entry;
199
180
  setLoading(false);
200
181
 
201
- case 4:
182
+ if (!error) {
183
+ _context2.next = 10;
184
+ break;
185
+ }
186
+
187
+ showSnackbar(error.message);
188
+ return _context2.abrupt("return");
189
+
190
+ case 10:
191
+ // Redirect to the first revision in the list of all entry revisions.
192
+ history.push("/cms/content-entries/".concat(modelId, "?id=") + encodeURIComponent(targetRevision.id));
193
+
194
+ case 11:
202
195
  case "end":
203
196
  return _context2.stop();
204
197
  }
@@ -211,47 +204,41 @@ var useRevision = function useRevision(_ref) {
211
204
  };
212
205
  }();
213
206
  },
214
- publishRevision: function publishRevision() {
207
+ publishRevision: function publishRevision(_ref5) {
208
+ var entry = _ref5.entry;
215
209
  return /*#__PURE__*/function () {
216
- var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee3(id) {
210
+ var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee3(id) {
211
+ var response, error;
217
212
  return (0, _regeneratorRuntime2.default)().wrap(function _callee3$(_context3) {
218
213
  while (1) {
219
214
  switch (_context3.prev = _context3.next) {
220
215
  case 0:
221
216
  setLoading(true);
222
217
  _context3.next = 3;
223
- return client.mutate({
224
- mutation: PUBLISH_REVISION,
225
- variables: {
226
- revision: id || revision.id
227
- },
228
- update: function update(cache, result) {
229
- if (!result || !result.data) {
230
- showSnackbar("Missing result in update callback on Publish Mutation.");
231
- return;
232
- }
233
-
234
- var _result$data$content = result.data.content,
235
- published = _result$data$content.data,
236
- error = _result$data$content.error;
237
-
238
- if (error) {
239
- showSnackbar(error.message);
240
- return;
241
- } else if (!published) {
242
- showSnackbar("Missing published data on Publish Mutation Response.");
243
- return;
244
- }
245
-
246
- GQLCache.unpublishPreviouslyPublishedRevision(contentModel, cache, published.id);
247
- showSnackbar( /*#__PURE__*/_react.default.createElement("span", null, "Successfully published revision", " ", /*#__PURE__*/_react.default.createElement("strong", null, "#", published.meta.version), "!"));
248
- }
218
+ return publishEntryRevision({
219
+ model: contentModel,
220
+ entry: entry,
221
+ id: id || entry.id,
222
+ listQueryVariables: listQueryVariables
249
223
  });
250
224
 
251
225
  case 3:
226
+ response = _context3.sent;
252
227
  setLoading(false);
228
+ error = response.error;
253
229
 
254
- case 4:
230
+ if (!error) {
231
+ _context3.next = 9;
232
+ break;
233
+ }
234
+
235
+ showSnackbar(error.message);
236
+ return _context3.abrupt("return");
237
+
238
+ case 9:
239
+ showSnackbar( /*#__PURE__*/_react.default.createElement("span", null, "Successfully published revision", " ", /*#__PURE__*/_react.default.createElement("strong", null, "#", response.entry.meta.version), "!"));
240
+
241
+ case 10:
255
242
  case "end":
256
243
  return _context3.stop();
257
244
  }
@@ -260,13 +247,13 @@ var useRevision = function useRevision(_ref) {
260
247
  }));
261
248
 
262
249
  return function (_x3) {
263
- return _ref5.apply(this, arguments);
250
+ return _ref6.apply(this, arguments);
264
251
  };
265
252
  }();
266
253
  },
267
254
  unpublishRevision: function unpublishRevision() {
268
255
  return /*#__PURE__*/function () {
269
- var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee4(id) {
256
+ var _ref7 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee4(id) {
270
257
  var result, error;
271
258
  return (0, _regeneratorRuntime2.default)().wrap(function _callee4$(_context4) {
272
259
  while (1) {
@@ -316,13 +303,13 @@ var useRevision = function useRevision(_ref) {
316
303
  }));
317
304
 
318
305
  return function (_x4) {
319
- return _ref6.apply(this, arguments);
306
+ return _ref7.apply(this, arguments);
320
307
  };
321
308
  }();
322
309
  },
323
310
  requestReview: function requestReview() {
324
311
  return /*#__PURE__*/function () {
325
- var _ref7 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee5(id) {
312
+ var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee5(id) {
326
313
  return (0, _regeneratorRuntime2.default)().wrap(function _callee5$(_context5) {
327
314
  while (1) {
328
315
  switch (_context5.prev = _context5.next) {
@@ -362,13 +349,13 @@ var useRevision = function useRevision(_ref) {
362
349
  }));
363
350
 
364
351
  return function (_x5) {
365
- return _ref7.apply(this, arguments);
352
+ return _ref8.apply(this, arguments);
366
353
  };
367
354
  }();
368
355
  },
369
356
  requestChanges: function requestChanges() {
370
357
  return /*#__PURE__*/function () {
371
- var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee6(id) {
358
+ var _ref9 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee6(id) {
372
359
  return (0, _regeneratorRuntime2.default)().wrap(function _callee6$(_context6) {
373
360
  while (1) {
374
361
  switch (_context6.prev = _context6.next) {
@@ -409,7 +396,7 @@ var useRevision = function useRevision(_ref) {
409
396
  }));
410
397
 
411
398
  return function (_x6) {
412
- return _ref8.apply(this, arguments);
399
+ return _ref9.apply(this, arguments);
413
400
  };
414
401
  }();
415
402
  }
@@ -1 +1 @@
1
- {"version":3,"names":["useRevision","revision","useContentEntry","contentModel","entry","setLoading","listQueryVariables","useRouter","history","useSnackbar","showSnackbar","client","useApolloClient","modelId","useMemo","CREATE_REVISION","GQL","createCreateFromMutation","DELETE_REVISION","createDeleteMutation","PUBLISH_REVISION","createPublishMutation","UNPUBLISH_REVISION","createUnpublishMutation","REQUEST_REVIEW","createRequestReviewMutation","REQUEST_CHANGES","createRequestChangesMutation","useHandlers","createRevision","id","mutate","mutation","variables","update","cache","result","data","newRevision","content","GQLCache","updateLatestRevisionInListCache","addRevisionToRevisionsCache","createResponse","error","message","push","encodeURIComponent","editRevision","deleteRevision","revisions","removeRevisionFromEntryCache","publishRevision","published","unpublishPreviouslyPublishedRevision","meta","version","unpublishRevision","requestReview","_","requestChanges"],"sources":["useRevision.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useHandlers } from \"@webiny/app/hooks/useHandlers\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { CmsEditorContentEntry } from \"~/types\";\nimport * as GQL from \"~/admin/graphql/contentEntries\";\nimport * as GQLCache from \"./cache\";\nimport { useApolloClient } from \"~/admin/hooks\";\nimport { useContentEntry } from \"~/admin/views/contentEntries/hooks/useContentEntry\";\nimport {\n CmsEntryCreateFromMutationResponse,\n CmsEntryCreateFromMutationVariables,\n CmsEntryDeleteMutationResponse,\n CmsEntryDeleteMutationVariables,\n CmsEntryPublishMutationResponse,\n CmsEntryPublishMutationVariables,\n CmsEntryRequestChangesMutationResponse,\n CmsEntryRequestChangesMutationVariables,\n CmsEntryRequestReviewMutationResponse,\n CmsEntryRequestReviewMutationVariables,\n CmsEntryUnpublishMutationResponse,\n CmsEntryUnpublishMutationVariables\n} from \"~/admin/graphql/contentEntries\";\n\ninterface CreateRevisionHandler {\n (id?: string): Promise<void>;\n}\ninterface EditRevisionHandler {\n (id?: string): void;\n}\ninterface DeleteRevisionHandler {\n (id?: string): Promise<void>;\n}\ninterface PublishRevisionHandler {\n (id?: string): Promise<void>;\n}\ninterface UnpublishRevisionHandler {\n (id?: string): Promise<void>;\n}\ninterface RequestReviewHandler {\n (id?: string): Promise<void>;\n}\ninterface RequestChangesHandler {\n (id?: string): Promise<void>;\n}\ninterface UseRevisionHandlers {\n createRevision: CreateRevisionHandler;\n editRevision: EditRevisionHandler;\n deleteRevision: DeleteRevisionHandler;\n publishRevision: PublishRevisionHandler;\n unpublishRevision: UnpublishRevisionHandler;\n requestReview: RequestReviewHandler;\n requestChanges: RequestChangesHandler;\n}\n\nexport interface UseRevisionProps {\n revision: CmsEditorContentEntry;\n}\n\nexport const useRevision = ({ revision }: UseRevisionProps) => {\n const { contentModel, entry, setLoading, listQueryVariables } = useContentEntry();\n\n const { history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const client = useApolloClient();\n const { modelId } = contentModel;\n\n const {\n CREATE_REVISION,\n DELETE_REVISION,\n PUBLISH_REVISION,\n UNPUBLISH_REVISION,\n REQUEST_REVIEW,\n REQUEST_CHANGES\n } = useMemo(() => {\n return {\n CREATE_REVISION: GQL.createCreateFromMutation(contentModel),\n DELETE_REVISION: GQL.createDeleteMutation(contentModel),\n PUBLISH_REVISION: GQL.createPublishMutation(contentModel),\n UNPUBLISH_REVISION: GQL.createUnpublishMutation(contentModel),\n REQUEST_REVIEW: GQL.createRequestReviewMutation(contentModel),\n REQUEST_CHANGES: GQL.createRequestChangesMutation(contentModel)\n };\n }, [modelId]);\n\n const {\n createRevision,\n editRevision,\n deleteRevision,\n publishRevision,\n unpublishRevision,\n requestReview,\n requestChanges\n } = useHandlers<UseRevisionHandlers>(\n { entry },\n {\n createRevision:\n (): CreateRevisionHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n const createResponse = await client.mutate<\n CmsEntryCreateFromMutationResponse,\n CmsEntryCreateFromMutationVariables\n >({\n mutation: CREATE_REVISION,\n variables: {\n revision: id || revision.id\n },\n update(cache, result) {\n if (!result || !result.data) {\n showSnackbar(\n `Missing result in update callback on Create Revision Mutation.`\n );\n return;\n }\n const newRevision = result.data.content.data;\n if (!newRevision) {\n showSnackbar(\n \"Missing revision data in update callback on Create Revision Mutation.\"\n );\n return;\n }\n\n GQLCache.updateLatestRevisionInListCache(\n contentModel,\n cache,\n newRevision,\n listQueryVariables\n );\n GQLCache.addRevisionToRevisionsCache(contentModel, cache, newRevision);\n }\n });\n\n setLoading(false);\n if (!createResponse || !createResponse.data) {\n showSnackbar(`Missing response data in Create Revision Callable.`);\n return;\n }\n\n const { data, error } = createResponse.data.content;\n\n if (error) {\n showSnackbar(error.message);\n return;\n } else if (!data) {\n showSnackbar(`Missing data in Create Revision callable.`);\n return;\n }\n\n history.push(\n `/cms/content-entries/${modelId}?id=${encodeURIComponent(data.id)}`\n );\n },\n editRevision:\n (): EditRevisionHandler =>\n (id): void => {\n history.push(\n `/cms/content-entries/${modelId}/?id=${encodeURIComponent(\n id || revision.id\n )}`\n );\n },\n deleteRevision:\n ({ entry }): DeleteRevisionHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n await client.mutate<\n CmsEntryDeleteMutationResponse,\n CmsEntryDeleteMutationVariables\n >({\n mutation: DELETE_REVISION,\n variables: {\n revision: id || revision.id\n },\n update: (cache, result) => {\n if (!result || !result.data) {\n showSnackbar(\n `Missing result in update callback on Delete Mutation.`\n );\n return;\n }\n const { error } = result.data.content;\n if (error) {\n showSnackbar(error.message);\n return;\n }\n\n // We have other revisions, update entry's cache\n const revisions = GQLCache.removeRevisionFromEntryCache(\n contentModel,\n cache,\n revision\n );\n\n if (revision.id !== entry.id) {\n return;\n }\n GQLCache.updateLatestRevisionInListCache(\n contentModel,\n cache,\n revisions[0],\n listQueryVariables\n );\n // Redirect to the first revision in the list of all entry revisions.\n history.push(\n `/cms/content-entries/${modelId}?id=` +\n encodeURIComponent(revisions[0].id)\n );\n }\n });\n\n setLoading(false);\n },\n publishRevision: (): PublishRevisionHandler => async id => {\n setLoading(true);\n await client.mutate<\n CmsEntryPublishMutationResponse,\n CmsEntryPublishMutationVariables\n >({\n mutation: PUBLISH_REVISION,\n variables: {\n revision: id || revision.id\n },\n update(cache, result) {\n if (!result || !result.data) {\n showSnackbar(`Missing result in update callback on Publish Mutation.`);\n return;\n }\n const { data: published, error } = result.data.content;\n if (error) {\n showSnackbar(error.message);\n return;\n } else if (!published) {\n showSnackbar(\"Missing published data on Publish Mutation Response.\");\n return;\n }\n\n GQLCache.unpublishPreviouslyPublishedRevision(\n contentModel,\n cache,\n published.id\n );\n\n showSnackbar(\n <span>\n Successfully published revision{\" \"}\n <strong>#{published.meta.version}</strong>!\n </span>\n );\n }\n });\n\n setLoading(false);\n },\n unpublishRevision:\n (): UnpublishRevisionHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n const result = await client.mutate<\n CmsEntryUnpublishMutationResponse,\n CmsEntryUnpublishMutationVariables\n >({\n mutation: UNPUBLISH_REVISION,\n variables: {\n revision: id || revision.id\n }\n });\n setLoading(false);\n if (!result || !result.data) {\n showSnackbar(`Missing result in update callback on Unpublish Mutation.`);\n return;\n }\n\n const { error } = result.data.content;\n if (error) {\n showSnackbar(error.message);\n return;\n }\n\n showSnackbar(\n <span>\n Successfully unpublished revision{\" \"}\n <strong>#{revision.meta.version}</strong>!\n </span>\n );\n },\n requestReview:\n (): RequestReviewHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n await client.mutate<\n CmsEntryRequestReviewMutationResponse,\n CmsEntryRequestReviewMutationVariables\n >({\n mutation: REQUEST_REVIEW,\n variables: {\n revision: id || revision.id\n },\n update(_, result) {\n if (!result || !result.data) {\n showSnackbar(\n `Missing result in update callback on Request Review Mutation.`\n );\n return;\n }\n const { error } = result.data.content;\n if (error) {\n return showSnackbar(error.message);\n }\n\n showSnackbar(<span>Review requested successfully!</span>);\n }\n });\n\n setLoading(false);\n },\n requestChanges:\n (): RequestChangesHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n await client.mutate<\n CmsEntryRequestChangesMutationResponse,\n CmsEntryRequestChangesMutationVariables\n >({\n mutation: REQUEST_CHANGES,\n variables: {\n revision: id || revision.id\n },\n update(_, result) {\n if (!result || !result.data) {\n showSnackbar(\n `Missing result in update callback on Request Changes Mutation.`\n );\n return;\n }\n const { error } = result.data.content;\n if (error) {\n showSnackbar(error.message);\n return;\n }\n\n showSnackbar(<span>Changes requested successfully!</span>);\n }\n });\n\n setLoading(false);\n }\n }\n );\n\n return {\n createRevision,\n editRevision,\n deleteRevision,\n publishRevision,\n unpublishRevision,\n requestReview,\n requestChanges\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useRevision","revision","useCms","publishEntryRevision","deleteEntry","useContentEntry","contentModel","entry","setLoading","listQueryVariables","useRouter","history","useSnackbar","showSnackbar","client","useApolloClient","modelId","useMemo","CREATE_REVISION","GQL","createCreateFromMutation","UNPUBLISH_REVISION","createUnpublishMutation","REQUEST_REVIEW","createRequestReviewMutation","REQUEST_CHANGES","createRequestChangesMutation","useHandlers","createRevision","id","mutate","mutation","variables","update","cache","result","data","newRevision","content","GQLCache","updateLatestRevisionInListCache","addRevisionToRevisionsCache","createResponse","error","message","push","encodeURIComponent","editRevision","deleteRevision","model","targetRevision","publishRevision","response","meta","version","unpublishRevision","requestReview","_","requestChanges"],"sources":["useRevision.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useHandlers } from \"@webiny/app/hooks/useHandlers\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { CmsEditorContentEntry } from \"~/types\";\nimport * as GQL from \"~/admin/graphql/contentEntries\";\nimport * as GQLCache from \"./cache\";\nimport { useApolloClient, useCms } from \"~/admin/hooks\";\nimport { useContentEntry } from \"~/admin/views/contentEntries/hooks/useContentEntry\";\nimport {\n CmsEntryCreateFromMutationResponse,\n CmsEntryCreateFromMutationVariables,\n CmsEntryRequestChangesMutationResponse,\n CmsEntryRequestChangesMutationVariables,\n CmsEntryRequestReviewMutationResponse,\n CmsEntryRequestReviewMutationVariables,\n CmsEntryUnpublishMutationResponse,\n CmsEntryUnpublishMutationVariables\n} from \"~/admin/graphql/contentEntries\";\n\ninterface CreateRevisionHandler {\n (id?: string): Promise<void>;\n}\ninterface EditRevisionHandler {\n (id?: string): void;\n}\ninterface DeleteRevisionHandler {\n (id?: string): Promise<void>;\n}\ninterface PublishRevisionHandler {\n (id?: string): Promise<void>;\n}\ninterface UnpublishRevisionHandler {\n (id?: string): Promise<void>;\n}\ninterface RequestReviewHandler {\n (id?: string): Promise<void>;\n}\ninterface RequestChangesHandler {\n (id?: string): Promise<void>;\n}\ninterface UseRevisionHandlers {\n createRevision: CreateRevisionHandler;\n editRevision: EditRevisionHandler;\n deleteRevision: DeleteRevisionHandler;\n publishRevision: PublishRevisionHandler;\n unpublishRevision: UnpublishRevisionHandler;\n requestReview: RequestReviewHandler;\n requestChanges: RequestChangesHandler;\n}\n\nexport interface UseRevisionProps {\n revision: CmsEditorContentEntry;\n}\n\nexport const useRevision = ({ revision }: UseRevisionProps) => {\n const { publishEntryRevision, deleteEntry } = useCms();\n const { contentModel, entry, setLoading, listQueryVariables } = useContentEntry();\n\n const { history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const client = useApolloClient();\n const { modelId } = contentModel;\n\n const { CREATE_REVISION, UNPUBLISH_REVISION, REQUEST_REVIEW, REQUEST_CHANGES } = useMemo(() => {\n return {\n CREATE_REVISION: GQL.createCreateFromMutation(contentModel),\n UNPUBLISH_REVISION: GQL.createUnpublishMutation(contentModel),\n REQUEST_REVIEW: GQL.createRequestReviewMutation(contentModel),\n REQUEST_CHANGES: GQL.createRequestChangesMutation(contentModel)\n };\n }, [modelId]);\n\n const {\n createRevision,\n editRevision,\n deleteRevision,\n publishRevision,\n unpublishRevision,\n requestReview,\n requestChanges\n } = useHandlers<UseRevisionHandlers>(\n { entry },\n {\n createRevision:\n (): CreateRevisionHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n const createResponse = await client.mutate<\n CmsEntryCreateFromMutationResponse,\n CmsEntryCreateFromMutationVariables\n >({\n mutation: CREATE_REVISION,\n variables: {\n revision: id || revision.id\n },\n update(cache, result) {\n if (!result || !result.data) {\n showSnackbar(\n `Missing result in update callback on Create Revision Mutation.`\n );\n return;\n }\n const newRevision = result.data.content.data;\n if (!newRevision) {\n showSnackbar(\n \"Missing revision data in update callback on Create Revision Mutation.\"\n );\n return;\n }\n\n GQLCache.updateLatestRevisionInListCache(\n contentModel,\n cache,\n newRevision,\n listQueryVariables\n );\n GQLCache.addRevisionToRevisionsCache(contentModel, cache, newRevision);\n }\n });\n\n setLoading(false);\n if (!createResponse || !createResponse.data) {\n showSnackbar(`Missing response data in Create Revision Callable.`);\n return;\n }\n\n const { data, error } = createResponse.data.content;\n\n if (error) {\n showSnackbar(error.message);\n return;\n } else if (!data) {\n showSnackbar(`Missing data in Create Revision callable.`);\n return;\n }\n\n history.push(\n `/cms/content-entries/${modelId}?id=${encodeURIComponent(data.id)}`\n );\n },\n editRevision:\n (): EditRevisionHandler =>\n (id): void => {\n history.push(\n `/cms/content-entries/${modelId}/?id=${encodeURIComponent(\n id || revision.id\n )}`\n );\n },\n deleteRevision:\n ({ entry }): DeleteRevisionHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n\n const { error, entry: targetRevision } = await deleteEntry({\n model: contentModel,\n entry,\n id: id || entry.id,\n listQueryVariables\n });\n\n setLoading(false);\n\n if (error) {\n showSnackbar(error.message);\n return;\n }\n\n // Redirect to the first revision in the list of all entry revisions.\n history.push(\n `/cms/content-entries/${modelId}?id=` +\n encodeURIComponent(targetRevision!.id)\n );\n },\n publishRevision:\n ({ entry }): PublishRevisionHandler =>\n async id => {\n setLoading(true);\n\n const response = await publishEntryRevision({\n model: contentModel,\n entry: entry,\n id: id || entry.id,\n listQueryVariables\n });\n\n setLoading(false);\n\n const { error } = response;\n if (error) {\n showSnackbar(error.message);\n return;\n }\n\n showSnackbar(\n <span>\n Successfully published revision{\" \"}\n <strong>#{response.entry!.meta.version}</strong>!\n </span>\n );\n },\n unpublishRevision:\n (): UnpublishRevisionHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n const result = await client.mutate<\n CmsEntryUnpublishMutationResponse,\n CmsEntryUnpublishMutationVariables\n >({\n mutation: UNPUBLISH_REVISION,\n variables: {\n revision: id || revision.id\n }\n });\n setLoading(false);\n if (!result || !result.data) {\n showSnackbar(`Missing result in update callback on Unpublish Mutation.`);\n return;\n }\n\n const { error } = result.data.content;\n if (error) {\n showSnackbar(error.message);\n return;\n }\n\n showSnackbar(\n <span>\n Successfully unpublished revision{\" \"}\n <strong>#{revision.meta.version}</strong>!\n </span>\n );\n },\n requestReview:\n (): RequestReviewHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n await client.mutate<\n CmsEntryRequestReviewMutationResponse,\n CmsEntryRequestReviewMutationVariables\n >({\n mutation: REQUEST_REVIEW,\n variables: {\n revision: id || revision.id\n },\n update(_, result) {\n if (!result || !result.data) {\n showSnackbar(\n `Missing result in update callback on Request Review Mutation.`\n );\n return;\n }\n const { error } = result.data.content;\n if (error) {\n return showSnackbar(error.message);\n }\n\n showSnackbar(<span>Review requested successfully!</span>);\n }\n });\n\n setLoading(false);\n },\n requestChanges:\n (): RequestChangesHandler =>\n async (id): Promise<void> => {\n setLoading(true);\n await client.mutate<\n CmsEntryRequestChangesMutationResponse,\n CmsEntryRequestChangesMutationVariables\n >({\n mutation: REQUEST_CHANGES,\n variables: {\n revision: id || revision.id\n },\n update(_, result) {\n if (!result || !result.data) {\n showSnackbar(\n `Missing result in update callback on Request Changes Mutation.`\n );\n return;\n }\n const { error } = result.data.content;\n if (error) {\n showSnackbar(error.message);\n return;\n }\n\n showSnackbar(<span>Changes requested successfully!</span>);\n }\n });\n\n setLoading(false);\n }\n }\n );\n\n return {\n createRevision,\n editRevision,\n deleteRevision,\n publishRevision,\n unpublishRevision,\n requestReview,\n requestChanges\n };\n};\n"],"mappings":"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"}
@@ -76,7 +76,7 @@ var ContentEntry = function ContentEntry() {
76
76
  showEmptyView = _useContentEntry.showEmptyView,
77
77
  canCreate = _useContentEntry.canCreate,
78
78
  createEntry = _useContentEntry.createEntry,
79
- setTabsRef = _useContentEntry.setTabsRef,
79
+ tabsRef = _useContentEntry.tabsRef,
80
80
  setFormRef = _useContentEntry.setFormRef; // Render "No content selected" view.
81
81
 
82
82
 
@@ -97,9 +97,7 @@ var ContentEntry = function ContentEntry() {
97
97
  return /*#__PURE__*/_react.default.createElement(DetailsContainer, null, /*#__PURE__*/_react.default.createElement("test-id", {
98
98
  "data-testid": "cms-content-details"
99
99
  }, /*#__PURE__*/_react.default.createElement(_Tabs.Tabs, {
100
- ref: function ref(tabs) {
101
- return setTabsRef(tabs);
102
- }
100
+ ref: tabsRef
103
101
  }, /*#__PURE__*/_react.default.createElement(_Tabs.Tab, {
104
102
  label: "Content",
105
103
  disabled: loading,
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","namespace","DetailsContainer","styled","height","overflow","position","nav","backgroundColor","RenderBlock","zIndex","padding","elevationStyles","css","ContentEntry","useContentEntry","contentModel","loading","entry","showEmptyView","canCreate","createEntry","setTabsRef","setFormRef","message","tabs","form"],"sources":["ContentEntry.tsx"],"sourcesContent":["import React from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport EmptyView from \"@webiny/app-admin/components/EmptyView\";\nimport { ButtonDefault, ButtonIcon } from \"@webiny/ui/Button\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Tab, Tabs } from \"@webiny/ui/Tabs\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport RevisionsList from \"./ContentEntry/RevisionsList\";\nimport Header from \"./ContentEntry/header/Header\";\nimport { useContentEntry } from \"./hooks/useContentEntry\";\nimport { ContentEntryForm } from \"~/admin/components/ContentEntryForm/ContentEntryForm\";\n\nconst t = i18n.namespace(\"app-headless-cms/admin/content-model-entries/details\");\n\nconst DetailsContainer = styled(\"div\")({\n height: \"calc(100% - 10px)\",\n overflow: \"hidden\",\n position: \"relative\",\n nav: {\n backgroundColor: \"var(--mdc-theme-surface)\"\n }\n});\n\nconst RenderBlock = styled(\"div\")({\n position: \"relative\",\n zIndex: 0,\n backgroundColor: \"var(--mdc-theme-background)\",\n height: \"100%\",\n /*overflow: \"scroll\",*/\n padding: 25\n});\n\nconst elevationStyles = css({\n position: \"relative\"\n});\n\ndeclare global {\n // eslint-disable-next-line\n namespace JSX {\n interface IntrinsicElements {\n \"test-id\": {\n children?: React.ReactNode;\n };\n }\n }\n}\n\nexport const ContentEntry: React.FC = () => {\n const {\n contentModel,\n loading,\n entry,\n showEmptyView,\n canCreate,\n createEntry,\n setTabsRef,\n setFormRef\n } = useContentEntry();\n\n // Render \"No content selected\" view.\n if (showEmptyView) {\n return (\n <EmptyView\n title={t`Click on the left side list to display entry details {message}`({\n message: canCreate ? \"or create a...\" : \"\"\n })}\n action={\n canCreate ? (\n <ButtonDefault data-testid=\"new-record-button\" onClick={createEntry}>\n <ButtonIcon icon={<AddIcon />} /> {t`New Entry`}\n </ButtonDefault>\n ) : null\n }\n />\n );\n }\n\n return (\n <DetailsContainer>\n <test-id data-testid=\"cms-content-details\">\n <Tabs ref={tabs => setTabsRef(tabs as Tabs)}>\n <Tab\n label={\"Content\"}\n disabled={loading}\n data-testid={\"cms.content-form.tabs.content\"}\n >\n <RenderBlock>\n <Elevation z={2} className={elevationStyles}>\n {loading && <CircularProgress />}\n <Header />\n <ContentEntryForm\n contentModel={contentModel}\n entry={entry}\n onForm={form => setFormRef(form)}\n addEntryToListCache={true}\n />\n </Elevation>\n </RenderBlock>\n </Tab>\n <Tab\n label={\"Revisions\"}\n disabled={loading}\n data-testid={\"cms.content-form.tabs.revisions\"}\n >\n <RevisionsList />\n </Tab>\n </Tabs>\n </test-id>\n </DetailsContainer>\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,SAAL,CAAe,sDAAf,CAAV;;AAEA,IAAMC,gBAAgB,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACnCC,MAAM,EAAE,mBAD2B;EAEnCC,QAAQ,EAAE,QAFyB;EAGnCC,QAAQ,EAAE,UAHyB;EAInCC,GAAG,EAAE;IACDC,eAAe,EAAE;EADhB;AAJ8B,CAAjB,CAAtB;AASA,IAAMC,WAAW,oBAAGN,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC9BG,QAAQ,EAAE,UADoB;EAE9BI,MAAM,EAAE,CAFsB;EAG9BF,eAAe,EAAE,6BAHa;EAI9BJ,MAAM,EAAE,MAJsB;;EAK9B;EACAO,OAAO,EAAE;AANqB,CAAjB,CAAjB;AASA,IAAMC,eAAe,gBAAG,IAAAC,YAAA,EAAI;EACxBP,QAAQ,EAAE;AADc,CAAJ,2BAAxB;;AAeO,IAAMQ,YAAsB,GAAG,SAAzBA,YAAyB,GAAM;EACxC,uBASI,IAAAC,iCAAA,GATJ;EAAA,IACIC,YADJ,oBACIA,YADJ;EAAA,IAEIC,OAFJ,oBAEIA,OAFJ;EAAA,IAGIC,KAHJ,oBAGIA,KAHJ;EAAA,IAIIC,aAJJ,oBAIIA,aAJJ;EAAA,IAKIC,SALJ,oBAKIA,SALJ;EAAA,IAMIC,WANJ,oBAMIA,WANJ;EAAA,IAOIC,UAPJ,oBAOIA,UAPJ;EAAA,IAQIC,UARJ,oBAQIA,UARJ,CADwC,CAYxC;;;EACA,IAAIJ,aAAJ,EAAmB;IACf,oBACI,6BAAC,kBAAD;MACI,KAAK,EAAEpB,CAAC,iJAAD,CAAkE;QACrEyB,OAAO,EAAEJ,SAAS,GAAG,gBAAH,GAAsB;MAD6B,CAAlE,CADX;MAII,MAAM,EACFA,SAAS,gBACL,6BAAC,qBAAD;QAAe,eAAY,mBAA3B;QAA+C,OAAO,EAAEC;MAAxD,gBACI,6BAAC,kBAAD;QAAY,IAAI,eAAE,6BAAC,uBAAD;MAAlB,EADJ,OACuCtB,CADvC,+FADK,GAIL;IATZ,EADJ;EAcH;;EAED,oBACI,6BAAC,gBAAD,qBACI;IAAS,eAAY;EAArB,gBACI,6BAAC,UAAD;IAAM,GAAG,EAAE,aAAA0B,IAAI;MAAA,OAAIH,UAAU,CAACG,IAAD,CAAd;IAAA;EAAf,gBACI,6BAAC,SAAD;IACI,KAAK,EAAE,SADX;IAEI,QAAQ,EAAER,OAFd;IAGI,eAAa;EAHjB,gBAKI,6BAAC,WAAD,qBACI,6BAAC,oBAAD;IAAW,CAAC,EAAE,CAAd;IAAiB,SAAS,EAAEL;EAA5B,GACKK,OAAO,iBAAI,6BAAC,0BAAD,OADhB,eAEI,6BAAC,eAAD,OAFJ,eAGI,6BAAC,kCAAD;IACI,YAAY,EAAED,YADlB;IAEI,KAAK,EAAEE,KAFX;IAGI,MAAM,EAAE,gBAAAQ,IAAI;MAAA,OAAIH,UAAU,CAACG,IAAD,CAAd;IAAA,CAHhB;IAII,mBAAmB,EAAE;EAJzB,EAHJ,CADJ,CALJ,CADJ,eAmBI,6BAAC,SAAD;IACI,KAAK,EAAE,WADX;IAEI,QAAQ,EAAET,OAFd;IAGI,eAAa;EAHjB,gBAKI,6BAAC,sBAAD,OALJ,CAnBJ,CADJ,CADJ,CADJ;AAiCH,CA/DM"}
1
+ {"version":3,"names":["t","i18n","namespace","DetailsContainer","styled","height","overflow","position","nav","backgroundColor","RenderBlock","zIndex","padding","elevationStyles","css","ContentEntry","useContentEntry","contentModel","loading","entry","showEmptyView","canCreate","createEntry","tabsRef","setFormRef","message","form"],"sources":["ContentEntry.tsx"],"sourcesContent":["import React from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport EmptyView from \"@webiny/app-admin/components/EmptyView\";\nimport { ButtonDefault, ButtonIcon } from \"@webiny/ui/Button\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Tab, Tabs } from \"@webiny/ui/Tabs\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport RevisionsList from \"./ContentEntry/RevisionsList\";\nimport Header from \"./ContentEntry/header/Header\";\nimport { useContentEntry } from \"./hooks/useContentEntry\";\nimport { ContentEntryForm } from \"~/admin/components/ContentEntryForm/ContentEntryForm\";\n\nconst t = i18n.namespace(\"app-headless-cms/admin/content-model-entries/details\");\n\nconst DetailsContainer = styled(\"div\")({\n height: \"calc(100% - 10px)\",\n overflow: \"hidden\",\n position: \"relative\",\n nav: {\n backgroundColor: \"var(--mdc-theme-surface)\"\n }\n});\n\nconst RenderBlock = styled(\"div\")({\n position: \"relative\",\n zIndex: 0,\n backgroundColor: \"var(--mdc-theme-background)\",\n height: \"100%\",\n /*overflow: \"scroll\",*/\n padding: 25\n});\n\nconst elevationStyles = css({\n position: \"relative\"\n});\n\ndeclare global {\n // eslint-disable-next-line\n namespace JSX {\n interface IntrinsicElements {\n \"test-id\": {\n children?: React.ReactNode;\n };\n }\n }\n}\n\nexport const ContentEntry: React.FC = () => {\n const {\n contentModel,\n loading,\n entry,\n showEmptyView,\n canCreate,\n createEntry,\n tabsRef,\n setFormRef\n } = useContentEntry();\n\n // Render \"No content selected\" view.\n if (showEmptyView) {\n return (\n <EmptyView\n title={t`Click on the left side list to display entry details {message}`({\n message: canCreate ? \"or create a...\" : \"\"\n })}\n action={\n canCreate ? (\n <ButtonDefault data-testid=\"new-record-button\" onClick={createEntry}>\n <ButtonIcon icon={<AddIcon />} /> {t`New Entry`}\n </ButtonDefault>\n ) : null\n }\n />\n );\n }\n\n return (\n <DetailsContainer>\n <test-id data-testid=\"cms-content-details\">\n <Tabs ref={tabsRef}>\n <Tab\n label={\"Content\"}\n disabled={loading}\n data-testid={\"cms.content-form.tabs.content\"}\n >\n <RenderBlock>\n <Elevation z={2} className={elevationStyles}>\n {loading && <CircularProgress />}\n <Header />\n <ContentEntryForm\n contentModel={contentModel}\n entry={entry}\n onForm={form => setFormRef(form)}\n addEntryToListCache={true}\n />\n </Elevation>\n </RenderBlock>\n </Tab>\n <Tab\n label={\"Revisions\"}\n disabled={loading}\n data-testid={\"cms.content-form.tabs.revisions\"}\n >\n <RevisionsList />\n </Tab>\n </Tabs>\n </test-id>\n </DetailsContainer>\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,SAAL,CAAe,sDAAf,CAAV;;AAEA,IAAMC,gBAAgB,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACnCC,MAAM,EAAE,mBAD2B;EAEnCC,QAAQ,EAAE,QAFyB;EAGnCC,QAAQ,EAAE,UAHyB;EAInCC,GAAG,EAAE;IACDC,eAAe,EAAE;EADhB;AAJ8B,CAAjB,CAAtB;AASA,IAAMC,WAAW,oBAAGN,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC9BG,QAAQ,EAAE,UADoB;EAE9BI,MAAM,EAAE,CAFsB;EAG9BF,eAAe,EAAE,6BAHa;EAI9BJ,MAAM,EAAE,MAJsB;;EAK9B;EACAO,OAAO,EAAE;AANqB,CAAjB,CAAjB;AASA,IAAMC,eAAe,gBAAG,IAAAC,YAAA,EAAI;EACxBP,QAAQ,EAAE;AADc,CAAJ,2BAAxB;;AAeO,IAAMQ,YAAsB,GAAG,SAAzBA,YAAyB,GAAM;EACxC,uBASI,IAAAC,iCAAA,GATJ;EAAA,IACIC,YADJ,oBACIA,YADJ;EAAA,IAEIC,OAFJ,oBAEIA,OAFJ;EAAA,IAGIC,KAHJ,oBAGIA,KAHJ;EAAA,IAIIC,aAJJ,oBAIIA,aAJJ;EAAA,IAKIC,SALJ,oBAKIA,SALJ;EAAA,IAMIC,WANJ,oBAMIA,WANJ;EAAA,IAOIC,OAPJ,oBAOIA,OAPJ;EAAA,IAQIC,UARJ,oBAQIA,UARJ,CADwC,CAYxC;;;EACA,IAAIJ,aAAJ,EAAmB;IACf,oBACI,6BAAC,kBAAD;MACI,KAAK,EAAEpB,CAAC,iJAAD,CAAkE;QACrEyB,OAAO,EAAEJ,SAAS,GAAG,gBAAH,GAAsB;MAD6B,CAAlE,CADX;MAII,MAAM,EACFA,SAAS,gBACL,6BAAC,qBAAD;QAAe,eAAY,mBAA3B;QAA+C,OAAO,EAAEC;MAAxD,gBACI,6BAAC,kBAAD;QAAY,IAAI,eAAE,6BAAC,uBAAD;MAAlB,EADJ,OACuCtB,CADvC,+FADK,GAIL;IATZ,EADJ;EAcH;;EAED,oBACI,6BAAC,gBAAD,qBACI;IAAS,eAAY;EAArB,gBACI,6BAAC,UAAD;IAAM,GAAG,EAAEuB;EAAX,gBACI,6BAAC,SAAD;IACI,KAAK,EAAE,SADX;IAEI,QAAQ,EAAEL,OAFd;IAGI,eAAa;EAHjB,gBAKI,6BAAC,WAAD,qBACI,6BAAC,oBAAD;IAAW,CAAC,EAAE,CAAd;IAAiB,SAAS,EAAEL;EAA5B,GACKK,OAAO,iBAAI,6BAAC,0BAAD,OADhB,eAEI,6BAAC,eAAD,OAFJ,eAGI,6BAAC,kCAAD;IACI,YAAY,EAAED,YADlB;IAEI,KAAK,EAAEE,KAFX;IAGI,MAAM,EAAE,gBAAAO,IAAI;MAAA,OAAIF,UAAU,CAACE,IAAD,CAAd;IAAA,CAHhB;IAII,mBAAmB,EAAE;EAJzB,EAHJ,CADJ,CALJ,CADJ,eAmBI,6BAAC,SAAD;IACI,KAAK,EAAE,WADX;IAEI,QAAQ,EAAER,OAFd;IAGI,eAAa;EAHjB,gBAKI,6BAAC,sBAAD,OALJ,CAnBJ,CADJ,CADJ,CADJ;AAiCH,CA/DM"}
@@ -10,5 +10,11 @@ var _react = require("react");
10
10
  var _ContentEntryContext = require("../ContentEntry/ContentEntryContext");
11
11
 
12
12
  function useContentEntry() {
13
- return (0, _react.useContext)(_ContentEntryContext.Context);
13
+ var context = (0, _react.useContext)(_ContentEntryContext.Context);
14
+
15
+ if (!context) {
16
+ throw Error("useContentEntry() hook can only be used within the ContentEntryContext provider.");
17
+ }
18
+
19
+ return context;
14
20
  }
@@ -1 +1 @@
1
- {"version":3,"names":["useContentEntry","useContext","Context"],"sources":["useContentEntry.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { Context } from \"../ContentEntry/ContentEntryContext\";\n\nexport function useContentEntry() {\n return useContext(Context);\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEO,SAASA,eAAT,GAA2B;EAC9B,OAAO,IAAAC,iBAAA,EAAWC,4BAAX,CAAP;AACH"}
1
+ {"version":3,"names":["useContentEntry","context","useContext","Context","Error"],"sources":["useContentEntry.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { Context } from \"../ContentEntry/ContentEntryContext\";\n\nexport function useContentEntry() {\n const context = useContext(Context);\n if (!context) {\n throw Error(\n `useContentEntry() hook can only be used within the ContentEntryContext provider.`\n );\n }\n return context;\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEO,SAASA,eAAT,GAA2B;EAC9B,IAAMC,OAAO,GAAG,IAAAC,iBAAA,EAAWC,4BAAX,CAAhB;;EACA,IAAI,CAACF,OAAL,EAAc;IACV,MAAMG,KAAK,oFAAX;EAGH;;EACD,OAAOH,OAAP;AACH"}
@@ -293,7 +293,8 @@ var NewContentModelDialog = function NewContentModelDialog(_ref) {
293
293
  validators: [_validation.validation.create("required,maxLength:100"), nameValidator]
294
294
  }, /*#__PURE__*/_react.default.createElement(_Input.Input, {
295
295
  label: t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["Name"]))),
296
- description: t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["The name of the content model. Use the singular form, e.g. Person, not Persons."])))
296
+ description: t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["The name of the content model. Use the singular form, e.g. Person, not Persons."]))),
297
+ "data-testid": "cms.newcontentmodeldialog.name"
297
298
  }))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
298
299
  span: 12
299
300
  }, /*#__PURE__*/_react.default.createElement(Bind, {
@@ -302,7 +303,8 @@ var NewContentModelDialog = function NewContentModelDialog(_ref) {
302
303
  }, /*#__PURE__*/_react.default.createElement(_Select.Select, {
303
304
  description: t(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["Choose a content model group"]))),
304
305
  label: t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["Content model group"]))),
305
- options: contentModelGroups
306
+ options: contentModelGroups,
307
+ "data-testid": "cms.newcontentmodeldialog.selectgroup"
306
308
  }))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
307
309
  span: 12
308
310
  }, /*#__PURE__*/_react.default.createElement(Bind, {
@@ -312,7 +314,8 @@ var NewContentModelDialog = function NewContentModelDialog(_ref) {
312
314
  rows: 4,
313
315
  maxLength: 200,
314
316
  characterCount: true,
315
- label: t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Description"])))
317
+ label: t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Description"]))),
318
+ "data-testid": "cms.newcontentmodeldialog.description"
316
319
  }));
317
320
  })))), /*#__PURE__*/_react.default.createElement(UID.DialogActions, null, /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
318
321
  onClick: function onClick(ev) {