@webiny/app-headless-cms-workflows 0.0.0-unstable.6844005670 → 0.0.0-unstable.7be00a75a9
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/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js +24 -37
- package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js.map +1 -1
- package/Components/CmsEntriesWorkflowStateList/index.js +0 -2
- package/Components/CmsWorkflows/CmsWorkflowsEditorView.js +74 -112
- package/Components/CmsWorkflows/CmsWorkflowsEditorView.js.map +1 -1
- package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js +44 -58
- package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js.map +1 -1
- package/Components/ContentEntryForm/CmsEntryFormPublishButton.js +21 -33
- package/Components/ContentEntryForm/CmsEntryFormPublishButton.js.map +1 -1
- package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.js +18 -33
- package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.js.map +1 -1
- package/Components/ContentEntryForm/CmsEntryFormSaveButton.js +17 -31
- package/Components/ContentEntryForm/CmsEntryFormSaveButton.js.map +1 -1
- package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js +18 -33
- package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js.map +1 -1
- package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js +9 -16
- package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js.map +1 -1
- package/Components/ContentEntryForm/ContentEntryFormWorkflow.js +31 -64
- package/Components/ContentEntryForm/ContentEntryFormWorkflow.js.map +1 -1
- package/Components/ContentEntryForm/ContentEntryWorkflow.js +16 -28
- package/Components/ContentEntryForm/ContentEntryWorkflow.js.map +1 -1
- package/Components/ContentEntryForm/index.js +0 -2
- package/Components/OptionItem/OpenInNewWindow.js +28 -36
- package/Components/OptionItem/OpenInNewWindow.js.map +1 -1
- package/Routes/CmsWorkflowsEditor.js +18 -27
- package/Routes/CmsWorkflowsEditor.js.map +1 -1
- package/Routes/index.js +0 -2
- package/index.js +3 -4
- package/index.js.map +1 -1
- package/package.json +24 -19
- package/routes.js +17 -18
- package/routes.js.map +1 -1
- package/utils/appName.js +9 -12
- package/utils/appName.js.map +1 -1
- package/Components/CmsEntriesWorkflowStateList/index.js.map +0 -1
- package/Components/ContentEntryForm/index.js.map +0 -1
- package/Routes/index.js.map +0 -1
|
@@ -1,45 +1,32 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { Components } from "@webiny/app-headless-cms";
|
|
3
3
|
import { Sidebar } from "@webiny/admin-ui";
|
|
4
|
-
import { ReactComponent
|
|
5
|
-
import { Components as
|
|
4
|
+
import { ReactComponent } from "@webiny/icons/flowchart.svg";
|
|
5
|
+
import { Components as app_workflows_Components } from "@webiny/app-workflows";
|
|
6
6
|
import { useContentEntries } from "@webiny/app-headless-cms/admin/views/contentEntries/hooks/index.js";
|
|
7
7
|
import { IsModelPublishable } from "@webiny/app-headless-cms/exports/admin/cms.js";
|
|
8
8
|
import { createAppName } from "../../utils/appName.js";
|
|
9
9
|
import { useApolloClient } from "@apollo/react-hooks";
|
|
10
|
-
const {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
32
|
-
className: "list-none"
|
|
33
|
-
}, /*#__PURE__*/React.createElement(Sidebar.Item, {
|
|
34
|
-
onClick: showOverlay,
|
|
35
|
-
text: "Content Reviews",
|
|
36
|
-
icon: /*#__PURE__*/React.createElement(Sidebar.Item.Icon, {
|
|
37
|
-
element: /*#__PURE__*/React.createElement(WorkflowStateListIcon, null),
|
|
38
|
-
label: "Content Reviews"
|
|
39
|
-
})
|
|
40
|
-
}));
|
|
41
|
-
})));
|
|
42
|
-
};
|
|
43
|
-
});
|
|
10
|
+
const { Overlay: { WorkflowStateListAppOverlay: WorkflowStateListAppOverlay } } = app_workflows_Components;
|
|
11
|
+
const { Footer: Footer } = Components.Sidebar;
|
|
12
|
+
const CmsEntriesWorkflowStateListFooterMenu_CmsEntriesWorkflowStateListFooterMenu = Footer.createDecorator((Original)=>function(props) {
|
|
13
|
+
const { contentModel: model } = useContentEntries();
|
|
14
|
+
const client = useApolloClient();
|
|
15
|
+
const app = createAppName(model);
|
|
16
|
+
return /*#__PURE__*/ react.createElement(Original, props, /*#__PURE__*/ react.createElement(IsModelPublishable, null, /*#__PURE__*/ react.createElement(WorkflowStateListAppOverlay, {
|
|
17
|
+
client: client,
|
|
18
|
+
app: app
|
|
19
|
+
}, ({ showOverlay })=>/*#__PURE__*/ react.createElement("div", {
|
|
20
|
+
className: "list-none"
|
|
21
|
+
}, /*#__PURE__*/ react.createElement(Sidebar.Item, {
|
|
22
|
+
onClick: showOverlay,
|
|
23
|
+
text: "Content Reviews",
|
|
24
|
+
icon: /*#__PURE__*/ react.createElement(Sidebar.Item.Icon, {
|
|
25
|
+
element: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
26
|
+
label: "Content Reviews"
|
|
27
|
+
})
|
|
28
|
+
})))));
|
|
29
|
+
});
|
|
30
|
+
export { CmsEntriesWorkflowStateListFooterMenu_CmsEntriesWorkflowStateListFooterMenu as CmsEntriesWorkflowStateListFooterMenu };
|
|
44
31
|
|
|
45
32
|
//# sourceMappingURL=CmsEntriesWorkflowStateListFooterMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js","sources":["../../../src/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.tsx"],"sourcesContent":["import React from \"react\";\nimport { Components } from \"@webiny/app-headless-cms\";\nimport { Sidebar } from \"@webiny/admin-ui\";\nimport { ReactComponent as WorkflowStateListIcon } from \"@webiny/icons/flowchart.svg\";\nimport { Components as WorkflowsComponents } from \"@webiny/app-workflows\";\nimport { useContentEntries } from \"@webiny/app-headless-cms/admin/views/contentEntries/hooks/index.js\";\nimport { IsModelPublishable } from \"@webiny/app-headless-cms/exports/admin/cms.js\";\nimport { createAppName } from \"~/utils/appName.js\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\n\nconst {\n Overlay: { WorkflowStateListAppOverlay }\n} = WorkflowsComponents;\n\nconst { Footer } = Components.Sidebar;\n\nexport const CmsEntriesWorkflowStateListFooterMenu = Footer.createDecorator(Original => {\n return function CmsEntriesWorkflowStateListFooterMenu(props) {\n const { contentModel: model } = useContentEntries();\n const client = useApolloClient();\n\n const app = createAppName(model);\n\n return (\n <Original {...props}>\n <IsModelPublishable>\n <WorkflowStateListAppOverlay client={client} app={app}>\n {({ showOverlay }) => {\n return (\n <div className={\"list-none\"}>\n <Sidebar.Item\n onClick={showOverlay}\n text={\"Content Reviews\"}\n icon={\n <Sidebar.Item.Icon\n element={<WorkflowStateListIcon />}\n label={\"Content Reviews\"}\n />\n }\n />\n </div>\n );\n }}\n </WorkflowStateListAppOverlay>\n </IsModelPublishable>\n </Original>\n );\n };\n});\n"],"names":["WorkflowStateListAppOverlay","WorkflowsComponents","Footer","Components","CmsEntriesWorkflowStateListFooterMenu","Original","props","model","useContentEntries","client","useApolloClient","app","createAppName","IsModelPublishable","showOverlay","Sidebar","WorkflowStateListIcon"],"mappings":";;;;;;;;;AAUA,MAAM,EACF,SAAS,EAAEA,6BAAAA,2BAA2B,EAAE,EAC3C,GAAGC;AAEJ,MAAM,EAAEC,QAAAA,MAAM,EAAE,GAAGC,WAAW,OAAO;AAE9B,MAAMC,8EAAwCF,OAAO,eAAe,CAACG,CAAAA,WACjE,SAA+CC,KAAK;QACvD,MAAM,EAAE,cAAcC,KAAK,EAAE,GAAGC;QAChC,MAAMC,SAASC;QAEf,MAAMC,MAAMC,cAAcL;QAE1B,OAAO,WAAP,GACI,oBAACF,UAAaC,OAAAA,WAAAA,GACV,oBAACO,oBAAkBA,MAAAA,WAAAA,GACf,oBAACb,6BAA2BA;YAAC,QAAQS;YAAQ,KAAKE;WAC7C,CAAC,EAAEG,WAAW,EAAE,GACN,WAAP,GACI,oBAAC;gBAAI,WAAW;6BACZ,oBAACC,QAAQ,IAAI;gBACT,SAASD;gBACT,MAAM;gBACN,oBACI,oBAACC,QAAQ,IAAI,CAAC,IAAI;oBACd,uBAAS,oBAACC,gBAAqBA;oBAC/B,OAAO;;;IAWnD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react, { useCallback, useMemo } from "react";
|
|
2
2
|
import { AdminConfig, useRoute, useRouter } from "@webiny/app-admin";
|
|
3
3
|
import { Routes } from "../../routes.js";
|
|
4
4
|
import { Components } from "@webiny/app-workflows";
|
|
@@ -7,122 +7,84 @@ import { useModels, usePermission } from "@webiny/app-headless-cms/admin/hooks/i
|
|
|
7
7
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
8
8
|
import { createAppName } from "../../utils/appName.js";
|
|
9
9
|
import { normalizeIcon } from "@webiny/app-headless-cms/utils/normalizeIcon.js";
|
|
10
|
-
const {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} = usePermission();
|
|
26
|
-
if (!canCreateContentModels) {
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
return /*#__PURE__*/React.createElement(HasWorkflowsEditorPermission, null, /*#__PURE__*/React.createElement(Menu, {
|
|
30
|
-
name: "headlessCMS.contentModels.workflows",
|
|
31
|
-
parent: "headlessCMS",
|
|
32
|
-
element: /*#__PURE__*/React.createElement(Menu.Link, {
|
|
33
|
-
pinnable: true,
|
|
34
|
-
text: "Workflows",
|
|
35
|
-
to: router.getLink(Routes.ContentModels.Workflows)
|
|
36
|
-
})
|
|
37
|
-
}));
|
|
10
|
+
const { Admin: { WorkflowsEditor: WorkflowsEditor }, Permissions: { HasWorkflowsEditorPermission: HasWorkflowsEditorPermission } } = Components;
|
|
11
|
+
const { Menu: Menu } = AdminConfig;
|
|
12
|
+
const CmsWorkflowsEditorMenu = ()=>{
|
|
13
|
+
const router = useRouter();
|
|
14
|
+
const { canCreateContentModels } = usePermission();
|
|
15
|
+
if (!canCreateContentModels) return null;
|
|
16
|
+
return /*#__PURE__*/ react.createElement(HasWorkflowsEditorPermission, null, /*#__PURE__*/ react.createElement(Menu, {
|
|
17
|
+
name: "headlessCMS.contentModels.workflows",
|
|
18
|
+
parent: "headlessCMS",
|
|
19
|
+
element: /*#__PURE__*/ react.createElement(Menu.Link, {
|
|
20
|
+
pinnable: true,
|
|
21
|
+
text: "Workflows",
|
|
22
|
+
to: router.getLink(Routes.ContentModels.Workflows)
|
|
23
|
+
})
|
|
24
|
+
}));
|
|
38
25
|
};
|
|
39
|
-
const ModelIcon = ({
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
icon: icon
|
|
52
|
-
}),
|
|
53
|
-
label: model.name,
|
|
54
|
-
size: "sm",
|
|
55
|
-
className: "text-neutral-strong"
|
|
56
|
-
});
|
|
26
|
+
const ModelIcon = ({ model })=>{
|
|
27
|
+
if (!model.icon) return null;
|
|
28
|
+
const icon = normalizeIcon(model.icon);
|
|
29
|
+
if (!icon) return null;
|
|
30
|
+
return /*#__PURE__*/ react.createElement(Icon, {
|
|
31
|
+
icon: /*#__PURE__*/ react.createElement(FontAwesomeIcon, {
|
|
32
|
+
icon: icon
|
|
33
|
+
}),
|
|
34
|
+
label: model.name,
|
|
35
|
+
size: "sm",
|
|
36
|
+
className: "text-neutral-strong"
|
|
37
|
+
});
|
|
57
38
|
};
|
|
58
|
-
const isAllowed = model
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return
|
|
62
|
-
}
|
|
63
|
-
// Exclude single entry models
|
|
64
|
-
else if (model.tags.includes("singleEntry")) {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
return true;
|
|
39
|
+
const isAllowed = (model)=>{
|
|
40
|
+
if (model.tags.includes("$publishing:false")) return false;
|
|
41
|
+
if (model.tags.includes("singleEntry")) return false;
|
|
42
|
+
return true;
|
|
68
43
|
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
models
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const onAppClick = useCallback(id => {
|
|
107
|
-
goToRoute(Routes.ContentModels.Workflows, {
|
|
108
|
-
app: id
|
|
44
|
+
const CmsWorkflowsEditorView = ()=>{
|
|
45
|
+
const { route } = useRoute(Routes.ContentModels.Workflows);
|
|
46
|
+
const { models, loading } = useModels();
|
|
47
|
+
const { canEdit, canCreateContentModels } = usePermission();
|
|
48
|
+
const { goToRoute } = useRouter();
|
|
49
|
+
const apps = useMemo(()=>models.filter((model)=>{
|
|
50
|
+
if (false === isAllowed(model)) return false;
|
|
51
|
+
return canEdit(model, "cms.contentModel");
|
|
52
|
+
}).map((model)=>({
|
|
53
|
+
id: createAppName(model),
|
|
54
|
+
name: model.name,
|
|
55
|
+
icon: /*#__PURE__*/ react.createElement(ModelIcon, {
|
|
56
|
+
model: model
|
|
57
|
+
})
|
|
58
|
+
})), [
|
|
59
|
+
models,
|
|
60
|
+
canEdit
|
|
61
|
+
]);
|
|
62
|
+
const app = useMemo(()=>{
|
|
63
|
+
if (!route.params.app) return apps.find(()=>true);
|
|
64
|
+
return apps.find((a)=>a.id === route.params.app) || null;
|
|
65
|
+
}, [
|
|
66
|
+
route.params.app
|
|
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..."
|
|
109
81
|
});
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return /*#__PURE__*/React.createElement(Loader, {
|
|
115
|
-
size: "lg",
|
|
116
|
-
variant: "accent",
|
|
117
|
-
indeterminate: true,
|
|
118
|
-
text: "Loading..."
|
|
82
|
+
return /*#__PURE__*/ react.createElement(WorkflowsEditor, {
|
|
83
|
+
apps: apps,
|
|
84
|
+
onAppClick: onAppClick,
|
|
85
|
+
app: app?.id
|
|
119
86
|
});
|
|
120
|
-
}
|
|
121
|
-
return /*#__PURE__*/React.createElement(WorkflowsEditor, {
|
|
122
|
-
apps: apps,
|
|
123
|
-
onAppClick: onAppClick,
|
|
124
|
-
app: app?.id
|
|
125
|
-
});
|
|
126
87
|
};
|
|
88
|
+
export { CmsWorkflowsEditorMenu, CmsWorkflowsEditorView };
|
|
127
89
|
|
|
128
90
|
//# sourceMappingURL=CmsWorkflowsEditorView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/CmsWorkflows/CmsWorkflowsEditorView.js","sources":["../../../src/Components/CmsWorkflows/CmsWorkflowsEditorView.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport { AdminConfig, useRoute, useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\nimport type { IWorkflowApplication } from \"@webiny/app-workflows\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { Icon, Loader } from \"@webiny/admin-ui\";\nimport { useModels, usePermission } from \"@webiny/app-headless-cms/admin/hooks/index.js\";\nimport type { CmsModel } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { createAppName } from \"~/utils/appName.js\";\nimport { normalizeIcon } from \"@webiny/app-headless-cms/utils/normalizeIcon.js\";\n\nconst {\n Admin: { WorkflowsEditor },\n Permissions: { HasWorkflowsEditorPermission }\n} = Components;\n\nconst { Menu } = AdminConfig;\n\nexport const CmsWorkflowsEditorMenu = () => {\n const router = useRouter();\n const { canCreateContentModels } = usePermission();\n\n if (!canCreateContentModels) {\n return null;\n }\n\n return (\n <HasWorkflowsEditorPermission>\n <Menu\n name={\"headlessCMS.contentModels.workflows\"}\n parent={\"headlessCMS\"}\n element={\n <Menu.Link\n pinnable={true}\n text={\"Workflows\"}\n to={router.getLink(Routes.ContentModels.Workflows)}\n />\n }\n />\n </HasWorkflowsEditorPermission>\n );\n};\n\ninterface IModelIconProps {\n model: Pick<CmsModel, \"icon\" | \"name\">;\n}\n\nconst ModelIcon = ({ model }: IModelIconProps) => {\n if (!model.icon) {\n return null;\n }\n\n const icon = normalizeIcon(model.icon);\n if (!icon) {\n return null;\n }\n\n return (\n <Icon\n icon={<FontAwesomeIcon icon={icon} />}\n label={model.name}\n size={\"sm\"}\n className={\"text-neutral-strong\"}\n />\n );\n};\n\nconst isAllowed = (model: Pick<CmsModel, \"modelId\" | \"tags\">) => {\n // Exclude models that have the \"$publishing:false\" tag\n if (model.tags.includes(\"$publishing:false\")) {\n return false;\n }\n // Exclude single entry models\n else if (model.tags.includes(\"singleEntry\")) {\n return false;\n }\n\n return true;\n};\n\nexport const CmsWorkflowsEditorView = () => {\n const { route } = useRoute(Routes.ContentModels.Workflows);\n const { models, loading } = useModels();\n const { canEdit, canCreateContentModels } = usePermission();\n const { goToRoute } = useRouter();\n\n const apps = useMemo<IWorkflowApplication[]>(() => {\n return models\n .filter(model => {\n if (isAllowed(model) === false) {\n return false;\n }\n return canEdit(model, \"cms.contentModel\");\n })\n .map(model => {\n return {\n id: createAppName(model),\n name: model.name,\n icon: <ModelIcon model={model} />\n };\n });\n }, [models, canEdit]);\n\n const app = useMemo(() => {\n if (!route.params.app) {\n return apps.find(() => true);\n }\n return apps.find(a => a.id === route.params.app) || null;\n }, [route.params.app]);\n\n const onAppClick = useCallback(\n (id: string) => {\n goToRoute(Routes.ContentModels.Workflows, {\n app: id\n });\n },\n [apps]\n );\n\n if (!canCreateContentModels) {\n return null;\n } else if (loading) {\n return <Loader size=\"lg\" variant=\"accent\" indeterminate={true} text=\"Loading...\" />;\n }\n\n return <WorkflowsEditor apps={apps} onAppClick={onAppClick} app={app?.id} />;\n};\n"],"names":["WorkflowsEditor","HasWorkflowsEditorPermission","Components","Menu","AdminConfig","CmsWorkflowsEditorMenu","router","useRouter","canCreateContentModels","usePermission","Routes","ModelIcon","model","icon","normalizeIcon","Icon","FontAwesomeIcon","isAllowed","CmsWorkflowsEditorView","route","useRoute","models","loading","useModels","canEdit","goToRoute","apps","useMemo","createAppName","app","a","onAppClick","useCallback","id","Loader"],"mappings":";;;;;;;;;AAYA,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;AAMA,MAAMC,YAAY,CAAC,EAAEC,KAAK,EAAmB;IACzC,IAAI,CAACA,MAAM,IAAI,EACX,OAAO;IAGX,MAAMC,OAAOC,cAAcF,MAAM,IAAI;IACrC,IAAI,CAACC,MACD,OAAO;IAGX,OAAO,WAAP,GACI,oBAACE,MAAIA;QACD,oBAAM,oBAACC,iBAAeA;YAAC,MAAMH;;QAC7B,OAAOD,MAAM,IAAI;QACjB,MAAM;QACN,WAAW;;AAGvB;AAEA,MAAMK,YAAY,CAACL;IAEf,IAAIA,MAAM,IAAI,CAAC,QAAQ,CAAC,sBACpB,OAAO;IAGN,IAAIA,MAAM,IAAI,CAAC,QAAQ,CAAC,gBACzB,OAAO;IAGX,OAAO;AACX;AAEO,MAAMM,yBAAyB;IAClC,MAAM,EAAEC,KAAK,EAAE,GAAGC,SAASV,OAAO,aAAa,CAAC,SAAS;IACzD,MAAM,EAAEW,MAAM,EAAEC,OAAO,EAAE,GAAGC;IAC5B,MAAM,EAAEC,OAAO,EAAEhB,sBAAsB,EAAE,GAAGC;IAC5C,MAAM,EAAEgB,SAAS,EAAE,GAAGlB;IAEtB,MAAMmB,OAAOC,QAAgC,IAClCN,OACF,MAAM,CAACT,CAAAA;YACJ,IAAIK,AAAqB,UAArBA,UAAUL,QACV,OAAO;YAEX,OAAOY,QAAQZ,OAAO;QAC1B,GACC,GAAG,CAACA,CAAAA,QACM;gBACH,IAAIgB,cAAchB;gBAClB,MAAMA,MAAM,IAAI;gBAChB,MAAM,WAAN,GAAM,oBAACD,WAASA;oBAAC,OAAOC;;YAC5B,KAET;QAACS;QAAQG;KAAQ;IAEpB,MAAMK,MAAMF,QAAQ;QAChB,IAAI,CAACR,MAAM,MAAM,CAAC,GAAG,EACjB,OAAOO,KAAK,IAAI,CAAC,IAAM;QAE3B,OAAOA,KAAK,IAAI,CAACI,CAAAA,IAAKA,EAAE,EAAE,KAAKX,MAAM,MAAM,CAAC,GAAG,KAAK;IACxD,GAAG;QAACA,MAAM,MAAM,CAAC,GAAG;KAAC;IAErB,MAAMY,aAAaC,YACf,CAACC;QACGR,UAAUf,OAAO,aAAa,CAAC,SAAS,EAAE;YACtC,KAAKuB;QACT;IACJ,GACA;QAACP;KAAK;IAGV,IAAI,CAAClB,wBACD,OAAO;IACJ,IAAIc,SACP,OAAO,WAAP,GAAO,oBAACY,QAAMA;QAAC,MAAK;QAAK,SAAQ;QAAS,eAAe;QAAM,MAAK;;IAGxE,OAAO,WAAP,GAAO,oBAAClC,iBAAeA;QAAC,MAAM0B;QAAM,YAAYK;QAAY,KAAKF,KAAK;;AAC1E"}
|
|
@@ -1,69 +1,55 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react, { useCallback } from "react";
|
|
2
2
|
import { useRoute } from "@webiny/app";
|
|
3
3
|
import { useToast } from "@webiny/admin-ui";
|
|
4
4
|
import { ContentEntryEditorConfig, usePermission } from "@webiny/app-headless-cms";
|
|
5
5
|
import { useContentEntryForm } from "@webiny/app-headless-cms/admin/components/ContentEntryForm/useContentEntryForm.js";
|
|
6
6
|
import { usePersistEntry } from "@webiny/app-headless-cms/admin/hooks/usePersistEntry.js";
|
|
7
|
-
import { ReactComponent
|
|
7
|
+
import { ReactComponent } from "@webiny/icons/new_releases.svg";
|
|
8
8
|
import { IsModelPublishable } from "@webiny/app-headless-cms/exports/admin/cms.js";
|
|
9
|
-
const {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
canEdit
|
|
19
|
-
} = usePermission();
|
|
20
|
-
const {
|
|
21
|
-
OptionsMenuItem
|
|
22
|
-
} = Actions.MenuItemAction.useOptionsMenuItem();
|
|
23
|
-
const {
|
|
24
|
-
entry
|
|
25
|
-
} = useContentEntryForm();
|
|
26
|
-
const {
|
|
27
|
-
persistEntry
|
|
28
|
-
} = usePersistEntry({
|
|
29
|
-
addItemToListCache: true
|
|
30
|
-
});
|
|
31
|
-
const onClick = useCallback(async () => {
|
|
32
|
-
const newRevision = await persistEntry({
|
|
33
|
-
id: entry.id
|
|
34
|
-
}, {
|
|
35
|
-
skipValidators: ["required"],
|
|
36
|
-
createNewRevision: true
|
|
9
|
+
const { Actions: Actions } = ContentEntryEditorConfig;
|
|
10
|
+
const CreateNewRevisionMenuItem = ()=>{
|
|
11
|
+
const toast = useToast();
|
|
12
|
+
const { setRouteParams } = useRoute();
|
|
13
|
+
const { canEdit } = usePermission();
|
|
14
|
+
const { OptionsMenuItem } = Actions.MenuItemAction.useOptionsMenuItem();
|
|
15
|
+
const { entry } = useContentEntryForm();
|
|
16
|
+
const { persistEntry } = usePersistEntry({
|
|
17
|
+
addItemToListCache: true
|
|
37
18
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
19
|
+
const onClick = useCallback(async ()=>{
|
|
20
|
+
const newRevision = await persistEntry({
|
|
21
|
+
id: entry.id
|
|
22
|
+
}, {
|
|
23
|
+
skipValidators: [
|
|
24
|
+
"required"
|
|
25
|
+
],
|
|
26
|
+
createNewRevision: true
|
|
27
|
+
});
|
|
28
|
+
if (newRevision.error) return void toast.showWarningToast({
|
|
29
|
+
title: "Could not create a new revision.",
|
|
30
|
+
description: newRevision.error.message
|
|
31
|
+
});
|
|
32
|
+
setRouteParams((params)=>({
|
|
33
|
+
...params,
|
|
34
|
+
id: newRevision.entry.id
|
|
35
|
+
}));
|
|
36
|
+
}, [
|
|
37
|
+
entry,
|
|
38
|
+
persistEntry
|
|
39
|
+
]);
|
|
40
|
+
if (!canEdit(entry, "cms.contentEntry")) return null;
|
|
41
|
+
return /*#__PURE__*/ react.createElement(OptionsMenuItem, {
|
|
42
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
43
|
+
disabled: !entry.id,
|
|
44
|
+
label: "Create New Revision",
|
|
45
|
+
onAction: onClick,
|
|
46
|
+
"data-testid": "cms.content-form.header.createNewRevision"
|
|
50
47
|
});
|
|
51
|
-
}, [entry, persistEntry]);
|
|
52
|
-
if (!canEdit(entry, "cms.contentEntry")) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
return /*#__PURE__*/React.createElement(OptionsMenuItem, {
|
|
56
|
-
icon: /*#__PURE__*/React.createElement(NewReleaseIcon, null),
|
|
57
|
-
label: `Create New Revision`,
|
|
58
|
-
onAction: onClick,
|
|
59
|
-
"data-testid": "cms.content-form.header.createNewRevision"
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
export const CmsEntryFormCreateNewRevisionButton = () => {
|
|
63
|
-
return /*#__PURE__*/React.createElement(ContentEntryEditorConfig, null, /*#__PURE__*/React.createElement(IsModelPublishable, null, /*#__PURE__*/React.createElement(Actions.MenuItemAction, {
|
|
64
|
-
name: "createNewRevision",
|
|
65
|
-
element: /*#__PURE__*/React.createElement(CreateNewRevisionMenuItem, null)
|
|
66
|
-
})));
|
|
67
48
|
};
|
|
49
|
+
const CmsEntryFormCreateNewRevisionButton = ()=>/*#__PURE__*/ react.createElement(ContentEntryEditorConfig, null, /*#__PURE__*/ react.createElement(IsModelPublishable, null, /*#__PURE__*/ react.createElement(Actions.MenuItemAction, {
|
|
50
|
+
name: "createNewRevision",
|
|
51
|
+
element: /*#__PURE__*/ react.createElement(CreateNewRevisionMenuItem, null)
|
|
52
|
+
})));
|
|
53
|
+
export { CmsEntryFormCreateNewRevisionButton };
|
|
68
54
|
|
|
69
55
|
//# sourceMappingURL=CmsEntryFormCreateNewRevisionButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js","sources":["../../../src/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useRoute } from \"@webiny/app\";\nimport { useToast } from \"@webiny/admin-ui\";\nimport { ContentEntryEditorConfig, usePermission } from \"@webiny/app-headless-cms\";\nimport { useContentEntryForm } from \"@webiny/app-headless-cms/admin/components/ContentEntryForm/useContentEntryForm.js\";\nimport { usePersistEntry } from \"@webiny/app-headless-cms/admin/hooks/usePersistEntry.js\";\nimport { ReactComponent as NewReleaseIcon } from \"@webiny/icons/new_releases.svg\";\nimport { IsModelPublishable } from \"@webiny/app-headless-cms/exports/admin/cms.js\";\n\nconst { Actions } = ContentEntryEditorConfig;\n\nconst CreateNewRevisionMenuItem = () => {\n const toast = useToast();\n const { setRouteParams } = useRoute();\n const { canEdit } = usePermission();\n const { OptionsMenuItem } = Actions.MenuItemAction.useOptionsMenuItem();\n const { entry } = useContentEntryForm();\n const { persistEntry } = usePersistEntry({\n addItemToListCache: true\n });\n\n const onClick = useCallback(async () => {\n const newRevision = await persistEntry(\n {\n id: entry.id\n },\n {\n skipValidators: [\"required\"],\n createNewRevision: true\n }\n );\n\n if (newRevision.error) {\n toast.showWarningToast({\n title: \"Could not create a new revision.\",\n description: newRevision.error.message\n });\n return;\n }\n\n setRouteParams(params => {\n return { ...params, id: newRevision.entry.id };\n });\n }, [entry, persistEntry]);\n\n if (!canEdit(entry, \"cms.contentEntry\")) {\n return null;\n }\n\n return (\n <OptionsMenuItem\n icon={<NewReleaseIcon />}\n disabled={!entry.id}\n label={`Create New Revision`}\n onAction={onClick}\n data-testid={\"cms.content-form.header.createNewRevision\"}\n />\n );\n};\n\nexport const CmsEntryFormCreateNewRevisionButton = () => {\n return (\n <ContentEntryEditorConfig>\n <IsModelPublishable>\n <Actions.MenuItemAction\n name={\"createNewRevision\"}\n element={<CreateNewRevisionMenuItem />}\n />\n </IsModelPublishable>\n </ContentEntryEditorConfig>\n );\n};\n"],"names":["Actions","ContentEntryEditorConfig","CreateNewRevisionMenuItem","toast","useToast","setRouteParams","useRoute","canEdit","usePermission","OptionsMenuItem","entry","useContentEntryForm","persistEntry","usePersistEntry","onClick","useCallback","newRevision","params","NewReleaseIcon","CmsEntryFormCreateNewRevisionButton","IsModelPublishable"],"mappings":";;;;;;;;AASA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AAEpB,MAAMC,4BAA4B;IAC9B,MAAMC,QAAQC;IACd,MAAM,EAAEC,cAAc,EAAE,GAAGC;IAC3B,MAAM,EAAEC,OAAO,EAAE,GAAGC;IACpB,MAAM,EAAEC,eAAe,EAAE,GAAGT,QAAQ,cAAc,CAAC,kBAAkB;IACrE,MAAM,EAAEU,KAAK,EAAE,GAAGC;IAClB,MAAM,EAAEC,YAAY,EAAE,GAAGC,gBAAgB;QACrC,oBAAoB;IACxB;IAEA,MAAMC,UAAUC,YAAY;QACxB,MAAMC,cAAc,MAAMJ,aACtB;YACI,IAAIF,MAAM,EAAE;QAChB,GACA;YACI,gBAAgB;gBAAC;aAAW;YAC5B,mBAAmB;QACvB;QAGJ,IAAIM,YAAY,KAAK,EAAE,YACnBb,MAAM,gBAAgB,CAAC;YACnB,OAAO;YACP,aAAaa,YAAY,KAAK,CAAC,OAAO;QAC1C;QAIJX,eAAeY,CAAAA,SACJ;gBAAE,GAAGA,MAAM;gBAAE,IAAID,YAAY,KAAK,CAAC,EAAE;YAAC;IAErD,GAAG;QAACN;QAAOE;KAAa;IAExB,IAAI,CAACL,QAAQG,OAAO,qBAChB,OAAO;IAGX,OAAO,WAAP,GACI,oBAACD,iBAAAA;QACG,oBAAM,oBAACS,gBAAcA;QACrB,UAAU,CAACR,MAAM,EAAE;QACnB,OAAO;QACP,UAAUI;QACV,eAAa;;AAGzB;AAEO,MAAMK,sCAAsC,IACxC,WAAP,GACI,oBAAClB,0BAAwBA,MAAAA,WAAAA,GACrB,oBAACmB,oBAAkBA,MAAAA,WAAAA,GACf,oBAACpB,QAAQ,cAAc;QACnB,MAAM;QACN,uBAAS,oBAACE,2BAAyBA"}
|
|
@@ -1,38 +1,26 @@
|
|
|
1
1
|
import { useContentEntry, usePermission } from "@webiny/app-headless-cms";
|
|
2
2
|
import { ContentEntryEditorConfig } from "@webiny/app-headless-cms/admin/config/contentEntries/index.js";
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
canEdit,
|
|
24
|
-
canPublish
|
|
25
|
-
} = usePermission();
|
|
26
|
-
if (entry.meta.status === "published") {
|
|
27
|
-
return null;
|
|
28
|
-
} else if (!canEdit(entry, "cms.contentEntry") || !canPublish("cms.contentEntry")) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
return /*#__PURE__*/React.createElement(ButtonPrimary, {
|
|
32
|
-
onAction: publish,
|
|
33
|
-
disabled: loading,
|
|
34
|
-
"data-testid": "workflows-cms-content-publish-content-button"
|
|
35
|
-
}, "Publish");
|
|
3
|
+
import react, { useCallback } from "react";
|
|
4
|
+
const CmsEntryFormPublishButton = ()=>{
|
|
5
|
+
const { loading, entry, publishEntryRevision } = useContentEntry();
|
|
6
|
+
const { ButtonPrimary } = ContentEntryEditorConfig.Actions.ButtonAction.useButtons();
|
|
7
|
+
const publish = useCallback(()=>{
|
|
8
|
+
if (!entry.id) return void console.warn("You cannot publish an entry that hasn't been saved yet.");
|
|
9
|
+
publishEntryRevision({
|
|
10
|
+
id: entry.id
|
|
11
|
+
});
|
|
12
|
+
}, [
|
|
13
|
+
entry.id
|
|
14
|
+
]);
|
|
15
|
+
const { canEdit, canPublish } = usePermission();
|
|
16
|
+
if ("published" === entry.meta.status) return null;
|
|
17
|
+
if (!canEdit(entry, "cms.contentEntry") || !canPublish("cms.contentEntry")) return null;
|
|
18
|
+
return /*#__PURE__*/ react.createElement(ButtonPrimary, {
|
|
19
|
+
onAction: publish,
|
|
20
|
+
disabled: loading,
|
|
21
|
+
"data-testid": "workflows-cms-content-publish-content-button"
|
|
22
|
+
}, "Publish");
|
|
36
23
|
};
|
|
24
|
+
export { CmsEntryFormPublishButton };
|
|
37
25
|
|
|
38
26
|
//# sourceMappingURL=CmsEntryFormPublishButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/ContentEntryForm/CmsEntryFormPublishButton.js","sources":["../../../src/Components/ContentEntryForm/CmsEntryFormPublishButton.tsx"],"sourcesContent":["import { useContentEntry, usePermission } from \"@webiny/app-headless-cms\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms/admin/config/contentEntries/index.js\";\nimport React, { useCallback } from \"react\";\n\nexport const CmsEntryFormPublishButton = () => {\n const { loading, entry, publishEntryRevision } = useContentEntry();\n const { ButtonPrimary } = ContentEntryEditorConfig.Actions.ButtonAction.useButtons();\n\n const publish = useCallback(() => {\n if (!entry.id) {\n console.warn(`You cannot publish an entry that hasn't been saved yet.`);\n return;\n }\n publishEntryRevision({ id: entry.id });\n }, [entry.id]);\n\n const { canEdit, canPublish } = usePermission();\n\n if (entry.meta.status === \"published\") {\n return null;\n } else if (!canEdit(entry, \"cms.contentEntry\") || !canPublish(\"cms.contentEntry\")) {\n return null;\n }\n\n return (\n <ButtonPrimary\n onAction={publish}\n disabled={loading}\n data-testid=\"workflows-cms-content-publish-content-button\"\n >\n {\"Publish\"}\n </ButtonPrimary>\n );\n};\n"],"names":["CmsEntryFormPublishButton","loading","entry","publishEntryRevision","useContentEntry","ButtonPrimary","ContentEntryEditorConfig","publish","useCallback","console","canEdit","canPublish","usePermission"],"mappings":";;;AAIO,MAAMA,4BAA4B;IACrC,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAEC,oBAAoB,EAAE,GAAGC;IACjD,MAAM,EAAEC,aAAa,EAAE,GAAGC,yBAAyB,OAAO,CAAC,YAAY,CAAC,UAAU;IAElF,MAAMC,UAAUC,YAAY;QACxB,IAAI,CAACN,MAAM,EAAE,EAAE,YACXO,QAAQ,IAAI,CAAC;QAGjBN,qBAAqB;YAAE,IAAID,MAAM,EAAE;QAAC;IACxC,GAAG;QAACA,MAAM,EAAE;KAAC;IAEb,MAAM,EAAEQ,OAAO,EAAEC,UAAU,EAAE,GAAGC;IAEhC,IAAIV,AAAsB,gBAAtBA,MAAM,IAAI,CAAC,MAAM,EACjB,OAAO;IACJ,IAAI,CAACQ,QAAQR,OAAO,uBAAuB,CAACS,WAAW,qBAC1D,OAAO;IAGX,OAAO,WAAP,GACI,oBAACN,eAAAA;QACG,UAAUE;QACV,UAAUN;QACV,eAAY;OAEX;AAGb"}
|