@webiny/app-headless-cms-workflows 0.0.0-unstable.0d717d18dd

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 (74) hide show
  1. package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.d.ts +2 -0
  2. package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js +34 -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 +1 -0
  6. package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.d.ts +2 -0
  7. package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js +47 -0
  8. package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js.map +1 -0
  9. package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.d.ts +5 -0
  10. package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js +22 -0
  11. package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js.map +1 -0
  12. package/Components/ContentEntryForm/CmsEntryFormTooltipButton.d.ts +2 -0
  13. package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js +13 -0
  14. package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js.map +1 -0
  15. package/Components/ContentEntryForm/ContentEntryFormWorkflow.d.ts +2 -0
  16. package/Components/ContentEntryForm/ContentEntryFormWorkflow.js +24 -0
  17. package/Components/ContentEntryForm/ContentEntryFormWorkflow.js.map +1 -0
  18. package/Components/ContentEntryForm/index.d.ts +4 -0
  19. package/Components/ContentEntryForm/index.js +4 -0
  20. package/Components/OptionItem/OpenInNewWindow.d.ts +2 -0
  21. package/Components/OptionItem/OpenInNewWindow.js +36 -0
  22. package/Components/OptionItem/OpenInNewWindow.js.map +1 -0
  23. package/LICENSE +21 -0
  24. package/README.md +11 -0
  25. package/Routes/CmsWorkflowsEditor.d.ts +2 -0
  26. package/Routes/CmsWorkflowsEditor.js +32 -0
  27. package/Routes/CmsWorkflowsEditor.js.map +1 -0
  28. package/Routes/index.d.ts +1 -0
  29. package/Routes/index.js +1 -0
  30. package/features/WorkflowStateCacheHandler.d.ts +11 -0
  31. package/features/WorkflowStateCacheHandler.js +50 -0
  32. package/features/WorkflowStateCacheHandler.js.map +1 -0
  33. package/features/feature.d.ts +1 -0
  34. package/features/feature.js +11 -0
  35. package/features/feature.js.map +1 -0
  36. package/index.d.ts +2 -0
  37. package/index.js +20 -0
  38. package/index.js.map +1 -0
  39. package/package.json +50 -0
  40. package/presentation/CmsWorkflowsEditorView.d.ts +5 -0
  41. package/presentation/CmsWorkflowsEditorView.js +90 -0
  42. package/presentation/CmsWorkflowsEditorView.js.map +1 -0
  43. package/presentation/ContentEntryFormPresenterWorkflowDecorator.d.ts +24 -0
  44. package/presentation/ContentEntryFormPresenterWorkflowDecorator.js +67 -0
  45. package/presentation/ContentEntryFormPresenterWorkflowDecorator.js.map +1 -0
  46. package/presentation/TableRowMapperWorkflowDecorator.d.ts +11 -0
  47. package/presentation/TableRowMapperWorkflowDecorator.js +25 -0
  48. package/presentation/TableRowMapperWorkflowDecorator.js.map +1 -0
  49. package/presentation/WorkflowStateGetEntryFieldSelection.d.ts +8 -0
  50. package/presentation/WorkflowStateGetEntryFieldSelection.js +24 -0
  51. package/presentation/WorkflowStateGetEntryFieldSelection.js.map +1 -0
  52. package/presentation/WorkflowStateListEntriesFieldSelection.d.ts +8 -0
  53. package/presentation/WorkflowStateListEntriesFieldSelection.js +24 -0
  54. package/presentation/WorkflowStateListEntriesFieldSelection.js.map +1 -0
  55. package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.d.ts +15 -0
  56. package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js +50 -0
  57. package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js.map +1 -0
  58. package/presentation/cmsWorkflowsEditor/abstractions.d.ts +19 -0
  59. package/presentation/cmsWorkflowsEditor/abstractions.js +5 -0
  60. package/presentation/cmsWorkflowsEditor/abstractions.js.map +1 -0
  61. package/presentation/cmsWorkflowsEditor/feature.d.ts +3 -0
  62. package/presentation/cmsWorkflowsEditor/feature.js +17 -0
  63. package/presentation/cmsWorkflowsEditor/feature.js.map +1 -0
  64. package/presentation/feature.d.ts +1 -0
  65. package/presentation/feature.js +21 -0
  66. package/presentation/feature.js.map +1 -0
  67. package/routes.d.ts +11 -0
  68. package/routes.js +21 -0
  69. package/routes.js.map +1 -0
  70. package/types.d.ts +10 -0
  71. package/types.js +0 -0
  72. package/utils/appName.d.ts +4 -0
  73. package/utils/appName.js +13 -0
  74. package/utils/appName.js.map +1 -0
@@ -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,24 @@
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
+ reset(): void;
20
+ }
21
+ export declare const ContentEntryFormPresenterWorkflowDecorator: typeof ContentEntryFormPresenterWithWorkflow & {
22
+ __abstraction: import("@webiny/di").Abstraction<IContentEntryFormPresenter>;
23
+ };
24
+ export {};
@@ -0,0 +1,67 @@
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
+ reset() {
54
+ this.original.reset();
55
+ this.workflowPresenter.dispose();
56
+ }
57
+ }
58
+ const ContentEntryFormPresenterWorkflowDecorator = ContentEntryFormPresenter.createDecorator({
59
+ decorator: ContentEntryFormPresenterWithWorkflow,
60
+ dependencies: [
61
+ WorkflowStatePresenter,
62
+ CmsModelContext
63
+ ]
64
+ });
65
+ export { ContentEntryFormPresenterWorkflowDecorator };
66
+
67
+ //# 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 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","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,QAAc;QACV,IAAI,CAAC,QAAQ,CAAC,KAAK;QACnB,IAAI,CAAC,iBAAiB,CAAC,OAAO;IAClC;AACJ;AAEO,MAAMC,6CAA6CC,0BAA0B,eAAe,CAC/F;IACI,WAAWhB;IACX,cAAc;QAACiB;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 {};
@@ -0,0 +1,24 @@
1
+ import { GetEntryGraphQLFieldSelection } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
2
+ class WorkflowStateGetEntryFieldSelectionImpl {
3
+ getSelection() {
4
+ return [
5
+ `meta {
6
+ system {
7
+ workflow {
8
+ workflowId
9
+ stepId
10
+ stepName
11
+ state
12
+ }
13
+ }
14
+ }`
15
+ ];
16
+ }
17
+ }
18
+ const WorkflowStateGetEntryFieldSelection = GetEntryGraphQLFieldSelection.createImplementation({
19
+ dependencies: [],
20
+ implementation: WorkflowStateGetEntryFieldSelectionImpl
21
+ });
22
+ export { WorkflowStateGetEntryFieldSelection };
23
+
24
+ //# sourceMappingURL=WorkflowStateGetEntryFieldSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/WorkflowStateGetEntryFieldSelection.js","sources":["../../src/presentation/WorkflowStateGetEntryFieldSelection.ts"],"sourcesContent":["import { GetEntryGraphQLFieldSelection } from \"@webiny/app-headless-cms/exports/admin/cms/entry/list.js\";\n\nclass WorkflowStateGetEntryFieldSelectionImpl implements GetEntryGraphQLFieldSelection.Interface {\n getSelection(): string[] {\n return [\n `meta {\n system {\n workflow {\n workflowId\n stepId\n stepName\n state\n }\n }\n }`\n ];\n }\n}\n\nexport const WorkflowStateGetEntryFieldSelection =\n GetEntryGraphQLFieldSelection.createImplementation({\n dependencies: [],\n implementation: WorkflowStateGetEntryFieldSelectionImpl\n });\n"],"names":["WorkflowStateGetEntryFieldSelectionImpl","WorkflowStateGetEntryFieldSelection","GetEntryGraphQLFieldSelection"],"mappings":";AAEA,MAAMA;IACF,eAAyB;QACrB,OAAO;YACH,CAAC;;;;;;;;;aASA,CAAC;SACL;IACL;AACJ;AAEO,MAAMC,sCACTC,8BAA8B,oBAAoB,CAAC;IAC/C,cAAc,EAAE;IAChB,gBAAgBF;AACpB"}
@@ -0,0 +1,8 @@
1
+ import { ListEntriesGraphQLFieldSelection } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
2
+ declare class WorkflowStateListEntriesFieldSelectionImpl implements ListEntriesGraphQLFieldSelection.Interface {
3
+ getSelection(): string[];
4
+ }
5
+ export declare const WorkflowStateListEntriesFieldSelection: typeof WorkflowStateListEntriesFieldSelectionImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app-headless-cms/features/contentEntry/listEntries/abstractions").IListEntriesGraphQLFieldSelection>;
7
+ };
8
+ export {};
@@ -0,0 +1,24 @@
1
+ import { ListEntriesGraphQLFieldSelection } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
2
+ class WorkflowStateListEntriesFieldSelectionImpl {
3
+ getSelection() {
4
+ return [
5
+ `meta {
6
+ system {
7
+ workflow {
8
+ workflowId
9
+ stepId
10
+ stepName
11
+ state
12
+ }
13
+ }
14
+ }`
15
+ ];
16
+ }
17
+ }
18
+ const WorkflowStateListEntriesFieldSelection = ListEntriesGraphQLFieldSelection.createImplementation({
19
+ dependencies: [],
20
+ implementation: WorkflowStateListEntriesFieldSelectionImpl
21
+ });
22
+ export { WorkflowStateListEntriesFieldSelection };
23
+
24
+ //# sourceMappingURL=WorkflowStateListEntriesFieldSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/WorkflowStateListEntriesFieldSelection.js","sources":["../../src/presentation/WorkflowStateListEntriesFieldSelection.ts"],"sourcesContent":["import { ListEntriesGraphQLFieldSelection } from \"@webiny/app-headless-cms/exports/admin/cms/entry/list.js\";\n\nclass WorkflowStateListEntriesFieldSelectionImpl\n implements ListEntriesGraphQLFieldSelection.Interface\n{\n getSelection(): string[] {\n return [\n `meta {\n system {\n workflow {\n workflowId\n stepId\n stepName\n state\n }\n }\n }`\n ];\n }\n}\n\nexport const WorkflowStateListEntriesFieldSelection =\n ListEntriesGraphQLFieldSelection.createImplementation({\n dependencies: [],\n implementation: WorkflowStateListEntriesFieldSelectionImpl\n });\n"],"names":["WorkflowStateListEntriesFieldSelectionImpl","WorkflowStateListEntriesFieldSelection","ListEntriesGraphQLFieldSelection"],"mappings":";AAEA,MAAMA;IAGF,eAAyB;QACrB,OAAO;YACH,CAAC;;;;;;;;;aASA,CAAC;SACL;IACL;AACJ;AAEO,MAAMC,yCACTC,iCAAiC,oBAAoB,CAAC;IAClD,cAAc,EAAE;IAChB,gBAAgBF;AACpB"}
@@ -0,0 +1,15 @@
1
+ import { ListModelsUseCase } from "@webiny/app-headless-cms/features/model/listModels/abstractions.js";
2
+ import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
3
+ import { CmsWorkflowsEditorPresenter as Abstraction } from "./abstractions.js";
4
+ declare class CmsWorkflowsEditorPresenterImpl implements Abstraction.Interface {
5
+ private listModelsUseCase;
6
+ private cache;
7
+ private _loading;
8
+ constructor(listModelsUseCase: ListModelsUseCase.Interface, cache: ModelsCache.Interface);
9
+ get vm(): Abstraction.ViewModel;
10
+ init(): void;
11
+ }
12
+ export declare const CmsWorkflowsEditorPresenter: typeof CmsWorkflowsEditorPresenterImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICmsWorkflowsEditorPresenter>;
14
+ };
15
+ export {};
@@ -0,0 +1,50 @@
1
+ import { computed, makeAutoObservable, runInAction } from "mobx";
2
+ import { ListModelsUseCase } from "@webiny/app-headless-cms/features/model/listModels/abstractions.js";
3
+ import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
4
+ import { createAppName } from "../../utils/appName.js";
5
+ import { CmsWorkflowsEditorPresenter } from "./abstractions.js";
6
+ class CmsWorkflowsEditorPresenterImpl {
7
+ constructor(listModelsUseCase, cache){
8
+ this.listModelsUseCase = listModelsUseCase;
9
+ this.cache = cache;
10
+ this._loading = true;
11
+ makeAutoObservable(this, {
12
+ listModelsUseCase: false,
13
+ cache: false,
14
+ vm: computed
15
+ });
16
+ }
17
+ get vm() {
18
+ const apps = this.cache.getItems().filter((model)=>{
19
+ if (model.tags.includes("$publishing:false")) return false;
20
+ if (model.tags.includes("singleEntry")) return false;
21
+ return true;
22
+ }).map((model)=>({
23
+ id: createAppName(model),
24
+ name: model.name,
25
+ modelId: model.modelId,
26
+ icon: model.icon
27
+ }));
28
+ return {
29
+ loading: this._loading,
30
+ apps
31
+ };
32
+ }
33
+ init() {
34
+ this.listModelsUseCase.execute().then(()=>{
35
+ runInAction(()=>{
36
+ this._loading = false;
37
+ });
38
+ }).catch(console.error);
39
+ }
40
+ }
41
+ const CmsWorkflowsEditorPresenter_CmsWorkflowsEditorPresenter = CmsWorkflowsEditorPresenter.createImplementation({
42
+ implementation: CmsWorkflowsEditorPresenterImpl,
43
+ dependencies: [
44
+ ListModelsUseCase,
45
+ ModelsCache
46
+ ]
47
+ });
48
+ export { CmsWorkflowsEditorPresenter_CmsWorkflowsEditorPresenter as CmsWorkflowsEditorPresenter };
49
+
50
+ //# sourceMappingURL=CmsWorkflowsEditorPresenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js","sources":["../../../src/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport { ListModelsUseCase } from \"@webiny/app-headless-cms/features/model/listModels/abstractions.js\";\nimport { ModelsCache } from \"@webiny/app-headless-cms/features/model/abstractions.js\";\nimport { createAppName } from \"~/utils/appName.js\";\nimport { CmsWorkflowsEditorPresenter as Abstraction, type WorkflowApp } from \"./abstractions.js\";\n\nclass CmsWorkflowsEditorPresenterImpl implements Abstraction.Interface {\n private _loading = true;\n\n constructor(\n private listModelsUseCase: ListModelsUseCase.Interface,\n private cache: ModelsCache.Interface\n ) {\n makeAutoObservable<CmsWorkflowsEditorPresenterImpl, \"listModelsUseCase\" | \"cache\">(this, {\n listModelsUseCase: false,\n cache: false,\n vm: computed\n });\n }\n\n get vm(): Abstraction.ViewModel {\n const apps: WorkflowApp[] = this.cache\n .getItems()\n .filter(model => {\n if (model.tags.includes(\"$publishing:false\")) {\n return false;\n }\n if (model.tags.includes(\"singleEntry\")) {\n return false;\n }\n return true;\n })\n .map(model => ({\n id: createAppName(model),\n name: model.name,\n modelId: model.modelId,\n icon: model.icon\n }));\n\n return {\n loading: this._loading,\n apps\n };\n }\n\n init(): void {\n this.listModelsUseCase\n .execute()\n .then(() => {\n runInAction(() => {\n this._loading = false;\n });\n })\n .catch(console.error);\n }\n}\n\nexport const CmsWorkflowsEditorPresenter = Abstraction.createImplementation({\n implementation: CmsWorkflowsEditorPresenterImpl,\n dependencies: [ListModelsUseCase, ModelsCache]\n});\n"],"names":["CmsWorkflowsEditorPresenterImpl","listModelsUseCase","cache","makeAutoObservable","computed","apps","model","createAppName","runInAction","console","CmsWorkflowsEditorPresenter","Abstraction","ListModelsUseCase","ModelsCache"],"mappings":";;;;;AAMA,MAAMA;IAGF,YACYC,iBAA8C,EAC9CC,KAA4B,CACtC;aAFUD,iBAAiB,GAAjBA;aACAC,KAAK,GAALA;aAJJ,QAAQ,GAAG;QAMfC,mBAAmF,IAAI,EAAE;YACrF,mBAAmB;YACnB,OAAO;YACP,IAAIC;QACR;IACJ;IAEA,IAAI,KAA4B;QAC5B,MAAMC,OAAsB,IAAI,CAAC,KAAK,CACjC,QAAQ,GACR,MAAM,CAACC,CAAAA;YACJ,IAAIA,MAAM,IAAI,CAAC,QAAQ,CAAC,sBACpB,OAAO;YAEX,IAAIA,MAAM,IAAI,CAAC,QAAQ,CAAC,gBACpB,OAAO;YAEX,OAAO;QACX,GACC,GAAG,CAACA,CAAAA,QAAU;gBACX,IAAIC,cAAcD;gBAClB,MAAMA,MAAM,IAAI;gBAChB,SAASA,MAAM,OAAO;gBACtB,MAAMA,MAAM,IAAI;YACpB;QAEJ,OAAO;YACH,SAAS,IAAI,CAAC,QAAQ;YACtBD;QACJ;IACJ;IAEA,OAAa;QACT,IAAI,CAAC,iBAAiB,CACjB,OAAO,GACP,IAAI,CAAC;YACFG,YAAY;gBACR,IAAI,CAAC,QAAQ,GAAG;YACpB;QACJ,GACC,KAAK,CAACC,QAAQ,KAAK;IAC5B;AACJ;AAEO,MAAMC,0DAA8BC,4BAAAA,oBAAgC,CAAC;IACxE,gBAAgBX;IAChB,cAAc;QAACY;QAAmBC;KAAY;AAClD"}
@@ -0,0 +1,19 @@
1
+ export interface WorkflowApp {
2
+ id: string;
3
+ name: string;
4
+ modelId: string;
5
+ icon: string;
6
+ }
7
+ export interface ICmsWorkflowsEditorPresenterViewModel {
8
+ loading: boolean;
9
+ apps: WorkflowApp[];
10
+ }
11
+ export interface ICmsWorkflowsEditorPresenter {
12
+ readonly vm: ICmsWorkflowsEditorPresenterViewModel;
13
+ init(): void;
14
+ }
15
+ export declare const CmsWorkflowsEditorPresenter: import("@webiny/di").Abstraction<ICmsWorkflowsEditorPresenter>;
16
+ export declare namespace CmsWorkflowsEditorPresenter {
17
+ type Interface = ICmsWorkflowsEditorPresenter;
18
+ type ViewModel = ICmsWorkflowsEditorPresenterViewModel;
19
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const CmsWorkflowsEditorPresenter = createAbstraction("CmsWorkflowsEditor/Presenter");
3
+ export { CmsWorkflowsEditorPresenter };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/cmsWorkflowsEditor/abstractions.js","sources":["../../../src/presentation/cmsWorkflowsEditor/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\n\nexport interface WorkflowApp {\n id: string;\n name: string;\n modelId: string;\n icon: string;\n}\n\nexport interface ICmsWorkflowsEditorPresenterViewModel {\n loading: boolean;\n apps: WorkflowApp[];\n}\n\nexport interface ICmsWorkflowsEditorPresenter {\n readonly vm: ICmsWorkflowsEditorPresenterViewModel;\n init(): void;\n}\n\nexport const CmsWorkflowsEditorPresenter = createAbstraction<ICmsWorkflowsEditorPresenter>(\n \"CmsWorkflowsEditor/Presenter\"\n);\n\nexport namespace CmsWorkflowsEditorPresenter {\n export type Interface = ICmsWorkflowsEditorPresenter;\n export type ViewModel = ICmsWorkflowsEditorPresenterViewModel;\n}\n"],"names":["CmsWorkflowsEditorPresenter","createAbstraction"],"mappings":";AAmBO,MAAMA,8BAA8BC,kBACvC"}
@@ -0,0 +1,3 @@
1
+ export declare const CmsWorkflowsEditorPresenterFeature: import("@webiny/feature/admin").FeatureDefinition<{
2
+ presenter: import("./abstractions.js").ICmsWorkflowsEditorPresenter;
3
+ }, []>;
@@ -0,0 +1,17 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { CmsWorkflowsEditorPresenter } from "./abstractions.js";
3
+ import { CmsWorkflowsEditorPresenter as external_CmsWorkflowsEditorPresenter_js_CmsWorkflowsEditorPresenter } from "./CmsWorkflowsEditorPresenter.js";
4
+ const CmsWorkflowsEditorPresenterFeature = createFeature({
5
+ name: "CmsWorkflowsEditor/Presenter",
6
+ register (container) {
7
+ container.register(external_CmsWorkflowsEditorPresenter_js_CmsWorkflowsEditorPresenter).inSingletonScope();
8
+ },
9
+ resolve (container) {
10
+ return {
11
+ presenter: container.resolve(CmsWorkflowsEditorPresenter)
12
+ };
13
+ }
14
+ });
15
+ export { CmsWorkflowsEditorPresenterFeature };
16
+
17
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/cmsWorkflowsEditor/feature.js","sources":["../../../src/presentation/cmsWorkflowsEditor/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { CmsWorkflowsEditorPresenter as Abstraction } from \"./abstractions.js\";\nimport { CmsWorkflowsEditorPresenter } from \"./CmsWorkflowsEditorPresenter.js\";\n\nexport const CmsWorkflowsEditorPresenterFeature = createFeature({\n name: \"CmsWorkflowsEditor/Presenter\",\n register(container) {\n container.register(CmsWorkflowsEditorPresenter).inSingletonScope();\n },\n resolve(container) {\n return {\n presenter: container.resolve(Abstraction)\n };\n }\n});\n"],"names":["CmsWorkflowsEditorPresenterFeature","createFeature","container","CmsWorkflowsEditorPresenter","Abstraction"],"mappings":";;;AAIO,MAAMA,qCAAqCC,cAAc;IAC5D,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,qEAA6B,gBAAgB;IACpE;IACA,SAAQD,SAAS;QACb,OAAO;YACH,WAAWA,UAAU,OAAO,CAACE;QACjC;IACJ;AACJ"}
@@ -0,0 +1 @@
1
+ export declare const CmsWorkflowsFeature: import("@webiny/feature/admin").FeatureDefinition<any, []>;
@@ -0,0 +1,21 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { WorkflowsFeature } from "@webiny/app-workflows";
3
+ import { WorkflowStatePresenterFeature } from "@webiny/app-workflows/presentation/workflowState/feature.js";
4
+ import { ContentEntryFormPresenterWorkflowDecorator } from "./ContentEntryFormPresenterWorkflowDecorator.js";
5
+ import { TableRowMapperWorkflowDecorator } from "./TableRowMapperWorkflowDecorator.js";
6
+ import { WorkflowStateListEntriesFieldSelection } from "./WorkflowStateListEntriesFieldSelection.js";
7
+ import { WorkflowStateGetEntryFieldSelection } from "./WorkflowStateGetEntryFieldSelection.js";
8
+ const CmsWorkflowsFeature = createFeature({
9
+ name: "CmsWorkflows",
10
+ register (container) {
11
+ WorkflowsFeature.register(container);
12
+ WorkflowStatePresenterFeature.register(container);
13
+ container.registerDecorator(ContentEntryFormPresenterWorkflowDecorator);
14
+ container.registerDecorator(TableRowMapperWorkflowDecorator);
15
+ container.register(WorkflowStateListEntriesFieldSelection);
16
+ container.register(WorkflowStateGetEntryFieldSelection);
17
+ }
18
+ });
19
+ export { CmsWorkflowsFeature };
20
+
21
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/feature.js","sources":["../../src/presentation/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { WorkflowsFeature } from \"@webiny/app-workflows\";\nimport { WorkflowStatePresenterFeature } from \"@webiny/app-workflows/presentation/workflowState/feature.js\";\nimport { ContentEntryFormPresenterWorkflowDecorator } from \"./ContentEntryFormPresenterWorkflowDecorator.js\";\nimport { TableRowMapperWorkflowDecorator } from \"./TableRowMapperWorkflowDecorator.js\";\nimport { WorkflowStateListEntriesFieldSelection } from \"./WorkflowStateListEntriesFieldSelection.js\";\nimport { WorkflowStateGetEntryFieldSelection } from \"./WorkflowStateGetEntryFieldSelection.js\";\n\nexport const CmsWorkflowsFeature = createFeature({\n name: \"CmsWorkflows\",\n register(container) {\n WorkflowsFeature.register(container);\n WorkflowStatePresenterFeature.register(container);\n container.registerDecorator(ContentEntryFormPresenterWorkflowDecorator);\n container.registerDecorator(TableRowMapperWorkflowDecorator);\n container.register(WorkflowStateListEntriesFieldSelection);\n container.register(WorkflowStateGetEntryFieldSelection);\n }\n});\n"],"names":["CmsWorkflowsFeature","createFeature","container","WorkflowsFeature","WorkflowStatePresenterFeature","ContentEntryFormPresenterWorkflowDecorator","TableRowMapperWorkflowDecorator","WorkflowStateListEntriesFieldSelection","WorkflowStateGetEntryFieldSelection"],"mappings":";;;;;;;AAQO,MAAMA,sBAAsBC,cAAc;IAC7C,MAAM;IACN,UAASC,SAAS;QACdC,iBAAiB,QAAQ,CAACD;QAC1BE,8BAA8B,QAAQ,CAACF;QACvCA,UAAU,iBAAiB,CAACG;QAC5BH,UAAU,iBAAiB,CAACI;QAC5BJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;IACvB;AACJ"}
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
+ ContentReviews: Route<undefined>;
10
+ };
11
+ };
package/routes.js ADDED
@@ -0,0 +1,21 @@
1
+ import { Route } from "@webiny/app-admin";
2
+ const Routes = {
3
+ ContentModels: {
4
+ Workflows: new Route({
5
+ name: "Cms/ContentModels/Workflows",
6
+ path: "/cms/workflows",
7
+ params: (zod)=>({
8
+ app: zod.string().optional()
9
+ })
10
+ })
11
+ },
12
+ ContentEntries: {
13
+ ContentReviews: new Route({
14
+ name: "Cms/ContentEntries/WorkflowStateList",
15
+ path: "/cms/content-reviews"
16
+ })
17
+ }
18
+ };
19
+ export { Routes };
20
+
21
+ //# sourceMappingURL=routes.js.map
package/routes.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sources":["../src/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/workflows\",\n params: zod => {\n return {\n app: zod.string().optional()\n };\n }\n })\n },\n ContentEntries: {\n ContentReviews: new Route({\n name: \"Cms/ContentEntries/WorkflowStateList\",\n path: \"/cms/content-reviews\"\n })\n }\n};\n"],"names":["Routes","Route","zod"],"mappings":";AAEO,MAAMA,SAAS;IAClB,eAAe;QACX,WAAW,IAAIC,MAAM;YACjB,MAAM;YACN,MAAM;YACN,QAAQC,CAAAA,MACG;oBACH,KAAKA,IAAI,MAAM,GAAG,QAAQ;gBAC9B;QAER;IACJ;IACA,gBAAgB;QACZ,gBAAgB,IAAID,MAAM;YACtB,MAAM;YACN,MAAM;QACV;IACJ;AACJ"}
package/types.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import type { WorkflowStateValue } from "@webiny/app-workflows/types.js";
2
+ export interface ICmsEntryWorkflowState {
3
+ workflowId: string;
4
+ stepId: string;
5
+ stepName: string;
6
+ state: WorkflowStateValue;
7
+ }
8
+ export interface ICmsEntrySystemWithWorkflow {
9
+ workflow?: ICmsEntryWorkflowState | null;
10
+ }
package/types.js ADDED
File without changes
@@ -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,13 @@
1
+ const createAppName = (model)=>`cms.${model.modelId}`;
2
+ const parseAppName = (appName)=>{
3
+ const parts = appName.split(".");
4
+ if (2 !== parts.length || "cms" !== parts[0]) throw new Error(`Invalid app name: "${appName}".`);
5
+ return parts[1];
6
+ };
7
+ const isCmsAppName = (appName)=>{
8
+ const parts = appName.split(".");
9
+ return 2 === parts.length && "cms" === parts[0];
10
+ };
11
+ export { createAppName, isCmsAppName, parseAppName };
12
+
13
+ //# sourceMappingURL=appName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils/appName.js","sources":["../../src/utils/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"],"names":["createAppName","model","parseAppName","appName","parts","Error","isCmsAppName"],"mappings":"AAEO,MAAMA,gBAAgB,CAACC,QACnB,CAAC,IAAI,EAAEA,MAAM,OAAO,EAAE;AAG1B,MAAMC,eAAe,CAACC;IACzB,MAAMC,QAAQD,QAAQ,KAAK,CAAC;IAC5B,IAAIC,AAAiB,MAAjBA,MAAM,MAAM,IAAUA,AAAa,UAAbA,KAAK,CAAC,EAAE,EAC9B,MAAM,IAAIC,MAAM,CAAC,mBAAmB,EAAEF,QAAQ,EAAE,CAAC;IAErD,OAAOC,KAAK,CAAC,EAAE;AACnB;AAEO,MAAME,eAAe,CAACH;IACzB,MAAMC,QAAQD,QAAQ,KAAK,CAAC;IAC5B,OAAOC,AAAiB,MAAjBA,MAAM,MAAM,IAAUA,AAAa,UAAbA,KAAK,CAAC,EAAE;AACzC"}