@webiny/app-website-builder-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.
- package/Components/OptionItem/OpenInNewWindow.d.ts +2 -0
- package/Components/OptionItem/OpenInNewWindow.js +34 -0
- package/Components/OptionItem/OpenInNewWindow.js.map +1 -0
- package/Components/OptionItem/index.d.ts +1 -0
- package/Components/OptionItem/index.js +1 -0
- package/Components/PageEditor/PageEditorAutoSave.d.ts +2 -0
- package/Components/PageEditor/PageEditorAutoSave.js +22 -0
- package/Components/PageEditor/PageEditorAutoSave.js.map +1 -0
- package/Components/PageEditor/PageEditorConfig.d.ts +2 -0
- package/Components/PageEditor/PageEditorConfig.js +11 -0
- package/Components/PageEditor/PageEditorConfig.js.map +1 -0
- package/Components/PageEditor/PageEditorLayout.d.ts +2 -0
- package/Components/PageEditor/PageEditorLayout.js +26 -0
- package/Components/PageEditor/PageEditorLayout.js.map +1 -0
- package/Components/PageEditor/PageEditorTopBar.d.ts +2 -0
- package/Components/PageEditor/PageEditorTopBar.js +28 -0
- package/Components/PageEditor/PageEditorTopBar.js.map +1 -0
- package/Components/PageEditor/PageFormWorkflowState.d.ts +4 -0
- package/Components/PageEditor/PageFormWorkflowState.js +18 -0
- package/Components/PageEditor/PageFormWorkflowState.js.map +1 -0
- package/Components/PageEditor/PageFormWorkflowStatePublishButton.d.ts +2 -0
- package/Components/PageEditor/PageFormWorkflowStatePublishButton.js +22 -0
- package/Components/PageEditor/PageFormWorkflowStatePublishButton.js.map +1 -0
- package/Components/PageEditor/PageFormWorkflowStateTooltip.d.ts +2 -0
- package/Components/PageEditor/PageFormWorkflowStateTooltip.js +14 -0
- package/Components/PageEditor/PageFormWorkflowStateTooltip.js.map +1 -0
- package/Components/PageEditor/ToggleEditorMode.d.ts +3 -0
- package/Components/PageEditor/ToggleEditorMode.js +21 -0
- package/Components/PageEditor/ToggleEditorMode.js.map +1 -0
- package/Components/PageWorkflows/PageWorkflowsEditorView.d.ts +3 -0
- package/Components/PageWorkflows/PageWorkflowsEditorView.js +54 -0
- package/Components/PageWorkflows/PageWorkflowsEditorView.js.map +1 -0
- package/Components/PageWorkflows/index.d.ts +1 -0
- package/Components/PageWorkflows/index.js +1 -0
- package/Components/PagesList/PageListChangeStatus.d.ts +2 -0
- package/Components/PagesList/PageListChangeStatus.js +23 -0
- package/Components/PagesList/PageListChangeStatus.js.map +1 -0
- package/Components/PagesList/PagesList.d.ts +2 -0
- package/Components/PagesList/PagesList.js +8 -0
- package/Components/PagesList/PagesList.js.map +1 -0
- package/Components/PagesList/PagesListContentReviews.d.ts +2 -0
- package/Components/PagesList/PagesListContentReviews.js +26 -0
- package/Components/PagesList/PagesListContentReviews.js.map +1 -0
- package/Components/PagesList/index.d.ts +1 -0
- package/Components/PagesList/index.js +1 -0
- package/Components/index.d.ts +3 -0
- package/Components/index.js +3 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.d.ts +2 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.js +32 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.js.map +1 -0
- package/Routes/index.d.ts +1 -0
- package/Routes/index.js +1 -0
- package/constants.d.ts +1 -0
- package/constants.js +4 -0
- package/constants.js.map +1 -0
- package/hooks/usePage.d.ts +5 -0
- package/hooks/usePage.js +15 -0
- package/hooks/usePage.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +14 -0
- package/index.js.map +1 -0
- package/package.json +46 -0
- package/presentation/page/PageGet/WorkflowStatesGetPageGraphQLFieldSelection.d.ts +8 -0
- package/presentation/page/PageGet/WorkflowStatesGetPageGraphQLFieldSelection.js +22 -0
- package/presentation/page/PageGet/WorkflowStatesGetPageGraphQLFieldSelection.js.map +1 -0
- package/presentation/page/PageGet/feature.d.ts +1 -0
- package/presentation/page/PageGet/feature.js +11 -0
- package/presentation/page/PageGet/feature.js.map +1 -0
- package/presentation/page/PageList/TableRowMapperDecorator.d.ts +12 -0
- package/presentation/page/PageList/TableRowMapperDecorator.js +24 -0
- package/presentation/page/PageList/TableRowMapperDecorator.js.map +1 -0
- package/presentation/page/PageList/WorkflowStateListPagesFieldSelection.d.ts +8 -0
- package/presentation/page/PageList/WorkflowStateListPagesFieldSelection.js +22 -0
- package/presentation/page/PageList/WorkflowStateListPagesFieldSelection.js.map +1 -0
- package/presentation/page/PageList/feature.d.ts +1 -0
- package/presentation/page/PageList/feature.js +13 -0
- package/presentation/page/PageList/feature.js.map +1 -0
- package/routes.d.ts +9 -0
- package/routes.js +19 -0
- package/routes.js.map +1 -0
- package/types.d.ts +15 -0
- package/types.js +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import react, { useCallback } from "react";
|
|
2
|
+
import { DropdownMenu, Icon } from "@webiny/admin-ui";
|
|
3
|
+
import { Components } from "@webiny/app-workflows";
|
|
4
|
+
import { ReactComponent } from "@webiny/icons/open_in_new.svg";
|
|
5
|
+
import { useRouter } from "@webiny/app";
|
|
6
|
+
import { Routes } from "@webiny/app-website-builder/routes.js";
|
|
7
|
+
import { WB_PAGE_APP } from "../../constants.js";
|
|
8
|
+
const { OpenInNewWindow: OpenInNewWindow } = Components.List.Options;
|
|
9
|
+
const OpenInNewWindow_ListOpenInNewWindow = OpenInNewWindow.createDecorator((Original)=>function(props) {
|
|
10
|
+
const { state } = props;
|
|
11
|
+
const { getLink } = useRouter();
|
|
12
|
+
const onClick = useCallback(()=>{
|
|
13
|
+
const url = getLink(Routes.Pages.Editor, {
|
|
14
|
+
id: state.targetRevisionId,
|
|
15
|
+
folderId: "root"
|
|
16
|
+
});
|
|
17
|
+
const goTo = `${window.location.origin}${url}`;
|
|
18
|
+
window.open(goTo, "_blank");
|
|
19
|
+
}, [
|
|
20
|
+
state.id
|
|
21
|
+
]);
|
|
22
|
+
if (state.app !== WB_PAGE_APP) return /*#__PURE__*/ react.createElement(Original, props);
|
|
23
|
+
return /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
|
|
24
|
+
icon: /*#__PURE__*/ react.createElement(Icon, {
|
|
25
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
26
|
+
label: "Open In New Window"
|
|
27
|
+
}),
|
|
28
|
+
text: "Open in New Window",
|
|
29
|
+
onClick: onClick
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
export { OpenInNewWindow_ListOpenInNewWindow as ListOpenInNewWindow };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=OpenInNewWindow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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-website-builder/routes.js\";\nimport { WB_PAGE_APP } from \"~/constants.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 url = getLink(Routes.Pages.Editor, {\n id: state.targetRevisionId,\n folderId: \"root\"\n });\n\n const goTo = `${window.location.origin}${url}`;\n\n window.open(goTo, \"_blank\");\n }, [state.id]);\n\n if (state.app !== WB_PAGE_APP) {\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","url","Routes","goTo","window","WB_PAGE_APP","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,MAAMJ,QAAQK,OAAO,KAAK,CAAC,MAAM,EAAE;gBACrC,IAAIN,MAAM,gBAAgB;gBAC1B,UAAU;YACd;YAEA,MAAMO,OAAO,GAAGC,OAAO,QAAQ,CAAC,MAAM,GAAGH,KAAK;YAE9CG,OAAO,IAAI,CAACD,MAAM;QACtB,GAAG;YAACP,MAAM,EAAE;SAAC;QAEb,IAAIA,MAAM,GAAG,KAAKS,aACd,OAAO,WAAP,GAAO,oBAACX,UAAaC;QAGzB,OAAO,WAAP,GACI,oBAACW,aAAa,IAAI;YACd,oBAAM,oBAACC,MAAIA;gBAAC,oBAAM,oBAACC,gBAAaA;gBAAK,OAAO;;YAC5C,MAAM;YACN,SAAST;;IAGrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ListOpenInNewWindow } from "./OpenInNewWindow.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ListOpenInNewWindow } from "./OpenInNewWindow.js";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { PageEditorConfig } from "@webiny/app-website-builder";
|
|
3
|
+
import { useWorkflowState } from "@webiny/app-workflows";
|
|
4
|
+
import { observer } from "mobx-react-lite";
|
|
5
|
+
const { Ui: Ui } = PageEditorConfig;
|
|
6
|
+
const WrappedAutoSave = observer((props)=>{
|
|
7
|
+
const { presenter } = useWorkflowState();
|
|
8
|
+
if (!presenter.vm.hasState) return props.element;
|
|
9
|
+
return null;
|
|
10
|
+
});
|
|
11
|
+
const PageEditorAutoSave = Ui.TopBar.Element.createDecorator((Original)=>function(props) {
|
|
12
|
+
if ("autoSave" === props.name) return /*#__PURE__*/ react.createElement(Original, {
|
|
13
|
+
...props,
|
|
14
|
+
element: /*#__PURE__*/ react.createElement(WrappedAutoSave, {
|
|
15
|
+
element: props.element
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
return /*#__PURE__*/ react.createElement(Original, props);
|
|
19
|
+
});
|
|
20
|
+
export { PageEditorAutoSave };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=PageEditorAutoSave.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageEditor/PageEditorAutoSave.js","sources":["../../../src/Components/PageEditor/PageEditorAutoSave.tsx"],"sourcesContent":["import React from \"react\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { observer } from \"mobx-react-lite\";\n\nconst { Ui } = PageEditorConfig;\n\ninterface IWrappedAutoSave {\n element?: React.ReactElement | null;\n}\nconst WrappedAutoSave = observer((props: IWrappedAutoSave) => {\n const { presenter } = useWorkflowState();\n /**\n * Autosave should work only when the page does not have a workflow state assigned.\n */\n if (!presenter.vm.hasState) {\n return props.element;\n }\n\n return null;\n});\n\nexport const PageEditorAutoSave = Ui.TopBar.Element.createDecorator(Original => {\n return function PageEditorAutoSaveDecorated(props) {\n if (props.name === \"autoSave\") {\n return <Original {...props} element={<WrappedAutoSave element={props.element} />} />;\n }\n return <Original {...props} />;\n };\n});\n"],"names":["Ui","PageEditorConfig","WrappedAutoSave","observer","props","presenter","useWorkflowState","PageEditorAutoSave","Original"],"mappings":";;;;AAKA,MAAM,EAAEA,IAAAA,EAAE,EAAE,GAAGC;AAKf,MAAMC,kBAAkBC,SAAS,CAACC;IAC9B,MAAM,EAAEC,SAAS,EAAE,GAAGC;IAItB,IAAI,CAACD,UAAU,EAAE,CAAC,QAAQ,EACtB,OAAOD,MAAM,OAAO;IAGxB,OAAO;AACX;AAEO,MAAMG,qBAAqBP,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAACQ,CAAAA,WACzD,SAAqCJ,KAAK;QAC7C,IAAIA,AAAe,eAAfA,MAAM,IAAI,EACV,OAAO,WAAP,GAAO,oBAACI,UAAAA;YAAU,GAAGJ,KAAK;YAAE,uBAAS,oBAACF,iBAAeA;gBAAC,SAASE,MAAM,OAAO;;;QAEhF,OAAO,WAAP,GAAO,oBAACI,UAAaJ;IACzB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { PageEditorConfig } from "@webiny/app-website-builder";
|
|
3
|
+
import { PageFormWorkflowStateTooltip } from "./PageFormWorkflowStateTooltip.js";
|
|
4
|
+
import { PageFormWorkflowStatePublishButton } from "./PageFormWorkflowStatePublishButton.js";
|
|
5
|
+
import { PageEditorTopBar } from "./PageEditorTopBar.js";
|
|
6
|
+
import { PageEditorLayout } from "./PageEditorLayout.js";
|
|
7
|
+
import { PageEditorAutoSave } from "./PageEditorAutoSave.js";
|
|
8
|
+
const PageEditorConfig_PageEditorConfig = ()=>/*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(PageEditorTopBar, null), /*#__PURE__*/ react.createElement(PageEditorLayout, null), /*#__PURE__*/ react.createElement(PageEditorAutoSave, null), /*#__PURE__*/ react.createElement(PageEditorConfig, null, /*#__PURE__*/ react.createElement(PageFormWorkflowStateTooltip, null), /*#__PURE__*/ react.createElement(PageFormWorkflowStatePublishButton, null)));
|
|
9
|
+
export { PageEditorConfig_PageEditorConfig as PageEditorConfig };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=PageEditorConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageEditor/PageEditorConfig.js","sources":["../../../src/Components/PageEditor/PageEditorConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { PageEditorConfig as BaseConfig } from \"@webiny/app-website-builder\";\nimport { PageFormWorkflowStateTooltip } from \"./PageFormWorkflowStateTooltip.js\";\nimport { PageFormWorkflowStatePublishButton } from \"./PageFormWorkflowStatePublishButton.js\";\nimport { PageEditorTopBar } from \"./PageEditorTopBar.js\";\nimport { PageEditorLayout } from \"./PageEditorLayout.js\";\nimport { PageEditorAutoSave } from \"./PageEditorAutoSave.js\";\n\nexport const PageEditorConfig = () => {\n return (\n <>\n {/* Toggle editor \"readonly\" mode, and add workflow alerts */}\n <PageEditorTopBar />\n <PageEditorLayout />\n <PageEditorAutoSave />\n <BaseConfig>\n {/* Should add a button with list of steps and their states + comment button in each row */}\n <PageFormWorkflowStateTooltip />\n {/* should remove publish button from the form */}\n <PageFormWorkflowStatePublishButton />\n </BaseConfig>\n </>\n );\n};\n"],"names":["PageEditorConfig","PageEditorTopBar","PageEditorLayout","PageEditorAutoSave","BaseConfig","PageFormWorkflowStateTooltip","PageFormWorkflowStatePublishButton"],"mappings":";;;;;;;AAQO,MAAMA,oCAAmB,IACrB,WAAP,GACI,wDAEI,oBAACC,kBAAgBA,OAAAA,WAAAA,GACjB,oBAACC,kBAAgBA,OAAAA,WAAAA,GACjB,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAACC,kBAAUA,MAAAA,WAAAA,GAEP,oBAACC,8BAA4BA,OAAAA,WAAAA,GAE7B,oBAACC,oCAAkCA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import react, { useEffect } from "react";
|
|
2
|
+
import { useWorkflowState } from "@webiny/app-workflows";
|
|
3
|
+
import { PageEditorConfig } from "@webiny/app-website-builder";
|
|
4
|
+
import { observer } from "mobx-react-lite";
|
|
5
|
+
import { useDocumentEditor } from "@webiny/app-website-builder/DocumentEditor/index.js";
|
|
6
|
+
const { Ui: Ui } = PageEditorConfig;
|
|
7
|
+
const ToggleReadonly = observer(()=>{
|
|
8
|
+
const { presenter } = useWorkflowState();
|
|
9
|
+
const editor = useDocumentEditor();
|
|
10
|
+
const hasState = presenter.vm.hasState;
|
|
11
|
+
useEffect(()=>{
|
|
12
|
+
const options = editor.getEditorOptions();
|
|
13
|
+
editor.updateEditor((state)=>{
|
|
14
|
+
state.isReadOnly = options.isReadOnly || hasState;
|
|
15
|
+
});
|
|
16
|
+
}, [
|
|
17
|
+
hasState
|
|
18
|
+
]);
|
|
19
|
+
return null;
|
|
20
|
+
});
|
|
21
|
+
const PageEditorLayout = Ui.Layout.createDecorator((Original)=>function() {
|
|
22
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Original, null), /*#__PURE__*/ react.createElement(ToggleReadonly, null));
|
|
23
|
+
});
|
|
24
|
+
export { PageEditorLayout };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=PageEditorLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageEditor/PageEditorLayout.js","sources":["../../../src/Components/PageEditor/PageEditorLayout.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder\";\nimport { observer } from \"mobx-react-lite\";\nimport { useDocumentEditor } from \"@webiny/app-website-builder/DocumentEditor/index.js\";\n\nconst { Ui } = PageEditorConfig;\n\nconst ToggleReadonly = observer(() => {\n const { presenter } = useWorkflowState();\n const editor = useDocumentEditor();\n\n const hasState = presenter.vm.hasState;\n\n useEffect(() => {\n const options = editor.getEditorOptions();\n editor.updateEditor(state => {\n state.isReadOnly = options.isReadOnly || hasState;\n });\n }, [hasState]);\n\n return null;\n});\n\nexport const PageEditorLayout = Ui.Layout.createDecorator(Original => {\n return function PageEditorLayoutWorkflowsState() {\n return (\n <>\n <Original />\n <ToggleReadonly />\n </>\n );\n };\n});\n"],"names":["Ui","PageEditorConfig","ToggleReadonly","observer","presenter","useWorkflowState","editor","useDocumentEditor","hasState","useEffect","options","state","PageEditorLayout","Original"],"mappings":";;;;;AAMA,MAAM,EAAEA,IAAAA,EAAE,EAAE,GAAGC;AAEf,MAAMC,iBAAiBC,SAAS;IAC5B,MAAM,EAAEC,SAAS,EAAE,GAAGC;IACtB,MAAMC,SAASC;IAEf,MAAMC,WAAWJ,UAAU,EAAE,CAAC,QAAQ;IAEtCK,UAAU;QACN,MAAMC,UAAUJ,OAAO,gBAAgB;QACvCA,OAAO,YAAY,CAACK,CAAAA;YAChBA,MAAM,UAAU,GAAGD,QAAQ,UAAU,IAAIF;QAC7C;IACJ,GAAG;QAACA;KAAS;IAEb,OAAO;AACX;AAEO,MAAMI,mBAAmBZ,GAAG,MAAM,CAAC,eAAe,CAACa,CAAAA,WAC/C;QACH,OAAO,WAAP,GACI,wDACI,oBAACA,UAAAA,OAAAA,WAAAA,GACD,oBAACX,gBAAcA;IAG3B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import react, { useEffect } from "react";
|
|
2
|
+
import { PageEditorConfig } from "@webiny/app-website-builder";
|
|
3
|
+
import { useSelectFromDocument } from "@webiny/app-website-builder/BaseEditor/hooks/useSelectFromDocument.js";
|
|
4
|
+
import { useWorkflowState } from "@webiny/app-workflows";
|
|
5
|
+
import { WB_PAGE_APP } from "../../constants.js";
|
|
6
|
+
import { PageFormWorkflowState } from "./PageFormWorkflowState.js";
|
|
7
|
+
import { ToggleEditorMode } from "./ToggleEditorMode.js";
|
|
8
|
+
import { WbPageStatus } from "@webiny/app-website-builder/constants.js";
|
|
9
|
+
const { Ui: Ui } = PageEditorConfig;
|
|
10
|
+
const PageEditorTopBar = Ui.TopBar.Layout.createDecorator((Original)=>function() {
|
|
11
|
+
const page = useSelectFromDocument((doc)=>({
|
|
12
|
+
id: doc.id,
|
|
13
|
+
title: doc.properties.title || "unknown page",
|
|
14
|
+
status: doc.status || "draft"
|
|
15
|
+
}));
|
|
16
|
+
const { presenter } = useWorkflowState();
|
|
17
|
+
useEffect(()=>{
|
|
18
|
+
if (page.status === WbPageStatus.Draft) presenter.init(WB_PAGE_APP, page.id, `Website Builder: ${page.title}`);
|
|
19
|
+
return ()=>presenter.dispose();
|
|
20
|
+
}, [
|
|
21
|
+
page.id,
|
|
22
|
+
page.status
|
|
23
|
+
]);
|
|
24
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Original, null), /*#__PURE__*/ react.createElement(ToggleEditorMode, null), /*#__PURE__*/ react.createElement(PageFormWorkflowState, null));
|
|
25
|
+
});
|
|
26
|
+
export { PageEditorTopBar };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=PageEditorTopBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageEditor/PageEditorTopBar.js","sources":["../../../src/Components/PageEditor/PageEditorTopBar.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder\";\nimport {\n type EditorDocument,\n useSelectFromDocument\n} from \"@webiny/app-website-builder/BaseEditor/hooks/useSelectFromDocument.js\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { WB_PAGE_APP } from \"~/constants.js\";\nimport { PageFormWorkflowState } from \"~/Components/PageEditor/PageFormWorkflowState.js\";\nimport { ToggleEditorMode } from \"~/Components/PageEditor/ToggleEditorMode.js\";\nimport { WbPageStatus, type WbStatus } from \"@webiny/app-website-builder/constants.js\";\n\nconst { Ui } = PageEditorConfig;\n\ninterface PageEditorTopBarEditorDocument extends EditorDocument {\n status: WbStatus;\n}\n\ninterface ISelectedPage {\n id: string;\n title: string;\n status: WbStatus;\n}\n\nexport const PageEditorTopBar = Ui.TopBar.Layout.createDecorator(Original => {\n return function PageEditorTopBarWorkflowsState() {\n const page = useSelectFromDocument<ISelectedPage, PageEditorTopBarEditorDocument>(doc => {\n return {\n id: doc.id,\n title: doc.properties.title || \"unknown page\",\n status: doc.status || \"draft\"\n };\n });\n\n const { presenter } = useWorkflowState();\n\n useEffect(() => {\n if (page.status === WbPageStatus.Draft) {\n presenter.init(WB_PAGE_APP, page.id, `Website Builder: ${page.title}`);\n }\n return () => presenter.dispose();\n }, [page.id, page.status]);\n\n return (\n <>\n <Original />\n <ToggleEditorMode />\n <PageFormWorkflowState />\n </>\n );\n };\n});\n"],"names":["Ui","PageEditorConfig","PageEditorTopBar","Original","page","useSelectFromDocument","doc","presenter","useWorkflowState","useEffect","WbPageStatus","WB_PAGE_APP","ToggleEditorMode","PageFormWorkflowState"],"mappings":";;;;;;;;AAYA,MAAM,EAAEA,IAAAA,EAAE,EAAE,GAAGC;AAYR,MAAMC,mBAAmBF,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAACG,CAAAA,WACtD;QACH,MAAMC,OAAOC,sBAAqEC,CAAAA,MACvE;gBACH,IAAIA,IAAI,EAAE;gBACV,OAAOA,IAAI,UAAU,CAAC,KAAK,IAAI;gBAC/B,QAAQA,IAAI,MAAM,IAAI;YAC1B;QAGJ,MAAM,EAAEC,SAAS,EAAE,GAAGC;QAEtBC,UAAU;YACN,IAAIL,KAAK,MAAM,KAAKM,aAAa,KAAK,EAClCH,UAAU,IAAI,CAACI,aAAaP,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAEA,KAAK,KAAK,EAAE;YAEzE,OAAO,IAAMG,UAAU,OAAO;QAClC,GAAG;YAACH,KAAK,EAAE;YAAEA,KAAK,MAAM;SAAC;QAEzB,OAAO,WAAP,GACI,wDACI,oBAACD,UAAAA,OAAAA,WAAAA,GACD,oBAACS,kBAAgBA,OAAAA,WAAAA,GACjB,oBAACC,uBAAqBA;IAGlC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { observer } from "mobx-react-lite";
|
|
3
|
+
import { Alert } from "@webiny/admin-ui";
|
|
4
|
+
import { Components, useWorkflowState } from "@webiny/app-workflows";
|
|
5
|
+
const { ContentReview: { WorkflowStateBar: WorkflowStateBar } } = Components;
|
|
6
|
+
const PageFormWorkflowState = observer(()=>{
|
|
7
|
+
const { presenter } = useWorkflowState();
|
|
8
|
+
return /*#__PURE__*/ react.createElement("div", {
|
|
9
|
+
className: "max-w-screen bg-white p-sm border-solid border-b-sm border-neutral-dimmed",
|
|
10
|
+
"data-affects-preview": "height"
|
|
11
|
+
}, /*#__PURE__*/ react.createElement(WorkflowStateBar, null), presenter.vm.hasState ? /*#__PURE__*/ react.createElement(Alert, {
|
|
12
|
+
type: "danger",
|
|
13
|
+
className: "mt-sm"
|
|
14
|
+
}, "Any changes you do on the page will not be stored!") : null);
|
|
15
|
+
});
|
|
16
|
+
export { PageFormWorkflowState };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=PageFormWorkflowState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageEditor/PageFormWorkflowState.js","sources":["../../../src/Components/PageEditor/PageFormWorkflowState.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Alert } from \"@webiny/admin-ui\";\nimport { Components, useWorkflowState } from \"@webiny/app-workflows\";\n\nconst {\n ContentReview: { WorkflowStateBar }\n} = Components;\n\nexport const PageFormWorkflowState = observer(() => {\n const { presenter } = useWorkflowState();\n\n return (\n <div\n className={\"max-w-screen bg-white p-sm border-solid border-b-sm border-neutral-dimmed\"}\n data-affects-preview={\"height\"}\n >\n <WorkflowStateBar />\n {presenter.vm.hasState ? (\n <Alert type=\"danger\" className={\"mt-sm\"}>\n Any changes you do on the page will not be stored!\n </Alert>\n ) : null}\n </div>\n );\n});\n"],"names":["WorkflowStateBar","Components","PageFormWorkflowState","observer","presenter","useWorkflowState","Alert"],"mappings":";;;;AAKA,MAAM,EACF,eAAe,EAAEA,kBAAAA,gBAAgB,EAAE,EACtC,GAAGC;AAEG,MAAMC,wBAAwBC,SAAS;IAC1C,MAAM,EAAEC,SAAS,EAAE,GAAGC;IAEtB,OAAO,WAAP,GACI,oBAAC;QACG,WAAW;QACX,wBAAsB;qBAEtB,oBAACL,kBAAgBA,OAChBI,UAAU,EAAE,CAAC,QAAQ,GAAG,WAAH,GAClB,oBAACE,OAAKA;QAAC,MAAK;QAAS,WAAW;OAAS,wDAGzC;AAGhB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { PageEditorConfig } from "@webiny/app-website-builder";
|
|
3
|
+
import { useWorkflowState } from "@webiny/app-workflows";
|
|
4
|
+
import { observer } from "mobx-react-lite";
|
|
5
|
+
const { Ui: Ui } = PageEditorConfig;
|
|
6
|
+
const WrappedPublishButton = observer((props)=>{
|
|
7
|
+
const { presenter } = useWorkflowState();
|
|
8
|
+
if (!presenter.vm.hasWorkflow || presenter.vm.isApproved) return props.element;
|
|
9
|
+
return null;
|
|
10
|
+
});
|
|
11
|
+
const PageFormWorkflowStatePublishButton = Ui.TopBar.Action.createDecorator((Original)=>function(props) {
|
|
12
|
+
if ("buttonPublish" === props.name) return /*#__PURE__*/ react.createElement(Original, {
|
|
13
|
+
...props,
|
|
14
|
+
element: /*#__PURE__*/ react.createElement(WrappedPublishButton, {
|
|
15
|
+
element: props.element
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
return /*#__PURE__*/ react.createElement(Original, props);
|
|
19
|
+
});
|
|
20
|
+
export { PageFormWorkflowStatePublishButton };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=PageFormWorkflowStatePublishButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageEditor/PageFormWorkflowStatePublishButton.js","sources":["../../../src/Components/PageEditor/PageFormWorkflowStatePublishButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { observer } from \"mobx-react-lite\";\n\nconst { Ui } = PageEditorConfig;\n\ninterface IWrappedPublishButtonProps {\n element?: React.ReactElement | null;\n}\n\nconst WrappedPublishButton = observer((props: IWrappedPublishButtonProps) => {\n const { presenter } = useWorkflowState();\n /**\n * Publish button should be visible only when there is no workflow available and when workflow state is approved.\n */\n if (!presenter.vm.hasWorkflow || presenter.vm.isApproved) {\n return props.element;\n }\n\n return null;\n});\n\nexport const PageFormWorkflowStatePublishButton = Ui.TopBar.Action.createDecorator(Original => {\n return function AutoSaveDecorator(props) {\n if (props.name === \"buttonPublish\") {\n return (\n <Original {...props} element={<WrappedPublishButton element={props.element} />} />\n );\n }\n return <Original {...props} />;\n };\n});\n"],"names":["Ui","PageEditorConfig","WrappedPublishButton","observer","props","presenter","useWorkflowState","PageFormWorkflowStatePublishButton","Original"],"mappings":";;;;AAKA,MAAM,EAAEA,IAAAA,EAAE,EAAE,GAAGC;AAMf,MAAMC,uBAAuBC,SAAS,CAACC;IACnC,MAAM,EAAEC,SAAS,EAAE,GAAGC;IAItB,IAAI,CAACD,UAAU,EAAE,CAAC,WAAW,IAAIA,UAAU,EAAE,CAAC,UAAU,EACpD,OAAOD,MAAM,OAAO;IAGxB,OAAO;AACX;AAEO,MAAMG,qCAAqCP,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAACQ,CAAAA,WACxE,SAA2BJ,KAAK;QACnC,IAAIA,AAAe,oBAAfA,MAAM,IAAI,EACV,OAAO,WAAP,GACI,oBAACI,UAAAA;YAAU,GAAGJ,KAAK;YAAE,uBAAS,oBAACF,sBAAoBA;gBAAC,SAASE,MAAM,OAAO;;;QAGlF,OAAO,WAAP,GAAO,oBAACI,UAAaJ;IACzB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { Components } from "@webiny/app-workflows";
|
|
3
|
+
import { PageEditorConfig } from "@webiny/app-website-builder";
|
|
4
|
+
const { ContentReview: { WorkflowStateTooltip: WorkflowStateTooltip } } = Components;
|
|
5
|
+
const { Ui: Ui } = PageEditorConfig;
|
|
6
|
+
const TooltipButton = ()=>/*#__PURE__*/ react.createElement(WorkflowStateTooltip, null);
|
|
7
|
+
const PageFormWorkflowStateTooltip = ()=>/*#__PURE__*/ react.createElement(Ui.TopBar.Action, {
|
|
8
|
+
before: "buttonPublish",
|
|
9
|
+
name: "buttonWorkflowStateTooltip",
|
|
10
|
+
element: /*#__PURE__*/ react.createElement(TooltipButton, null)
|
|
11
|
+
});
|
|
12
|
+
export { PageFormWorkflowStateTooltip };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=PageFormWorkflowStateTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageEditor/PageFormWorkflowStateTooltip.js","sources":["../../../src/Components/PageEditor/PageFormWorkflowStateTooltip.tsx"],"sourcesContent":["import React from \"react\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder\";\n\nconst {\n ContentReview: { WorkflowStateTooltip }\n} = Components;\n\nconst { Ui } = PageEditorConfig;\n\nconst TooltipButton = () => {\n return <WorkflowStateTooltip />;\n};\n\nexport const PageFormWorkflowStateTooltip = () => {\n return (\n <Ui.TopBar.Action\n before={\"buttonPublish\"}\n name={\"buttonWorkflowStateTooltip\"}\n element={<TooltipButton />}\n />\n );\n};\n"],"names":["WorkflowStateTooltip","Components","Ui","PageEditorConfig","TooltipButton","PageFormWorkflowStateTooltip"],"mappings":";;;AAIA,MAAM,EACF,eAAe,EAAEA,sBAAAA,oBAAoB,EAAE,EAC1C,GAAGC;AAEJ,MAAM,EAAEC,IAAAA,EAAE,EAAE,GAAGC;AAEf,MAAMC,gBAAgB,IACX,WAAP,GAAO,oBAACJ,sBAAoBA;AAGzB,MAAMK,+BAA+B,IACjC,WAAP,GACI,oBAACH,GAAG,MAAM,CAAC,MAAM;QACb,QAAQ;QACR,MAAM;QACN,uBAAS,oBAACE,eAAaA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { observer } from "mobx-react-lite";
|
|
3
|
+
import { useWorkflowState } from "@webiny/app-workflows";
|
|
4
|
+
import { useDocumentEditor } from "@webiny/app-website-builder/DocumentEditor/index.js";
|
|
5
|
+
const ToggleEditorMode = observer(()=>{
|
|
6
|
+
const { presenter } = useWorkflowState();
|
|
7
|
+
const editor = useDocumentEditor();
|
|
8
|
+
const hasState = presenter.vm.hasState;
|
|
9
|
+
useEffect(()=>{
|
|
10
|
+
const options = editor.getEditorOptions();
|
|
11
|
+
editor.updateEditor((state)=>{
|
|
12
|
+
state.isReadOnly = options.isReadOnly || hasState;
|
|
13
|
+
});
|
|
14
|
+
}, [
|
|
15
|
+
hasState
|
|
16
|
+
]);
|
|
17
|
+
return null;
|
|
18
|
+
});
|
|
19
|
+
export { ToggleEditorMode };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=ToggleEditorMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageEditor/ToggleEditorMode.js","sources":["../../../src/Components/PageEditor/ToggleEditorMode.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { useDocumentEditor } from \"@webiny/app-website-builder/DocumentEditor/index.js\";\n\nexport const ToggleEditorMode = observer(() => {\n const { presenter } = useWorkflowState();\n const editor = useDocumentEditor();\n\n const hasState = presenter.vm.hasState;\n\n useEffect(() => {\n const options = editor.getEditorOptions();\n editor.updateEditor(state => {\n state.isReadOnly = options.isReadOnly || hasState;\n });\n }, [hasState]);\n\n return null;\n});\n"],"names":["ToggleEditorMode","observer","presenter","useWorkflowState","editor","useDocumentEditor","hasState","useEffect","options","state"],"mappings":";;;;AAKO,MAAMA,mBAAmBC,SAAS;IACrC,MAAM,EAAEC,SAAS,EAAE,GAAGC;IACtB,MAAMC,SAASC;IAEf,MAAMC,WAAWJ,UAAU,EAAE,CAAC,QAAQ;IAEtCK,UAAU;QACN,MAAMC,UAAUJ,OAAO,gBAAgB;QACvCA,OAAO,YAAY,CAACK,CAAAA;YAChBA,MAAM,UAAU,GAAGD,QAAQ,UAAU,IAAIF;QAC7C;IACJ,GAAG;QAACA;KAAS;IAEb,OAAO;AACX"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import react, { useCallback, useMemo } from "react";
|
|
2
|
+
import { AdminConfig, useRoute, useRouter } from "@webiny/app-admin";
|
|
3
|
+
import { Routes } from "../../routes.js";
|
|
4
|
+
import { Components } from "@webiny/app-workflows";
|
|
5
|
+
import { Icon } from "@webiny/admin-ui";
|
|
6
|
+
import { ReactComponent } from "@webiny/icons/workspaces.svg";
|
|
7
|
+
import { WB_PAGE_APP } from "../../constants.js";
|
|
8
|
+
const { Admin: { WorkflowsEditor: WorkflowsEditor } } = Components;
|
|
9
|
+
const { Menu: Menu } = AdminConfig;
|
|
10
|
+
const PageWorkflowsEditorMenu = ()=>{
|
|
11
|
+
const router = useRouter();
|
|
12
|
+
return /*#__PURE__*/ react.createElement(Menu, {
|
|
13
|
+
name: "websiteBuilder.pages.workflows",
|
|
14
|
+
pinnable: true,
|
|
15
|
+
parent: "wb",
|
|
16
|
+
element: /*#__PURE__*/ react.createElement(Menu.Link, {
|
|
17
|
+
text: "Workflows",
|
|
18
|
+
to: router.getLink(Routes.Pages.Workflows)
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
const PageWorkflowsEditorView = ()=>{
|
|
23
|
+
const { route } = useRoute(Routes.Pages.Workflows);
|
|
24
|
+
const { goToRoute } = useRouter();
|
|
25
|
+
const apps = useMemo(()=>[
|
|
26
|
+
{
|
|
27
|
+
id: WB_PAGE_APP,
|
|
28
|
+
name: "Pages",
|
|
29
|
+
icon: /*#__PURE__*/ react.createElement(Icon, {
|
|
30
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
31
|
+
label: "Pages Workflows"
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
], []);
|
|
35
|
+
const onAppClick = useCallback((id)=>{
|
|
36
|
+
goToRoute(Routes.Pages.Workflows, {
|
|
37
|
+
app: id
|
|
38
|
+
});
|
|
39
|
+
}, [
|
|
40
|
+
apps
|
|
41
|
+
]);
|
|
42
|
+
const app = useMemo(()=>apps.find((a)=>a.id === route.params.app) || apps[0], [
|
|
43
|
+
route.params.app,
|
|
44
|
+
apps
|
|
45
|
+
]);
|
|
46
|
+
return /*#__PURE__*/ react.createElement(WorkflowsEditor, {
|
|
47
|
+
apps: apps,
|
|
48
|
+
onAppClick: onAppClick,
|
|
49
|
+
app: app.id
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
export { PageWorkflowsEditorMenu, PageWorkflowsEditorView };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=PageWorkflowsEditorView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageWorkflows/PageWorkflowsEditorView.js","sources":["../../../src/Components/PageWorkflows/PageWorkflowsEditorView.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport { AdminConfig, useRoute, useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\nimport type { IWorkflowApplication } from \"@webiny/app-workflows\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { Icon } from \"@webiny/admin-ui\";\nimport { ReactComponent as WorkflowsIcon } from \"@webiny/icons/workspaces.svg\";\nimport { WB_PAGE_APP } from \"~/constants.js\";\n\nconst {\n Admin: { WorkflowsEditor }\n} = Components;\n\nconst { Menu } = AdminConfig;\n\nexport const PageWorkflowsEditorMenu = () => {\n const router = useRouter();\n\n return (\n <Menu\n name={\"websiteBuilder.pages.workflows\"}\n pinnable={true}\n parent={\"wb\"}\n element={<Menu.Link text={\"Workflows\"} to={router.getLink(Routes.Pages.Workflows)} />}\n />\n );\n};\n\nexport const PageWorkflowsEditorView = () => {\n const { route } = useRoute(Routes.Pages.Workflows);\n const { goToRoute } = useRouter();\n\n const apps = useMemo<IWorkflowApplication[]>(() => {\n return [\n {\n id: WB_PAGE_APP,\n name: \"Pages\",\n icon: <Icon icon={<WorkflowsIcon />} label={\"Pages Workflows\"} />\n }\n ];\n }, []);\n\n const onAppClick = useCallback(\n (id: string) => {\n goToRoute(Routes.Pages.Workflows, {\n app: id\n });\n },\n [apps]\n );\n\n const app = useMemo(() => {\n return apps.find(a => a.id === route.params.app) || apps[0];\n }, [route.params.app, apps]);\n\n return <WorkflowsEditor apps={apps} onAppClick={onAppClick} app={app.id} />;\n};\n"],"names":["WorkflowsEditor","Components","Menu","AdminConfig","PageWorkflowsEditorMenu","router","useRouter","Routes","PageWorkflowsEditorView","route","useRoute","goToRoute","apps","useMemo","WB_PAGE_APP","Icon","WorkflowsIcon","onAppClick","useCallback","id","app","a"],"mappings":";;;;;;;AASA,MAAM,EACF,OAAO,EAAEA,iBAAAA,eAAe,EAAE,EAC7B,GAAGC;AAEJ,MAAM,EAAEC,MAAAA,IAAI,EAAE,GAAGC;AAEV,MAAMC,0BAA0B;IACnC,MAAMC,SAASC;IAEf,OAAO,WAAP,GACI,oBAACJ,MAAIA;QACD,MAAM;QACN,UAAU;QACV,QAAQ;QACR,uBAAS,oBAACA,KAAK,IAAI;YAAC,MAAM;YAAa,IAAIG,OAAO,OAAO,CAACE,OAAO,KAAK,CAAC,SAAS;;;AAG5F;AAEO,MAAMC,0BAA0B;IACnC,MAAM,EAAEC,KAAK,EAAE,GAAGC,SAASH,OAAO,KAAK,CAAC,SAAS;IACjD,MAAM,EAAEI,SAAS,EAAE,GAAGL;IAEtB,MAAMM,OAAOC,QAAgC,IAClC;YACH;gBACI,IAAIC;gBACJ,MAAM;gBACN,MAAM,WAAN,GAAM,oBAACC,MAAIA;oBAAC,oBAAM,oBAACC,gBAAaA;oBAAK,OAAO;;YAChD;SACH,EACF,EAAE;IAEL,MAAMC,aAAaC,YACf,CAACC;QACGR,UAAUJ,OAAO,KAAK,CAAC,SAAS,EAAE;YAC9B,KAAKY;QACT;IACJ,GACA;QAACP;KAAK;IAGV,MAAMQ,MAAMP,QAAQ,IACTD,KAAK,IAAI,CAACS,CAAAA,IAAKA,EAAE,EAAE,KAAKZ,MAAM,MAAM,CAAC,GAAG,KAAKG,IAAI,CAAC,EAAE,EAC5D;QAACH,MAAM,MAAM,CAAC,GAAG;QAAEG;KAAK;IAE3B,OAAO,WAAP,GAAO,oBAACZ,iBAAeA;QAAC,MAAMY;QAAM,YAAYK;QAAY,KAAKG,IAAI,EAAE;;AAC3E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./PageWorkflowsEditorView.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./PageWorkflowsEditorView.js";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { PageListConfig } from "@webiny/app-website-builder";
|
|
3
|
+
import { WorkflowStateValue } from "@webiny/app-workflows/types.js";
|
|
4
|
+
import { usePage } from "../../hooks/usePage.js";
|
|
5
|
+
const { Browser: Browser } = PageListConfig;
|
|
6
|
+
const WrappedElement = (props)=>{
|
|
7
|
+
const { page } = usePage();
|
|
8
|
+
const workflowState = page.workflow?.state;
|
|
9
|
+
if (!workflowState || workflowState === WorkflowStateValue.approved) return props.element;
|
|
10
|
+
return null;
|
|
11
|
+
};
|
|
12
|
+
const PageListChangeStatus = Browser.Page.Action.createDecorator((Original)=>function(props) {
|
|
13
|
+
if ("changeStatus" === props.name) return /*#__PURE__*/ react.createElement(Original, {
|
|
14
|
+
...props,
|
|
15
|
+
element: /*#__PURE__*/ react.createElement(WrappedElement, {
|
|
16
|
+
element: props.element
|
|
17
|
+
})
|
|
18
|
+
});
|
|
19
|
+
return /*#__PURE__*/ react.createElement(Original, props);
|
|
20
|
+
});
|
|
21
|
+
export { PageListChangeStatus };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=PageListChangeStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PagesList/PageListChangeStatus.js","sources":["../../../src/Components/PagesList/PageListChangeStatus.tsx"],"sourcesContent":["import React from \"react\";\nimport { PageListConfig } from \"@webiny/app-website-builder\";\nimport { WorkflowStateValue } from \"@webiny/app-workflows/types.js\";\nimport { usePage } from \"~/hooks/usePage.js\";\n\nconst { Browser } = PageListConfig;\n\ninterface IWrappedElementProps {\n element: React.ReactElement | undefined;\n}\n\nconst WrappedElement = (props: IWrappedElementProps) => {\n const { page } = usePage();\n const workflowState = page.workflow?.state;\n\n if (!workflowState || workflowState === WorkflowStateValue.approved) {\n return props.element;\n }\n return null;\n};\n\nexport const PageListChangeStatus = Browser.Page.Action.createDecorator(Original => {\n return function PageListChangeStatusAction(props) {\n if (props.name === \"changeStatus\") {\n return <Original {...props} element={<WrappedElement element={props.element} />} />;\n }\n return <Original {...props} />;\n };\n});\n"],"names":["Browser","PageListConfig","WrappedElement","props","page","usePage","workflowState","WorkflowStateValue","PageListChangeStatus","Original"],"mappings":";;;;AAKA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AAMpB,MAAMC,iBAAiB,CAACC;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC;IACjB,MAAMC,gBAAgBF,KAAK,QAAQ,EAAE;IAErC,IAAI,CAACE,iBAAiBA,kBAAkBC,mBAAmB,QAAQ,EAC/D,OAAOJ,MAAM,OAAO;IAExB,OAAO;AACX;AAEO,MAAMK,uBAAuBR,QAAQ,IAAI,CAAC,MAAM,CAAC,eAAe,CAACS,CAAAA,WAC7D,SAAoCN,KAAK;QAC5C,IAAIA,AAAe,mBAAfA,MAAM,IAAI,EACV,OAAO,WAAP,GAAO,oBAACM,UAAAA;YAAU,GAAGN,KAAK;YAAE,uBAAS,oBAACD,gBAAcA;gBAAC,SAASC,MAAM,OAAO;;;QAE/E,OAAO,WAAP,GAAO,oBAACM,UAAaN;IACzB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { PageListConfig } from "@webiny/app-website-builder";
|
|
3
|
+
import { PagesListContentReviews } from "./PagesListContentReviews.js";
|
|
4
|
+
import { PageListChangeStatus } from "./PageListChangeStatus.js";
|
|
5
|
+
const PagesList = ()=>/*#__PURE__*/ react.createElement(PageListConfig, null, /*#__PURE__*/ react.createElement(PagesListContentReviews, null), /*#__PURE__*/ react.createElement(PageListChangeStatus, null));
|
|
6
|
+
export { PagesList };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=PagesList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PagesList/PagesList.js","sources":["../../../src/Components/PagesList/PagesList.tsx"],"sourcesContent":["import React from \"react\";\nimport { PageListConfig } from \"@webiny/app-website-builder\";\nimport { PagesListContentReviews } from \"./PagesListContentReviews.js\";\nimport { PageListChangeStatus } from \"./PageListChangeStatus.js\";\n\nexport const PagesList = () => {\n return (\n <PageListConfig>\n {/* Add a Content Reviews button to footer in sidebar */}\n <PagesListContentReviews />\n {/* Decorate the Change Status action in row options to hide it for pages in certain workflow states */}\n <PageListChangeStatus />\n </PageListConfig>\n );\n};\n"],"names":["PagesList","PageListConfig","PagesListContentReviews","PageListChangeStatus"],"mappings":";;;;AAKO,MAAMA,YAAY,IACd,WAAP,GACI,oBAACC,gBAAcA,MAAAA,WAAAA,GAEX,oBAACC,yBAAuBA,OAAAA,WAAAA,GAExB,oBAACC,sBAAoBA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { Sidebar } from "@webiny/admin-ui";
|
|
3
|
+
import { PageListConfig } from "@webiny/app-website-builder";
|
|
4
|
+
import { Components } from "@webiny/app-workflows";
|
|
5
|
+
import { WB_PAGE_APP } from "../../constants.js";
|
|
6
|
+
import { ReactComponent } from "@webiny/icons/work_outline.svg";
|
|
7
|
+
const { Overlay: { WorkflowStateListAppOverlay: WorkflowStateListAppOverlay } } = Components;
|
|
8
|
+
const { Browser: Browser } = PageListConfig;
|
|
9
|
+
const PageListContentReviewsButton = ()=>/*#__PURE__*/ react.createElement(WorkflowStateListAppOverlay, {
|
|
10
|
+
app: WB_PAGE_APP
|
|
11
|
+
}, ({ showOverlay })=>/*#__PURE__*/ react.createElement(Sidebar.Item, {
|
|
12
|
+
className: "w-full",
|
|
13
|
+
onClick: showOverlay,
|
|
14
|
+
text: "Content Reviews",
|
|
15
|
+
icon: /*#__PURE__*/ react.createElement(Sidebar.Item.Icon, {
|
|
16
|
+
element: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
17
|
+
label: "Content Reviews"
|
|
18
|
+
})
|
|
19
|
+
}));
|
|
20
|
+
const PagesListContentReviews = ()=>/*#__PURE__*/ react.createElement(Browser.Sidebar.Footer, {
|
|
21
|
+
name: "contentReviews",
|
|
22
|
+
element: /*#__PURE__*/ react.createElement(PageListContentReviewsButton, null)
|
|
23
|
+
});
|
|
24
|
+
export { PagesListContentReviews };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=PagesListContentReviews.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PagesList/PagesListContentReviews.js","sources":["../../../src/Components/PagesList/PagesListContentReviews.tsx"],"sourcesContent":["import React from \"react\";\nimport { Sidebar } from \"@webiny/admin-ui\";\nimport { PageListConfig } from \"@webiny/app-website-builder\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { WB_PAGE_APP } from \"~/constants.js\";\nimport { ReactComponent as WorkflowStateListIcon } from \"@webiny/icons/work_outline.svg\";\n\nconst {\n Overlay: { WorkflowStateListAppOverlay }\n} = Components;\n\nconst { Browser } = PageListConfig;\n\nconst PageListContentReviewsButton = () => {\n return (\n <WorkflowStateListAppOverlay app={WB_PAGE_APP}>\n {({ showOverlay }) => {\n return (\n <Sidebar.Item\n className={\"w-full\"}\n onClick={showOverlay}\n text={\"Content Reviews\"}\n icon={\n <Sidebar.Item.Icon\n element={<WorkflowStateListIcon />}\n label={\"Content Reviews\"}\n />\n }\n />\n );\n }}\n </WorkflowStateListAppOverlay>\n );\n};\n\nexport const PagesListContentReviews = () => {\n return (\n <Browser.Sidebar.Footer\n name={\"contentReviews\"}\n element={<PageListContentReviewsButton />}\n />\n );\n};\n"],"names":["WorkflowStateListAppOverlay","Components","Browser","PageListConfig","PageListContentReviewsButton","WB_PAGE_APP","showOverlay","Sidebar","WorkflowStateListIcon","PagesListContentReviews"],"mappings":";;;;;;AAOA,MAAM,EACF,SAAS,EAAEA,6BAAAA,2BAA2B,EAAE,EAC3C,GAAGC;AAEJ,MAAM,EAAEC,SAAAA,OAAO,EAAE,GAAGC;AAEpB,MAAMC,+BAA+B,IAC1B,WAAP,GACI,oBAACJ,6BAA2BA;QAAC,KAAKK;OAC7B,CAAC,EAAEC,WAAW,EAAE,GACN,WAAP,GACI,oBAACC,QAAQ,IAAI;YACT,WAAW;YACX,SAASD;YACT,MAAM;YACN,oBACI,oBAACC,QAAQ,IAAI,CAAC,IAAI;gBACd,uBAAS,oBAACC,gBAAqBA;gBAC/B,OAAO;;;AAUhC,MAAMC,0BAA0B,IAC5B,WAAP,GACI,oBAACP,QAAQ,OAAO,CAAC,MAAM;QACnB,MAAM;QACN,uBAAS,oBAACE,8BAA4BA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PagesList } from "./PagesList.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PagesList } from "./PagesList.js";
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Webiny
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# @webiny/app-website-builder-workflows
|
|
2
|
+
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> This package is part of the [Webiny](https://www.webiny.com) monorepo.
|
|
5
|
+
> It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
|
|
6
|
+
|
|
7
|
+
📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
_This README file is automatically generated during the publish process._
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import react, { Suspense } from "react";
|
|
2
|
+
import { Routes } from "../routes.js";
|
|
3
|
+
import react_helmet from "react-helmet";
|
|
4
|
+
import { PageWorkflowsEditorMenu, PageWorkflowsEditorView } from "../Components/PageWorkflows/PageWorkflowsEditorView.js";
|
|
5
|
+
import { i18n } from "@webiny/app/i18n/index.js";
|
|
6
|
+
import { AdminConfig, AdminLayout, SecureRoute } from "@webiny/app-admin";
|
|
7
|
+
import { OverlayLoader } from "@webiny/admin-ui";
|
|
8
|
+
import { useCanUseWorkflows } from "@webiny/app-workflows";
|
|
9
|
+
const t = i18n.namespace("WebsiteBuilder.Page.Workflows.Editor");
|
|
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 WebsiteBuilderWorkflowsMenu = ()=>{
|
|
15
|
+
const { canUseWorkflows } = useCanUseWorkflows();
|
|
16
|
+
if (!canUseWorkflows) return null;
|
|
17
|
+
return /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(Route, {
|
|
18
|
+
route: Routes.Pages.Workflows,
|
|
19
|
+
element: /*#__PURE__*/ react.createElement(SecureRoute, {
|
|
20
|
+
permission: "wb.page"
|
|
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: "wb",
|
|
23
|
+
label: "Website Builder"
|
|
24
|
+
}), /*#__PURE__*/ react.createElement(AdminConfig.Breadcrumb, {
|
|
25
|
+
name: "wb.workflows",
|
|
26
|
+
label: "Workflows"
|
|
27
|
+
}), /*#__PURE__*/ react.createElement(Loader, null, /*#__PURE__*/ react.createElement(PageWorkflowsEditorView, null))))
|
|
28
|
+
}), /*#__PURE__*/ react.createElement(PageWorkflowsEditorMenu, null));
|
|
29
|
+
};
|
|
30
|
+
export { WebsiteBuilderWorkflowsMenu };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=WebsiteBuilderWorkflowsMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Routes/WebsiteBuilderWorkflowsMenu.js","sources":["../../src/Routes/WebsiteBuilderWorkflowsMenu.tsx"],"sourcesContent":["import React, { Suspense } from \"react\";\nimport { Routes } from \"~/routes.js\";\nimport Helmet from \"react-helmet\";\nimport {\n PageWorkflowsEditorMenu,\n PageWorkflowsEditorView\n} from \"~/Components/PageWorkflows/PageWorkflowsEditorView.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(\"WebsiteBuilder.Page.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 WebsiteBuilderWorkflowsMenu = () => {\n const { canUseWorkflows } = useCanUseWorkflows();\n if (!canUseWorkflows) {\n return null;\n }\n return (\n <AdminConfig>\n <Route\n route={Routes.Pages.Workflows}\n element={\n <SecureRoute permission={\"wb.page\"}>\n <AdminLayout>\n <Helmet>\n <title>{t`Workflows`}</title>\n </Helmet>\n <AdminConfig.Breadcrumb name={\"wb\"} label={\"Website Builder\"} />\n <AdminConfig.Breadcrumb name={\"wb.workflows\"} label={\"Workflows\"} />\n <Loader>\n <PageWorkflowsEditorView />\n </Loader>\n </AdminLayout>\n </SecureRoute>\n }\n />\n <PageWorkflowsEditorMenu />\n </AdminConfig>\n );\n};\n"],"names":["t","i18n","Loader","children","props","Suspense","OverlayLoader","React","Route","AdminConfig","WebsiteBuilderWorkflowsMenu","canUseWorkflows","useCanUseWorkflows","Routes","SecureRoute","AdminLayout","Helmet","PageWorkflowsEditorView","PageWorkflowsEditorMenu"],"mappings":";;;;;;;;AAaA,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,8BAA8B;IACvC,MAAM,EAAEC,eAAe,EAAE,GAAGC;IAC5B,IAAI,CAACD,iBACD,OAAO;IAEX,OAAO,WAAP,GACI,oBAACF,aAAWA,MAAAA,WAAAA,GACR,oBAACD,OAAKA;QACF,OAAOK,OAAO,KAAK,CAAC,SAAS;QAC7B,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;YAAM,OAAO;0BAC3C,oBAACA,YAAY,UAAU;YAAC,MAAM;YAAgB,OAAO;0BACrD,oBAACP,QAAMA,MAAAA,WAAAA,GACH,oBAACe,yBAAuBA;sBAM5C,oBAACC,yBAAuBA;AAGpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WebsiteBuilderWorkflowsMenu } from "./WebsiteBuilderWorkflowsMenu.js";
|
package/Routes/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WebsiteBuilderWorkflowsMenu } from "./WebsiteBuilderWorkflowsMenu.js";
|
package/constants.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const WB_PAGE_APP = "wb.page";
|
package/constants.js
ADDED
package/constants.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["export const WB_PAGE_APP = \"wb.page\";\n"],"names":["WB_PAGE_APP"],"mappings":"AAAO,MAAMA,cAAc"}
|
package/hooks/usePage.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { usePage } from "@webiny/app-website-builder/presentation/pages/PageList/hooks/usePage.js";
|
|
2
|
+
const decoratePage = (page)=>({
|
|
3
|
+
...page,
|
|
4
|
+
workflow: page.system?.workflow ?? null
|
|
5
|
+
});
|
|
6
|
+
const usePage_usePage = ()=>{
|
|
7
|
+
const usage = usePage();
|
|
8
|
+
return {
|
|
9
|
+
...usage,
|
|
10
|
+
page: decoratePage(usage.page)
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export { usePage_usePage as usePage };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=usePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks/usePage.js","sources":["../../src/hooks/usePage.ts"],"sourcesContent":["import { usePage as baseUsePage } from \"@webiny/app-website-builder/presentation/pages/PageList/hooks/usePage.js\";\nimport type { PageDto } from \"@webiny/app-website-builder/domain/Page/index.js\";\nimport type { WithWorkflows } from \"~/types.js\";\n\nconst decoratePage = (page: PageDto): WithWorkflows<PageDto> => {\n return {\n ...page,\n workflow: page.system?.workflow ?? null\n };\n};\n\nexport const usePage = () => {\n const usage = baseUsePage();\n\n return {\n ...usage,\n page: decoratePage(usage.page)\n };\n};\n"],"names":["decoratePage","page","usePage","usage","baseUsePage"],"mappings":";AAIA,MAAMA,eAAe,CAACC,OACX;QACH,GAAGA,IAAI;QACP,UAAUA,KAAK,MAAM,EAAE,YAAY;IACvC;AAGG,MAAMC,kBAAU;IACnB,MAAMC,QAAQC;IAEd,OAAO;QACH,GAAGD,KAAK;QACR,MAAMH,aAAaG,MAAM,IAAI;IACjC;AACJ"}
|
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { RegisterFeature, Wcp } from "@webiny/app-admin";
|
|
3
|
+
import { WebsiteBuilderWorkflowsMenu } from "./Routes/index.js";
|
|
4
|
+
import { ListOpenInNewWindow, PageEditorConfig, PagesList } from "./Components/index.js";
|
|
5
|
+
import { PageListWorkflowsFeature } from "./presentation/page/PageList/feature.js";
|
|
6
|
+
import { PageGetWorkflowsFeature } from "./presentation/page/PageGet/feature.js";
|
|
7
|
+
const WebsiteBuilderWorkflows = ()=>/*#__PURE__*/ react.createElement(Wcp.CanUseWorkflows, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
8
|
+
feature: PageListWorkflowsFeature
|
|
9
|
+
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
10
|
+
feature: PageGetWorkflowsFeature
|
|
11
|
+
}), /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflowsMenu, null), /*#__PURE__*/ react.createElement(PageEditorConfig, null), /*#__PURE__*/ react.createElement(PagesList, null), /*#__PURE__*/ react.createElement(ListOpenInNewWindow, null));
|
|
12
|
+
export { WebsiteBuilderWorkflows };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { RegisterFeature, Wcp } from \"@webiny/app-admin\";\nimport { WebsiteBuilderWorkflowsMenu } from \"~/Routes/index.js\";\nimport { ListOpenInNewWindow, PageEditorConfig, PagesList } from \"~/Components/index.js\";\nimport { PageListWorkflowsFeature } from \"~/presentation/page/PageList/feature.js\";\nimport { PageGetWorkflowsFeature } from \"~/presentation/page/PageGet/feature.js\";\n\nexport const WebsiteBuilderWorkflows = () => {\n return (\n <Wcp.CanUseWorkflows>\n <RegisterFeature feature={PageListWorkflowsFeature} />\n <RegisterFeature feature={PageGetWorkflowsFeature} />\n <WebsiteBuilderWorkflowsMenu />\n <PageEditorConfig />\n <PagesList />\n <ListOpenInNewWindow />\n </Wcp.CanUseWorkflows>\n );\n};\n"],"names":["WebsiteBuilderWorkflows","Wcp","RegisterFeature","PageListWorkflowsFeature","PageGetWorkflowsFeature","WebsiteBuilderWorkflowsMenu","PageEditorConfig","PagesList","ListOpenInNewWindow"],"mappings":";;;;;;AAOO,MAAMA,0BAA0B,IAC5B,WAAP,GACI,oBAACC,IAAI,eAAe,sBAChB,oBAACC,iBAAeA;QAAC,SAASC;sBAC1B,oBAACD,iBAAeA;QAAC,SAASE;sBAC1B,oBAACC,6BAA2BA,OAAAA,WAAAA,GAC5B,oBAACC,kBAAgBA,OAAAA,WAAAA,GACjB,oBAACC,WAASA,OAAAA,WAAAA,GACV,oBAACC,qBAAmBA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webiny/app-website-builder-workflows",
|
|
3
|
+
"version": "0.0.0-unstable.0d717d18dd",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./*": "./*"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/webiny/webiny-js.git"
|
|
12
|
+
},
|
|
13
|
+
"author": "Webiny Ltd",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@webiny/admin-ui": "0.0.0-unstable.0d717d18dd",
|
|
17
|
+
"@webiny/app": "0.0.0-unstable.0d717d18dd",
|
|
18
|
+
"@webiny/app-admin": "0.0.0-unstable.0d717d18dd",
|
|
19
|
+
"@webiny/app-website-builder": "0.0.0-unstable.0d717d18dd",
|
|
20
|
+
"@webiny/app-workflows": "0.0.0-unstable.0d717d18dd",
|
|
21
|
+
"@webiny/feature": "0.0.0-unstable.0d717d18dd",
|
|
22
|
+
"@webiny/icons": "0.0.0-unstable.0d717d18dd",
|
|
23
|
+
"mobx-react-lite": "5.0.0",
|
|
24
|
+
"react": "18.3.1",
|
|
25
|
+
"react-dom": "18.3.1",
|
|
26
|
+
"react-helmet": "6.1.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/react": "18.3.31",
|
|
30
|
+
"@webiny/build-tools": "0.0.0-unstable.0d717d18dd",
|
|
31
|
+
"rimraf": "6.1.3",
|
|
32
|
+
"typescript": "7.0.2"
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"svgo": {
|
|
38
|
+
"plugins": {
|
|
39
|
+
"removeViewBox": false
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"gitHead": "b8aec8a1be3f25c3b428b357fe1e352c7cbff9ae",
|
|
43
|
+
"webiny": {
|
|
44
|
+
"publishFrom": "dist"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GetPageGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/getPage/abstractions.js";
|
|
2
|
+
declare class WorkflowStatesGetPageGraphQLFieldSelection implements GetPageGraphQLFieldSelection.Interface {
|
|
3
|
+
getSelection(): string[];
|
|
4
|
+
}
|
|
5
|
+
export declare const WorkflowStateGetPageFieldSelection: typeof WorkflowStatesGetPageGraphQLFieldSelection & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app-website-builder/features/pages/getPage/abstractions.js").IGetPageGraphQLFieldSelection>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { GetPageGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/getPage/abstractions.js";
|
|
2
|
+
class WorkflowStatesGetPageGraphQLFieldSelection {
|
|
3
|
+
getSelection() {
|
|
4
|
+
return [
|
|
5
|
+
`system {
|
|
6
|
+
workflow {
|
|
7
|
+
workflowId
|
|
8
|
+
stepId
|
|
9
|
+
stepName
|
|
10
|
+
state
|
|
11
|
+
}
|
|
12
|
+
}`
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const WorkflowStateGetPageFieldSelection = GetPageGraphQLFieldSelection.createImplementation({
|
|
17
|
+
dependencies: [],
|
|
18
|
+
implementation: WorkflowStatesGetPageGraphQLFieldSelection
|
|
19
|
+
});
|
|
20
|
+
export { WorkflowStateGetPageFieldSelection };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=WorkflowStatesGetPageGraphQLFieldSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/page/PageGet/WorkflowStatesGetPageGraphQLFieldSelection.js","sources":["../../../../src/presentation/page/PageGet/WorkflowStatesGetPageGraphQLFieldSelection.ts"],"sourcesContent":["import { GetPageGraphQLFieldSelection } from \"@webiny/app-website-builder/features/pages/getPage/abstractions.js\";\n\nclass WorkflowStatesGetPageGraphQLFieldSelection implements GetPageGraphQLFieldSelection.Interface {\n getSelection(): string[] {\n return [\n `system {\n workflow {\n workflowId\n stepId\n stepName\n state\n }\n }`\n ];\n }\n}\n\nexport const WorkflowStateGetPageFieldSelection = GetPageGraphQLFieldSelection.createImplementation(\n {\n dependencies: [],\n implementation: WorkflowStatesGetPageGraphQLFieldSelection\n }\n);\n"],"names":["WorkflowStatesGetPageGraphQLFieldSelection","WorkflowStateGetPageFieldSelection","GetPageGraphQLFieldSelection"],"mappings":";AAEA,MAAMA;IACF,eAAyB;QACrB,OAAO;YACH,CAAC;;;;;;;aAOA,CAAC;SACL;IACL;AACJ;AAEO,MAAMC,qCAAqCC,6BAA6B,oBAAoB,CAC/F;IACI,cAAc,EAAE;IAChB,gBAAgBF;AACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PageGetWorkflowsFeature: import("@webiny/feature/admin").FeatureDefinition<any, []>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { WorkflowStateGetPageFieldSelection } from "./WorkflowStatesGetPageGraphQLFieldSelection.js";
|
|
3
|
+
const PageGetWorkflowsFeature = createFeature({
|
|
4
|
+
name: "PageGetWorkflows",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(WorkflowStateGetPageFieldSelection);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { PageGetWorkflowsFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/page/PageGet/feature.js","sources":["../../../../src/presentation/page/PageGet/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { WorkflowStateGetPageFieldSelection } from \"./WorkflowStatesGetPageGraphQLFieldSelection.js\";\n\nexport const PageGetWorkflowsFeature = createFeature({\n name: \"PageGetWorkflows\",\n register(container) {\n container.register(WorkflowStateGetPageFieldSelection);\n }\n});\n"],"names":["PageGetWorkflowsFeature","createFeature","container","WorkflowStateGetPageFieldSelection"],"mappings":";;AAGO,MAAMA,0BAA0BC,cAAc;IACjD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TableRowMapper } from "@webiny/app-website-builder/presentation/pages/PageList/index.js";
|
|
2
|
+
import type { Page } from "@webiny/app-website-builder/domain/Page/Page.js";
|
|
3
|
+
import "~/types.js";
|
|
4
|
+
declare class TableRowMapperWithWorkflows implements TableRowMapper.Interface {
|
|
5
|
+
private decoratee;
|
|
6
|
+
constructor(decoratee: TableRowMapper.Interface);
|
|
7
|
+
fromPage(page: Page): TableRowMapper.TableRow;
|
|
8
|
+
}
|
|
9
|
+
export declare const TableRowMapperWorkflowDecorator: typeof TableRowMapperWithWorkflows & {
|
|
10
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app-website-builder/presentation/pages/PageList/components/Table/abstractions").ITableRowMapper>;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TableRowMapper } from "@webiny/app-website-builder/presentation/pages/PageList/index.js";
|
|
2
|
+
import { WorkflowStateValue } from "@webiny/app-workflows/types.js";
|
|
3
|
+
import "../../../types.js";
|
|
4
|
+
class TableRowMapperWithWorkflows {
|
|
5
|
+
constructor(decoratee){
|
|
6
|
+
this.decoratee = decoratee;
|
|
7
|
+
}
|
|
8
|
+
fromPage(page) {
|
|
9
|
+
const row = this.decoratee.fromPage(page);
|
|
10
|
+
const workflowState = page.system?.workflow?.state;
|
|
11
|
+
if (workflowState && workflowState !== WorkflowStateValue.approved) return {
|
|
12
|
+
...row,
|
|
13
|
+
$selectable: false
|
|
14
|
+
};
|
|
15
|
+
return row;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const TableRowMapperWorkflowDecorator = TableRowMapper.createDecorator({
|
|
19
|
+
decorator: TableRowMapperWithWorkflows,
|
|
20
|
+
dependencies: []
|
|
21
|
+
});
|
|
22
|
+
export { TableRowMapperWorkflowDecorator };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=TableRowMapperDecorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/page/PageList/TableRowMapperDecorator.js","sources":["../../../../src/presentation/page/PageList/TableRowMapperDecorator.ts"],"sourcesContent":["import { TableRowMapper } from \"@webiny/app-website-builder/presentation/pages/PageList/index.js\";\nimport type { Page } from \"@webiny/app-website-builder/domain/Page/Page.js\";\nimport { WorkflowStateValue } from \"@webiny/app-workflows/types.js\";\nimport \"~/types.js\";\n\nclass TableRowMapperWithWorkflows implements TableRowMapper.Interface {\n constructor(private decoratee: TableRowMapper.Interface) {}\n\n fromPage(page: Page): TableRowMapper.TableRow {\n const row = this.decoratee.fromPage(page);\n\n const workflowState = page.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","page","row","workflowState","WorkflowStateValue","TableRowMapperWorkflowDecorator","TableRowMapper"],"mappings":";;;AAKA,MAAMA;IACF,YAAoBC,SAAmC,CAAE;aAArCA,SAAS,GAATA;IAAsC;IAE1D,SAASC,IAAU,EAA2B;QAC1C,MAAMC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAACD;QAEpC,MAAME,gBAAgBF,KAAK,MAAM,EAAE,UAAU;QAC7C,IAAIE,iBAAiBA,kBAAkBC,mBAAmB,QAAQ,EAC9D,OAAO;YAAE,GAAGF,GAAG;YAAE,aAAa;QAAM;QAGxC,OAAOA;IACX;AACJ;AAEO,MAAMG,kCAAkCC,eAAe,eAAe,CAAC;IAC1E,WAAWP;IACX,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ListPagesGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/listPages/abstractions.js";
|
|
2
|
+
declare class WorkflowStatesListPagesGraphQLFieldSelection implements ListPagesGraphQLFieldSelection.Interface {
|
|
3
|
+
getSelection(): string[];
|
|
4
|
+
}
|
|
5
|
+
export declare const WorkflowStateListPagesFieldSelection: typeof WorkflowStatesListPagesGraphQLFieldSelection & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app-website-builder/features/pages/listPages/abstractions.js").IListPagesGraphQLFieldSelection>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ListPagesGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/listPages/abstractions.js";
|
|
2
|
+
class WorkflowStatesListPagesGraphQLFieldSelection {
|
|
3
|
+
getSelection() {
|
|
4
|
+
return [
|
|
5
|
+
`system {
|
|
6
|
+
workflow {
|
|
7
|
+
workflowId
|
|
8
|
+
stepId
|
|
9
|
+
stepName
|
|
10
|
+
state
|
|
11
|
+
}
|
|
12
|
+
}`
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const WorkflowStateListPagesFieldSelection = ListPagesGraphQLFieldSelection.createImplementation({
|
|
17
|
+
dependencies: [],
|
|
18
|
+
implementation: WorkflowStatesListPagesGraphQLFieldSelection
|
|
19
|
+
});
|
|
20
|
+
export { WorkflowStateListPagesFieldSelection };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=WorkflowStateListPagesFieldSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/page/PageList/WorkflowStateListPagesFieldSelection.js","sources":["../../../../src/presentation/page/PageList/WorkflowStateListPagesFieldSelection.ts"],"sourcesContent":["import { ListPagesGraphQLFieldSelection } from \"@webiny/app-website-builder/features/pages/listPages/abstractions.js\";\n\nclass WorkflowStatesListPagesGraphQLFieldSelection\n implements ListPagesGraphQLFieldSelection.Interface\n{\n getSelection(): string[] {\n return [\n `system {\n workflow {\n workflowId\n stepId\n stepName\n state\n }\n }`\n ];\n }\n}\n\nexport const WorkflowStateListPagesFieldSelection =\n ListPagesGraphQLFieldSelection.createImplementation({\n dependencies: [],\n implementation: WorkflowStatesListPagesGraphQLFieldSelection\n });\n"],"names":["WorkflowStatesListPagesGraphQLFieldSelection","WorkflowStateListPagesFieldSelection","ListPagesGraphQLFieldSelection"],"mappings":";AAEA,MAAMA;IAGF,eAAyB;QACrB,OAAO;YACH,CAAC;;;;;;;aAOA,CAAC;SACL;IACL;AACJ;AAEO,MAAMC,uCACTC,+BAA+B,oBAAoB,CAAC;IAChD,cAAc,EAAE;IAChB,gBAAgBF;AACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PageListWorkflowsFeature: import("@webiny/feature/admin").FeatureDefinition<any, []>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { WorkflowStateListPagesFieldSelection } from "./WorkflowStateListPagesFieldSelection.js";
|
|
3
|
+
import { TableRowMapperWorkflowDecorator } from "./TableRowMapperDecorator.js";
|
|
4
|
+
const PageListWorkflowsFeature = createFeature({
|
|
5
|
+
name: "PageListWorkflows",
|
|
6
|
+
register (container) {
|
|
7
|
+
container.register(WorkflowStateListPagesFieldSelection);
|
|
8
|
+
container.registerDecorator(TableRowMapperWorkflowDecorator);
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export { PageListWorkflowsFeature };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/page/PageList/feature.js","sources":["../../../../src/presentation/page/PageList/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { WorkflowStateListPagesFieldSelection } from \"./WorkflowStateListPagesFieldSelection.js\";\nimport { TableRowMapperWorkflowDecorator } from \"./TableRowMapperDecorator.js\";\n\nexport const PageListWorkflowsFeature = createFeature({\n name: \"PageListWorkflows\",\n register(container) {\n container.register(WorkflowStateListPagesFieldSelection);\n container.registerDecorator(TableRowMapperWorkflowDecorator);\n }\n});\n"],"names":["PageListWorkflowsFeature","createFeature","container","WorkflowStateListPagesFieldSelection","TableRowMapperWorkflowDecorator"],"mappings":";;;AAIO,MAAMA,2BAA2BC,cAAc;IAClD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,iBAAiB,CAACE;IAChC;AACJ"}
|
package/routes.d.ts
ADDED
package/routes.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Route } from "@webiny/app-admin";
|
|
2
|
+
const Routes = {
|
|
3
|
+
Pages: {
|
|
4
|
+
Workflows: new Route({
|
|
5
|
+
name: "WebsiteBuilder/PageWorkflow",
|
|
6
|
+
path: "/website-builder/workflows",
|
|
7
|
+
params: (zod)=>({
|
|
8
|
+
app: zod.string().optional()
|
|
9
|
+
})
|
|
10
|
+
}),
|
|
11
|
+
WorkflowStateList: new Route({
|
|
12
|
+
name: "WebsiteBuilder/Pages/WorkflowStateList",
|
|
13
|
+
path: "/website-builder/pages/content-reviews"
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export { Routes };
|
|
18
|
+
|
|
19
|
+
//# 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 Pages: {\n Workflows: new Route({\n name: \"WebsiteBuilder/PageWorkflow\",\n path: \"/website-builder/workflows\",\n params: zod => {\n return {\n app: zod.string().optional()\n };\n }\n }),\n WorkflowStateList: new Route({\n name: \"WebsiteBuilder/Pages/WorkflowStateList\",\n path: \"/website-builder/pages/content-reviews\"\n })\n }\n};\n"],"names":["Routes","Route","zod"],"mappings":";AAEO,MAAMA,SAAS;IAClB,OAAO;QACH,WAAW,IAAIC,MAAM;YACjB,MAAM;YACN,MAAM;YACN,QAAQC,CAAAA,MACG;oBACH,KAAKA,IAAI,MAAM,GAAG,QAAQ;gBAC9B;QAER;QACA,mBAAmB,IAAID,MAAM;YACzB,MAAM;YACN,MAAM;QACV;IACJ;AACJ"}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { WorkflowStateValue } from "@webiny/app-workflows/types.js";
|
|
2
|
+
export interface IPageWorkflowState {
|
|
3
|
+
workflowId: string;
|
|
4
|
+
stepId: string;
|
|
5
|
+
stepName: string;
|
|
6
|
+
state: WorkflowStateValue;
|
|
7
|
+
}
|
|
8
|
+
export type WithWorkflows<T> = T & {
|
|
9
|
+
workflow: IPageWorkflowState | null;
|
|
10
|
+
};
|
|
11
|
+
declare module "@webiny/app-website-builder/types.js" {
|
|
12
|
+
interface WbPageSystem {
|
|
13
|
+
workflow: IPageWorkflowState | null;
|
|
14
|
+
}
|
|
15
|
+
}
|
package/types.js
ADDED
|
File without changes
|