@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,39 +1,24 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
|
|
3
|
-
import { useWorkflowState } from "@webiny/app-workflows";
|
|
3
|
+
import { WorkflowStateValue, useWorkflowState } from "@webiny/app-workflows";
|
|
4
4
|
import { observer } from "mobx-react-lite";
|
|
5
|
-
import { WorkflowStateValue } from "@webiny/app-workflows";
|
|
6
5
|
import { CmsEntryFormPublishButton } from "./CmsEntryFormPublishButton.js";
|
|
7
|
-
const {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const {
|
|
15
|
-
presenter
|
|
16
|
-
} = useWorkflowState();
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* If there is no workflow state or state is approved, we simply render the original element.
|
|
20
|
-
* This is to ensure that no button will be shown if workflow state is active.
|
|
21
|
-
*/
|
|
22
|
-
if (props.name !== "publish" || !presenter.vm.workflow) {
|
|
23
|
-
return props.children;
|
|
24
|
-
} else if (presenter.vm.state?.state === WorkflowStateValue.approved) {
|
|
25
|
-
return /*#__PURE__*/React.createElement(CmsEntryFormPublishButton, null);
|
|
26
|
-
}
|
|
27
|
-
return null;
|
|
28
|
-
});
|
|
29
|
-
export const CmsEntryFormSaveAndPublishButton = ButtonAction.createDecorator(Original => {
|
|
30
|
-
return function WorkflowCmsEntryFormSaveAndPublishButton(props) {
|
|
31
|
-
return /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
|
|
32
|
-
element: /*#__PURE__*/React.createElement(OverrideSaveAndPublishButton, {
|
|
33
|
-
name: props.name
|
|
34
|
-
}, props.element)
|
|
35
|
-
}));
|
|
36
|
-
};
|
|
6
|
+
const { Actions: Actions } = ContentEntryEditorConfig;
|
|
7
|
+
const { ButtonAction: ButtonAction } = Actions;
|
|
8
|
+
const OverrideSaveAndPublishButton = observer((props)=>{
|
|
9
|
+
const { presenter } = useWorkflowState();
|
|
10
|
+
if ("publish" !== props.name || !presenter.vm.workflow) return props.children;
|
|
11
|
+
if (presenter.vm.state?.state === WorkflowStateValue.approved) return /*#__PURE__*/ react.createElement(CmsEntryFormPublishButton, null);
|
|
12
|
+
return null;
|
|
37
13
|
});
|
|
14
|
+
const CmsEntryFormSaveAndPublishButton = ButtonAction.createDecorator((Original)=>function(props) {
|
|
15
|
+
return /*#__PURE__*/ react.createElement(Original, {
|
|
16
|
+
...props,
|
|
17
|
+
element: /*#__PURE__*/ react.createElement(OverrideSaveAndPublishButton, {
|
|
18
|
+
name: props.name
|
|
19
|
+
}, props.element)
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
export { CmsEntryFormSaveAndPublishButton };
|
|
38
23
|
|
|
39
24
|
//# sourceMappingURL=CmsEntryFormSaveAndPublishButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.js","sources":["../../../src/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { observer } from \"mobx-react-lite\";\nimport { WorkflowStateValue } from \"@webiny/app-workflows\";\nimport { CmsEntryFormPublishButton } from \"./CmsEntryFormPublishButton.js\";\n\nconst { Actions } = ContentEntryEditorConfig;\nconst { ButtonAction } = Actions;\n\ninterface IOverrideSaveAndPublishButtonProps {\n name: string;\n children: React.ReactElement;\n}\n\nconst OverrideSaveAndPublishButton = observer((props: IOverrideSaveAndPublishButtonProps) => {\n const { presenter } = useWorkflowState();\n\n /**\n * If there is no workflow state or state is approved, we simply render the original element.\n * This is to ensure that no button will be shown if workflow state is active.\n */\n if (props.name !== \"publish\" || !presenter.vm.workflow) {\n return props.children;\n } else if (presenter.vm.state?.state === WorkflowStateValue.approved) {\n return <CmsEntryFormPublishButton />;\n }\n return null;\n});\n\nexport const CmsEntryFormSaveAndPublishButton = ButtonAction.createDecorator(Original => {\n return function WorkflowCmsEntryFormSaveAndPublishButton(props) {\n return (\n <Original\n {...props}\n element={\n <OverrideSaveAndPublishButton name={props.name}>\n {props.element}\n </OverrideSaveAndPublishButton>\n }\n />\n );\n };\n});\n"],"names":["Actions","ContentEntryEditorConfig","ButtonAction","OverrideSaveAndPublishButton","observer","props","presenter","useWorkflowState","WorkflowStateValue","CmsEntryFormPublishButton","CmsEntryFormSaveAndPublishButton","Original"],"mappings":";;;;;AAOA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AACpB,MAAM,EAAEC,cAAAA,YAAY,EAAE,GAAGF;AAOzB,MAAMG,+BAA+BC,SAAS,CAACC;IAC3C,MAAM,EAAEC,SAAS,EAAE,GAAGC;IAMtB,IAAIF,AAAe,cAAfA,MAAM,IAAI,IAAkB,CAACC,UAAU,EAAE,CAAC,QAAQ,EAClD,OAAOD,MAAM,QAAQ;IAClB,IAAIC,UAAU,EAAE,CAAC,KAAK,EAAE,UAAUE,mBAAmB,QAAQ,EAChE,OAAO,WAAP,GAAO,oBAACC,2BAAyBA;IAErC,OAAO;AACX;AAEO,MAAMC,mCAAmCR,aAAa,eAAe,CAACS,CAAAA,WAClE,SAAkDN,KAAK;QAC1D,OAAO,WAAP,GACI,oBAACM,UAAAA;YACI,GAAGN,KAAK;YACT,uBACI,oBAACF,8BAA4BA;gBAAC,MAAME,MAAM,IAAI;eACzCA,MAAM,OAAO;;IAKlC"}
|
|
@@ -1,37 +1,23 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
|
|
3
3
|
import { useWorkflowState } from "@webiny/app-workflows";
|
|
4
4
|
import { observer } from "mobx-react-lite";
|
|
5
|
-
const {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const {
|
|
13
|
-
presenter
|
|
14
|
-
} = useWorkflowState();
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* If there is no workflow state or state is approved, we simply render the original element.
|
|
18
|
-
* This is to ensure that no button will be shown if workflow state is active.
|
|
19
|
-
*/
|
|
20
|
-
if (props.name !== "save") {
|
|
21
|
-
return props.children;
|
|
22
|
-
} else if (!presenter.vm.state) {
|
|
23
|
-
return props.children;
|
|
24
|
-
}
|
|
25
|
-
return null;
|
|
26
|
-
});
|
|
27
|
-
export const CmsEntryFormSaveButton = ButtonAction.createDecorator(Original => {
|
|
28
|
-
return function WorkflowCmsEntryFormSaveButton(props) {
|
|
29
|
-
return /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
|
|
30
|
-
element: /*#__PURE__*/React.createElement(OverrideSaveButton, {
|
|
31
|
-
name: props.name
|
|
32
|
-
}, props.element)
|
|
33
|
-
}));
|
|
34
|
-
};
|
|
5
|
+
const { Actions: Actions } = ContentEntryEditorConfig;
|
|
6
|
+
const { ButtonAction: ButtonAction } = Actions;
|
|
7
|
+
const OverrideSaveButton = observer((props)=>{
|
|
8
|
+
const { presenter } = useWorkflowState();
|
|
9
|
+
if ("save" !== props.name) return props.children;
|
|
10
|
+
if (!presenter.vm.state) return props.children;
|
|
11
|
+
return null;
|
|
35
12
|
});
|
|
13
|
+
const CmsEntryFormSaveButton = ButtonAction.createDecorator((Original)=>function(props) {
|
|
14
|
+
return /*#__PURE__*/ react.createElement(Original, {
|
|
15
|
+
...props,
|
|
16
|
+
element: /*#__PURE__*/ react.createElement(OverrideSaveButton, {
|
|
17
|
+
name: props.name
|
|
18
|
+
}, props.element)
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
export { CmsEntryFormSaveButton };
|
|
36
22
|
|
|
37
23
|
//# sourceMappingURL=CmsEntryFormSaveButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/ContentEntryForm/CmsEntryFormSaveButton.js","sources":["../../../src/Components/ContentEntryForm/CmsEntryFormSaveButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { observer } from \"mobx-react-lite\";\n\nconst { Actions } = ContentEntryEditorConfig;\nconst { ButtonAction } = Actions;\n\ninterface IOverrideSaveButtonProps {\n name: string;\n children: React.ReactElement;\n}\n\nconst OverrideSaveButton = observer((props: IOverrideSaveButtonProps) => {\n const { presenter } = useWorkflowState();\n\n /**\n * If there is no workflow state or state is approved, we simply render the original element.\n * This is to ensure that no button will be shown if workflow state is active.\n */\n if (props.name !== \"save\") {\n return props.children;\n } else if (!presenter.vm.state) {\n return props.children;\n }\n return null;\n});\n\nexport const CmsEntryFormSaveButton = ButtonAction.createDecorator(Original => {\n return function WorkflowCmsEntryFormSaveButton(props) {\n return (\n <Original\n {...props}\n element={<OverrideSaveButton name={props.name}>{props.element}</OverrideSaveButton>}\n />\n );\n };\n});\n"],"names":["Actions","ContentEntryEditorConfig","ButtonAction","OverrideSaveButton","observer","props","presenter","useWorkflowState","CmsEntryFormSaveButton","Original"],"mappings":";;;;AAKA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AACpB,MAAM,EAAEC,cAAAA,YAAY,EAAE,GAAGF;AAOzB,MAAMG,qBAAqBC,SAAS,CAACC;IACjC,MAAM,EAAEC,SAAS,EAAE,GAAGC;IAMtB,IAAIF,AAAe,WAAfA,MAAM,IAAI,EACV,OAAOA,MAAM,QAAQ;IAClB,IAAI,CAACC,UAAU,EAAE,CAAC,KAAK,EAC1B,OAAOD,MAAM,QAAQ;IAEzB,OAAO;AACX;AAEO,MAAMG,yBAAyBN,aAAa,eAAe,CAACO,CAAAA,WACxD,SAAwCJ,KAAK;QAChD,OAAO,WAAP,GACI,oBAACI,UAAAA;YACI,GAAGJ,KAAK;YACT,uBAAS,oBAACF,oBAAkBA;gBAAC,MAAME,MAAM,IAAI;eAAGA,MAAM,OAAO;;IAGzE"}
|
|
@@ -1,38 +1,23 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
|
|
3
|
-
import {
|
|
4
|
-
const {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const {
|
|
12
|
-
presenter
|
|
13
|
-
} = useWorkflowState();
|
|
14
|
-
/**
|
|
15
|
-
* If there is no workflow state or state is approved, we simply render the original element.
|
|
16
|
-
* This is to ensure that no button will be shown if workflow state is active.
|
|
17
|
-
*/
|
|
18
|
-
if (!presenter.vm.workflow || presenter.vm.state?.state === WorkflowStateValue.approved) {
|
|
3
|
+
import { WorkflowStateValue, useWorkflowState } from "@webiny/app-workflows";
|
|
4
|
+
const { Actions: Actions } = ContentEntryEditorConfig;
|
|
5
|
+
const { MenuItemAction: MenuItemAction } = Actions;
|
|
6
|
+
const OverrideScheduleMenuItemAction = (props)=>{
|
|
7
|
+
const { presenter } = useWorkflowState();
|
|
8
|
+
if (presenter.vm.workflow && presenter.vm.state?.state !== WorkflowStateValue.approved) {
|
|
9
|
+
if ("schedule" === props.name) return null;
|
|
10
|
+
}
|
|
19
11
|
return props.children;
|
|
20
|
-
} else if (props.name === "schedule") {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
return props.children;
|
|
24
12
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}));
|
|
35
|
-
};
|
|
36
|
-
});
|
|
13
|
+
const CmsEntryFormScheduleMenuItemAction = MenuItemAction.createDecorator((Original)=>function(props) {
|
|
14
|
+
return /*#__PURE__*/ react.createElement(Original, {
|
|
15
|
+
...props,
|
|
16
|
+
element: /*#__PURE__*/ react.createElement(OverrideScheduleMenuItemAction, {
|
|
17
|
+
name: props.name
|
|
18
|
+
}, props.element)
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
export { CmsEntryFormScheduleMenuItemAction };
|
|
37
22
|
|
|
38
23
|
//# sourceMappingURL=CmsEntryFormScheduleMenuItemAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js","sources":["../../../src/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\nimport { useWorkflowState, WorkflowStateValue } from \"@webiny/app-workflows\";\n\nconst { Actions } = ContentEntryEditorConfig;\nconst { MenuItemAction } = Actions;\n\ninterface IOverrideScheduleMenuItemActionProps {\n name: string;\n children: React.ReactElement;\n}\n\nconst OverrideScheduleMenuItemAction = (props: IOverrideScheduleMenuItemActionProps) => {\n const { presenter } = useWorkflowState();\n /**\n * If there is no workflow state or state is approved, we simply render the original element.\n * This is to ensure that no button will be shown if workflow state is active.\n */\n if (!presenter.vm.workflow || presenter.vm.state?.state === WorkflowStateValue.approved) {\n return props.children;\n } else if (props.name === \"schedule\") {\n return null;\n }\n return props.children;\n};\n/**\n * There is a possibility that this decorator will not do anything, because scheduler is not turned on.\n */\nexport const CmsEntryFormScheduleMenuItemAction = MenuItemAction.createDecorator(Original => {\n return function WorkflowCmsEntryScheduleMenuItemAction(props) {\n return (\n <Original\n {...props}\n element={\n <OverrideScheduleMenuItemAction name={props.name}>\n {props.element}\n </OverrideScheduleMenuItemAction>\n }\n />\n );\n };\n});\n"],"names":["Actions","ContentEntryEditorConfig","MenuItemAction","OverrideScheduleMenuItemAction","props","presenter","useWorkflowState","WorkflowStateValue","CmsEntryFormScheduleMenuItemAction","Original"],"mappings":";;;AAIA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AACpB,MAAM,EAAEC,gBAAAA,cAAc,EAAE,GAAGF;AAO3B,MAAMG,iCAAiC,CAACC;IACpC,MAAM,EAAEC,SAAS,EAAE,GAAGC;IAKtB,IAAI,AAACD,UAAU,EAAE,CAAC,QAAQ,IAAIA,UAAU,EAAE,CAAC,KAAK,EAAE,UAAUE,mBAAmB,QAAQ,EAEhF;QAAA,IAAIH,AAAe,eAAfA,MAAM,IAAI,EACjB,OAAO;IACX;IACA,OAAOA,MAAM,QAAQ;AACzB;AAIO,MAAMI,qCAAqCN,eAAe,eAAe,CAACO,CAAAA,WACtE,SAAgDL,KAAK;QACxD,OAAO,WAAP,GACI,oBAACK,UAAAA;YACI,GAAGL,KAAK;YACT,uBACI,oBAACD,gCAA8BA;gBAAC,MAAMC,MAAM,IAAI;eAC3CA,MAAM,OAAO;;IAKlC"}
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { Components } from "@webiny/app-workflows";
|
|
3
3
|
import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
|
|
4
|
-
const {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export const CmsEntryFormTooltipButton = () => {
|
|
13
|
-
return /*#__PURE__*/React.createElement(ContentEntryEditorConfig, null, /*#__PURE__*/React.createElement(Actions.ButtonAction, {
|
|
14
|
-
before: "save",
|
|
15
|
-
name: "workflowStateTooltip",
|
|
16
|
-
element: /*#__PURE__*/React.createElement(WorkflowStateTooltip, null)
|
|
17
|
-
}));
|
|
18
|
-
};
|
|
4
|
+
const { ContentReview: { WorkflowStateTooltip: WorkflowStateTooltip } } = Components;
|
|
5
|
+
const { Actions: Actions } = ContentEntryEditorConfig;
|
|
6
|
+
const CmsEntryFormTooltipButton = ()=>/*#__PURE__*/ react.createElement(ContentEntryEditorConfig, null, /*#__PURE__*/ react.createElement(Actions.ButtonAction, {
|
|
7
|
+
before: "save",
|
|
8
|
+
name: "workflowStateTooltip",
|
|
9
|
+
element: /*#__PURE__*/ react.createElement(WorkflowStateTooltip, null)
|
|
10
|
+
}));
|
|
11
|
+
export { CmsEntryFormTooltipButton };
|
|
19
12
|
|
|
20
13
|
//# sourceMappingURL=CmsEntryFormTooltipButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/ContentEntryForm/CmsEntryFormTooltipButton.js","sources":["../../../src/Components/ContentEntryForm/CmsEntryFormTooltipButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\n\nconst {\n ContentReview: { WorkflowStateTooltip }\n} = Components;\n\nconst { Actions } = ContentEntryEditorConfig;\n\nexport const CmsEntryFormTooltipButton = () => {\n return (\n <ContentEntryEditorConfig>\n <Actions.ButtonAction\n before={\"save\"}\n name={\"workflowStateTooltip\"}\n element={<WorkflowStateTooltip />}\n />\n </ContentEntryEditorConfig>\n );\n};\n"],"names":["WorkflowStateTooltip","Components","Actions","ContentEntryEditorConfig","CmsEntryFormTooltipButton"],"mappings":";;;AAIA,MAAM,EACF,eAAe,EAAEA,sBAAAA,oBAAoB,EAAE,EAC1C,GAAGC;AAEJ,MAAM,EAAEC,SAAAA,OAAO,EAAE,GAAGC;AAEb,MAAMC,4BAA4B,IAC9B,WAAP,GACI,oBAACD,0BAAwBA,MAAAA,WAAAA,GACrB,oBAACD,QAAQ,YAAY;QACjB,QAAQ;QACR,MAAM;QACN,uBAAS,oBAACF,sBAAoBA"}
|
|
@@ -1,73 +1,40 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { ContentEntryForm, useModel } from "@webiny/app-headless-cms";
|
|
3
3
|
import { Components } from "@webiny/app-workflows";
|
|
4
4
|
import { Alert, Grid } from "@webiny/admin-ui";
|
|
5
5
|
import { CMS_MODEL_SINGLETON_TAG } from "@webiny/app-headless-cms-common";
|
|
6
|
-
const {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* To override storing of the entry when in workflow state.
|
|
15
|
-
*/
|
|
16
|
-
// @ts-expect-error
|
|
17
|
-
const emptyFunction = async () => {
|
|
18
|
-
return void 0;
|
|
19
|
-
};
|
|
20
|
-
const StoreAlert = ({
|
|
21
|
-
state
|
|
22
|
-
}) => {
|
|
23
|
-
if (!state) {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
return /*#__PURE__*/React.createElement(Alert, {
|
|
27
|
-
className: "mb-md",
|
|
28
|
-
type: "danger"
|
|
29
|
-
}, "Any changes you do on the entry will not be stored!");
|
|
6
|
+
const { ContentReview: { WorkflowStateBar: WorkflowStateBar, WorkflowStateOverlay: WorkflowStateOverlay } } = Components;
|
|
7
|
+
const emptyFunction = async ()=>{};
|
|
8
|
+
const StoreAlert = ({ state })=>{
|
|
9
|
+
if (!state) return null;
|
|
10
|
+
return /*#__PURE__*/ react.createElement(Alert, {
|
|
11
|
+
className: "mb-md",
|
|
12
|
+
type: "danger"
|
|
13
|
+
}, "Any changes you do on the entry will not be stored!");
|
|
30
14
|
};
|
|
31
|
-
const shouldShowOriginal = params
|
|
32
|
-
|
|
33
|
-
entry
|
|
34
|
-
model
|
|
35
|
-
} = params;
|
|
36
|
-
/**
|
|
37
|
-
* In case of new entry or no model, show original.
|
|
38
|
-
* Also, for singleton models, show original.
|
|
39
|
-
*/
|
|
40
|
-
if (!entry?.id || !model?.tags) {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
return model.tags.includes(CMS_MODEL_SINGLETON_TAG);
|
|
15
|
+
const shouldShowOriginal = (params)=>{
|
|
16
|
+
const { entry, model } = params;
|
|
17
|
+
if (!entry?.id || !model?.tags) return true;
|
|
18
|
+
return model.tags.includes(CMS_MODEL_SINGLETON_TAG);
|
|
44
19
|
};
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
20
|
+
const ContentEntryFormWorkflow_ContentEntryFormWorkflow = ContentEntryForm.createDecorator((Original)=>function(props) {
|
|
21
|
+
const { model } = useModel();
|
|
22
|
+
const showOriginal = shouldShowOriginal({
|
|
23
|
+
entry: props.entry,
|
|
24
|
+
model
|
|
25
|
+
});
|
|
26
|
+
if (showOriginal) return /*#__PURE__*/ react.createElement(Original, props);
|
|
27
|
+
return /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
28
|
+
span: 12
|
|
29
|
+
}, /*#__PURE__*/ react.createElement(WorkflowStateBar, null)), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
30
|
+
span: 12
|
|
31
|
+
}, /*#__PURE__*/ react.createElement(WorkflowStateOverlay, null, ({ state })=>/*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(StoreAlert, {
|
|
32
|
+
state: state
|
|
33
|
+
}), /*#__PURE__*/ react.createElement(Original, {
|
|
34
|
+
...props,
|
|
35
|
+
persistEntry: state ? emptyFunction : props.persistEntry
|
|
36
|
+
})))));
|
|
53
37
|
});
|
|
54
|
-
|
|
55
|
-
return /*#__PURE__*/React.createElement(Original, props);
|
|
56
|
-
}
|
|
57
|
-
return /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
58
|
-
span: 12
|
|
59
|
-
}, /*#__PURE__*/React.createElement(WorkflowStateBar, null)), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
60
|
-
span: 12
|
|
61
|
-
}, /*#__PURE__*/React.createElement(WorkflowStateOverlay, null, ({
|
|
62
|
-
state
|
|
63
|
-
}) => {
|
|
64
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StoreAlert, {
|
|
65
|
-
state: state
|
|
66
|
-
}), /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
|
|
67
|
-
persistEntry: state ? emptyFunction : props.persistEntry
|
|
68
|
-
})));
|
|
69
|
-
})));
|
|
70
|
-
};
|
|
71
|
-
});
|
|
38
|
+
export { ContentEntryFormWorkflow_ContentEntryFormWorkflow as ContentEntryFormWorkflow };
|
|
72
39
|
|
|
73
40
|
//# sourceMappingURL=ContentEntryFormWorkflow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/ContentEntryForm/ContentEntryFormWorkflow.js","sources":["../../../src/Components/ContentEntryForm/ContentEntryFormWorkflow.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryForm, useModel } from \"@webiny/app-headless-cms\";\nimport type { IWorkflowState } from \"@webiny/app-workflows\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { Alert, Grid } from \"@webiny/admin-ui\";\nimport type { PersistEntry } from \"@webiny/app-headless-cms/admin/components/ContentEntryForm/ContentEntryFormProvider.js\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/app-headless-cms-common\";\nimport type { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms-common/types/index.js\";\n\nconst {\n ContentReview: { WorkflowStateBar, WorkflowStateOverlay }\n} = Components;\n\n/**\n * To override storing of the entry when in workflow state.\n */\n// @ts-expect-error\nconst emptyFunction: PersistEntry = async () => {\n return void 0;\n};\n\ninterface IStoreAlertProps {\n state: IWorkflowState | undefined;\n}\n\nconst StoreAlert = ({ state }: IStoreAlertProps) => {\n if (!state) {\n return null;\n }\n return (\n <Alert className={\"mb-md\"} type=\"danger\">\n Any changes you do on the entry will not be stored!\n </Alert>\n );\n};\n\ninterface IShouldShowOriginalParams {\n entry: Partial<Pick<CmsContentEntry, \"id\">>;\n model: Partial<Pick<CmsModel, \"tags\">>;\n}\nconst shouldShowOriginal = (params: IShouldShowOriginalParams): boolean => {\n const { entry, model } = params;\n /**\n * In case of new entry or no model, show original.\n * Also, for singleton models, show original.\n */\n if (!entry?.id || !model?.tags) {\n return true;\n }\n return model.tags.includes(CMS_MODEL_SINGLETON_TAG);\n};\n\nexport const ContentEntryFormWorkflow = ContentEntryForm.createDecorator(Original => {\n return function ContentEntryFormWorkflow(props) {\n const { model } = useModel();\n\n const showOriginal = shouldShowOriginal({\n entry: props.entry,\n model\n });\n\n if (showOriginal) {\n return <Original {...props} />;\n }\n\n return (\n <Grid>\n <Grid.Column span={12}>\n <WorkflowStateBar />\n </Grid.Column>\n <Grid.Column span={12}>\n <WorkflowStateOverlay>\n {({ state }) => {\n return (\n <>\n <StoreAlert state={state} />\n <Original\n {...props}\n persistEntry={state ? emptyFunction : props.persistEntry}\n />\n </>\n );\n }}\n </WorkflowStateOverlay>\n </Grid.Column>\n </Grid>\n );\n };\n});\n"],"names":["WorkflowStateBar","WorkflowStateOverlay","Components","emptyFunction","StoreAlert","state","Alert","shouldShowOriginal","params","entry","model","CMS_MODEL_SINGLETON_TAG","ContentEntryFormWorkflow","ContentEntryForm","Original","props","useModel","showOriginal","Grid"],"mappings":";;;;;AASA,MAAM,EACF,eAAe,EAAEA,kBAAAA,gBAAgB,EAAEC,sBAAAA,oBAAoB,EAAE,EAC5D,GAAGC;AAMJ,MAAMC,gBAA8B,WAEpC;AAMA,MAAMC,aAAa,CAAC,EAAEC,KAAK,EAAoB;IAC3C,IAAI,CAACA,OACD,OAAO;IAEX,OAAO,WAAP,GACI,oBAACC,OAAKA;QAAC,WAAW;QAAS,MAAK;OAAS;AAIjD;AAMA,MAAMC,qBAAqB,CAACC;IACxB,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF;IAKzB,IAAI,CAACC,OAAO,MAAM,CAACC,OAAO,MACtB,OAAO;IAEX,OAAOA,MAAM,IAAI,CAAC,QAAQ,CAACC;AAC/B;AAEO,MAAMC,oDAA2BC,iBAAiB,eAAe,CAACC,CAAAA,WAC9D,SAAkCC,KAAK;QAC1C,MAAM,EAAEL,KAAK,EAAE,GAAGM;QAElB,MAAMC,eAAeV,mBAAmB;YACpC,OAAOQ,MAAM,KAAK;YAClBL;QACJ;QAEA,IAAIO,cACA,OAAO,WAAP,GAAO,oBAACH,UAAaC;QAGzB,OAAO,WAAP,GACI,oBAACG,MAAIA,MAAAA,WAAAA,GACD,oBAACA,KAAK,MAAM;YAAC,MAAM;yBACf,oBAAClB,kBAAgBA,QAAAA,WAAAA,GAErB,oBAACkB,KAAK,MAAM;YAAC,MAAM;yBACf,oBAACjB,sBAAoBA,MAChB,CAAC,EAAEI,KAAK,EAAE,GACA,WAAP,GACI,wDACI,oBAACD,YAAUA;gBAAC,OAAOC;8BACnB,oBAACS,UAAAA;gBACI,GAAGC,KAAK;gBACT,cAAcV,QAAQF,gBAAgBY,MAAM,YAAY;;IAS5F"}
|
|
@@ -1,35 +1,23 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { ContentEntryEditorConfig, useContentEntry } from "@webiny/app-headless-cms";
|
|
3
3
|
import { Components } from "@webiny/app-workflows";
|
|
4
4
|
import { useSecurity } from "@webiny/app-admin";
|
|
5
5
|
import { useApolloClient } from "@apollo/react-hooks";
|
|
6
6
|
import { createAppName } from "../../utils/appName.js";
|
|
7
|
-
const {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const {
|
|
23
|
-
identity
|
|
24
|
-
} = useSecurity();
|
|
25
|
-
return /*#__PURE__*/React.createElement(WorkflowStateProvider, {
|
|
26
|
-
app: createAppName(model),
|
|
27
|
-
id: entry.id,
|
|
28
|
-
identity: identity,
|
|
29
|
-
client: client,
|
|
30
|
-
title: `${model.name}: ${entry.meta?.title || "unknown"}`
|
|
31
|
-
}, /*#__PURE__*/React.createElement(Original, null));
|
|
32
|
-
};
|
|
33
|
-
});
|
|
7
|
+
const { ContentReview: { WorkflowStateProvider: WorkflowStateProvider } } = Components;
|
|
8
|
+
const { ContentEntry: ContentEntry } = ContentEntryEditorConfig;
|
|
9
|
+
const ContentEntryWorkflow = ContentEntry.createDecorator((Original)=>function() {
|
|
10
|
+
const { entry, contentModel: model } = useContentEntry();
|
|
11
|
+
const client = useApolloClient();
|
|
12
|
+
const { identity } = useSecurity();
|
|
13
|
+
return /*#__PURE__*/ react.createElement(WorkflowStateProvider, {
|
|
14
|
+
app: createAppName(model),
|
|
15
|
+
id: entry.id,
|
|
16
|
+
identity: identity,
|
|
17
|
+
client: client,
|
|
18
|
+
title: `${model.name}: ${entry.meta?.title || "unknown"}`
|
|
19
|
+
}, /*#__PURE__*/ react.createElement(Original, null));
|
|
20
|
+
});
|
|
21
|
+
export { ContentEntryWorkflow };
|
|
34
22
|
|
|
35
23
|
//# sourceMappingURL=ContentEntryWorkflow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/ContentEntryForm/ContentEntryWorkflow.js","sources":["../../../src/Components/ContentEntryForm/ContentEntryWorkflow.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig, useContentEntry } from \"@webiny/app-headless-cms\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { useSecurity } from \"@webiny/app-admin\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { createAppName } from \"~/utils/appName.js\";\n\nconst {\n ContentReview: { WorkflowStateProvider }\n} = Components;\n\nconst { ContentEntry } = ContentEntryEditorConfig;\n\nexport const ContentEntryWorkflow = ContentEntry.createDecorator(Original => {\n return function ContentEntryWorkflowSetup() {\n const { entry, contentModel: model } = useContentEntry();\n const client = useApolloClient();\n\n const { identity } = useSecurity();\n\n return (\n <WorkflowStateProvider\n app={createAppName(model)}\n id={entry.id}\n identity={identity}\n client={client}\n title={`${model.name}: ${entry.meta?.title || \"unknown\"}`}\n >\n <Original />\n </WorkflowStateProvider>\n );\n };\n});\n"],"names":["WorkflowStateProvider","Components","ContentEntry","ContentEntryEditorConfig","ContentEntryWorkflow","Original","entry","model","useContentEntry","client","useApolloClient","identity","useSecurity","createAppName"],"mappings":";;;;;;AAOA,MAAM,EACF,eAAe,EAAEA,uBAAAA,qBAAqB,EAAE,EAC3C,GAAGC;AAEJ,MAAM,EAAEC,cAAAA,YAAY,EAAE,GAAGC;AAElB,MAAMC,uBAAuBF,aAAa,eAAe,CAACG,CAAAA,WACtD;QACH,MAAM,EAAEC,KAAK,EAAE,cAAcC,KAAK,EAAE,GAAGC;QACvC,MAAMC,SAASC;QAEf,MAAM,EAAEC,QAAQ,EAAE,GAAGC;QAErB,OAAO,WAAP,GACI,oBAACZ,uBAAqBA;YAClB,KAAKa,cAAcN;YACnB,IAAID,MAAM,EAAE;YACZ,UAAUK;YACV,QAAQF;YACR,OAAO,GAAGF,MAAM,IAAI,CAAC,EAAE,EAAED,MAAM,IAAI,EAAE,SAAS,WAAW;yBAEzD,oBAACD,UAAAA;IAGb"}
|
|
@@ -5,5 +5,3 @@ export { CmsEntryFormScheduleMenuItemAction } from "./CmsEntryFormScheduleMenuIt
|
|
|
5
5
|
export { CmsEntryFormSaveAndPublishButton } from "./CmsEntryFormSaveAndPublishButton.js";
|
|
6
6
|
export { CmsEntryFormSaveButton } from "./CmsEntryFormSaveButton.js";
|
|
7
7
|
export { CmsEntryFormCreateNewRevisionButton } from "./CmsEntryFormCreateNewRevisionButton.js";
|
|
8
|
-
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,44 +1,36 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react, { useCallback } from "react";
|
|
2
2
|
import { DropdownMenu, Icon } from "@webiny/admin-ui";
|
|
3
3
|
import { Components } from "@webiny/app-workflows";
|
|
4
|
-
import { ReactComponent
|
|
4
|
+
import { ReactComponent } from "@webiny/icons/open_in_new.svg";
|
|
5
5
|
import { useRouter } from "@webiny/app";
|
|
6
6
|
import { Routes } from "@webiny/app-headless-cms/routes.js";
|
|
7
7
|
import { isCmsAppName, parseAppName } from "../../utils/appName.js";
|
|
8
|
-
const {
|
|
9
|
-
|
|
10
|
-
} =
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return /*#__PURE__*/React.createElement(DropdownMenu.Item, {
|
|
34
|
-
icon: /*#__PURE__*/React.createElement(Icon, {
|
|
35
|
-
icon: /*#__PURE__*/React.createElement(OpenInNewIcon, null),
|
|
36
|
-
label: "Open In New Window"
|
|
37
|
-
}),
|
|
38
|
-
text: "Open in New Window",
|
|
39
|
-
onClick: onClick
|
|
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 modelId = parseAppName(state.app);
|
|
14
|
+
const url = getLink(Routes.ContentEntries.List, {
|
|
15
|
+
modelId,
|
|
16
|
+
id: state.targetRevisionId,
|
|
17
|
+
folderId: "root"
|
|
18
|
+
});
|
|
19
|
+
const goTo = `${window.location.origin}${url}`;
|
|
20
|
+
window.open(goTo, "_blank");
|
|
21
|
+
}, [
|
|
22
|
+
state.id
|
|
23
|
+
]);
|
|
24
|
+
if (false === isCmsAppName(state.app)) return /*#__PURE__*/ react.createElement(Original, props);
|
|
25
|
+
return /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
|
|
26
|
+
icon: /*#__PURE__*/ react.createElement(Icon, {
|
|
27
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
28
|
+
label: "Open In New Window"
|
|
29
|
+
}),
|
|
30
|
+
text: "Open in New Window",
|
|
31
|
+
onClick: onClick
|
|
32
|
+
});
|
|
40
33
|
});
|
|
41
|
-
|
|
42
|
-
});
|
|
34
|
+
export { OpenInNewWindow_ListOpenInNewWindow as ListOpenInNewWindow };
|
|
43
35
|
|
|
44
36
|
//# sourceMappingURL=OpenInNewWindow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Components/OptionItem/OpenInNewWindow.js","sources":["../../../src/Components/OptionItem/OpenInNewWindow.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { DropdownMenu, Icon } from \"@webiny/admin-ui\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { ReactComponent as OpenInNewIcon } from \"@webiny/icons/open_in_new.svg\";\nimport { useRouter } from \"@webiny/app\";\nimport { Routes } from \"@webiny/app-headless-cms/routes.js\";\nimport { isCmsAppName, parseAppName } from \"~/utils/appName.js\";\n\nconst { OpenInNewWindow } = Components.List.Options;\n\nexport const ListOpenInNewWindow = OpenInNewWindow.createDecorator(Original => {\n return function ListOpenInNewWindow(props) {\n const { state } = props;\n\n const { getLink } = useRouter();\n const onClick = useCallback(() => {\n const modelId = parseAppName(state.app);\n const url = getLink(Routes.ContentEntries.List, {\n modelId,\n id: state.targetRevisionId,\n // TODO figure out how to load folderId\n folderId: \"root\"\n });\n\n const goTo = `${window.location.origin}${url}`;\n\n window.open(goTo, \"_blank\");\n }, [state.id]);\n\n if (isCmsAppName(state.app) === false) {\n return <Original {...props} />;\n }\n\n return (\n <DropdownMenu.Item\n icon={<Icon icon={<OpenInNewIcon />} label={\"Open In New Window\"} />}\n text={\"Open in New Window\"}\n onClick={onClick}\n />\n );\n };\n});\n"],"names":["OpenInNewWindow","Components","ListOpenInNewWindow","Original","props","state","getLink","useRouter","onClick","useCallback","modelId","parseAppName","url","Routes","goTo","window","isCmsAppName","DropdownMenu","Icon","OpenInNewIcon"],"mappings":";;;;;;;AAQA,MAAM,EAAEA,iBAAAA,eAAe,EAAE,GAAGC,WAAW,IAAI,CAAC,OAAO;AAE5C,MAAMC,sCAAsBF,gBAAgB,eAAe,CAACG,CAAAA,WACxD,SAA6BC,KAAK;QACrC,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAElB,MAAM,EAAEE,OAAO,EAAE,GAAGC;QACpB,MAAMC,UAAUC,YAAY;YACxB,MAAMC,UAAUC,aAAaN,MAAM,GAAG;YACtC,MAAMO,MAAMN,QAAQO,OAAO,cAAc,CAAC,IAAI,EAAE;gBAC5CH;gBACA,IAAIL,MAAM,gBAAgB;gBAE1B,UAAU;YACd;YAEA,MAAMS,OAAO,GAAGC,OAAO,QAAQ,CAAC,MAAM,GAAGH,KAAK;YAE9CG,OAAO,IAAI,CAACD,MAAM;QACtB,GAAG;YAACT,MAAM,EAAE;SAAC;QAEb,IAAIW,AAA4B,UAA5BA,aAAaX,MAAM,GAAG,GACtB,OAAO,WAAP,GAAO,oBAACF,UAAaC;QAGzB,OAAO,WAAP,GACI,oBAACa,aAAa,IAAI;YACd,oBAAM,oBAACC,MAAIA;gBAAC,oBAAM,oBAACC,gBAAaA;gBAAK,OAAO;;YAC5C,MAAM;YACN,SAASX;;IAGrB"}
|