@webiny/app-headless-cms-workflows 0.0.0-unstable.e6f0dc8ca7 → 0.0.0-unstable.eb81deee7e

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 (79) hide show
  1. package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js +28 -39
  2. package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js.map +1 -1
  3. package/Components/CmsEntriesWorkflowStateList/index.js +0 -2
  4. package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js +41 -64
  5. package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js.map +1 -1
  6. package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js +17 -33
  7. package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js.map +1 -1
  8. package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js +10 -17
  9. package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js.map +1 -1
  10. package/Components/ContentEntryForm/ContentEntryFormWorkflow.js +21 -70
  11. package/Components/ContentEntryForm/ContentEntryFormWorkflow.js.map +1 -1
  12. package/Components/ContentEntryForm/index.d.ts +0 -3
  13. package/Components/ContentEntryForm/index.js +0 -5
  14. package/Components/OptionItem/OpenInNewWindow.js +28 -36
  15. package/Components/OptionItem/OpenInNewWindow.js.map +1 -1
  16. package/Routes/CmsWorkflowsEditor.js +24 -27
  17. package/Routes/CmsWorkflowsEditor.js.map +1 -1
  18. package/Routes/index.js +0 -2
  19. package/features/WorkflowStateCacheHandler.d.ts +11 -0
  20. package/features/WorkflowStateCacheHandler.js +50 -0
  21. package/features/WorkflowStateCacheHandler.js.map +1 -0
  22. package/features/feature.d.ts +1 -0
  23. package/features/feature.js +11 -0
  24. package/features/feature.js.map +1 -0
  25. package/index.d.ts +1 -1
  26. package/index.js +17 -5
  27. package/index.js.map +1 -1
  28. package/package.json +21 -17
  29. package/presentation/CmsWorkflowsEditorView.d.ts +5 -0
  30. package/presentation/CmsWorkflowsEditorView.js +90 -0
  31. package/presentation/CmsWorkflowsEditorView.js.map +1 -0
  32. package/presentation/ContentEntryFormPresenterWorkflowDecorator.d.ts +25 -0
  33. package/presentation/ContentEntryFormPresenterWorkflowDecorator.js +70 -0
  34. package/presentation/ContentEntryFormPresenterWorkflowDecorator.js.map +1 -0
  35. package/presentation/TableRowMapperWorkflowDecorator.d.ts +11 -0
  36. package/presentation/TableRowMapperWorkflowDecorator.js +25 -0
  37. package/presentation/TableRowMapperWorkflowDecorator.js.map +1 -0
  38. package/presentation/WorkflowStateGetEntryFieldSelection.d.ts +8 -0
  39. package/presentation/WorkflowStateGetEntryFieldSelection.js +24 -0
  40. package/presentation/WorkflowStateGetEntryFieldSelection.js.map +1 -0
  41. package/presentation/WorkflowStateListEntriesFieldSelection.d.ts +8 -0
  42. package/presentation/WorkflowStateListEntriesFieldSelection.js +24 -0
  43. package/presentation/WorkflowStateListEntriesFieldSelection.js.map +1 -0
  44. package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.d.ts +15 -0
  45. package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js +50 -0
  46. package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js.map +1 -0
  47. package/presentation/cmsWorkflowsEditor/abstractions.d.ts +19 -0
  48. package/presentation/cmsWorkflowsEditor/abstractions.js +5 -0
  49. package/presentation/cmsWorkflowsEditor/abstractions.js.map +1 -0
  50. package/presentation/cmsWorkflowsEditor/feature.d.ts +3 -0
  51. package/presentation/cmsWorkflowsEditor/feature.js +17 -0
  52. package/presentation/cmsWorkflowsEditor/feature.js.map +1 -0
  53. package/presentation/feature.d.ts +1 -0
  54. package/presentation/feature.js +21 -0
  55. package/presentation/feature.js.map +1 -0
  56. package/routes.js +17 -18
  57. package/routes.js.map +1 -1
  58. package/types.d.ts +10 -0
  59. package/types.js +0 -0
  60. package/utils/appName.js +9 -12
  61. package/utils/appName.js.map +1 -1
  62. package/Components/CmsEntriesWorkflowStateList/index.js.map +0 -1
  63. package/Components/CmsWorkflows/CmsWorkflowsEditorView.d.ts +0 -3
  64. package/Components/CmsWorkflows/CmsWorkflowsEditorView.js +0 -128
  65. package/Components/CmsWorkflows/CmsWorkflowsEditorView.js.map +0 -1
  66. package/Components/ContentEntryForm/CmsEntryFormPublishButton.d.ts +0 -2
  67. package/Components/ContentEntryForm/CmsEntryFormPublishButton.js +0 -38
  68. package/Components/ContentEntryForm/CmsEntryFormPublishButton.js.map +0 -1
  69. package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.d.ts +0 -2
  70. package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.js +0 -39
  71. package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.js.map +0 -1
  72. package/Components/ContentEntryForm/CmsEntryFormSaveButton.d.ts +0 -2
  73. package/Components/ContentEntryForm/CmsEntryFormSaveButton.js +0 -37
  74. package/Components/ContentEntryForm/CmsEntryFormSaveButton.js.map +0 -1
  75. package/Components/ContentEntryForm/ContentEntryWorkflow.d.ts +0 -2
  76. package/Components/ContentEntryForm/ContentEntryWorkflow.js +0 -35
  77. package/Components/ContentEntryForm/ContentEntryWorkflow.js.map +0 -1
  78. package/Components/ContentEntryForm/index.js.map +0 -1
  79. package/Routes/index.js.map +0 -1
@@ -1 +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":[]}
1
+ {"version":3,"file":"Components/OptionItem/OpenInNewWindow.js","sources":["../../../src/Components/OptionItem/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"],"names":["OpenInNewWindow","Components","ListOpenInNewWindow","Original","props","state","getLink","useRouter","onClick","useCallback","modelId","parseAppName","url","Routes","goTo","window","isCmsAppName","DropdownMenu","Icon","OpenInNewIcon"],"mappings":";;;;;;;AAQA,MAAM,EAAEA,iBAAAA,eAAe,EAAE,GAAGC,WAAW,IAAI,CAAC,OAAO;AAE5C,MAAMC,sCAAsBF,gBAAgB,eAAe,CAACG,CAAAA,WACxD,SAA6BC,KAAK;QACrC,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAElB,MAAM,EAAEE,OAAO,EAAE,GAAGC;QACpB,MAAMC,UAAUC,YAAY;YACxB,MAAMC,UAAUC,aAAaN,MAAM,GAAG;YACtC,MAAMO,MAAMN,QAAQO,OAAO,cAAc,CAAC,IAAI,EAAE;gBAC5CH;gBACA,IAAIL,MAAM,gBAAgB;gBAE1B,UAAU;YACd;YAEA,MAAMS,OAAO,GAAGC,OAAO,QAAQ,CAAC,MAAM,GAAGH,KAAK;YAE9CG,OAAO,IAAI,CAACD,MAAM;QACtB,GAAG;YAACT,MAAM,EAAE;SAAC;QAEb,IAAIW,AAA4B,UAA5BA,aAAaX,MAAM,GAAG,GACtB,OAAO,WAAP,GAAO,oBAACF,UAAaC;QAGzB,OAAO,WAAP,GACI,oBAACa,aAAa,IAAI;YACd,oBAAM,oBAACC,MAAIA;gBAAC,oBAAM,oBAACC,gBAAaA;gBAAK,OAAO;;YAC5C,MAAM;YACN,SAASX;;IAGrB"}
@@ -1,35 +1,32 @@
1
- import React, { Suspense } from "react";
1
+ import react, { Suspense } from "react";
2
2
  import { Routes } from "../routes.js";
3
- import Helmet from "react-helmet";
4
- import { CmsWorkflowsEditorView, CmsWorkflowsEditorMenu } from "../Components/CmsWorkflows/CmsWorkflowsEditorView.js";
3
+ import react_helmet from "react-helmet";
5
4
  import { i18n } from "@webiny/app/i18n/index.js";
6
- import { SecureRoute } from "@webiny/app-admin";
5
+ import { AdminConfig, AdminLayout, SecureRoute } from "@webiny/app-admin";
7
6
  import { OverlayLoader } from "@webiny/admin-ui";
8
- import { AdminConfig, AdminLayout } from "@webiny/app-admin";
9
7
  import { useCanUseWorkflows } from "@webiny/app-workflows";
8
+ import { CmsWorkflowsEditorMenu, CmsWorkflowsEditorView } from "../presentation/CmsWorkflowsEditorView.js";
10
9
  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));
10
+ const Loader = ({ children, ...props })=>/*#__PURE__*/ react.createElement(Suspense, {
11
+ fallback: /*#__PURE__*/ react.createElement(OverlayLoader, null)
12
+ }, /*#__PURE__*/ react.cloneElement(children, props));
13
+ const { Route: Route } = AdminConfig;
14
+ const CmsWorkflowsEditor = ()=>{
15
+ const { canUseWorkflows } = useCanUseWorkflows();
16
+ if (!canUseWorkflows) return null;
17
+ return /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(Route, {
18
+ route: Routes.ContentModels.Workflows,
19
+ element: /*#__PURE__*/ react.createElement(SecureRoute, {
20
+ permission: "cms.contentModel"
21
+ }, /*#__PURE__*/ react.createElement(AdminLayout, null, /*#__PURE__*/ react.createElement(react_helmet, null, /*#__PURE__*/ react.createElement("title", null, t`Workflows`)), /*#__PURE__*/ react.createElement(AdminConfig.Breadcrumb, {
22
+ name: "cms",
23
+ label: "Headless CMS"
24
+ }), /*#__PURE__*/ react.createElement(AdminConfig.Breadcrumb, {
25
+ name: "cms.workflows",
26
+ label: "Workflows"
27
+ }), /*#__PURE__*/ react.createElement(Loader, null, /*#__PURE__*/ react.createElement(CmsWorkflowsEditorView, null))))
28
+ }), /*#__PURE__*/ react.createElement(CmsWorkflowsEditorMenu, null));
33
29
  };
30
+ export { CmsWorkflowsEditor };
34
31
 
35
32
  //# sourceMappingURL=CmsWorkflowsEditor.js.map
@@ -1 +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":[]}
1
+ {"version":3,"file":"Routes/CmsWorkflowsEditor.js","sources":["../../src/Routes/CmsWorkflowsEditor.tsx"],"sourcesContent":["import React, { Suspense } from \"react\";\nimport { Routes } from \"~/routes.js\";\nimport Helmet from \"react-helmet\";\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\";\nimport { CmsWorkflowsEditorView } from \"~/presentation/CmsWorkflowsEditorView.js\";\nimport { CmsWorkflowsEditorMenu } from \"~/presentation/CmsWorkflowsEditorView.js\";\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 <AdminConfig.Breadcrumb name={\"cms\"} label={\"Headless CMS\"} />\n <AdminConfig.Breadcrumb name={\"cms.workflows\"} label={\"Workflows\"} />\n <Loader>\n <CmsWorkflowsEditorView />\n </Loader>\n </AdminLayout>\n </SecureRoute>\n }\n />\n <CmsWorkflowsEditorMenu />\n </AdminConfig>\n );\n};\n"],"names":["t","i18n","Loader","children","props","Suspense","OverlayLoader","React","Route","AdminConfig","CmsWorkflowsEditor","canUseWorkflows","useCanUseWorkflows","Routes","SecureRoute","AdminLayout","Helmet","CmsWorkflowsEditorView","CmsWorkflowsEditorMenu"],"mappings":";;;;;;;;AAWA,MAAMA,IAAIC,KAAK,SAAS,CAAC;AAMzB,MAAMC,SAAS,CAAC,EAAEC,QAAQ,EAAE,GAAGC,OAAoB,iBAC/C,oBAACC,UAAQA;QAAC,wBAAU,oBAACC,eAAaA;qBAC7BC,MAAAA,YAAkB,CAACJ,UAA2CC;AAIvE,MAAM,EAAEI,OAAAA,KAAK,EAAE,GAAGC;AAEX,MAAMC,qBAAqB;IAC9B,MAAM,EAAEC,eAAe,EAAE,GAAGC;IAC5B,IAAI,CAACD,iBACD,OAAO;IAEX,OAAO,WAAP,GACI,oBAACF,aAAWA,MAAAA,WAAAA,GACR,oBAACD,OAAKA;QACF,OAAOK,OAAO,aAAa,CAAC,SAAS;QACrC,uBACI,oBAACC,aAAWA;YAAC,YAAY;yBACrB,oBAACC,aAAWA,MAAAA,WAAAA,GACR,oBAACC,cAAMA,MAAAA,WAAAA,GACH,oBAAC,eAAOhB,CAAC,CAAC,SAAS,CAAC,kBAExB,oBAACS,YAAY,UAAU;YAAC,MAAM;YAAO,OAAO;0BAC5C,oBAACA,YAAY,UAAU;YAAC,MAAM;YAAiB,OAAO;0BACtD,oBAACP,QAAMA,MAAAA,WAAAA,GACH,oBAACe,wBAAsBA;sBAM3C,oBAACC,wBAAsBA;AAGnC"}
package/Routes/index.js CHANGED
@@ -1,3 +1 @@
1
1
  export { CmsWorkflowsEditor } from "./CmsWorkflowsEditor.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,11 @@
1
+ import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
2
+ import { WorkflowStateChangedHandler, type WorkflowStateChangedEvent } from "@webiny/app-workflows/domain/events.js";
3
+ declare class WorkflowStateCacheHandlerImpl implements WorkflowStateChangedHandler.Interface {
4
+ private cacheProvider;
5
+ constructor(cacheProvider: ContentEntriesCacheProvider.Interface);
6
+ handle(event: WorkflowStateChangedEvent): Promise<void>;
7
+ }
8
+ export declare const WorkflowStateCacheHandler: typeof WorkflowStateCacheHandlerImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app/features/eventPublisher").IEventHandler<WorkflowStateChangedEvent>>;
10
+ };
11
+ export {};
@@ -0,0 +1,50 @@
1
+ import { parseIdentifier } from "@webiny/utils/parseIdentifier.js";
2
+ import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
3
+ import { WorkflowStateChangedHandler } from "@webiny/app-workflows/domain/events.js";
4
+ function getModelIdFromAppName(app) {
5
+ const matched = app.match(/^cms\.([a-zA-Z0-9_-]+)$/);
6
+ return matched ? matched[1] : null;
7
+ }
8
+ function toWorkflowStateValues(state) {
9
+ if (!state) return null;
10
+ return {
11
+ workflowId: state.id,
12
+ stepId: state.currentStep.id,
13
+ stepName: state.currentStep.title,
14
+ state: state.state
15
+ };
16
+ }
17
+ class WorkflowStateCacheHandlerImpl {
18
+ constructor(cacheProvider){
19
+ this.cacheProvider = cacheProvider;
20
+ }
21
+ async handle(event) {
22
+ const { app, targetRevisionId, state } = event.payload;
23
+ const modelId = getModelIdFromAppName(app);
24
+ if (!modelId) return;
25
+ const { id: entryId } = parseIdentifier(targetRevisionId);
26
+ const cache = this.cacheProvider.get(modelId);
27
+ const workflowValues = toWorkflowStateValues(state);
28
+ cache.updateItems((entry)=>{
29
+ if (entry.entryId !== entryId) return entry;
30
+ return {
31
+ ...entry,
32
+ meta: {
33
+ ...entry.meta,
34
+ system: {
35
+ workflow: workflowValues
36
+ }
37
+ }
38
+ };
39
+ });
40
+ }
41
+ }
42
+ const WorkflowStateCacheHandler = WorkflowStateChangedHandler.createImplementation({
43
+ implementation: WorkflowStateCacheHandlerImpl,
44
+ dependencies: [
45
+ ContentEntriesCacheProvider
46
+ ]
47
+ });
48
+ export { WorkflowStateCacheHandler };
49
+
50
+ //# sourceMappingURL=WorkflowStateCacheHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/WorkflowStateCacheHandler.js","sources":["../../src/features/WorkflowStateCacheHandler.ts"],"sourcesContent":["import { parseIdentifier } from \"@webiny/utils/parseIdentifier.js\";\nimport { ContentEntriesCacheProvider } from \"@webiny/app-headless-cms/features/contentEntry/abstractions.js\";\nimport {\n WorkflowStateChangedHandler,\n type WorkflowStateChangedEvent\n} from \"@webiny/app-workflows/domain/events.js\";\nimport type { CmsContentEntry } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport type { ICmsEntryWorkflowState } from \"~/types.js\";\n\nfunction getModelIdFromAppName(app: string): string | null {\n const matched = app.match(/^cms\\.([a-zA-Z0-9_-]+)$/);\n return matched ? matched[1] : null;\n}\n\nfunction toWorkflowStateValues(\n state: WorkflowStateChangedEvent[\"payload\"][\"state\"]\n): ICmsEntryWorkflowState | null {\n if (!state) {\n return null;\n }\n\n return {\n workflowId: state.id,\n stepId: state.currentStep.id,\n stepName: state.currentStep.title,\n state: state.state\n };\n}\n\nclass WorkflowStateCacheHandlerImpl implements WorkflowStateChangedHandler.Interface {\n constructor(private cacheProvider: ContentEntriesCacheProvider.Interface) {}\n\n async handle(event: WorkflowStateChangedEvent): Promise<void> {\n const { app, targetRevisionId, state } = event.payload;\n\n const modelId = getModelIdFromAppName(app);\n if (!modelId) {\n return;\n }\n\n const { id: entryId } = parseIdentifier(targetRevisionId);\n const cache = this.cacheProvider.get(modelId);\n const workflowValues = toWorkflowStateValues(state);\n\n cache.updateItems((entry: CmsContentEntry) => {\n if (entry.entryId !== entryId) {\n return entry;\n }\n\n return {\n ...entry,\n meta: {\n ...entry.meta,\n system: {\n workflow: workflowValues\n }\n }\n };\n });\n }\n}\n\nexport const WorkflowStateCacheHandler = WorkflowStateChangedHandler.createImplementation({\n implementation: WorkflowStateCacheHandlerImpl,\n dependencies: [ContentEntriesCacheProvider]\n});\n"],"names":["getModelIdFromAppName","app","matched","toWorkflowStateValues","state","WorkflowStateCacheHandlerImpl","cacheProvider","event","targetRevisionId","modelId","entryId","parseIdentifier","cache","workflowValues","entry","WorkflowStateCacheHandler","WorkflowStateChangedHandler","ContentEntriesCacheProvider"],"mappings":";;;AASA,SAASA,sBAAsBC,GAAW;IACtC,MAAMC,UAAUD,IAAI,KAAK,CAAC;IAC1B,OAAOC,UAAUA,OAAO,CAAC,EAAE,GAAG;AAClC;AAEA,SAASC,sBACLC,KAAoD;IAEpD,IAAI,CAACA,OACD,OAAO;IAGX,OAAO;QACH,YAAYA,MAAM,EAAE;QACpB,QAAQA,MAAM,WAAW,CAAC,EAAE;QAC5B,UAAUA,MAAM,WAAW,CAAC,KAAK;QACjC,OAAOA,MAAM,KAAK;IACtB;AACJ;AAEA,MAAMC;IACF,YAAoBC,aAAoD,CAAE;aAAtDA,aAAa,GAAbA;IAAuD;IAE3E,MAAM,OAAOC,KAAgC,EAAiB;QAC1D,MAAM,EAAEN,GAAG,EAAEO,gBAAgB,EAAEJ,KAAK,EAAE,GAAGG,MAAM,OAAO;QAEtD,MAAME,UAAUT,sBAAsBC;QACtC,IAAI,CAACQ,SACD;QAGJ,MAAM,EAAE,IAAIC,OAAO,EAAE,GAAGC,gBAAgBH;QACxC,MAAMI,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAACH;QACrC,MAAMI,iBAAiBV,sBAAsBC;QAE7CQ,MAAM,WAAW,CAAC,CAACE;YACf,IAAIA,MAAM,OAAO,KAAKJ,SAClB,OAAOI;YAGX,OAAO;gBACH,GAAGA,KAAK;gBACR,MAAM;oBACF,GAAGA,MAAM,IAAI;oBACb,QAAQ;wBACJ,UAAUD;oBACd;gBACJ;YACJ;QACJ;IACJ;AACJ;AAEO,MAAME,4BAA4BC,4BAA4B,oBAAoB,CAAC;IACtF,gBAAgBX;IAChB,cAAc;QAACY;KAA4B;AAC/C"}
@@ -0,0 +1 @@
1
+ export declare const CmsWorkflowsCacheFeature: import("@webiny/feature/admin").FeatureDefinition<any, []>;
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { WorkflowStateCacheHandler } from "./WorkflowStateCacheHandler.js";
3
+ const CmsWorkflowsCacheFeature = createFeature({
4
+ name: "CmsWorkflows/Cache",
5
+ register (container) {
6
+ container.register(WorkflowStateCacheHandler);
7
+ }
8
+ });
9
+ export { CmsWorkflowsCacheFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/feature.js","sources":["../../src/features/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { WorkflowStateCacheHandler } from \"./WorkflowStateCacheHandler.js\";\n\nexport const CmsWorkflowsCacheFeature = createFeature({\n name: \"CmsWorkflows/Cache\",\n register(container) {\n container.register(WorkflowStateCacheHandler);\n }\n});\n"],"names":["CmsWorkflowsCacheFeature","createFeature","container","WorkflowStateCacheHandler"],"mappings":";;AAGO,MAAMA,2BAA2BC,cAAc;IAClD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
package/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  import React from "react";
2
- export declare const CmsWorkflows: () => React.JSX.Element;
2
+ export declare const CmsWorkflows: () => React.JSX.Element | null;
package/index.js CHANGED
@@ -1,12 +1,24 @@
1
- import React from "react";
2
- import { Wcp } from "@webiny/app-admin";
1
+ import react from "react";
2
+ import { RegisterFeature, useFeatureFlags } from "@webiny/app-admin";
3
3
  import { CmsWorkflowsEditor } from "./Routes/index.js";
4
- import { CmsEntryFormSaveAndPublishButton, CmsEntryFormSaveButton, CmsEntryFormScheduleMenuItemAction, CmsEntryFormTooltipButton, ContentEntryFormWorkflow, ContentEntryWorkflow } from "./Components/ContentEntryForm/index.js";
4
+ import { CmsEntryFormScheduleMenuItemAction, CmsEntryFormTooltipButton, ContentEntryFormWorkflow } from "./Components/ContentEntryForm/index.js";
5
5
  import { CmsEntriesWorkflowStateListFooterMenu } from "./Components/CmsEntriesWorkflowStateList/index.js";
6
6
  import { ListOpenInNewWindow } from "./Components/OptionItem/OpenInNewWindow.js";
7
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));
8
+ import { CmsWorkflowsFeature } from "./presentation/feature.js";
9
+ import { CmsWorkflowsCacheFeature } from "./features/feature.js";
10
+ import { CmsWorkflowsEditorPresenterFeature } from "./presentation/cmsWorkflowsEditor/feature.js";
11
+ const CmsWorkflows = ()=>{
12
+ const featureFlags = useFeatureFlags();
13
+ if (!featureFlags.isEnabled("advancedPublishingWorkflow")) return null;
14
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
15
+ feature: CmsWorkflowsFeature
16
+ }), /*#__PURE__*/ react.createElement(RegisterFeature, {
17
+ feature: CmsWorkflowsCacheFeature
18
+ }), /*#__PURE__*/ react.createElement(RegisterFeature, {
19
+ feature: CmsWorkflowsEditorPresenterFeature
20
+ }), /*#__PURE__*/ react.createElement(ListOpenInNewWindow, null), /*#__PURE__*/ react.createElement(CmsEntriesWorkflowStateListFooterMenu, null), /*#__PURE__*/ react.createElement(CmsWorkflowsEditor, null), /*#__PURE__*/ react.createElement(ContentEntryFormWorkflow, null), /*#__PURE__*/ react.createElement(CmsEntryFormTooltipButton, null), /*#__PURE__*/ react.createElement(CmsEntryFormScheduleMenuItemAction, null), /*#__PURE__*/ react.createElement(CmsEntryFormCreateNewRevisionButton, null));
10
21
  };
22
+ export { CmsWorkflows };
11
23
 
12
24
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +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":[]}
1
+ {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { RegisterFeature, useFeatureFlags } from \"@webiny/app-admin\";\nimport { CmsWorkflowsEditor } from \"~/Routes/index.js\";\nimport {\n CmsEntryFormScheduleMenuItemAction,\n CmsEntryFormTooltipButton,\n ContentEntryFormWorkflow\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\";\nimport { CmsWorkflowsFeature } from \"~/presentation/feature.js\";\nimport { CmsWorkflowsCacheFeature } from \"~/features/feature.js\";\nimport { CmsWorkflowsEditorPresenterFeature } from \"~/presentation/cmsWorkflowsEditor/feature.js\";\n\nexport const CmsWorkflows = () => {\n const featureFlags = useFeatureFlags();\n\n if (!featureFlags.isEnabled(\"advancedPublishingWorkflow\")) {\n return null;\n }\n\n return (\n <>\n <RegisterFeature feature={CmsWorkflowsFeature} />\n <RegisterFeature feature={CmsWorkflowsCacheFeature} />\n <RegisterFeature feature={CmsWorkflowsEditorPresenterFeature} />\n <ListOpenInNewWindow />\n <CmsEntriesWorkflowStateListFooterMenu />\n <CmsWorkflowsEditor />\n <ContentEntryFormWorkflow />\n <CmsEntryFormTooltipButton />\n <CmsEntryFormScheduleMenuItemAction />\n <CmsEntryFormCreateNewRevisionButton />\n </>\n );\n};\n"],"names":["CmsWorkflows","featureFlags","useFeatureFlags","RegisterFeature","CmsWorkflowsFeature","CmsWorkflowsCacheFeature","CmsWorkflowsEditorPresenterFeature","ListOpenInNewWindow","CmsEntriesWorkflowStateListFooterMenu","CmsWorkflowsEditor","ContentEntryFormWorkflow","CmsEntryFormTooltipButton","CmsEntryFormScheduleMenuItemAction","CmsEntryFormCreateNewRevisionButton"],"mappings":";;;;;;;;;;AAeO,MAAMA,eAAe;IACxB,MAAMC,eAAeC;IAErB,IAAI,CAACD,aAAa,SAAS,CAAC,+BACxB,OAAO;IAGX,OAAO,WAAP,GACI,wDACI,oBAACE,iBAAeA;QAAC,SAASC;sBAC1B,oBAACD,iBAAeA;QAAC,SAASE;sBAC1B,oBAACF,iBAAeA;QAAC,SAASG;sBAC1B,oBAACC,qBAAmBA,OAAAA,WAAAA,GACpB,oBAACC,uCAAqCA,OAAAA,WAAAA,GACtC,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAACC,0BAAwBA,OAAAA,WAAAA,GACzB,oBAACC,2BAAyBA,OAAAA,WAAAA,GAC1B,oBAACC,oCAAkCA,OAAAA,WAAAA,GACnC,oBAACC,qCAAmCA;AAGhD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-headless-cms-workflows",
3
- "version": "0.0.0-unstable.e6f0dc8ca7",
3
+ "version": "0.0.0-unstable.eb81deee7e",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -13,34 +13,38 @@
13
13
  "author": "Webiny Ltd",
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
- "@apollo/react-hooks": "3.1.5",
17
- "@fortawesome/react-fontawesome": "3.3.1",
18
- "@webiny/admin-ui": "0.0.0-unstable.e6f0dc8ca7",
19
- "@webiny/app": "0.0.0-unstable.e6f0dc8ca7",
20
- "@webiny/app-admin": "0.0.0-unstable.e6f0dc8ca7",
21
- "@webiny/app-headless-cms": "0.0.0-unstable.e6f0dc8ca7",
22
- "@webiny/app-headless-cms-common": "0.0.0-unstable.e6f0dc8ca7",
23
- "@webiny/app-workflows": "0.0.0-unstable.e6f0dc8ca7",
24
- "@webiny/icons": "0.0.0-unstable.e6f0dc8ca7",
25
- "mobx-react-lite": "4.1.1",
16
+ "@fortawesome/react-fontawesome": "3.5.0",
17
+ "@webiny/admin-ui": "0.0.0-unstable.eb81deee7e",
18
+ "@webiny/app": "0.0.0-unstable.eb81deee7e",
19
+ "@webiny/app-admin": "0.0.0-unstable.eb81deee7e",
20
+ "@webiny/app-headless-cms": "0.0.0-unstable.eb81deee7e",
21
+ "@webiny/app-headless-cms-common": "0.0.0-unstable.eb81deee7e",
22
+ "@webiny/app-workflows": "0.0.0-unstable.eb81deee7e",
23
+ "@webiny/feature": "0.0.0-unstable.eb81deee7e",
24
+ "@webiny/icons": "0.0.0-unstable.eb81deee7e",
25
+ "@webiny/utils": "0.0.0-unstable.eb81deee7e",
26
+ "mobx": "7.0.3",
27
+ "mobx-react-lite": "5.0.3",
26
28
  "react": "18.3.1",
27
29
  "react-dom": "18.3.1",
28
30
  "react-helmet": "6.1.0"
29
31
  },
30
32
  "devDependencies": {
31
- "@types/react": "18.3.28",
32
- "@webiny/build-tools": "0.0.0-unstable.e6f0dc8ca7",
33
+ "@types/react": "18.3.31",
34
+ "@webiny/build-tools": "0.0.0-unstable.eb81deee7e",
33
35
  "rimraf": "6.1.3",
34
- "typescript": "6.0.3"
36
+ "typescript": "7.0.2"
35
37
  },
36
38
  "publishConfig": {
37
- "access": "public",
38
- "directory": "dist"
39
+ "access": "public"
39
40
  },
40
41
  "svgo": {
41
42
  "plugins": {
42
43
  "removeViewBox": false
43
44
  }
44
45
  },
45
- "gitHead": "e6f0dc8ca741c1fcc3fec9a5b9e86fdd49544641"
46
+ "gitHead": "b8aec8a1be3f25c3b428b357fe1e352c7cbff9ae",
47
+ "webiny": {
48
+ "publishFrom": "dist"
49
+ }
46
50
  }
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ export declare const CmsWorkflowsEditorMenu: () => React.JSX.Element | null;
3
+ export declare const CmsWorkflowsEditorView: (() => React.JSX.Element | null) & React.NamedExoticComponent<unknown> & {
4
+ readonly type: () => React.JSX.Element | null;
5
+ };
@@ -0,0 +1,90 @@
1
+ import react, { useCallback, useEffect, useMemo } from "react";
2
+ import { observer } from "mobx-react-lite";
3
+ import { AdminConfig, useRoute, useRouter } from "@webiny/app-admin";
4
+ import { useFeature } from "@webiny/app";
5
+ import { Routes } from "../routes.js";
6
+ import { Components } from "@webiny/app-workflows";
7
+ import { Icon, Loader } from "@webiny/admin-ui";
8
+ import { usePermission } from "@webiny/app-headless-cms/admin/hooks/index.js";
9
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
10
+ import { normalizeIcon } from "@webiny/app-headless-cms/utils/normalizeIcon.js";
11
+ import { CmsWorkflowsEditorPresenterFeature } from "./cmsWorkflowsEditor/feature.js";
12
+ const { Admin: { WorkflowsEditor: WorkflowsEditor }, Permissions: { HasWorkflowsEditorPermission: HasWorkflowsEditorPermission } } = Components;
13
+ const { Menu: Menu } = AdminConfig;
14
+ const CmsWorkflowsEditorMenu = ()=>{
15
+ const router = useRouter();
16
+ const { canCreateContentModels } = usePermission();
17
+ if (!canCreateContentModels) return null;
18
+ return /*#__PURE__*/ react.createElement(HasWorkflowsEditorPermission, null, /*#__PURE__*/ react.createElement(Menu, {
19
+ name: "headlessCMS.contentModels.workflows",
20
+ parent: "headlessCMS",
21
+ element: /*#__PURE__*/ react.createElement(Menu.Link, {
22
+ pinnable: true,
23
+ text: "Workflows",
24
+ to: router.getLink(Routes.ContentModels.Workflows)
25
+ })
26
+ }));
27
+ };
28
+ const ModelIcon = ({ app })=>{
29
+ if (!app.icon) return null;
30
+ const icon = normalizeIcon(app.icon);
31
+ if (!icon) return null;
32
+ return /*#__PURE__*/ react.createElement(Icon, {
33
+ icon: /*#__PURE__*/ react.createElement(FontAwesomeIcon, {
34
+ icon: icon
35
+ }),
36
+ label: app.name,
37
+ size: "sm",
38
+ className: "text-neutral-strong"
39
+ });
40
+ };
41
+ const CmsWorkflowsEditorView = observer(()=>{
42
+ const { route } = useRoute(Routes.ContentModels.Workflows);
43
+ const { presenter } = useFeature(CmsWorkflowsEditorPresenterFeature);
44
+ const { canCreateContentModels } = usePermission();
45
+ const { goToRoute } = useRouter();
46
+ useEffect(()=>{
47
+ presenter.init();
48
+ }, [
49
+ presenter
50
+ ]);
51
+ const { loading, apps: workflowApps } = presenter.vm;
52
+ const apps = useMemo(()=>workflowApps.map((app)=>({
53
+ id: app.id,
54
+ name: app.name,
55
+ icon: /*#__PURE__*/ react.createElement(ModelIcon, {
56
+ app: app
57
+ })
58
+ })), [
59
+ workflowApps
60
+ ]);
61
+ const app = useMemo(()=>{
62
+ if (!route.params.app) return apps.find(()=>true);
63
+ return apps.find((a)=>a.id === route.params.app) || null;
64
+ }, [
65
+ route.params.app,
66
+ apps
67
+ ]);
68
+ const onAppClick = useCallback((id)=>{
69
+ goToRoute(Routes.ContentModels.Workflows, {
70
+ app: id
71
+ });
72
+ }, [
73
+ apps
74
+ ]);
75
+ if (!canCreateContentModels) return null;
76
+ if (loading) return /*#__PURE__*/ react.createElement(Loader, {
77
+ size: "lg",
78
+ variant: "accent",
79
+ indeterminate: true,
80
+ text: "Loading..."
81
+ });
82
+ return /*#__PURE__*/ react.createElement(WorkflowsEditor, {
83
+ apps: apps,
84
+ onAppClick: onAppClick,
85
+ app: app?.id
86
+ });
87
+ });
88
+ export { CmsWorkflowsEditorMenu, CmsWorkflowsEditorView };
89
+
90
+ //# sourceMappingURL=CmsWorkflowsEditorView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/CmsWorkflowsEditorView.js","sources":["../../src/presentation/CmsWorkflowsEditorView.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { AdminConfig, useRoute, useRouter } from \"@webiny/app-admin\";\nimport { useFeature } from \"@webiny/app\";\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 { usePermission } from \"@webiny/app-headless-cms/admin/hooks/index.js\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { normalizeIcon } from \"@webiny/app-headless-cms/utils/normalizeIcon.js\";\nimport { CmsWorkflowsEditorPresenterFeature } from \"~/presentation/cmsWorkflowsEditor/feature.js\";\nimport type { WorkflowApp } from \"~/presentation/cmsWorkflowsEditor/abstractions.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\nconst ModelIcon = ({ app }: { app: WorkflowApp }) => {\n if (!app.icon) {\n return null;\n }\n\n const icon = normalizeIcon(app.icon);\n if (!icon) {\n return null;\n }\n\n return (\n <Icon\n icon={<FontAwesomeIcon icon={icon} />}\n label={app.name}\n size={\"sm\"}\n className={\"text-neutral-strong\"}\n />\n );\n};\n\nexport const CmsWorkflowsEditorView = observer(() => {\n const { route } = useRoute(Routes.ContentModels.Workflows);\n const { presenter } = useFeature(CmsWorkflowsEditorPresenterFeature);\n const { canCreateContentModels } = usePermission();\n const { goToRoute } = useRouter();\n\n useEffect(() => {\n presenter.init();\n }, [presenter]);\n\n const { loading, apps: workflowApps } = presenter.vm;\n\n const apps = useMemo<IWorkflowApplication[]>(() => {\n return workflowApps.map(app => ({\n id: app.id,\n name: app.name,\n icon: <ModelIcon app={app} />\n }));\n }, [workflowApps]);\n\n const app = useMemo(() => {\n if (!route.params.app) {\n // Find first app\n return apps.find(() => true);\n }\n return apps.find(a => a.id === route.params.app) || null;\n }, [route.params.app, apps]);\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"],"names":["WorkflowsEditor","HasWorkflowsEditorPermission","Components","Menu","AdminConfig","CmsWorkflowsEditorMenu","router","useRouter","canCreateContentModels","usePermission","Routes","ModelIcon","app","icon","normalizeIcon","Icon","FontAwesomeIcon","CmsWorkflowsEditorView","observer","route","useRoute","presenter","useFeature","CmsWorkflowsEditorPresenterFeature","goToRoute","useEffect","loading","workflowApps","apps","useMemo","a","onAppClick","useCallback","id","Loader"],"mappings":";;;;;;;;;;;AAcA,MAAM,EACF,OAAO,EAAEA,iBAAAA,eAAe,EAAE,EAC1B,aAAa,EAAEC,8BAAAA,4BAA4B,EAAE,EAChD,GAAGC;AAEJ,MAAM,EAAEC,MAAAA,IAAI,EAAE,GAAGC;AAEV,MAAMC,yBAAyB;IAClC,MAAMC,SAASC;IACf,MAAM,EAAEC,sBAAsB,EAAE,GAAGC;IAEnC,IAAI,CAACD,wBACD,OAAO;IAGX,OAAO,WAAP,GACI,oBAACP,8BAA4BA,MAAAA,WAAAA,GACzB,oBAACE,MAAIA;QACD,MAAM;QACN,QAAQ;QACR,uBACI,oBAACA,KAAK,IAAI;YACN,UAAU;YACV,MAAM;YACN,IAAIG,OAAO,OAAO,CAACI,OAAO,aAAa,CAAC,SAAS;;;AAMzE;AAEA,MAAMC,YAAY,CAAC,EAAEC,GAAG,EAAwB;IAC5C,IAAI,CAACA,IAAI,IAAI,EACT,OAAO;IAGX,MAAMC,OAAOC,cAAcF,IAAI,IAAI;IACnC,IAAI,CAACC,MACD,OAAO;IAGX,OAAO,WAAP,GACI,oBAACE,MAAIA;QACD,oBAAM,oBAACC,iBAAeA;YAAC,MAAMH;;QAC7B,OAAOD,IAAI,IAAI;QACf,MAAM;QACN,WAAW;;AAGvB;AAEO,MAAMK,yBAAyBC,SAAS;IAC3C,MAAM,EAAEC,KAAK,EAAE,GAAGC,SAASV,OAAO,aAAa,CAAC,SAAS;IACzD,MAAM,EAAEW,SAAS,EAAE,GAAGC,WAAWC;IACjC,MAAM,EAAEf,sBAAsB,EAAE,GAAGC;IACnC,MAAM,EAAEe,SAAS,EAAE,GAAGjB;IAEtBkB,UAAU;QACNJ,UAAU,IAAI;IAClB,GAAG;QAACA;KAAU;IAEd,MAAM,EAAEK,OAAO,EAAE,MAAMC,YAAY,EAAE,GAAGN,UAAU,EAAE;IAEpD,MAAMO,OAAOC,QAAgC,IAClCF,aAAa,GAAG,CAACf,CAAAA,MAAQ;gBAC5B,IAAIA,IAAI,EAAE;gBACV,MAAMA,IAAI,IAAI;gBACd,MAAM,WAAN,GAAM,oBAACD,WAASA;oBAAC,KAAKC;;YAC1B,KACD;QAACe;KAAa;IAEjB,MAAMf,MAAMiB,QAAQ;QAChB,IAAI,CAACV,MAAM,MAAM,CAAC,GAAG,EAEjB,OAAOS,KAAK,IAAI,CAAC,IAAM;QAE3B,OAAOA,KAAK,IAAI,CAACE,CAAAA,IAAKA,EAAE,EAAE,KAAKX,MAAM,MAAM,CAAC,GAAG,KAAK;IACxD,GAAG;QAACA,MAAM,MAAM,CAAC,GAAG;QAAES;KAAK;IAE3B,MAAMG,aAAaC,YACf,CAACC;QACGT,UAAUd,OAAO,aAAa,CAAC,SAAS,EAAE;YACtC,KAAKuB;QACT;IACJ,GACA;QAACL;KAAK;IAGV,IAAI,CAACpB,wBACD,OAAO;IACJ,IAAIkB,SACP,OAAO,WAAP,GAAO,oBAACQ,QAAMA;QAAC,MAAK;QAAK,SAAQ;QAAS,eAAe;QAAM,MAAK;;IAGxE,OAAO,WAAP,GAAO,oBAAClC,iBAAeA;QAAC,MAAM4B;QAAM,YAAYG;QAAY,KAAKnB,KAAK;;AAC1E"}
@@ -0,0 +1,25 @@
1
+ import { type IContentEntryFormPresenter, type IContentEntryFormViewModel } from "@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js";
2
+ import { CmsModelContext } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
3
+ import { WorkflowStatePresenter } from "@webiny/app-workflows/presentation/workflowState/abstractions.js";
4
+ declare class ContentEntryFormPresenterWithWorkflow implements IContentEntryFormPresenter {
5
+ private workflowPresenter;
6
+ private modelAccessor;
7
+ private original;
8
+ constructor(workflowPresenter: WorkflowStatePresenter.Interface, modelAccessor: CmsModelContext.Interface, original: IContentEntryFormPresenter);
9
+ get vm(): IContentEntryFormViewModel;
10
+ loadRevision(id: string): Promise<void>;
11
+ saveRevision(options?: {
12
+ skipValidation?: boolean;
13
+ }): Promise<boolean>;
14
+ publishRevision(): Promise<boolean>;
15
+ unpublishRevision(): Promise<boolean>;
16
+ deleteEntry(): Promise<boolean>;
17
+ setFolderId(folderId: string | null): void;
18
+ newEntry(initialValues?: Record<string, unknown>): void;
19
+ patchEntryMeta(...args: Parameters<IContentEntryFormPresenter["patchEntryMeta"]>): void;
20
+ reset(): void;
21
+ }
22
+ export declare const ContentEntryFormPresenterWorkflowDecorator: typeof ContentEntryFormPresenterWithWorkflow & {
23
+ __abstraction: import("@webiny/di").Abstraction<IContentEntryFormPresenter>;
24
+ };
25
+ export {};
@@ -0,0 +1,70 @@
1
+ import { computed, makeAutoObservable } from "mobx";
2
+ import { ContentEntryFormPresenter } from "@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js";
3
+ import { CmsModelContext } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
4
+ import { WorkflowStatePresenter } from "@webiny/app-workflows/presentation/workflowState/abstractions.js";
5
+ import { CMS_MODEL_SINGLETON_TAG } from "@webiny/app-headless-cms-common";
6
+ class ContentEntryFormPresenterWithWorkflow {
7
+ constructor(workflowPresenter, modelAccessor, original){
8
+ this.workflowPresenter = workflowPresenter;
9
+ this.modelAccessor = modelAccessor;
10
+ this.original = original;
11
+ makeAutoObservable(this, {
12
+ workflowPresenter: false,
13
+ modelAccessor: false,
14
+ original: false,
15
+ vm: computed
16
+ });
17
+ }
18
+ get vm() {
19
+ const base = this.original.vm;
20
+ const wfVm = this.workflowPresenter.vm;
21
+ return {
22
+ ...base,
23
+ canSave: base.canSave && !wfVm.hasState,
24
+ canPublish: base.canPublish && (!wfVm.hasWorkflow || wfVm.isApproved)
25
+ };
26
+ }
27
+ async loadRevision(id) {
28
+ await this.original.loadRevision(id);
29
+ const model = this.modelAccessor.getModel();
30
+ if (model.tags.includes(CMS_MODEL_SINGLETON_TAG)) return;
31
+ const title = `${model.name}: ${this.original.vm.entry?.meta?.title || "unknown"}`;
32
+ await this.workflowPresenter.init(`cms.${model.modelId}`, id, title);
33
+ }
34
+ async saveRevision(options) {
35
+ if (this.workflowPresenter.vm.hasState) return false;
36
+ return this.original.saveRevision(options);
37
+ }
38
+ publishRevision() {
39
+ return this.original.publishRevision();
40
+ }
41
+ unpublishRevision() {
42
+ return this.original.unpublishRevision();
43
+ }
44
+ deleteEntry() {
45
+ return this.original.deleteEntry();
46
+ }
47
+ setFolderId(folderId) {
48
+ this.original.setFolderId(folderId);
49
+ }
50
+ newEntry(initialValues) {
51
+ return this.original.newEntry(initialValues);
52
+ }
53
+ patchEntryMeta(...args) {
54
+ this.original.patchEntryMeta(...args);
55
+ }
56
+ reset() {
57
+ this.original.reset();
58
+ this.workflowPresenter.dispose();
59
+ }
60
+ }
61
+ const ContentEntryFormPresenterWorkflowDecorator = ContentEntryFormPresenter.createDecorator({
62
+ decorator: ContentEntryFormPresenterWithWorkflow,
63
+ dependencies: [
64
+ WorkflowStatePresenter,
65
+ CmsModelContext
66
+ ]
67
+ });
68
+ export { ContentEntryFormPresenterWorkflowDecorator };
69
+
70
+ //# sourceMappingURL=ContentEntryFormPresenterWorkflowDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/ContentEntryFormPresenterWorkflowDecorator.js","sources":["../../src/presentation/ContentEntryFormPresenterWorkflowDecorator.ts"],"sourcesContent":["import { computed, makeAutoObservable } from \"mobx\";\nimport {\n ContentEntryFormPresenter,\n type IContentEntryFormPresenter,\n type IContentEntryFormViewModel\n} from \"@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js\";\nimport { CmsModelContext } from \"@webiny/app-headless-cms/features/contentEntry/abstractions.js\";\nimport { WorkflowStatePresenter } from \"@webiny/app-workflows/presentation/workflowState/abstractions.js\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/app-headless-cms-common\";\n\nclass ContentEntryFormPresenterWithWorkflow implements IContentEntryFormPresenter {\n constructor(\n private workflowPresenter: WorkflowStatePresenter.Interface,\n private modelAccessor: CmsModelContext.Interface,\n private original: IContentEntryFormPresenter\n ) {\n makeAutoObservable<\n ContentEntryFormPresenterWithWorkflow,\n \"workflowPresenter\" | \"modelAccessor\" | \"original\"\n >(this, {\n workflowPresenter: false,\n modelAccessor: false,\n original: false,\n vm: computed\n });\n }\n\n get vm(): IContentEntryFormViewModel {\n const base = this.original.vm;\n const wfVm = this.workflowPresenter.vm;\n\n return {\n ...base,\n canSave: base.canSave && !wfVm.hasState,\n canPublish: base.canPublish && (!wfVm.hasWorkflow || wfVm.isApproved)\n };\n }\n\n async loadRevision(id: string): Promise<void> {\n await this.original.loadRevision(id);\n\n const model = this.modelAccessor.getModel();\n if (model.tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n return;\n }\n\n const title = `${model.name}: ${this.original.vm.entry?.meta?.title || \"unknown\"}`;\n await this.workflowPresenter.init(`cms.${model.modelId}`, id, title);\n }\n\n async saveRevision(options?: { skipValidation?: boolean }): Promise<boolean> {\n if (this.workflowPresenter.vm.hasState) {\n return false;\n }\n return this.original.saveRevision(options);\n }\n\n publishRevision(): Promise<boolean> {\n return this.original.publishRevision();\n }\n\n unpublishRevision(): Promise<boolean> {\n return this.original.unpublishRevision();\n }\n\n deleteEntry(): Promise<boolean> {\n return this.original.deleteEntry();\n }\n\n setFolderId(folderId: string | null): void {\n this.original.setFolderId(folderId);\n }\n\n newEntry(initialValues?: Record<string, unknown>): void {\n return this.original.newEntry(initialValues);\n }\n\n patchEntryMeta(...args: Parameters<IContentEntryFormPresenter[\"patchEntryMeta\"]>): void {\n this.original.patchEntryMeta(...args);\n }\n\n reset(): void {\n this.original.reset();\n this.workflowPresenter.dispose();\n }\n}\n\nexport const ContentEntryFormPresenterWorkflowDecorator = ContentEntryFormPresenter.createDecorator(\n {\n decorator: ContentEntryFormPresenterWithWorkflow,\n dependencies: [WorkflowStatePresenter, CmsModelContext]\n }\n);\n"],"names":["ContentEntryFormPresenterWithWorkflow","workflowPresenter","modelAccessor","original","makeAutoObservable","computed","base","wfVm","id","model","CMS_MODEL_SINGLETON_TAG","title","options","folderId","initialValues","args","ContentEntryFormPresenterWorkflowDecorator","ContentEntryFormPresenter","WorkflowStatePresenter","CmsModelContext"],"mappings":";;;;;AAUA,MAAMA;IACF,YACYC,iBAAmD,EACnDC,aAAwC,EACxCC,QAAoC,CAC9C;aAHUF,iBAAiB,GAAjBA;aACAC,aAAa,GAAbA;aACAC,QAAQ,GAARA;QAERC,mBAGE,IAAI,EAAE;YACJ,mBAAmB;YACnB,eAAe;YACf,UAAU;YACV,IAAIC;QACR;IACJ;IAEA,IAAI,KAAiC;QACjC,MAAMC,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE;QAC7B,MAAMC,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE;QAEtC,OAAO;YACH,GAAGD,IAAI;YACP,SAASA,KAAK,OAAO,IAAI,CAACC,KAAK,QAAQ;YACvC,YAAYD,KAAK,UAAU,IAAK,EAACC,KAAK,WAAW,IAAIA,KAAK,UAAS;QACvE;IACJ;IAEA,MAAM,aAAaC,EAAU,EAAiB;QAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAACA;QAEjC,MAAMC,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ;QACzC,IAAIA,MAAM,IAAI,CAAC,QAAQ,CAACC,0BACpB;QAGJ,MAAMC,QAAQ,GAAGF,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,SAAS,WAAW;QAClF,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAEA,MAAM,OAAO,EAAE,EAAED,IAAIG;IAClE;IAEA,MAAM,aAAaC,OAAsC,EAAoB;QACzE,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAClC,OAAO;QAEX,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAACA;IACtC;IAEA,kBAAoC;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe;IACxC;IAEA,oBAAsC;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB;IAC1C;IAEA,cAAgC;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW;IACpC;IAEA,YAAYC,QAAuB,EAAQ;QACvC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACA;IAC9B;IAEA,SAASC,aAAuC,EAAQ;QACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAACA;IAClC;IAEA,eAAe,GAAGC,IAA8D,EAAQ;QACpF,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAIA;IACpC;IAEA,QAAc;QACV,IAAI,CAAC,QAAQ,CAAC,KAAK;QACnB,IAAI,CAAC,iBAAiB,CAAC,OAAO;IAClC;AACJ;AAEO,MAAMC,6CAA6CC,0BAA0B,eAAe,CAC/F;IACI,WAAWjB;IACX,cAAc;QAACkB;QAAwBC;KAAgB;AAC3D"}
@@ -0,0 +1,11 @@
1
+ import { TableRowMapper } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
2
+ import type { CmsContentEntry } from "@webiny/app-headless-cms-common/types/index.js";
3
+ declare class TableRowMapperWithWorkflows implements TableRowMapper.Interface {
4
+ private decoratee;
5
+ constructor(decoratee: TableRowMapper.Interface);
6
+ fromEntry(entry: CmsContentEntry): TableRowMapper.EntryTableRow;
7
+ }
8
+ export declare const TableRowMapperWorkflowDecorator: typeof TableRowMapperWithWorkflows & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app-headless-cms/presentation/contentEntries/views/Table/abstractions").ITableRowMapper>;
10
+ };
11
+ export {};
@@ -0,0 +1,25 @@
1
+ import { TableRowMapper } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
2
+ import { WorkflowStateValue } from "@webiny/app-workflows/types.js";
3
+ class TableRowMapperWithWorkflows {
4
+ constructor(decoratee){
5
+ this.decoratee = decoratee;
6
+ }
7
+ fromEntry(entry) {
8
+ const row = this.decoratee.fromEntry(entry);
9
+ const meta = entry.meta;
10
+ const system = meta.system;
11
+ const workflowState = system?.workflow?.state;
12
+ if (workflowState && workflowState !== WorkflowStateValue.approved) return {
13
+ ...row,
14
+ $selectable: false
15
+ };
16
+ return row;
17
+ }
18
+ }
19
+ const TableRowMapperWorkflowDecorator = TableRowMapper.createDecorator({
20
+ decorator: TableRowMapperWithWorkflows,
21
+ dependencies: []
22
+ });
23
+ export { TableRowMapperWorkflowDecorator };
24
+
25
+ //# sourceMappingURL=TableRowMapperWorkflowDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/TableRowMapperWorkflowDecorator.js","sources":["../../src/presentation/TableRowMapperWorkflowDecorator.ts"],"sourcesContent":["import { TableRowMapper } from \"@webiny/app-headless-cms/exports/admin/cms/entry/list.js\";\nimport type { CmsContentEntry } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport { WorkflowStateValue } from \"@webiny/app-workflows/types.js\";\nimport type { ICmsEntrySystemWithWorkflow } from \"~/types.js\";\n\nclass TableRowMapperWithWorkflows implements TableRowMapper.Interface {\n constructor(private decoratee: TableRowMapper.Interface) {}\n\n fromEntry(entry: CmsContentEntry): TableRowMapper.EntryTableRow {\n const row = this.decoratee.fromEntry(entry);\n\n const meta = entry.meta as Record<string, unknown>;\n const system = meta.system as ICmsEntrySystemWithWorkflow | undefined;\n const workflowState = system?.workflow?.state;\n if (workflowState && workflowState !== WorkflowStateValue.approved) {\n return { ...row, $selectable: false };\n }\n\n return row;\n }\n}\n\nexport const TableRowMapperWorkflowDecorator = TableRowMapper.createDecorator({\n decorator: TableRowMapperWithWorkflows,\n dependencies: []\n});\n"],"names":["TableRowMapperWithWorkflows","decoratee","entry","row","meta","system","workflowState","WorkflowStateValue","TableRowMapperWorkflowDecorator","TableRowMapper"],"mappings":";;AAKA,MAAMA;IACF,YAAoBC,SAAmC,CAAE;aAArCA,SAAS,GAATA;IAAsC;IAE1D,UAAUC,KAAsB,EAAgC;QAC5D,MAAMC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAACD;QAErC,MAAME,OAAOF,MAAM,IAAI;QACvB,MAAMG,SAASD,KAAK,MAAM;QAC1B,MAAME,gBAAgBD,QAAQ,UAAU;QACxC,IAAIC,iBAAiBA,kBAAkBC,mBAAmB,QAAQ,EAC9D,OAAO;YAAE,GAAGJ,GAAG;YAAE,aAAa;QAAM;QAGxC,OAAOA;IACX;AACJ;AAEO,MAAMK,kCAAkCC,eAAe,eAAe,CAAC;IAC1E,WAAWT;IACX,cAAc,EAAE;AACpB"}
@@ -0,0 +1,8 @@
1
+ import { GetEntryGraphQLFieldSelection } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
2
+ declare class WorkflowStateGetEntryFieldSelectionImpl implements GetEntryGraphQLFieldSelection.Interface {
3
+ getSelection(): string[];
4
+ }
5
+ export declare const WorkflowStateGetEntryFieldSelection: typeof WorkflowStateGetEntryFieldSelectionImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app-headless-cms/features/contentEntry/getEntry/abstractions").IGetEntryGraphQLFieldSelection>;
7
+ };
8
+ export {};