@webiny/app-headless-cms-workflows 0.0.0-unstable.61c048f412

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 (57) hide show
  1. package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.d.ts +2 -0
  2. package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js +45 -0
  3. package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js.map +1 -0
  4. package/Components/CmsEntriesWorkflowStateList/index.d.ts +1 -0
  5. package/Components/CmsEntriesWorkflowStateList/index.js +3 -0
  6. package/Components/CmsEntriesWorkflowStateList/index.js.map +1 -0
  7. package/Components/CmsWorkflows/CmsWorkflowsEditorView.d.ts +3 -0
  8. package/Components/CmsWorkflows/CmsWorkflowsEditorView.js +128 -0
  9. package/Components/CmsWorkflows/CmsWorkflowsEditorView.js.map +1 -0
  10. package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.d.ts +2 -0
  11. package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js +69 -0
  12. package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js.map +1 -0
  13. package/Components/ContentEntryForm/CmsEntryFormPublishButton.d.ts +2 -0
  14. package/Components/ContentEntryForm/CmsEntryFormPublishButton.js +38 -0
  15. package/Components/ContentEntryForm/CmsEntryFormPublishButton.js.map +1 -0
  16. package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.d.ts +2 -0
  17. package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.js +39 -0
  18. package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.js.map +1 -0
  19. package/Components/ContentEntryForm/CmsEntryFormSaveButton.d.ts +2 -0
  20. package/Components/ContentEntryForm/CmsEntryFormSaveButton.js +37 -0
  21. package/Components/ContentEntryForm/CmsEntryFormSaveButton.js.map +1 -0
  22. package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.d.ts +5 -0
  23. package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js +38 -0
  24. package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js.map +1 -0
  25. package/Components/ContentEntryForm/CmsEntryFormTooltipButton.d.ts +2 -0
  26. package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js +20 -0
  27. package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js.map +1 -0
  28. package/Components/ContentEntryForm/ContentEntryFormWorkflow.d.ts +2 -0
  29. package/Components/ContentEntryForm/ContentEntryFormWorkflow.js +73 -0
  30. package/Components/ContentEntryForm/ContentEntryFormWorkflow.js.map +1 -0
  31. package/Components/ContentEntryForm/ContentEntryWorkflow.d.ts +2 -0
  32. package/Components/ContentEntryForm/ContentEntryWorkflow.js +35 -0
  33. package/Components/ContentEntryForm/ContentEntryWorkflow.js.map +1 -0
  34. package/Components/ContentEntryForm/index.d.ts +7 -0
  35. package/Components/ContentEntryForm/index.js +9 -0
  36. package/Components/ContentEntryForm/index.js.map +1 -0
  37. package/Components/OptionItem/OpenInNewWindow.d.ts +2 -0
  38. package/Components/OptionItem/OpenInNewWindow.js +44 -0
  39. package/Components/OptionItem/OpenInNewWindow.js.map +1 -0
  40. package/LICENSE +21 -0
  41. package/README.md +11 -0
  42. package/Routes/CmsWorkflowsEditor.d.ts +2 -0
  43. package/Routes/CmsWorkflowsEditor.js +35 -0
  44. package/Routes/CmsWorkflowsEditor.js.map +1 -0
  45. package/Routes/index.d.ts +1 -0
  46. package/Routes/index.js +3 -0
  47. package/Routes/index.js.map +1 -0
  48. package/index.d.ts +2 -0
  49. package/index.js +12 -0
  50. package/index.js.map +1 -0
  51. package/package.json +43 -0
  52. package/routes.d.ts +11 -0
  53. package/routes.js +22 -0
  54. package/routes.js.map +1 -0
  55. package/utils/appName.d.ts +4 -0
  56. package/utils/appName.js +16 -0
  57. package/utils/appName.js.map +1 -0
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const CmsEntriesWorkflowStateListFooterMenu: () => React.JSX.Element;
@@ -0,0 +1,45 @@
1
+ import React from "react";
2
+ import { Components } from "@webiny/app-headless-cms";
3
+ import { Sidebar } from "@webiny/admin-ui";
4
+ import { ReactComponent as WorkflowStateListIcon } from "@webiny/icons/flowchart.svg";
5
+ import { Components as WorkflowsComponents } from "@webiny/app-workflows";
6
+ import { useContentEntries } from "@webiny/app-headless-cms/admin/views/contentEntries/hooks/index.js";
7
+ import { IsModelPublishable } from "@webiny/app-headless-cms/exports/admin/cms.js";
8
+ import { createAppName } from "../../utils/appName.js";
9
+ import { useApolloClient } from "@apollo/react-hooks";
10
+ const {
11
+ Overlay: {
12
+ WorkflowStateListAppOverlay
13
+ }
14
+ } = WorkflowsComponents;
15
+ const {
16
+ Footer
17
+ } = Components.Sidebar;
18
+ export const CmsEntriesWorkflowStateListFooterMenu = Footer.createDecorator(Original => {
19
+ return function CmsEntriesWorkflowStateListFooterMenu(props) {
20
+ const {
21
+ contentModel: model
22
+ } = useContentEntries();
23
+ const client = useApolloClient();
24
+ const app = createAppName(model);
25
+ return /*#__PURE__*/React.createElement(Original, props, /*#__PURE__*/React.createElement(IsModelPublishable, null, /*#__PURE__*/React.createElement(WorkflowStateListAppOverlay, {
26
+ client: client,
27
+ app: app
28
+ }, ({
29
+ showOverlay
30
+ }) => {
31
+ return /*#__PURE__*/React.createElement("div", {
32
+ className: "list-none"
33
+ }, /*#__PURE__*/React.createElement(Sidebar.Item, {
34
+ onClick: showOverlay,
35
+ text: "Workflow States",
36
+ icon: /*#__PURE__*/React.createElement(Sidebar.Item.Icon, {
37
+ element: /*#__PURE__*/React.createElement(WorkflowStateListIcon, null),
38
+ label: "Workflow States"
39
+ })
40
+ }));
41
+ })));
42
+ };
43
+ });
44
+
45
+ //# sourceMappingURL=CmsEntriesWorkflowStateListFooterMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Components","Sidebar","ReactComponent","WorkflowStateListIcon","WorkflowsComponents","useContentEntries","IsModelPublishable","createAppName","useApolloClient","Overlay","WorkflowStateListAppOverlay","Footer","CmsEntriesWorkflowStateListFooterMenu","createDecorator","Original","props","contentModel","model","client","app","createElement","showOverlay","className","Item","onClick","text","icon","Icon","element","label"],"sources":["CmsEntriesWorkflowStateListFooterMenu.tsx"],"sourcesContent":["import React from \"react\";\nimport { Components } from \"@webiny/app-headless-cms\";\nimport { Sidebar } from \"@webiny/admin-ui\";\nimport { ReactComponent as WorkflowStateListIcon } from \"@webiny/icons/flowchart.svg\";\nimport { Components as WorkflowsComponents } from \"@webiny/app-workflows\";\nimport { useContentEntries } from \"@webiny/app-headless-cms/admin/views/contentEntries/hooks/index.js\";\nimport { IsModelPublishable } from \"@webiny/app-headless-cms/exports/admin/cms.js\";\nimport { createAppName } from \"~/utils/appName.js\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\n\nconst {\n Overlay: { WorkflowStateListAppOverlay }\n} = WorkflowsComponents;\n\nconst { Footer } = Components.Sidebar;\n\nexport const CmsEntriesWorkflowStateListFooterMenu = Footer.createDecorator(Original => {\n return function CmsEntriesWorkflowStateListFooterMenu(props) {\n const { contentModel: model } = useContentEntries();\n const client = useApolloClient();\n\n const app = createAppName(model);\n\n return (\n <Original {...props}>\n <IsModelPublishable>\n <WorkflowStateListAppOverlay client={client} app={app}>\n {({ showOverlay }) => {\n return (\n <div className={\"list-none\"}>\n <Sidebar.Item\n onClick={showOverlay}\n text={\"Workflow States\"}\n icon={\n <Sidebar.Item.Icon\n element={<WorkflowStateListIcon />}\n label={\"Workflow States\"}\n />\n }\n />\n </div>\n );\n }}\n </WorkflowStateListAppOverlay>\n </IsModelPublishable>\n </Original>\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,QAAQ,0BAA0B;AACrD,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,SAASC,cAAc,IAAIC,qBAAqB,QAAQ,6BAA6B;AACrF,SAASH,UAAU,IAAII,mBAAmB,QAAQ,uBAAuB;AACzE,SAASC,iBAAiB,QAAQ,oEAAoE;AACtG,SAASC,kBAAkB,QAAQ,+CAA+C;AAClF,SAASC,aAAa;AACtB,SAASC,eAAe,QAAQ,qBAAqB;AAErD,MAAM;EACFC,OAAO,EAAE;IAAEC;EAA4B;AAC3C,CAAC,GAAGN,mBAAmB;AAEvB,MAAM;EAAEO;AAAO,CAAC,GAAGX,UAAU,CAACC,OAAO;AAErC,OAAO,MAAMW,qCAAqC,GAAGD,MAAM,CAACE,eAAe,CAACC,QAAQ,IAAI;EACpF,OAAO,SAASF,qCAAqCA,CAACG,KAAK,EAAE;IACzD,MAAM;MAAEC,YAAY,EAAEC;IAAM,CAAC,GAAGZ,iBAAiB,CAAC,CAAC;IACnD,MAAMa,MAAM,GAAGV,eAAe,CAAC,CAAC;IAEhC,MAAMW,GAAG,GAAGZ,aAAa,CAACU,KAAK,CAAC;IAEhC,oBACIlB,KAAA,CAAAqB,aAAA,CAACN,QAAQ,EAAKC,KAAK,eACfhB,KAAA,CAAAqB,aAAA,CAACd,kBAAkB,qBACfP,KAAA,CAAAqB,aAAA,CAACV,2BAA2B;MAACQ,MAAM,EAAEA,MAAO;MAACC,GAAG,EAAEA;IAAI,GACjD,CAAC;MAAEE;IAAY,CAAC,KAAK;MAClB,oBACItB,KAAA,CAAAqB,aAAA;QAAKE,SAAS,EAAE;MAAY,gBACxBvB,KAAA,CAAAqB,aAAA,CAACnB,OAAO,CAACsB,IAAI;QACTC,OAAO,EAAEH,WAAY;QACrBI,IAAI,EAAE,iBAAkB;QACxBC,IAAI,eACA3B,KAAA,CAAAqB,aAAA,CAACnB,OAAO,CAACsB,IAAI,CAACI,IAAI;UACdC,OAAO,eAAE7B,KAAA,CAAAqB,aAAA,CAACjB,qBAAqB,MAAE,CAAE;UACnC0B,KAAK,EAAE;QAAkB,CAC5B;MACJ,CACJ,CACA,CAAC;IAEd,CACyB,CACb,CACd,CAAC;EAEnB,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export { CmsEntriesWorkflowStateListFooterMenu } from "./CmsEntriesWorkflowStateListFooterMenu.js";
@@ -0,0 +1,3 @@
1
+ export { CmsEntriesWorkflowStateListFooterMenu } from "./CmsEntriesWorkflowStateListFooterMenu.js";
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CmsEntriesWorkflowStateListFooterMenu"],"sources":["index.ts"],"sourcesContent":["export { CmsEntriesWorkflowStateListFooterMenu } from \"./CmsEntriesWorkflowStateListFooterMenu.js\";\n"],"mappings":"AAAA,SAASA,qCAAqC","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ export declare const CmsWorkflowsEditorMenu: () => React.JSX.Element | null;
3
+ export declare const CmsWorkflowsEditorView: () => React.JSX.Element | null;
@@ -0,0 +1,128 @@
1
+ import React, { useCallback, useMemo } from "react";
2
+ import { AdminConfig, useRoute, useRouter } from "@webiny/app-admin";
3
+ import { Routes } from "../../routes.js";
4
+ import { Components } from "@webiny/app-workflows";
5
+ import { Icon, Loader } from "@webiny/admin-ui";
6
+ import { useModels, usePermission } from "@webiny/app-headless-cms/admin/hooks/index.js";
7
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
8
+ import { createAppName } from "../../utils/appName.js";
9
+ import { normalizeIcon } from "@webiny/app-headless-cms/utils/normalizeIcon.js";
10
+ const {
11
+ Admin: {
12
+ WorkflowsEditor
13
+ },
14
+ Permissions: {
15
+ HasWorkflowsEditorPermission
16
+ }
17
+ } = Components;
18
+ const {
19
+ Menu
20
+ } = AdminConfig;
21
+ export const CmsWorkflowsEditorMenu = () => {
22
+ const router = useRouter();
23
+ const {
24
+ canCreateContentModels
25
+ } = usePermission();
26
+ if (!canCreateContentModels) {
27
+ return null;
28
+ }
29
+ return /*#__PURE__*/React.createElement(HasWorkflowsEditorPermission, null, /*#__PURE__*/React.createElement(Menu, {
30
+ name: "headlessCMS.contentModels.workflows",
31
+ parent: "headlessCMS",
32
+ element: /*#__PURE__*/React.createElement(Menu.Link, {
33
+ pinnable: true,
34
+ text: "Workflows",
35
+ to: router.getLink(Routes.ContentModels.Workflows)
36
+ })
37
+ }));
38
+ };
39
+ const ModelIcon = ({
40
+ model
41
+ }) => {
42
+ if (!model.icon) {
43
+ return null;
44
+ }
45
+ const icon = normalizeIcon(model.icon);
46
+ if (!icon) {
47
+ return null;
48
+ }
49
+ return /*#__PURE__*/React.createElement(Icon, {
50
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
51
+ icon: icon
52
+ }),
53
+ label: model.name,
54
+ size: "sm",
55
+ className: "text-neutral-strong"
56
+ });
57
+ };
58
+ const isAllowed = model => {
59
+ // Exclude models that have the "$publishing:false" tag
60
+ if (model.tags.includes("$publishing:false")) {
61
+ return false;
62
+ }
63
+ // Exclude single entry models
64
+ else if (model.tags.includes("singleEntry")) {
65
+ return false;
66
+ }
67
+ return true;
68
+ };
69
+ export const CmsWorkflowsEditorView = () => {
70
+ const {
71
+ route
72
+ } = useRoute(Routes.ContentModels.Workflows);
73
+ const {
74
+ models,
75
+ loading
76
+ } = useModels();
77
+ const {
78
+ canEdit,
79
+ canCreateContentModels
80
+ } = usePermission();
81
+ const {
82
+ goToRoute
83
+ } = useRouter();
84
+ const apps = useMemo(() => {
85
+ return models.filter(model => {
86
+ if (isAllowed(model) === false) {
87
+ return false;
88
+ }
89
+ return canEdit(model, "cms.contentModel");
90
+ }).map(model => {
91
+ return {
92
+ id: createAppName(model),
93
+ name: model.name,
94
+ icon: /*#__PURE__*/React.createElement(ModelIcon, {
95
+ model: model
96
+ })
97
+ };
98
+ });
99
+ }, [models, canEdit]);
100
+ const app = useMemo(() => {
101
+ if (!route.params.app) {
102
+ return apps.find(() => true);
103
+ }
104
+ return apps.find(a => a.id === route.params.app) || null;
105
+ }, [route.params.app]);
106
+ const onAppClick = useCallback(id => {
107
+ goToRoute(Routes.ContentModels.Workflows, {
108
+ app: id
109
+ });
110
+ }, [apps]);
111
+ if (!canCreateContentModels) {
112
+ return null;
113
+ } else if (loading) {
114
+ return /*#__PURE__*/React.createElement(Loader, {
115
+ size: "lg",
116
+ variant: "accent",
117
+ indeterminate: true,
118
+ text: "Loading..."
119
+ });
120
+ }
121
+ return /*#__PURE__*/React.createElement(WorkflowsEditor, {
122
+ apps: apps,
123
+ onAppClick: onAppClick,
124
+ app: app?.id
125
+ });
126
+ };
127
+
128
+ //# sourceMappingURL=CmsWorkflowsEditorView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useMemo","AdminConfig","useRoute","useRouter","Routes","Components","Icon","Loader","useModels","usePermission","FontAwesomeIcon","createAppName","normalizeIcon","Admin","WorkflowsEditor","Permissions","HasWorkflowsEditorPermission","Menu","CmsWorkflowsEditorMenu","router","canCreateContentModels","createElement","name","parent","element","Link","pinnable","text","to","getLink","ContentModels","Workflows","ModelIcon","model","icon","label","size","className","isAllowed","tags","includes","CmsWorkflowsEditorView","route","models","loading","canEdit","goToRoute","apps","filter","map","id","app","params","find","a","onAppClick","variant","indeterminate"],"sources":["CmsWorkflowsEditorView.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport { AdminConfig, useRoute, useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\nimport type { IWorkflowApplication } from \"@webiny/app-workflows\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { Icon, Loader } from \"@webiny/admin-ui\";\nimport { useModels, usePermission } from \"@webiny/app-headless-cms/admin/hooks/index.js\";\nimport type { CmsModel } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { createAppName } from \"~/utils/appName.js\";\nimport { normalizeIcon } from \"@webiny/app-headless-cms/utils/normalizeIcon.js\";\n\nconst {\n Admin: { WorkflowsEditor },\n Permissions: { HasWorkflowsEditorPermission }\n} = Components;\n\nconst { Menu } = AdminConfig;\n\nexport const CmsWorkflowsEditorMenu = () => {\n const router = useRouter();\n const { canCreateContentModels } = usePermission();\n\n if (!canCreateContentModels) {\n return null;\n }\n\n return (\n <HasWorkflowsEditorPermission>\n <Menu\n name={\"headlessCMS.contentModels.workflows\"}\n parent={\"headlessCMS\"}\n element={\n <Menu.Link\n pinnable={true}\n text={\"Workflows\"}\n to={router.getLink(Routes.ContentModels.Workflows)}\n />\n }\n />\n </HasWorkflowsEditorPermission>\n );\n};\n\ninterface IModelIconProps {\n model: Pick<CmsModel, \"icon\" | \"name\">;\n}\n\nconst ModelIcon = ({ model }: IModelIconProps) => {\n if (!model.icon) {\n return null;\n }\n\n const icon = normalizeIcon(model.icon);\n if (!icon) {\n return null;\n }\n\n return (\n <Icon\n icon={<FontAwesomeIcon icon={icon} />}\n label={model.name}\n size={\"sm\"}\n className={\"text-neutral-strong\"}\n />\n );\n};\n\nconst isAllowed = (model: Pick<CmsModel, \"modelId\" | \"tags\">) => {\n // Exclude models that have the \"$publishing:false\" tag\n if (model.tags.includes(\"$publishing:false\")) {\n return false;\n }\n // Exclude single entry models\n else if (model.tags.includes(\"singleEntry\")) {\n return false;\n }\n\n return true;\n};\n\nexport const CmsWorkflowsEditorView = () => {\n const { route } = useRoute(Routes.ContentModels.Workflows);\n const { models, loading } = useModels();\n const { canEdit, canCreateContentModels } = usePermission();\n const { goToRoute } = useRouter();\n\n const apps = useMemo<IWorkflowApplication[]>(() => {\n return models\n .filter(model => {\n if (isAllowed(model) === false) {\n return false;\n }\n return canEdit(model, \"cms.contentModel\");\n })\n .map(model => {\n return {\n id: createAppName(model),\n name: model.name,\n icon: <ModelIcon model={model} />\n };\n });\n }, [models, canEdit]);\n\n const app = useMemo(() => {\n if (!route.params.app) {\n return apps.find(() => true);\n }\n return apps.find(a => a.id === route.params.app) || null;\n }, [route.params.app]);\n\n const onAppClick = useCallback(\n (id: string) => {\n goToRoute(Routes.ContentModels.Workflows, {\n app: id\n });\n },\n [apps]\n );\n\n if (!canCreateContentModels) {\n return null;\n } else if (loading) {\n return <Loader size=\"lg\" variant=\"accent\" indeterminate={true} text=\"Loading...\" />;\n }\n\n return <WorkflowsEditor apps={apps} onAppClick={onAppClick} app={app?.id} />;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACnD,SAASC,WAAW,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,mBAAmB;AACpE,SAASC,MAAM;AAEf,SAASC,UAAU,QAAQ,uBAAuB;AAClD,SAASC,IAAI,EAAEC,MAAM,QAAQ,kBAAkB;AAC/C,SAASC,SAAS,EAAEC,aAAa,QAAQ,+CAA+C;AAExF,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,aAAa;AACtB,SAASC,aAAa,QAAQ,iDAAiD;AAE/E,MAAM;EACFC,KAAK,EAAE;IAAEC;EAAgB,CAAC;EAC1BC,WAAW,EAAE;IAAEC;EAA6B;AAChD,CAAC,GAAGX,UAAU;AAEd,MAAM;EAAEY;AAAK,CAAC,GAAGhB,WAAW;AAE5B,OAAO,MAAMiB,sBAAsB,GAAGA,CAAA,KAAM;EACxC,MAAMC,MAAM,GAAGhB,SAAS,CAAC,CAAC;EAC1B,MAAM;IAAEiB;EAAuB,CAAC,GAAGX,aAAa,CAAC,CAAC;EAElD,IAAI,CAACW,sBAAsB,EAAE;IACzB,OAAO,IAAI;EACf;EAEA,oBACItB,KAAA,CAAAuB,aAAA,CAACL,4BAA4B,qBACzBlB,KAAA,CAAAuB,aAAA,CAACJ,IAAI;IACDK,IAAI,EAAE,qCAAsC;IAC5CC,MAAM,EAAE,aAAc;IACtBC,OAAO,eACH1B,KAAA,CAAAuB,aAAA,CAACJ,IAAI,CAACQ,IAAI;MACNC,QAAQ,EAAE,IAAK;MACfC,IAAI,EAAE,WAAY;MAClBC,EAAE,EAAET,MAAM,CAACU,OAAO,CAACzB,MAAM,CAAC0B,aAAa,CAACC,SAAS;IAAE,CACtD;EACJ,CACJ,CACyB,CAAC;AAEvC,CAAC;AAMD,MAAMC,SAAS,GAAGA,CAAC;EAAEC;AAAuB,CAAC,KAAK;EAC9C,IAAI,CAACA,KAAK,CAACC,IAAI,EAAE;IACb,OAAO,IAAI;EACf;EAEA,MAAMA,IAAI,GAAGtB,aAAa,CAACqB,KAAK,CAACC,IAAI,CAAC;EACtC,IAAI,CAACA,IAAI,EAAE;IACP,OAAO,IAAI;EACf;EAEA,oBACIpC,KAAA,CAAAuB,aAAA,CAACf,IAAI;IACD4B,IAAI,eAAEpC,KAAA,CAAAuB,aAAA,CAACX,eAAe;MAACwB,IAAI,EAAEA;IAAK,CAAE,CAAE;IACtCC,KAAK,EAAEF,KAAK,CAACX,IAAK;IAClBc,IAAI,EAAE,IAAK;IACXC,SAAS,EAAE;EAAsB,CACpC,CAAC;AAEV,CAAC;AAED,MAAMC,SAAS,GAAIL,KAAyC,IAAK;EAC7D;EACA,IAAIA,KAAK,CAACM,IAAI,CAACC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;IAC1C,OAAO,KAAK;EAChB;EACA;EAAA,KACK,IAAIP,KAAK,CAACM,IAAI,CAACC,QAAQ,CAAC,aAAa,CAAC,EAAE;IACzC,OAAO,KAAK;EAChB;EAEA,OAAO,IAAI;AACf,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAGA,CAAA,KAAM;EACxC,MAAM;IAAEC;EAAM,CAAC,GAAGxC,QAAQ,CAACE,MAAM,CAAC0B,aAAa,CAACC,SAAS,CAAC;EAC1D,MAAM;IAAEY,MAAM;IAAEC;EAAQ,CAAC,GAAGpC,SAAS,CAAC,CAAC;EACvC,MAAM;IAAEqC,OAAO;IAAEzB;EAAuB,CAAC,GAAGX,aAAa,CAAC,CAAC;EAC3D,MAAM;IAAEqC;EAAU,CAAC,GAAG3C,SAAS,CAAC,CAAC;EAEjC,MAAM4C,IAAI,GAAG/C,OAAO,CAAyB,MAAM;IAC/C,OAAO2C,MAAM,CACRK,MAAM,CAACf,KAAK,IAAI;MACb,IAAIK,SAAS,CAACL,KAAK,CAAC,KAAK,KAAK,EAAE;QAC5B,OAAO,KAAK;MAChB;MACA,OAAOY,OAAO,CAACZ,KAAK,EAAE,kBAAkB,CAAC;IAC7C,CAAC,CAAC,CACDgB,GAAG,CAAChB,KAAK,IAAI;MACV,OAAO;QACHiB,EAAE,EAAEvC,aAAa,CAACsB,KAAK,CAAC;QACxBX,IAAI,EAAEW,KAAK,CAACX,IAAI;QAChBY,IAAI,eAAEpC,KAAA,CAAAuB,aAAA,CAACW,SAAS;UAACC,KAAK,EAAEA;QAAM,CAAE;MACpC,CAAC;IACL,CAAC,CAAC;EACV,CAAC,EAAE,CAACU,MAAM,EAAEE,OAAO,CAAC,CAAC;EAErB,MAAMM,GAAG,GAAGnD,OAAO,CAAC,MAAM;IACtB,IAAI,CAAC0C,KAAK,CAACU,MAAM,CAACD,GAAG,EAAE;MACnB,OAAOJ,IAAI,CAACM,IAAI,CAAC,MAAM,IAAI,CAAC;IAChC;IACA,OAAON,IAAI,CAACM,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACJ,EAAE,KAAKR,KAAK,CAACU,MAAM,CAACD,GAAG,CAAC,IAAI,IAAI;EAC5D,CAAC,EAAE,CAACT,KAAK,CAACU,MAAM,CAACD,GAAG,CAAC,CAAC;EAEtB,MAAMI,UAAU,GAAGxD,WAAW,CACzBmD,EAAU,IAAK;IACZJ,SAAS,CAAC1C,MAAM,CAAC0B,aAAa,CAACC,SAAS,EAAE;MACtCoB,GAAG,EAAED;IACT,CAAC,CAAC;EACN,CAAC,EACD,CAACH,IAAI,CACT,CAAC;EAED,IAAI,CAAC3B,sBAAsB,EAAE;IACzB,OAAO,IAAI;EACf,CAAC,MAAM,IAAIwB,OAAO,EAAE;IAChB,oBAAO9C,KAAA,CAAAuB,aAAA,CAACd,MAAM;MAAC6B,IAAI,EAAC,IAAI;MAACoB,OAAO,EAAC,QAAQ;MAACC,aAAa,EAAE,IAAK;MAAC9B,IAAI,EAAC;IAAY,CAAE,CAAC;EACvF;EAEA,oBAAO7B,KAAA,CAAAuB,aAAA,CAACP,eAAe;IAACiC,IAAI,EAAEA,IAAK;IAACQ,UAAU,EAAEA,UAAW;IAACJ,GAAG,EAAEA,GAAG,EAAED;EAAG,CAAE,CAAC;AAChF,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const CmsEntryFormCreateNewRevisionButton: () => React.JSX.Element;
@@ -0,0 +1,69 @@
1
+ import React, { useCallback } from "react";
2
+ import { useRoute } from "@webiny/app";
3
+ import { useToast } from "@webiny/admin-ui";
4
+ import { ContentEntryEditorConfig, usePermission } from "@webiny/app-headless-cms";
5
+ import { useContentEntryForm } from "@webiny/app-headless-cms/admin/components/ContentEntryForm/useContentEntryForm.js";
6
+ import { usePersistEntry } from "@webiny/app-headless-cms/admin/hooks/usePersistEntry.js";
7
+ import { ReactComponent as NewReleaseIcon } from "@webiny/icons/new_releases.svg";
8
+ import { IsModelPublishable } from "@webiny/app-headless-cms/exports/admin/cms.js";
9
+ const {
10
+ Actions
11
+ } = ContentEntryEditorConfig;
12
+ const CreateNewRevisionMenuItem = () => {
13
+ const toast = useToast();
14
+ const {
15
+ setRouteParams
16
+ } = useRoute();
17
+ const {
18
+ canEdit
19
+ } = usePermission();
20
+ const {
21
+ OptionsMenuItem
22
+ } = Actions.MenuItemAction.useOptionsMenuItem();
23
+ const {
24
+ entry
25
+ } = useContentEntryForm();
26
+ const {
27
+ persistEntry
28
+ } = usePersistEntry({
29
+ addItemToListCache: true
30
+ });
31
+ const onClick = useCallback(async () => {
32
+ const newRevision = await persistEntry({
33
+ id: entry.id
34
+ }, {
35
+ skipValidators: ["required"],
36
+ createNewRevision: true
37
+ });
38
+ if (newRevision.error) {
39
+ toast.showWarningToast({
40
+ title: "Could not create a new revision.",
41
+ description: newRevision.error.message
42
+ });
43
+ return;
44
+ }
45
+ setRouteParams(params => {
46
+ return {
47
+ ...params,
48
+ id: newRevision.entry.id
49
+ };
50
+ });
51
+ }, [entry, persistEntry]);
52
+ if (!canEdit(entry, "cms.contentEntry")) {
53
+ return null;
54
+ }
55
+ return /*#__PURE__*/React.createElement(OptionsMenuItem, {
56
+ icon: /*#__PURE__*/React.createElement(NewReleaseIcon, null),
57
+ label: `Create New Revision`,
58
+ onAction: onClick,
59
+ "data-testid": "cms.content-form.header.createNewRevision"
60
+ });
61
+ };
62
+ export const CmsEntryFormCreateNewRevisionButton = () => {
63
+ return /*#__PURE__*/React.createElement(ContentEntryEditorConfig, null, /*#__PURE__*/React.createElement(IsModelPublishable, null, /*#__PURE__*/React.createElement(Actions.MenuItemAction, {
64
+ name: "createNewRevision",
65
+ element: /*#__PURE__*/React.createElement(CreateNewRevisionMenuItem, null)
66
+ })));
67
+ };
68
+
69
+ //# sourceMappingURL=CmsEntryFormCreateNewRevisionButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useRoute","useToast","ContentEntryEditorConfig","usePermission","useContentEntryForm","usePersistEntry","ReactComponent","NewReleaseIcon","IsModelPublishable","Actions","CreateNewRevisionMenuItem","toast","setRouteParams","canEdit","OptionsMenuItem","MenuItemAction","useOptionsMenuItem","entry","persistEntry","addItemToListCache","onClick","newRevision","id","skipValidators","createNewRevision","error","showWarningToast","title","description","message","params","createElement","icon","label","onAction","CmsEntryFormCreateNewRevisionButton","name","element"],"sources":["CmsEntryFormCreateNewRevisionButton.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useRoute } from \"@webiny/app\";\nimport { useToast } from \"@webiny/admin-ui\";\nimport { ContentEntryEditorConfig, usePermission } from \"@webiny/app-headless-cms\";\nimport { useContentEntryForm } from \"@webiny/app-headless-cms/admin/components/ContentEntryForm/useContentEntryForm.js\";\nimport { usePersistEntry } from \"@webiny/app-headless-cms/admin/hooks/usePersistEntry.js\";\nimport { ReactComponent as NewReleaseIcon } from \"@webiny/icons/new_releases.svg\";\nimport { IsModelPublishable } from \"@webiny/app-headless-cms/exports/admin/cms.js\";\n\nconst { Actions } = ContentEntryEditorConfig;\n\nconst CreateNewRevisionMenuItem = () => {\n const toast = useToast();\n const { setRouteParams } = useRoute();\n const { canEdit } = usePermission();\n const { OptionsMenuItem } = Actions.MenuItemAction.useOptionsMenuItem();\n const { entry } = useContentEntryForm();\n const { persistEntry } = usePersistEntry({\n addItemToListCache: true\n });\n\n const onClick = useCallback(async () => {\n const newRevision = await persistEntry(\n {\n id: entry.id\n },\n {\n skipValidators: [\"required\"],\n createNewRevision: true\n }\n );\n\n if (newRevision.error) {\n toast.showWarningToast({\n title: \"Could not create a new revision.\",\n description: newRevision.error.message\n });\n return;\n }\n\n setRouteParams(params => {\n return { ...params, id: newRevision.entry.id };\n });\n }, [entry, persistEntry]);\n\n if (!canEdit(entry, \"cms.contentEntry\")) {\n return null;\n }\n\n return (\n <OptionsMenuItem\n icon={<NewReleaseIcon />}\n label={`Create New Revision`}\n onAction={onClick}\n data-testid={\"cms.content-form.header.createNewRevision\"}\n />\n );\n};\n\nexport const CmsEntryFormCreateNewRevisionButton = () => {\n return (\n <ContentEntryEditorConfig>\n <IsModelPublishable>\n <Actions.MenuItemAction\n name={\"createNewRevision\"}\n element={<CreateNewRevisionMenuItem />}\n />\n </IsModelPublishable>\n </ContentEntryEditorConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,QAAQ,QAAQ,kBAAkB;AAC3C,SAASC,wBAAwB,EAAEC,aAAa,QAAQ,0BAA0B;AAClF,SAASC,mBAAmB,QAAQ,mFAAmF;AACvH,SAASC,eAAe,QAAQ,yDAAyD;AACzF,SAASC,cAAc,IAAIC,cAAc,QAAQ,gCAAgC;AACjF,SAASC,kBAAkB,QAAQ,+CAA+C;AAElF,MAAM;EAAEC;AAAQ,CAAC,GAAGP,wBAAwB;AAE5C,MAAMQ,yBAAyB,GAAGA,CAAA,KAAM;EACpC,MAAMC,KAAK,GAAGV,QAAQ,CAAC,CAAC;EACxB,MAAM;IAAEW;EAAe,CAAC,GAAGZ,QAAQ,CAAC,CAAC;EACrC,MAAM;IAAEa;EAAQ,CAAC,GAAGV,aAAa,CAAC,CAAC;EACnC,MAAM;IAAEW;EAAgB,CAAC,GAAGL,OAAO,CAACM,cAAc,CAACC,kBAAkB,CAAC,CAAC;EACvE,MAAM;IAAEC;EAAM,CAAC,GAAGb,mBAAmB,CAAC,CAAC;EACvC,MAAM;IAAEc;EAAa,CAAC,GAAGb,eAAe,CAAC;IACrCc,kBAAkB,EAAE;EACxB,CAAC,CAAC;EAEF,MAAMC,OAAO,GAAGrB,WAAW,CAAC,YAAY;IACpC,MAAMsB,WAAW,GAAG,MAAMH,YAAY,CAClC;MACII,EAAE,EAAEL,KAAK,CAACK;IACd,CAAC,EACD;MACIC,cAAc,EAAE,CAAC,UAAU,CAAC;MAC5BC,iBAAiB,EAAE;IACvB,CACJ,CAAC;IAED,IAAIH,WAAW,CAACI,KAAK,EAAE;MACnBd,KAAK,CAACe,gBAAgB,CAAC;QACnBC,KAAK,EAAE,kCAAkC;QACzCC,WAAW,EAAEP,WAAW,CAACI,KAAK,CAACI;MACnC,CAAC,CAAC;MACF;IACJ;IAEAjB,cAAc,CAACkB,MAAM,IAAI;MACrB,OAAO;QAAE,GAAGA,MAAM;QAAER,EAAE,EAAED,WAAW,CAACJ,KAAK,CAACK;MAAG,CAAC;IAClD,CAAC,CAAC;EACN,CAAC,EAAE,CAACL,KAAK,EAAEC,YAAY,CAAC,CAAC;EAEzB,IAAI,CAACL,OAAO,CAACI,KAAK,EAAE,kBAAkB,CAAC,EAAE;IACrC,OAAO,IAAI;EACf;EAEA,oBACInB,KAAA,CAAAiC,aAAA,CAACjB,eAAe;IACZkB,IAAI,eAAElC,KAAA,CAAAiC,aAAA,CAACxB,cAAc,MAAE,CAAE;IACzB0B,KAAK,EAAE,qBAAsB;IAC7BC,QAAQ,EAAEd,OAAQ;IAClB,eAAa;EAA4C,CAC5D,CAAC;AAEV,CAAC;AAED,OAAO,MAAMe,mCAAmC,GAAGA,CAAA,KAAM;EACrD,oBACIrC,KAAA,CAAAiC,aAAA,CAAC7B,wBAAwB,qBACrBJ,KAAA,CAAAiC,aAAA,CAACvB,kBAAkB,qBACfV,KAAA,CAAAiC,aAAA,CAACtB,OAAO,CAACM,cAAc;IACnBqB,IAAI,EAAE,mBAAoB;IAC1BC,OAAO,eAAEvC,KAAA,CAAAiC,aAAA,CAACrB,yBAAyB,MAAE;EAAE,CAC1C,CACe,CACE,CAAC;AAEnC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const CmsEntryFormPublishButton: () => React.JSX.Element | null;
@@ -0,0 +1,38 @@
1
+ import { useContentEntry, usePermission } from "@webiny/app-headless-cms";
2
+ import { ContentEntryEditorConfig } from "@webiny/app-headless-cms/admin/config/contentEntries/index.js";
3
+ import React, { useCallback } from "react";
4
+ export const CmsEntryFormPublishButton = () => {
5
+ const {
6
+ loading,
7
+ entry,
8
+ publishEntryRevision
9
+ } = useContentEntry();
10
+ const {
11
+ ButtonPrimary
12
+ } = ContentEntryEditorConfig.Actions.ButtonAction.useButtons();
13
+ const publish = useCallback(() => {
14
+ if (!entry.id) {
15
+ console.warn(`You cannot publish an entry that hasn't been saved yet.`);
16
+ return;
17
+ }
18
+ publishEntryRevision({
19
+ id: entry.id
20
+ });
21
+ }, [entry.id]);
22
+ const {
23
+ canEdit,
24
+ canPublish
25
+ } = usePermission();
26
+ if (entry.meta.status === "published") {
27
+ return null;
28
+ } else if (!canEdit(entry, "cms.contentEntry") || !canPublish("cms.contentEntry")) {
29
+ return null;
30
+ }
31
+ return /*#__PURE__*/React.createElement(ButtonPrimary, {
32
+ onAction: publish,
33
+ disabled: loading,
34
+ "data-testid": "workflows-cms-content-publish-content-button"
35
+ }, "Publish");
36
+ };
37
+
38
+ //# sourceMappingURL=CmsEntryFormPublishButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useContentEntry","usePermission","ContentEntryEditorConfig","React","useCallback","CmsEntryFormPublishButton","loading","entry","publishEntryRevision","ButtonPrimary","Actions","ButtonAction","useButtons","publish","id","console","warn","canEdit","canPublish","meta","status","createElement","onAction","disabled"],"sources":["CmsEntryFormPublishButton.tsx"],"sourcesContent":["import { useContentEntry, usePermission } from \"@webiny/app-headless-cms\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms/admin/config/contentEntries/index.js\";\nimport React, { useCallback } from \"react\";\n\nexport const CmsEntryFormPublishButton = () => {\n const { loading, entry, publishEntryRevision } = useContentEntry();\n const { ButtonPrimary } = ContentEntryEditorConfig.Actions.ButtonAction.useButtons();\n\n const publish = useCallback(() => {\n if (!entry.id) {\n console.warn(`You cannot publish an entry that hasn't been saved yet.`);\n return;\n }\n publishEntryRevision({ id: entry.id });\n }, [entry.id]);\n\n const { canEdit, canPublish } = usePermission();\n\n if (entry.meta.status === \"published\") {\n return null;\n } else if (!canEdit(entry, \"cms.contentEntry\") || !canPublish(\"cms.contentEntry\")) {\n return null;\n }\n\n return (\n <ButtonPrimary\n onAction={publish}\n disabled={loading}\n data-testid=\"workflows-cms-content-publish-content-button\"\n >\n {\"Publish\"}\n </ButtonPrimary>\n );\n};\n"],"mappings":"AAAA,SAASA,eAAe,EAAEC,aAAa,QAAQ,0BAA0B;AACzE,SAASC,wBAAwB,QAAQ,+DAA+D;AACxG,OAAOC,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAE1C,OAAO,MAAMC,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,MAAM;IAAEC,OAAO;IAAEC,KAAK;IAAEC;EAAqB,CAAC,GAAGR,eAAe,CAAC,CAAC;EAClE,MAAM;IAAES;EAAc,CAAC,GAAGP,wBAAwB,CAACQ,OAAO,CAACC,YAAY,CAACC,UAAU,CAAC,CAAC;EAEpF,MAAMC,OAAO,GAAGT,WAAW,CAAC,MAAM;IAC9B,IAAI,CAACG,KAAK,CAACO,EAAE,EAAE;MACXC,OAAO,CAACC,IAAI,CAAC,yDAAyD,CAAC;MACvE;IACJ;IACAR,oBAAoB,CAAC;MAAEM,EAAE,EAAEP,KAAK,CAACO;IAAG,CAAC,CAAC;EAC1C,CAAC,EAAE,CAACP,KAAK,CAACO,EAAE,CAAC,CAAC;EAEd,MAAM;IAAEG,OAAO;IAAEC;EAAW,CAAC,GAAGjB,aAAa,CAAC,CAAC;EAE/C,IAAIM,KAAK,CAACY,IAAI,CAACC,MAAM,KAAK,WAAW,EAAE;IACnC,OAAO,IAAI;EACf,CAAC,MAAM,IAAI,CAACH,OAAO,CAACV,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAACW,UAAU,CAAC,kBAAkB,CAAC,EAAE;IAC/E,OAAO,IAAI;EACf;EAEA,oBACIf,KAAA,CAAAkB,aAAA,CAACZ,aAAa;IACVa,QAAQ,EAAET,OAAQ;IAClBU,QAAQ,EAAEjB,OAAQ;IAClB,eAAY;EAA8C,GAEzD,SACU,CAAC;AAExB,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const CmsEntryFormSaveAndPublishButton: (props: unknown) => React.JSX.Element;
@@ -0,0 +1,39 @@
1
+ import React from "react";
2
+ import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
3
+ import { useWorkflowState } from "@webiny/app-workflows";
4
+ import { observer } from "mobx-react-lite";
5
+ import { WorkflowStateValue } from "@webiny/app-workflows";
6
+ import { CmsEntryFormPublishButton } from "./CmsEntryFormPublishButton.js";
7
+ const {
8
+ Actions
9
+ } = ContentEntryEditorConfig;
10
+ const {
11
+ ButtonAction
12
+ } = Actions;
13
+ const OverrideSaveAndPublishButton = observer(props => {
14
+ const {
15
+ presenter
16
+ } = useWorkflowState();
17
+
18
+ /**
19
+ * If there is no workflow state or state is approved, we simply render the original element.
20
+ * This is to ensure that no button will be shown if workflow state is active.
21
+ */
22
+ if (props.name !== "publish" || !presenter.vm.workflow) {
23
+ return props.children;
24
+ } else if (presenter.vm.state?.state === WorkflowStateValue.approved) {
25
+ return /*#__PURE__*/React.createElement(CmsEntryFormPublishButton, null);
26
+ }
27
+ return null;
28
+ });
29
+ export const CmsEntryFormSaveAndPublishButton = ButtonAction.createDecorator(Original => {
30
+ return function WorkflowCmsEntryFormSaveAndPublishButton(props) {
31
+ return /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
32
+ element: /*#__PURE__*/React.createElement(OverrideSaveAndPublishButton, {
33
+ name: props.name
34
+ }, props.element)
35
+ }));
36
+ };
37
+ });
38
+
39
+ //# sourceMappingURL=CmsEntryFormSaveAndPublishButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","ContentEntryEditorConfig","useWorkflowState","observer","WorkflowStateValue","CmsEntryFormPublishButton","Actions","ButtonAction","OverrideSaveAndPublishButton","props","presenter","name","vm","workflow","children","state","approved","createElement","CmsEntryFormSaveAndPublishButton","createDecorator","Original","WorkflowCmsEntryFormSaveAndPublishButton","Object","assign","element"],"sources":["CmsEntryFormSaveAndPublishButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { observer } from \"mobx-react-lite\";\nimport { WorkflowStateValue } from \"@webiny/app-workflows\";\nimport { CmsEntryFormPublishButton } from \"./CmsEntryFormPublishButton.js\";\n\nconst { Actions } = ContentEntryEditorConfig;\nconst { ButtonAction } = Actions;\n\ninterface IOverrideSaveAndPublishButtonProps {\n name: string;\n children: React.ReactElement;\n}\n\nconst OverrideSaveAndPublishButton = observer((props: IOverrideSaveAndPublishButtonProps) => {\n const { presenter } = useWorkflowState();\n\n /**\n * If there is no workflow state or state is approved, we simply render the original element.\n * This is to ensure that no button will be shown if workflow state is active.\n */\n if (props.name !== \"publish\" || !presenter.vm.workflow) {\n return props.children;\n } else if (presenter.vm.state?.state === WorkflowStateValue.approved) {\n return <CmsEntryFormPublishButton />;\n }\n return null;\n});\n\nexport const CmsEntryFormSaveAndPublishButton = ButtonAction.createDecorator(Original => {\n return function WorkflowCmsEntryFormSaveAndPublishButton(props) {\n return (\n <Original\n {...props}\n element={\n <OverrideSaveAndPublishButton name={props.name}>\n {props.element}\n </OverrideSaveAndPublishButton>\n }\n />\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,wBAAwB,QAAQ,0BAA0B;AACnE,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,kBAAkB,QAAQ,uBAAuB;AAC1D,SAASC,yBAAyB;AAElC,MAAM;EAAEC;AAAQ,CAAC,GAAGL,wBAAwB;AAC5C,MAAM;EAAEM;AAAa,CAAC,GAAGD,OAAO;AAOhC,MAAME,4BAA4B,GAAGL,QAAQ,CAAEM,KAAyC,IAAK;EACzF,MAAM;IAAEC;EAAU,CAAC,GAAGR,gBAAgB,CAAC,CAAC;;EAExC;AACJ;AACA;AACA;EACI,IAAIO,KAAK,CAACE,IAAI,KAAK,SAAS,IAAI,CAACD,SAAS,CAACE,EAAE,CAACC,QAAQ,EAAE;IACpD,OAAOJ,KAAK,CAACK,QAAQ;EACzB,CAAC,MAAM,IAAIJ,SAAS,CAACE,EAAE,CAACG,KAAK,EAAEA,KAAK,KAAKX,kBAAkB,CAACY,QAAQ,EAAE;IAClE,oBAAOhB,KAAA,CAAAiB,aAAA,CAACZ,yBAAyB,MAAE,CAAC;EACxC;EACA,OAAO,IAAI;AACf,CAAC,CAAC;AAEF,OAAO,MAAMa,gCAAgC,GAAGX,YAAY,CAACY,eAAe,CAACC,QAAQ,IAAI;EACrF,OAAO,SAASC,wCAAwCA,CAACZ,KAAK,EAAE;IAC5D,oBACIT,KAAA,CAAAiB,aAAA,CAACG,QAAQ,EAAAE,MAAA,CAAAC,MAAA,KACDd,KAAK;MACTe,OAAO,eACHxB,KAAA,CAAAiB,aAAA,CAACT,4BAA4B;QAACG,IAAI,EAAEF,KAAK,CAACE;MAAK,GAC1CF,KAAK,CAACe,OACmB;IACjC,EACJ,CAAC;EAEV,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const CmsEntryFormSaveButton: (props: unknown) => React.JSX.Element;
@@ -0,0 +1,37 @@
1
+ import React from "react";
2
+ import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
3
+ import { useWorkflowState } from "@webiny/app-workflows";
4
+ import { observer } from "mobx-react-lite";
5
+ const {
6
+ Actions
7
+ } = ContentEntryEditorConfig;
8
+ const {
9
+ ButtonAction
10
+ } = Actions;
11
+ const OverrideSaveButton = observer(props => {
12
+ const {
13
+ presenter
14
+ } = useWorkflowState();
15
+
16
+ /**
17
+ * If there is no workflow state or state is approved, we simply render the original element.
18
+ * This is to ensure that no button will be shown if workflow state is active.
19
+ */
20
+ if (props.name !== "save") {
21
+ return props.children;
22
+ } else if (!presenter.vm.state) {
23
+ return props.children;
24
+ }
25
+ return null;
26
+ });
27
+ export const CmsEntryFormSaveButton = ButtonAction.createDecorator(Original => {
28
+ return function WorkflowCmsEntryFormSaveButton(props) {
29
+ return /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
30
+ element: /*#__PURE__*/React.createElement(OverrideSaveButton, {
31
+ name: props.name
32
+ }, props.element)
33
+ }));
34
+ };
35
+ });
36
+
37
+ //# sourceMappingURL=CmsEntryFormSaveButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","ContentEntryEditorConfig","useWorkflowState","observer","Actions","ButtonAction","OverrideSaveButton","props","presenter","name","children","vm","state","CmsEntryFormSaveButton","createDecorator","Original","WorkflowCmsEntryFormSaveButton","createElement","Object","assign","element"],"sources":["CmsEntryFormSaveButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { observer } from \"mobx-react-lite\";\n\nconst { Actions } = ContentEntryEditorConfig;\nconst { ButtonAction } = Actions;\n\ninterface IOverrideSaveButtonProps {\n name: string;\n children: React.ReactElement;\n}\n\nconst OverrideSaveButton = observer((props: IOverrideSaveButtonProps) => {\n const { presenter } = useWorkflowState();\n\n /**\n * If there is no workflow state or state is approved, we simply render the original element.\n * This is to ensure that no button will be shown if workflow state is active.\n */\n if (props.name !== \"save\") {\n return props.children;\n } else if (!presenter.vm.state) {\n return props.children;\n }\n return null;\n});\n\nexport const CmsEntryFormSaveButton = ButtonAction.createDecorator(Original => {\n return function WorkflowCmsEntryFormSaveButton(props) {\n return (\n <Original\n {...props}\n element={<OverrideSaveButton name={props.name}>{props.element}</OverrideSaveButton>}\n />\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,wBAAwB,QAAQ,0BAA0B;AACnE,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,QAAQ,QAAQ,iBAAiB;AAE1C,MAAM;EAAEC;AAAQ,CAAC,GAAGH,wBAAwB;AAC5C,MAAM;EAAEI;AAAa,CAAC,GAAGD,OAAO;AAOhC,MAAME,kBAAkB,GAAGH,QAAQ,CAAEI,KAA+B,IAAK;EACrE,MAAM;IAAEC;EAAU,CAAC,GAAGN,gBAAgB,CAAC,CAAC;;EAExC;AACJ;AACA;AACA;EACI,IAAIK,KAAK,CAACE,IAAI,KAAK,MAAM,EAAE;IACvB,OAAOF,KAAK,CAACG,QAAQ;EACzB,CAAC,MAAM,IAAI,CAACF,SAAS,CAACG,EAAE,CAACC,KAAK,EAAE;IAC5B,OAAOL,KAAK,CAACG,QAAQ;EACzB;EACA,OAAO,IAAI;AACf,CAAC,CAAC;AAEF,OAAO,MAAMG,sBAAsB,GAAGR,YAAY,CAACS,eAAe,CAACC,QAAQ,IAAI;EAC3E,OAAO,SAASC,8BAA8BA,CAACT,KAAK,EAAE;IAClD,oBACIP,KAAA,CAAAiB,aAAA,CAACF,QAAQ,EAAAG,MAAA,CAAAC,MAAA,KACDZ,KAAK;MACTa,OAAO,eAAEpB,KAAA,CAAAiB,aAAA,CAACX,kBAAkB;QAACG,IAAI,EAAEF,KAAK,CAACE;MAAK,GAAEF,KAAK,CAACa,OAA4B;IAAE,EACvF,CAAC;EAEV,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ /**
3
+ * There is a possibility that this decorator will not do anything, because scheduler is not turned on.
4
+ */
5
+ export declare const CmsEntryFormScheduleMenuItemAction: (props: unknown) => React.JSX.Element;
@@ -0,0 +1,38 @@
1
+ import React from "react";
2
+ import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
3
+ import { useWorkflowState, WorkflowStateValue } from "@webiny/app-workflows";
4
+ const {
5
+ Actions
6
+ } = ContentEntryEditorConfig;
7
+ const {
8
+ MenuItemAction
9
+ } = Actions;
10
+ const OverrideScheduleMenuItemAction = props => {
11
+ const {
12
+ presenter
13
+ } = useWorkflowState();
14
+ /**
15
+ * If there is no workflow state or state is approved, we simply render the original element.
16
+ * This is to ensure that no button will be shown if workflow state is active.
17
+ */
18
+ if (!presenter.vm.workflow || presenter.vm.state?.state === WorkflowStateValue.approved) {
19
+ return props.children;
20
+ } else if (props.name === "schedule") {
21
+ return null;
22
+ }
23
+ return props.children;
24
+ };
25
+ /**
26
+ * There is a possibility that this decorator will not do anything, because scheduler is not turned on.
27
+ */
28
+ export const CmsEntryFormScheduleMenuItemAction = MenuItemAction.createDecorator(Original => {
29
+ return function WorkflowCmsEntryScheduleMenuItemAction(props) {
30
+ return /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
31
+ element: /*#__PURE__*/React.createElement(OverrideScheduleMenuItemAction, {
32
+ name: props.name
33
+ }, props.element)
34
+ }));
35
+ };
36
+ });
37
+
38
+ //# sourceMappingURL=CmsEntryFormScheduleMenuItemAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","ContentEntryEditorConfig","useWorkflowState","WorkflowStateValue","Actions","MenuItemAction","OverrideScheduleMenuItemAction","props","presenter","vm","workflow","state","approved","children","name","CmsEntryFormScheduleMenuItemAction","createDecorator","Original","WorkflowCmsEntryScheduleMenuItemAction","createElement","Object","assign","element"],"sources":["CmsEntryFormScheduleMenuItemAction.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\nimport { useWorkflowState, WorkflowStateValue } from \"@webiny/app-workflows\";\n\nconst { Actions } = ContentEntryEditorConfig;\nconst { MenuItemAction } = Actions;\n\ninterface IOverrideScheduleMenuItemActionProps {\n name: string;\n children: React.ReactElement;\n}\n\nconst OverrideScheduleMenuItemAction = (props: IOverrideScheduleMenuItemActionProps) => {\n const { presenter } = useWorkflowState();\n /**\n * If there is no workflow state or state is approved, we simply render the original element.\n * This is to ensure that no button will be shown if workflow state is active.\n */\n if (!presenter.vm.workflow || presenter.vm.state?.state === WorkflowStateValue.approved) {\n return props.children;\n } else if (props.name === \"schedule\") {\n return null;\n }\n return props.children;\n};\n/**\n * There is a possibility that this decorator will not do anything, because scheduler is not turned on.\n */\nexport const CmsEntryFormScheduleMenuItemAction = MenuItemAction.createDecorator(Original => {\n return function WorkflowCmsEntryScheduleMenuItemAction(props) {\n return (\n <Original\n {...props}\n element={\n <OverrideScheduleMenuItemAction name={props.name}>\n {props.element}\n </OverrideScheduleMenuItemAction>\n }\n />\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,wBAAwB,QAAQ,0BAA0B;AACnE,SAASC,gBAAgB,EAAEC,kBAAkB,QAAQ,uBAAuB;AAE5E,MAAM;EAAEC;AAAQ,CAAC,GAAGH,wBAAwB;AAC5C,MAAM;EAAEI;AAAe,CAAC,GAAGD,OAAO;AAOlC,MAAME,8BAA8B,GAAIC,KAA2C,IAAK;EACpF,MAAM;IAAEC;EAAU,CAAC,GAAGN,gBAAgB,CAAC,CAAC;EACxC;AACJ;AACA;AACA;EACI,IAAI,CAACM,SAAS,CAACC,EAAE,CAACC,QAAQ,IAAIF,SAAS,CAACC,EAAE,CAACE,KAAK,EAAEA,KAAK,KAAKR,kBAAkB,CAACS,QAAQ,EAAE;IACrF,OAAOL,KAAK,CAACM,QAAQ;EACzB,CAAC,MAAM,IAAIN,KAAK,CAACO,IAAI,KAAK,UAAU,EAAE;IAClC,OAAO,IAAI;EACf;EACA,OAAOP,KAAK,CAACM,QAAQ;AACzB,CAAC;AACD;AACA;AACA;AACA,OAAO,MAAME,kCAAkC,GAAGV,cAAc,CAACW,eAAe,CAACC,QAAQ,IAAI;EACzF,OAAO,SAASC,sCAAsCA,CAACX,KAAK,EAAE;IAC1D,oBACIP,KAAA,CAAAmB,aAAA,CAACF,QAAQ,EAAAG,MAAA,CAAAC,MAAA,KACDd,KAAK;MACTe,OAAO,eACHtB,KAAA,CAAAmB,aAAA,CAACb,8BAA8B;QAACQ,IAAI,EAAEP,KAAK,CAACO;MAAK,GAC5CP,KAAK,CAACe,OACqB;IACnC,EACJ,CAAC;EAEV,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const CmsEntryFormTooltipButton: () => React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import { Components } from "@webiny/app-workflows";
3
+ import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
4
+ const {
5
+ ContentReview: {
6
+ WorkflowStateTooltip
7
+ }
8
+ } = Components;
9
+ const {
10
+ Actions
11
+ } = ContentEntryEditorConfig;
12
+ export const CmsEntryFormTooltipButton = () => {
13
+ return /*#__PURE__*/React.createElement(ContentEntryEditorConfig, null, /*#__PURE__*/React.createElement(Actions.ButtonAction, {
14
+ before: "save",
15
+ name: "workflowStateTooltip",
16
+ element: /*#__PURE__*/React.createElement(WorkflowStateTooltip, null)
17
+ }));
18
+ };
19
+
20
+ //# sourceMappingURL=CmsEntryFormTooltipButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Components","ContentEntryEditorConfig","ContentReview","WorkflowStateTooltip","Actions","CmsEntryFormTooltipButton","createElement","ButtonAction","before","name","element"],"sources":["CmsEntryFormTooltipButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\n\nconst {\n ContentReview: { WorkflowStateTooltip }\n} = Components;\n\nconst { Actions } = ContentEntryEditorConfig;\n\nexport const CmsEntryFormTooltipButton = () => {\n return (\n <ContentEntryEditorConfig>\n <Actions.ButtonAction\n before={\"save\"}\n name={\"workflowStateTooltip\"}\n element={<WorkflowStateTooltip />}\n />\n </ContentEntryEditorConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,QAAQ,uBAAuB;AAClD,SAASC,wBAAwB,QAAQ,0BAA0B;AAEnE,MAAM;EACFC,aAAa,EAAE;IAAEC;EAAqB;AAC1C,CAAC,GAAGH,UAAU;AAEd,MAAM;EAAEI;AAAQ,CAAC,GAAGH,wBAAwB;AAE5C,OAAO,MAAMI,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,oBACIN,KAAA,CAAAO,aAAA,CAACL,wBAAwB,qBACrBF,KAAA,CAAAO,aAAA,CAACF,OAAO,CAACG,YAAY;IACjBC,MAAM,EAAE,MAAO;IACfC,IAAI,EAAE,sBAAuB;IAC7BC,OAAO,eAAEX,KAAA,CAAAO,aAAA,CAACH,oBAAoB,MAAE;EAAE,CACrC,CACqB,CAAC;AAEnC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const ContentEntryFormWorkflow: (props: unknown) => React.JSX.Element;
@@ -0,0 +1,73 @@
1
+ import React from "react";
2
+ import { ContentEntryForm, useModel } from "@webiny/app-headless-cms";
3
+ import { Components } from "@webiny/app-workflows";
4
+ import { Alert, Grid } from "@webiny/admin-ui";
5
+ import { CMS_MODEL_SINGLETON_TAG } from "@webiny/app-headless-cms-common";
6
+ const {
7
+ ContentReview: {
8
+ WorkflowStateBar,
9
+ WorkflowStateOverlay
10
+ }
11
+ } = Components;
12
+
13
+ /**
14
+ * To override storing of the entry when in workflow state.
15
+ */
16
+ // @ts-expect-error
17
+ const emptyFunction = async () => {
18
+ return void 0;
19
+ };
20
+ const StoreAlert = ({
21
+ state
22
+ }) => {
23
+ if (!state) {
24
+ return null;
25
+ }
26
+ return /*#__PURE__*/React.createElement(Alert, {
27
+ className: "mb-md",
28
+ type: "danger"
29
+ }, "Any changes you do on the entry will not be stored!");
30
+ };
31
+ const shouldShowOriginal = params => {
32
+ const {
33
+ entry,
34
+ model
35
+ } = params;
36
+ /**
37
+ * In case of new entry or no model, show original.
38
+ * Also, for singleton models, show original.
39
+ */
40
+ if (!entry?.id || !model?.tags) {
41
+ return true;
42
+ }
43
+ return model.tags.includes(CMS_MODEL_SINGLETON_TAG);
44
+ };
45
+ export const ContentEntryFormWorkflow = ContentEntryForm.createDecorator(Original => {
46
+ return function ContentEntryFormWorkflow(props) {
47
+ const {
48
+ model
49
+ } = useModel();
50
+ const showOriginal = shouldShowOriginal({
51
+ entry: props.entry,
52
+ model
53
+ });
54
+ if (showOriginal) {
55
+ return /*#__PURE__*/React.createElement(Original, props);
56
+ }
57
+ return /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
58
+ span: 12
59
+ }, /*#__PURE__*/React.createElement(WorkflowStateBar, null)), /*#__PURE__*/React.createElement(Grid.Column, {
60
+ span: 12
61
+ }, /*#__PURE__*/React.createElement(WorkflowStateOverlay, null, ({
62
+ state
63
+ }) => {
64
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StoreAlert, {
65
+ state: state
66
+ }), /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
67
+ persistEntry: state ? emptyFunction : props.persistEntry
68
+ })));
69
+ })));
70
+ };
71
+ });
72
+
73
+ //# sourceMappingURL=ContentEntryFormWorkflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","ContentEntryForm","useModel","Components","Alert","Grid","CMS_MODEL_SINGLETON_TAG","ContentReview","WorkflowStateBar","WorkflowStateOverlay","emptyFunction","StoreAlert","state","createElement","className","type","shouldShowOriginal","params","entry","model","id","tags","includes","ContentEntryFormWorkflow","createDecorator","Original","props","showOriginal","Column","span","Fragment","Object","assign","persistEntry"],"sources":["ContentEntryFormWorkflow.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryForm, useModel } from \"@webiny/app-headless-cms\";\nimport type { IWorkflowState } from \"@webiny/app-workflows\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { Alert, Grid } from \"@webiny/admin-ui\";\nimport type { PersistEntry } from \"@webiny/app-headless-cms/admin/components/ContentEntryForm/ContentEntryFormProvider.js\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/app-headless-cms-common\";\nimport type { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms-common/types/index.js\";\n\nconst {\n ContentReview: { WorkflowStateBar, WorkflowStateOverlay }\n} = Components;\n\n/**\n * To override storing of the entry when in workflow state.\n */\n// @ts-expect-error\nconst emptyFunction: PersistEntry = async () => {\n return void 0;\n};\n\ninterface IStoreAlertProps {\n state: IWorkflowState | undefined;\n}\n\nconst StoreAlert = ({ state }: IStoreAlertProps) => {\n if (!state) {\n return null;\n }\n return (\n <Alert className={\"mb-md\"} type=\"danger\">\n Any changes you do on the entry will not be stored!\n </Alert>\n );\n};\n\ninterface IShouldShowOriginalParams {\n entry: Partial<Pick<CmsContentEntry, \"id\">>;\n model: Partial<Pick<CmsModel, \"tags\">>;\n}\nconst shouldShowOriginal = (params: IShouldShowOriginalParams): boolean => {\n const { entry, model } = params;\n /**\n * In case of new entry or no model, show original.\n * Also, for singleton models, show original.\n */\n if (!entry?.id || !model?.tags) {\n return true;\n }\n return model.tags.includes(CMS_MODEL_SINGLETON_TAG);\n};\n\nexport const ContentEntryFormWorkflow = ContentEntryForm.createDecorator(Original => {\n return function ContentEntryFormWorkflow(props) {\n const { model } = useModel();\n\n const showOriginal = shouldShowOriginal({\n entry: props.entry,\n model\n });\n\n if (showOriginal) {\n return <Original {...props} />;\n }\n\n return (\n <Grid>\n <Grid.Column span={12}>\n <WorkflowStateBar />\n </Grid.Column>\n <Grid.Column span={12}>\n <WorkflowStateOverlay>\n {({ state }) => {\n return (\n <>\n <StoreAlert state={state} />\n <Original\n {...props}\n persistEntry={state ? emptyFunction : props.persistEntry}\n />\n </>\n );\n }}\n </WorkflowStateOverlay>\n </Grid.Column>\n </Grid>\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,gBAAgB,EAAEC,QAAQ,QAAQ,0BAA0B;AAErE,SAASC,UAAU,QAAQ,uBAAuB;AAClD,SAASC,KAAK,EAAEC,IAAI,QAAQ,kBAAkB;AAE9C,SAASC,uBAAuB,QAAQ,iCAAiC;AAGzE,MAAM;EACFC,aAAa,EAAE;IAAEC,gBAAgB;IAAEC;EAAqB;AAC5D,CAAC,GAAGN,UAAU;;AAEd;AACA;AACA;AACA;AACA,MAAMO,aAA2B,GAAG,MAAAA,CAAA,KAAY;EAC5C,OAAO,KAAK,CAAC;AACjB,CAAC;AAMD,MAAMC,UAAU,GAAGA,CAAC;EAAEC;AAAwB,CAAC,KAAK;EAChD,IAAI,CAACA,KAAK,EAAE;IACR,OAAO,IAAI;EACf;EACA,oBACIZ,KAAA,CAAAa,aAAA,CAACT,KAAK;IAACU,SAAS,EAAE,OAAQ;IAACC,IAAI,EAAC;EAAQ,GAAC,qDAElC,CAAC;AAEhB,CAAC;AAMD,MAAMC,kBAAkB,GAAIC,MAAiC,IAAc;EACvE,MAAM;IAAEC,KAAK;IAAEC;EAAM,CAAC,GAAGF,MAAM;EAC/B;AACJ;AACA;AACA;EACI,IAAI,CAACC,KAAK,EAAEE,EAAE,IAAI,CAACD,KAAK,EAAEE,IAAI,EAAE;IAC5B,OAAO,IAAI;EACf;EACA,OAAOF,KAAK,CAACE,IAAI,CAACC,QAAQ,CAAChB,uBAAuB,CAAC;AACvD,CAAC;AAED,OAAO,MAAMiB,wBAAwB,GAAGtB,gBAAgB,CAACuB,eAAe,CAACC,QAAQ,IAAI;EACjF,OAAO,SAASF,wBAAwBA,CAACG,KAAK,EAAE;IAC5C,MAAM;MAAEP;IAAM,CAAC,GAAGjB,QAAQ,CAAC,CAAC;IAE5B,MAAMyB,YAAY,GAAGX,kBAAkB,CAAC;MACpCE,KAAK,EAAEQ,KAAK,CAACR,KAAK;MAClBC;IACJ,CAAC,CAAC;IAEF,IAAIQ,YAAY,EAAE;MACd,oBAAO3B,KAAA,CAAAa,aAAA,CAACY,QAAQ,EAAKC,KAAQ,CAAC;IAClC;IAEA,oBACI1B,KAAA,CAAAa,aAAA,CAACR,IAAI,qBACDL,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACuB,MAAM;MAACC,IAAI,EAAE;IAAG,gBAClB7B,KAAA,CAAAa,aAAA,CAACL,gBAAgB,MAAE,CACV,CAAC,eACdR,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACuB,MAAM;MAACC,IAAI,EAAE;IAAG,gBAClB7B,KAAA,CAAAa,aAAA,CAACJ,oBAAoB,QAChB,CAAC;MAAEG;IAAM,CAAC,KAAK;MACZ,oBACIZ,KAAA,CAAAa,aAAA,CAAAb,KAAA,CAAA8B,QAAA,qBACI9B,KAAA,CAAAa,aAAA,CAACF,UAAU;QAACC,KAAK,EAAEA;MAAM,CAAE,CAAC,eAC5BZ,KAAA,CAAAa,aAAA,CAACY,QAAQ,EAAAM,MAAA,CAAAC,MAAA,KACDN,KAAK;QACTO,YAAY,EAAErB,KAAK,GAAGF,aAAa,GAAGgB,KAAK,CAACO;MAAa,EAC5D,CACH,CAAC;IAEX,CACkB,CACb,CACX,CAAC;EAEf,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const ContentEntryWorkflow: (props: unknown) => React.JSX.Element;
@@ -0,0 +1,35 @@
1
+ import React from "react";
2
+ import { ContentEntryEditorConfig, useContentEntry } from "@webiny/app-headless-cms";
3
+ import { Components } from "@webiny/app-workflows";
4
+ import { useSecurity } from "@webiny/app-admin";
5
+ import { useApolloClient } from "@apollo/react-hooks";
6
+ import { createAppName } from "../../utils/appName.js";
7
+ const {
8
+ ContentReview: {
9
+ WorkflowStateProvider
10
+ }
11
+ } = Components;
12
+ const {
13
+ ContentEntry
14
+ } = ContentEntryEditorConfig;
15
+ export const ContentEntryWorkflow = ContentEntry.createDecorator(Original => {
16
+ return function ContentEntryWorkflowSetup() {
17
+ const {
18
+ entry,
19
+ contentModel: model
20
+ } = useContentEntry();
21
+ const client = useApolloClient();
22
+ const {
23
+ identity
24
+ } = useSecurity();
25
+ return /*#__PURE__*/React.createElement(WorkflowStateProvider, {
26
+ app: createAppName(model),
27
+ id: entry.id,
28
+ identity: identity,
29
+ client: client,
30
+ title: `${model.name}: ${entry.meta?.title || "unknown"}`
31
+ }, /*#__PURE__*/React.createElement(Original, null));
32
+ };
33
+ });
34
+
35
+ //# sourceMappingURL=ContentEntryWorkflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","ContentEntryEditorConfig","useContentEntry","Components","useSecurity","useApolloClient","createAppName","ContentReview","WorkflowStateProvider","ContentEntry","ContentEntryWorkflow","createDecorator","Original","ContentEntryWorkflowSetup","entry","contentModel","model","client","identity","createElement","app","id","title","name","meta"],"sources":["ContentEntryWorkflow.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig, useContentEntry } from \"@webiny/app-headless-cms\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { useSecurity } from \"@webiny/app-admin\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { createAppName } from \"~/utils/appName.js\";\n\nconst {\n ContentReview: { WorkflowStateProvider }\n} = Components;\n\nconst { ContentEntry } = ContentEntryEditorConfig;\n\nexport const ContentEntryWorkflow = ContentEntry.createDecorator(Original => {\n return function ContentEntryWorkflowSetup() {\n const { entry, contentModel: model } = useContentEntry();\n const client = useApolloClient();\n\n const { identity } = useSecurity();\n\n return (\n <WorkflowStateProvider\n app={createAppName(model)}\n id={entry.id}\n identity={identity}\n client={client}\n title={`${model.name}: ${entry.meta?.title || \"unknown\"}`}\n >\n <Original />\n </WorkflowStateProvider>\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,wBAAwB,EAAEC,eAAe,QAAQ,0BAA0B;AACpF,SAASC,UAAU,QAAQ,uBAAuB;AAClD,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,aAAa;AAEtB,MAAM;EACFC,aAAa,EAAE;IAAEC;EAAsB;AAC3C,CAAC,GAAGL,UAAU;AAEd,MAAM;EAAEM;AAAa,CAAC,GAAGR,wBAAwB;AAEjD,OAAO,MAAMS,oBAAoB,GAAGD,YAAY,CAACE,eAAe,CAACC,QAAQ,IAAI;EACzE,OAAO,SAASC,yBAAyBA,CAAA,EAAG;IACxC,MAAM;MAAEC,KAAK;MAAEC,YAAY,EAAEC;IAAM,CAAC,GAAGd,eAAe,CAAC,CAAC;IACxD,MAAMe,MAAM,GAAGZ,eAAe,CAAC,CAAC;IAEhC,MAAM;MAAEa;IAAS,CAAC,GAAGd,WAAW,CAAC,CAAC;IAElC,oBACIJ,KAAA,CAAAmB,aAAA,CAACX,qBAAqB;MAClBY,GAAG,EAAEd,aAAa,CAACU,KAAK,CAAE;MAC1BK,EAAE,EAAEP,KAAK,CAACO,EAAG;MACbH,QAAQ,EAAEA,QAAS;MACnBD,MAAM,EAAEA,MAAO;MACfK,KAAK,EAAE,GAAGN,KAAK,CAACO,IAAI,KAAKT,KAAK,CAACU,IAAI,EAAEF,KAAK,IAAI,SAAS;IAAG,gBAE1DtB,KAAA,CAAAmB,aAAA,CAACP,QAAQ,MAAE,CACQ,CAAC;EAEhC,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ export { ContentEntryFormWorkflow } from "./ContentEntryFormWorkflow.js";
2
+ export { ContentEntryWorkflow } from "./ContentEntryWorkflow.js";
3
+ export { CmsEntryFormTooltipButton } from "./CmsEntryFormTooltipButton.js";
4
+ export { CmsEntryFormScheduleMenuItemAction } from "./CmsEntryFormScheduleMenuItemAction.js";
5
+ export { CmsEntryFormSaveAndPublishButton } from "./CmsEntryFormSaveAndPublishButton.js";
6
+ export { CmsEntryFormSaveButton } from "./CmsEntryFormSaveButton.js";
7
+ export { CmsEntryFormCreateNewRevisionButton } from "./CmsEntryFormCreateNewRevisionButton.js";
@@ -0,0 +1,9 @@
1
+ export { ContentEntryFormWorkflow } from "./ContentEntryFormWorkflow.js";
2
+ export { ContentEntryWorkflow } from "./ContentEntryWorkflow.js";
3
+ export { CmsEntryFormTooltipButton } from "./CmsEntryFormTooltipButton.js";
4
+ export { CmsEntryFormScheduleMenuItemAction } from "./CmsEntryFormScheduleMenuItemAction.js";
5
+ export { CmsEntryFormSaveAndPublishButton } from "./CmsEntryFormSaveAndPublishButton.js";
6
+ export { CmsEntryFormSaveButton } from "./CmsEntryFormSaveButton.js";
7
+ export { CmsEntryFormCreateNewRevisionButton } from "./CmsEntryFormCreateNewRevisionButton.js";
8
+
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ContentEntryFormWorkflow","ContentEntryWorkflow","CmsEntryFormTooltipButton","CmsEntryFormScheduleMenuItemAction","CmsEntryFormSaveAndPublishButton","CmsEntryFormSaveButton","CmsEntryFormCreateNewRevisionButton"],"sources":["index.ts"],"sourcesContent":["export { ContentEntryFormWorkflow } from \"./ContentEntryFormWorkflow.js\";\nexport { ContentEntryWorkflow } from \"./ContentEntryWorkflow.js\";\nexport { CmsEntryFormTooltipButton } from \"./CmsEntryFormTooltipButton.js\";\nexport { CmsEntryFormScheduleMenuItemAction } from \"./CmsEntryFormScheduleMenuItemAction.js\";\nexport { CmsEntryFormSaveAndPublishButton } from \"./CmsEntryFormSaveAndPublishButton.js\";\nexport { CmsEntryFormSaveButton } from \"./CmsEntryFormSaveButton.js\";\nexport { CmsEntryFormCreateNewRevisionButton } from \"./CmsEntryFormCreateNewRevisionButton.js\";\n"],"mappings":"AAAA,SAASA,wBAAwB;AACjC,SAASC,oBAAoB;AAC7B,SAASC,yBAAyB;AAClC,SAASC,kCAAkC;AAC3C,SAASC,gCAAgC;AACzC,SAASC,sBAAsB;AAC/B,SAASC,mCAAmC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const ListOpenInNewWindow: (props: unknown) => React.JSX.Element;
@@ -0,0 +1,44 @@
1
+ import React, { useCallback } from "react";
2
+ import { DropdownMenu, Icon } from "@webiny/admin-ui";
3
+ import { Components } from "@webiny/app-workflows";
4
+ import { ReactComponent as OpenInNewIcon } from "@webiny/icons/open_in_new.svg";
5
+ import { useRouter } from "@webiny/app";
6
+ import { Routes } from "@webiny/app-headless-cms/routes.js";
7
+ import { isCmsAppName, parseAppName } from "../../utils/appName.js";
8
+ const {
9
+ OpenInNewWindow
10
+ } = Components.List.Options;
11
+ export const ListOpenInNewWindow = OpenInNewWindow.createDecorator(Original => {
12
+ return function ListOpenInNewWindow(props) {
13
+ const {
14
+ state
15
+ } = props;
16
+ const {
17
+ getLink
18
+ } = useRouter();
19
+ const onClick = useCallback(() => {
20
+ const modelId = parseAppName(state.app);
21
+ const url = getLink(Routes.ContentEntries.List, {
22
+ modelId,
23
+ id: state.targetRevisionId,
24
+ // TODO figure out how to load folderId
25
+ folderId: "root"
26
+ });
27
+ const goTo = `${window.location.origin}${url}`;
28
+ window.open(goTo, "_blank");
29
+ }, [state.id]);
30
+ if (isCmsAppName(state.app) === false) {
31
+ return /*#__PURE__*/React.createElement(Original, props);
32
+ }
33
+ return /*#__PURE__*/React.createElement(DropdownMenu.Item, {
34
+ icon: /*#__PURE__*/React.createElement(Icon, {
35
+ icon: /*#__PURE__*/React.createElement(OpenInNewIcon, null),
36
+ label: "Open In New Window"
37
+ }),
38
+ text: "Open in New Window",
39
+ onClick: onClick
40
+ });
41
+ };
42
+ });
43
+
44
+ //# sourceMappingURL=OpenInNewWindow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","DropdownMenu","Icon","Components","ReactComponent","OpenInNewIcon","useRouter","Routes","isCmsAppName","parseAppName","OpenInNewWindow","List","Options","ListOpenInNewWindow","createDecorator","Original","props","state","getLink","onClick","modelId","app","url","ContentEntries","id","targetRevisionId","folderId","goTo","window","location","origin","open","createElement","Item","icon","label","text"],"sources":["OpenInNewWindow.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { DropdownMenu, Icon } from \"@webiny/admin-ui\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { ReactComponent as OpenInNewIcon } from \"@webiny/icons/open_in_new.svg\";\nimport { useRouter } from \"@webiny/app\";\nimport { Routes } from \"@webiny/app-headless-cms/routes.js\";\nimport { isCmsAppName, parseAppName } from \"~/utils/appName.js\";\n\nconst { OpenInNewWindow } = Components.List.Options;\n\nexport const ListOpenInNewWindow = OpenInNewWindow.createDecorator(Original => {\n return function ListOpenInNewWindow(props) {\n const { state } = props;\n\n const { getLink } = useRouter();\n const onClick = useCallback(() => {\n const modelId = parseAppName(state.app);\n const url = getLink(Routes.ContentEntries.List, {\n modelId,\n id: state.targetRevisionId,\n // TODO figure out how to load folderId\n folderId: \"root\"\n });\n\n const goTo = `${window.location.origin}${url}`;\n\n window.open(goTo, \"_blank\");\n }, [state.id]);\n\n if (isCmsAppName(state.app) === false) {\n return <Original {...props} />;\n }\n\n return (\n <DropdownMenu.Item\n icon={<Icon icon={<OpenInNewIcon />} label={\"Open In New Window\"} />}\n text={\"Open in New Window\"}\n onClick={onClick}\n />\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,YAAY,EAAEC,IAAI,QAAQ,kBAAkB;AACrD,SAASC,UAAU,QAAQ,uBAAuB;AAClD,SAASC,cAAc,IAAIC,aAAa,QAAQ,+BAA+B;AAC/E,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,MAAM,QAAQ,oCAAoC;AAC3D,SAASC,YAAY,EAAEC,YAAY;AAEnC,MAAM;EAAEC;AAAgB,CAAC,GAAGP,UAAU,CAACQ,IAAI,CAACC,OAAO;AAEnD,OAAO,MAAMC,mBAAmB,GAAGH,eAAe,CAACI,eAAe,CAACC,QAAQ,IAAI;EAC3E,OAAO,SAASF,mBAAmBA,CAACG,KAAK,EAAE;IACvC,MAAM;MAAEC;IAAM,CAAC,GAAGD,KAAK;IAEvB,MAAM;MAAEE;IAAQ,CAAC,GAAGZ,SAAS,CAAC,CAAC;IAC/B,MAAMa,OAAO,GAAGnB,WAAW,CAAC,MAAM;MAC9B,MAAMoB,OAAO,GAAGX,YAAY,CAACQ,KAAK,CAACI,GAAG,CAAC;MACvC,MAAMC,GAAG,GAAGJ,OAAO,CAACX,MAAM,CAACgB,cAAc,CAACZ,IAAI,EAAE;QAC5CS,OAAO;QACPI,EAAE,EAAEP,KAAK,CAACQ,gBAAgB;QAC1B;QACAC,QAAQ,EAAE;MACd,CAAC,CAAC;MAEF,MAAMC,IAAI,GAAG,GAAGC,MAAM,CAACC,QAAQ,CAACC,MAAM,GAAGR,GAAG,EAAE;MAE9CM,MAAM,CAACG,IAAI,CAACJ,IAAI,EAAE,QAAQ,CAAC;IAC/B,CAAC,EAAE,CAACV,KAAK,CAACO,EAAE,CAAC,CAAC;IAEd,IAAIhB,YAAY,CAACS,KAAK,CAACI,GAAG,CAAC,KAAK,KAAK,EAAE;MACnC,oBAAOtB,KAAA,CAAAiC,aAAA,CAACjB,QAAQ,EAAKC,KAAQ,CAAC;IAClC;IAEA,oBACIjB,KAAA,CAAAiC,aAAA,CAAC/B,YAAY,CAACgC,IAAI;MACdC,IAAI,eAAEnC,KAAA,CAAAiC,aAAA,CAAC9B,IAAI;QAACgC,IAAI,eAAEnC,KAAA,CAAAiC,aAAA,CAAC3B,aAAa,MAAE,CAAE;QAAC8B,KAAK,EAAE;MAAqB,CAAE,CAAE;MACrEC,IAAI,EAAE,oBAAqB;MAC3BjB,OAAO,EAAEA;IAAQ,CACpB,CAAC;EAEV,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) Webiny
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @webiny/app-headless-cms-workflows
2
+
3
+ > [!NOTE]
4
+ > This package is part of the [Webiny](https://www.webiny.com) monorepo.
5
+ > It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
6
+
7
+ 📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
8
+
9
+ ---
10
+
11
+ _This README file is automatically generated during the publish process._
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const CmsWorkflowsEditor: () => React.JSX.Element | null;
@@ -0,0 +1,35 @@
1
+ import React, { Suspense } from "react";
2
+ import { Routes } from "../routes.js";
3
+ import Helmet from "react-helmet";
4
+ import { CmsWorkflowsEditorView, CmsWorkflowsEditorMenu } from "../Components/CmsWorkflows/CmsWorkflowsEditorView.js";
5
+ import { i18n } from "@webiny/app/i18n/index.js";
6
+ import { SecureRoute } from "@webiny/app-admin";
7
+ import { OverlayLoader } from "@webiny/admin-ui";
8
+ import { AdminConfig, AdminLayout } from "@webiny/app-admin";
9
+ import { useCanUseWorkflows } from "@webiny/app-workflows";
10
+ const t = i18n.namespace("HeadlessCms.Workflows.Editor");
11
+ const Loader = ({
12
+ children,
13
+ ...props
14
+ }) => /*#__PURE__*/React.createElement(Suspense, {
15
+ fallback: /*#__PURE__*/React.createElement(OverlayLoader, null)
16
+ }, /*#__PURE__*/React.cloneElement(children, props));
17
+ const {
18
+ Route
19
+ } = AdminConfig;
20
+ export const CmsWorkflowsEditor = () => {
21
+ const {
22
+ canUseWorkflows
23
+ } = useCanUseWorkflows();
24
+ if (!canUseWorkflows) {
25
+ return null;
26
+ }
27
+ return /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(Route, {
28
+ route: Routes.ContentModels.Workflows,
29
+ element: /*#__PURE__*/React.createElement(SecureRoute, {
30
+ permission: "cms.contentModel"
31
+ }, /*#__PURE__*/React.createElement(AdminLayout, null, /*#__PURE__*/React.createElement(Helmet, null, /*#__PURE__*/React.createElement("title", null, t`Workflows`)), /*#__PURE__*/React.createElement(Loader, null, /*#__PURE__*/React.createElement(CmsWorkflowsEditorView, null))))
32
+ }), /*#__PURE__*/React.createElement(CmsWorkflowsEditorMenu, null));
33
+ };
34
+
35
+ //# sourceMappingURL=CmsWorkflowsEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Suspense","Routes","Helmet","CmsWorkflowsEditorView","CmsWorkflowsEditorMenu","i18n","SecureRoute","OverlayLoader","AdminConfig","AdminLayout","useCanUseWorkflows","t","namespace","Loader","children","props","createElement","fallback","cloneElement","Route","CmsWorkflowsEditor","canUseWorkflows","route","ContentModels","Workflows","element","permission"],"sources":["CmsWorkflowsEditor.tsx"],"sourcesContent":["import React, { Suspense } from \"react\";\nimport { Routes } from \"~/routes.js\";\nimport Helmet from \"react-helmet\";\nimport {\n CmsWorkflowsEditorView,\n CmsWorkflowsEditorMenu\n} from \"~/Components/CmsWorkflows/CmsWorkflowsEditorView.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { SecureRoute } from \"@webiny/app-admin\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\nimport { AdminConfig, AdminLayout } from \"@webiny/app-admin\";\nimport { useCanUseWorkflows } from \"@webiny/app-workflows\";\n\nconst t = i18n.namespace(\"HeadlessCms.Workflows.Editor\");\n\ninterface LoaderProps {\n children: React.ReactNode;\n}\n\nconst Loader = ({ children, ...props }: LoaderProps) => (\n <Suspense fallback={<OverlayLoader />}>\n {React.cloneElement(children as unknown as React.ReactElement, props)}\n </Suspense>\n);\n\nconst { Route } = AdminConfig;\n\nexport const CmsWorkflowsEditor = () => {\n const { canUseWorkflows } = useCanUseWorkflows();\n if (!canUseWorkflows) {\n return null;\n }\n return (\n <AdminConfig>\n <Route\n route={Routes.ContentModels.Workflows}\n element={\n <SecureRoute permission={\"cms.contentModel\"}>\n <AdminLayout>\n <Helmet>\n <title>{t`Workflows`}</title>\n </Helmet>\n <Loader>\n <CmsWorkflowsEditorView />\n </Loader>\n </AdminLayout>\n </SecureRoute>\n }\n />\n <CmsWorkflowsEditorMenu />\n </AdminConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,MAAM;AACf,OAAOC,MAAM,MAAM,cAAc;AACjC,SACIC,sBAAsB,EACtBC,sBAAsB;AAE1B,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,WAAW,EAAEC,WAAW,QAAQ,mBAAmB;AAC5D,SAASC,kBAAkB,QAAQ,uBAAuB;AAE1D,MAAMC,CAAC,GAAGN,IAAI,CAACO,SAAS,CAAC,8BAA8B,CAAC;AAMxD,MAAMC,MAAM,GAAGA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAmB,CAAC,kBAC/ChB,KAAA,CAAAiB,aAAA,CAAChB,QAAQ;EAACiB,QAAQ,eAAElB,KAAA,CAAAiB,aAAA,CAACT,aAAa,MAAE;AAAE,gBACjCR,KAAK,CAACmB,YAAY,CAACJ,QAAQ,EAAmCC,KAAK,CAC9D,CACb;AAED,MAAM;EAAEI;AAAM,CAAC,GAAGX,WAAW;AAE7B,OAAO,MAAMY,kBAAkB,GAAGA,CAAA,KAAM;EACpC,MAAM;IAAEC;EAAgB,CAAC,GAAGX,kBAAkB,CAAC,CAAC;EAChD,IAAI,CAACW,eAAe,EAAE;IAClB,OAAO,IAAI;EACf;EACA,oBACItB,KAAA,CAAAiB,aAAA,CAACR,WAAW,qBACRT,KAAA,CAAAiB,aAAA,CAACG,KAAK;IACFG,KAAK,EAAErB,MAAM,CAACsB,aAAa,CAACC,SAAU;IACtCC,OAAO,eACH1B,KAAA,CAAAiB,aAAA,CAACV,WAAW;MAACoB,UAAU,EAAE;IAAmB,gBACxC3B,KAAA,CAAAiB,aAAA,CAACP,WAAW,qBACRV,KAAA,CAAAiB,aAAA,CAACd,MAAM,qBACHH,KAAA,CAAAiB,aAAA,gBAAQL,CAAC,WAAmB,CACxB,CAAC,eACTZ,KAAA,CAAAiB,aAAA,CAACH,MAAM,qBACHd,KAAA,CAAAiB,aAAA,CAACb,sBAAsB,MAAE,CACrB,CACC,CACJ;EAChB,CACJ,CAAC,eACFJ,KAAA,CAAAiB,aAAA,CAACZ,sBAAsB,MAAE,CAChB,CAAC;AAEtB,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export { CmsWorkflowsEditor } from "./CmsWorkflowsEditor.js";
@@ -0,0 +1,3 @@
1
+ export { CmsWorkflowsEditor } from "./CmsWorkflowsEditor.js";
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CmsWorkflowsEditor"],"sources":["index.ts"],"sourcesContent":["export { CmsWorkflowsEditor } from \"./CmsWorkflowsEditor.js\";\n"],"mappings":"AAAA,SAASA,kBAAkB","ignoreList":[]}
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const CmsWorkflows: () => React.JSX.Element;
package/index.js ADDED
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import { Wcp } from "@webiny/app-admin";
3
+ import { CmsWorkflowsEditor } from "./Routes/index.js";
4
+ import { CmsEntryFormSaveAndPublishButton, CmsEntryFormSaveButton, CmsEntryFormScheduleMenuItemAction, CmsEntryFormTooltipButton, ContentEntryFormWorkflow, ContentEntryWorkflow } from "./Components/ContentEntryForm/index.js";
5
+ import { CmsEntriesWorkflowStateListFooterMenu } from "./Components/CmsEntriesWorkflowStateList/index.js";
6
+ import { ListOpenInNewWindow } from "./Components/OptionItem/OpenInNewWindow.js";
7
+ import { CmsEntryFormCreateNewRevisionButton } from "./Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js";
8
+ export const CmsWorkflows = () => {
9
+ return /*#__PURE__*/React.createElement(Wcp.CanUseWorkflows, null, /*#__PURE__*/React.createElement(ListOpenInNewWindow, null), /*#__PURE__*/React.createElement(CmsEntriesWorkflowStateListFooterMenu, null), /*#__PURE__*/React.createElement(CmsWorkflowsEditor, null), /*#__PURE__*/React.createElement(ContentEntryFormWorkflow, null), /*#__PURE__*/React.createElement(ContentEntryWorkflow, null), /*#__PURE__*/React.createElement(CmsEntryFormTooltipButton, null), /*#__PURE__*/React.createElement(CmsEntryFormScheduleMenuItemAction, null), /*#__PURE__*/React.createElement(CmsEntryFormSaveAndPublishButton, null), /*#__PURE__*/React.createElement(CmsEntryFormSaveButton, null), /*#__PURE__*/React.createElement(CmsEntryFormCreateNewRevisionButton, null));
10
+ };
11
+
12
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Wcp","CmsWorkflowsEditor","CmsEntryFormSaveAndPublishButton","CmsEntryFormSaveButton","CmsEntryFormScheduleMenuItemAction","CmsEntryFormTooltipButton","ContentEntryFormWorkflow","ContentEntryWorkflow","CmsEntriesWorkflowStateListFooterMenu","ListOpenInNewWindow","CmsEntryFormCreateNewRevisionButton","CmsWorkflows","createElement","CanUseWorkflows"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { Wcp } from \"@webiny/app-admin\";\nimport { CmsWorkflowsEditor } from \"~/Routes/index.js\";\nimport {\n CmsEntryFormSaveAndPublishButton,\n CmsEntryFormSaveButton,\n CmsEntryFormScheduleMenuItemAction,\n CmsEntryFormTooltipButton,\n ContentEntryFormWorkflow,\n ContentEntryWorkflow\n} from \"~/Components/ContentEntryForm/index.js\";\nimport { CmsEntriesWorkflowStateListFooterMenu } from \"~/Components/CmsEntriesWorkflowStateList/index.js\";\nimport { ListOpenInNewWindow } from \"~/Components/OptionItem/OpenInNewWindow.js\";\nimport { CmsEntryFormCreateNewRevisionButton } from \"~/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js\";\n\nexport const CmsWorkflows = () => {\n return (\n <Wcp.CanUseWorkflows>\n <ListOpenInNewWindow />\n <CmsEntriesWorkflowStateListFooterMenu />\n <CmsWorkflowsEditor />\n <ContentEntryFormWorkflow />\n <ContentEntryWorkflow />\n <CmsEntryFormTooltipButton />\n <CmsEntryFormScheduleMenuItemAction />\n <CmsEntryFormSaveAndPublishButton />\n <CmsEntryFormSaveButton />\n <CmsEntryFormCreateNewRevisionButton />\n </Wcp.CanUseWorkflows>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,GAAG,QAAQ,mBAAmB;AACvC,SAASC,kBAAkB;AAC3B,SACIC,gCAAgC,EAChCC,sBAAsB,EACtBC,kCAAkC,EAClCC,yBAAyB,EACzBC,wBAAwB,EACxBC,oBAAoB;AAExB,SAASC,qCAAqC;AAC9C,SAASC,mBAAmB;AAC5B,SAASC,mCAAmC;AAE5C,OAAO,MAAMC,YAAY,GAAGA,CAAA,KAAM;EAC9B,oBACIZ,KAAA,CAAAa,aAAA,CAACZ,GAAG,CAACa,eAAe,qBAChBd,KAAA,CAAAa,aAAA,CAACH,mBAAmB,MAAE,CAAC,eACvBV,KAAA,CAAAa,aAAA,CAACJ,qCAAqC,MAAE,CAAC,eACzCT,KAAA,CAAAa,aAAA,CAACX,kBAAkB,MAAE,CAAC,eACtBF,KAAA,CAAAa,aAAA,CAACN,wBAAwB,MAAE,CAAC,eAC5BP,KAAA,CAAAa,aAAA,CAACL,oBAAoB,MAAE,CAAC,eACxBR,KAAA,CAAAa,aAAA,CAACP,yBAAyB,MAAE,CAAC,eAC7BN,KAAA,CAAAa,aAAA,CAACR,kCAAkC,MAAE,CAAC,eACtCL,KAAA,CAAAa,aAAA,CAACV,gCAAgC,MAAE,CAAC,eACpCH,KAAA,CAAAa,aAAA,CAACT,sBAAsB,MAAE,CAAC,eAC1BJ,KAAA,CAAAa,aAAA,CAACF,mCAAmC,MAAE,CACrB,CAAC;AAE9B,CAAC","ignoreList":[]}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@webiny/app-headless-cms-workflows",
3
+ "version": "0.0.0-unstable.61c048f412",
4
+ "type": "module",
5
+ "main": "index.js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/webiny/webiny-js.git"
9
+ },
10
+ "author": "Webiny Ltd",
11
+ "license": "MIT",
12
+ "dependencies": {
13
+ "@apollo/react-hooks": "3.1.5",
14
+ "@fortawesome/react-fontawesome": "0.1.19",
15
+ "@webiny/admin-ui": "0.0.0-unstable.61c048f412",
16
+ "@webiny/app": "0.0.0-unstable.61c048f412",
17
+ "@webiny/app-admin": "0.0.0-unstable.61c048f412",
18
+ "@webiny/app-headless-cms": "0.0.0-unstable.61c048f412",
19
+ "@webiny/app-headless-cms-common": "0.0.0-unstable.61c048f412",
20
+ "@webiny/app-workflows": "0.0.0-unstable.61c048f412",
21
+ "@webiny/icons": "0.0.0-unstable.61c048f412",
22
+ "mobx-react-lite": "3.4.3",
23
+ "react": "18.2.0",
24
+ "react-dom": "18.2.0",
25
+ "react-helmet": "6.1.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/react": "18.2.79",
29
+ "@webiny/build-tools": "0.0.0-unstable.61c048f412",
30
+ "rimraf": "6.1.2",
31
+ "typescript": "5.9.3"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public",
35
+ "directory": "dist"
36
+ },
37
+ "svgo": {
38
+ "plugins": {
39
+ "removeViewBox": false
40
+ }
41
+ },
42
+ "gitHead": "61c048f412d6b4aa70c1d105aab21e3fa69730f3"
43
+ }
package/routes.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { Route } from "@webiny/app-admin";
2
+ export declare const Routes: {
3
+ ContentModels: {
4
+ Workflows: Route<{
5
+ app: import("zod").ZodOptional<import("zod").ZodString>;
6
+ }>;
7
+ };
8
+ ContentEntries: {
9
+ WorkflowStateList: Route<undefined>;
10
+ };
11
+ };
package/routes.js ADDED
@@ -0,0 +1,22 @@
1
+ import { Route } from "@webiny/app-admin";
2
+ export const Routes = {
3
+ ContentModels: {
4
+ Workflows: new Route({
5
+ name: "Cms/ContentModels/Workflows",
6
+ path: "/cms/content-models/workflows",
7
+ params: zod => {
8
+ return {
9
+ app: zod.string().optional()
10
+ };
11
+ }
12
+ })
13
+ },
14
+ ContentEntries: {
15
+ WorkflowStateList: new Route({
16
+ name: "Cms/ContentEntries/WorkflowStateList",
17
+ path: "/cms/workflow-states"
18
+ })
19
+ }
20
+ };
21
+
22
+ //# sourceMappingURL=routes.js.map
package/routes.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Route","Routes","ContentModels","Workflows","name","path","params","zod","app","string","optional","ContentEntries","WorkflowStateList"],"sources":["routes.ts"],"sourcesContent":["import { Route } from \"@webiny/app-admin\";\n\nexport const Routes = {\n ContentModels: {\n Workflows: new Route({\n name: \"Cms/ContentModels/Workflows\",\n path: \"/cms/content-models/workflows\",\n params: zod => {\n return {\n app: zod.string().optional()\n };\n }\n })\n },\n ContentEntries: {\n WorkflowStateList: new Route({\n name: \"Cms/ContentEntries/WorkflowStateList\",\n path: \"/cms/workflow-states\"\n })\n }\n};\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,mBAAmB;AAEzC,OAAO,MAAMC,MAAM,GAAG;EAClBC,aAAa,EAAE;IACXC,SAAS,EAAE,IAAIH,KAAK,CAAC;MACjBI,IAAI,EAAE,6BAA6B;MACnCC,IAAI,EAAE,+BAA+B;MACrCC,MAAM,EAAEC,GAAG,IAAI;QACX,OAAO;UACHC,GAAG,EAAED,GAAG,CAACE,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC;QAC/B,CAAC;MACL;IACJ,CAAC;EACL,CAAC;EACDC,cAAc,EAAE;IACZC,iBAAiB,EAAE,IAAIZ,KAAK,CAAC;MACzBI,IAAI,EAAE,sCAAsC;MAC5CC,IAAI,EAAE;IACV,CAAC;EACL;AACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import type { CmsModel } from "@webiny/app-headless-cms-common/types/index.js";
2
+ export declare const createAppName: (model: Pick<CmsModel, "modelId">) => string;
3
+ export declare const parseAppName: (appName: string) => string;
4
+ export declare const isCmsAppName: (appName: string) => boolean;
@@ -0,0 +1,16 @@
1
+ export const createAppName = model => {
2
+ return `cms.${model.modelId}`;
3
+ };
4
+ export const parseAppName = appName => {
5
+ const parts = appName.split(".");
6
+ if (parts.length !== 2 || parts[0] !== "cms") {
7
+ throw new Error(`Invalid app name: "${appName}".`);
8
+ }
9
+ return parts[1];
10
+ };
11
+ export const isCmsAppName = appName => {
12
+ const parts = appName.split(".");
13
+ return parts.length === 2 && parts[0] === "cms";
14
+ };
15
+
16
+ //# sourceMappingURL=appName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAppName","model","modelId","parseAppName","appName","parts","split","length","Error","isCmsAppName"],"sources":["appName.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/app-headless-cms-common/types/index.js\";\n\nexport const createAppName = (model: Pick<CmsModel, \"modelId\">): string => {\n return `cms.${model.modelId}`;\n};\n\nexport const parseAppName = (appName: string): string => {\n const parts = appName.split(\".\");\n if (parts.length !== 2 || parts[0] !== \"cms\") {\n throw new Error(`Invalid app name: \"${appName}\".`);\n }\n return parts[1];\n};\n\nexport const isCmsAppName = (appName: string): boolean => {\n const parts = appName.split(\".\");\n return parts.length === 2 && parts[0] === \"cms\";\n};\n"],"mappings":"AAEA,OAAO,MAAMA,aAAa,GAAIC,KAAgC,IAAa;EACvE,OAAO,OAAOA,KAAK,CAACC,OAAO,EAAE;AACjC,CAAC;AAED,OAAO,MAAMC,YAAY,GAAIC,OAAe,IAAa;EACrD,MAAMC,KAAK,GAAGD,OAAO,CAACE,KAAK,CAAC,GAAG,CAAC;EAChC,IAAID,KAAK,CAACE,MAAM,KAAK,CAAC,IAAIF,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;IAC1C,MAAM,IAAIG,KAAK,CAAC,sBAAsBJ,OAAO,IAAI,CAAC;EACtD;EACA,OAAOC,KAAK,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,OAAO,MAAMI,YAAY,GAAIL,OAAe,IAAc;EACtD,MAAMC,KAAK,GAAGD,OAAO,CAACE,KAAK,CAAC,GAAG,CAAC;EAChC,OAAOD,KAAK,CAACE,MAAM,KAAK,CAAC,IAAIF,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK;AACnD,CAAC","ignoreList":[]}