@strapi/review-workflows 0.0.0-experimental.826f263c58b6886b849d3f03b81f7a530bc51c91 → 0.0.0-experimental.8c83c87960f2f5ddf95ae2f0acf849052f4a9ab4
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/LICENSE +12 -17
- package/dist/_chunks/{Layout-lg3hbwGL.mjs → Layout-BGC42hTJ.mjs} +9 -10
- package/dist/_chunks/Layout-BGC42hTJ.mjs.map +1 -0
- package/dist/_chunks/{Layout-BMqtFafC.js → Layout-DcZnQxp9.js} +10 -12
- package/dist/_chunks/Layout-DcZnQxp9.js.map +1 -0
- package/dist/_chunks/{en-xcewH2pC.js → en-CYgjfSep.js} +5 -2
- package/dist/_chunks/en-CYgjfSep.js.map +1 -0
- package/dist/_chunks/{en-D9ZrQAV6.mjs → en-D9dxziEb.mjs} +5 -2
- package/dist/_chunks/en-D9dxziEb.mjs.map +1 -0
- package/dist/_chunks/{_id-B853wt9z.js → id-BI6AAFQF.js} +202 -180
- package/dist/_chunks/id-BI6AAFQF.js.map +1 -0
- package/dist/_chunks/{_id-B3jMqqMH.mjs → id-FuGqdNs8.mjs} +202 -179
- package/dist/_chunks/id-FuGqdNs8.mjs.map +1 -0
- package/dist/_chunks/{index-CdU1x9cZ.js → index-B05ot-RJ.js} +17 -47
- package/dist/_chunks/index-B05ot-RJ.js.map +1 -0
- package/dist/_chunks/{index-lebOqdrv.mjs → index-C_-s412E.mjs} +119 -103
- package/dist/_chunks/index-C_-s412E.mjs.map +1 -0
- package/dist/_chunks/{index-BhJmjDbj.mjs → index-D0D7uQQv.mjs} +18 -47
- package/dist/_chunks/index-D0D7uQQv.mjs.map +1 -0
- package/dist/_chunks/{index-Ujtj1Rcp.js → index-Nf1qO5tM.js} +118 -103
- package/dist/_chunks/index-Nf1qO5tM.js.map +1 -0
- package/dist/_chunks/purchase-review-workflows-BN-5Ube7.mjs.map +1 -1
- package/dist/_chunks/purchase-review-workflows-DlCDg0fD.js.map +1 -1
- package/dist/_chunks/{router-CvMnSjb9.mjs → router-BslCQGgZ.mjs} +3 -3
- package/dist/_chunks/router-BslCQGgZ.mjs.map +1 -0
- package/dist/_chunks/{router-BboD243b.js → router-DXipg2gI.js} +3 -3
- package/dist/_chunks/router-DXipg2gI.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/LimitsModal.d.ts +2 -4
- package/dist/admin/src/services/admin.d.ts +1 -1
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/content-manager.d.ts +4 -4
- package/dist/admin/src/services/settings.d.ts +1739 -9
- package/dist/server/index.js +455 -628
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +455 -628
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/constants/workflows.d.ts +1 -0
- package/dist/server/src/constants/workflows.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +6 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/content-types/workflow/index.d.ts +6 -0
- package/dist/server/src/content-types/workflow/index.d.ts.map +1 -1
- package/dist/server/src/controllers/assignees.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +0 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/stages.d.ts.map +1 -1
- package/dist/server/src/controllers/workflows.d.ts +0 -7
- package/dist/server/src/controllers/workflows.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +28 -7
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/review-workflows.d.ts.map +1 -1
- package/dist/server/src/services/assignees.d.ts +8 -4
- package/dist/server/src/services/assignees.d.ts.map +1 -1
- package/dist/server/src/services/document-service-middleware.d.ts +1 -0
- package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +16 -6
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics/index.d.ts +4 -4
- package/dist/server/src/services/metrics/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics/weekly-metrics.d.ts.map +1 -1
- package/dist/server/src/services/stages.d.ts +7 -7
- package/dist/server/src/services/stages.d.ts.map +1 -1
- package/dist/server/src/services/workflows.d.ts.map +1 -1
- package/dist/server/src/validation/review-workflows.d.ts +4 -0
- package/dist/server/src/validation/review-workflows.d.ts.map +1 -1
- package/dist/shared/contracts/review-workflows.d.ts +9 -17
- package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
- package/package.json +13 -13
- package/dist/_chunks/Layout-BMqtFafC.js.map +0 -1
- package/dist/_chunks/Layout-lg3hbwGL.mjs.map +0 -1
- package/dist/_chunks/_id-B3jMqqMH.mjs.map +0 -1
- package/dist/_chunks/_id-B853wt9z.js.map +0 -1
- package/dist/_chunks/en-D9ZrQAV6.mjs.map +0 -1
- package/dist/_chunks/en-xcewH2pC.js.map +0 -1
- package/dist/_chunks/index-BhJmjDbj.mjs.map +0 -1
- package/dist/_chunks/index-CdU1x9cZ.js.map +0 -1
- package/dist/_chunks/index-Ujtj1Rcp.js.map +0 -1
- package/dist/_chunks/index-lebOqdrv.mjs.map +0 -1
- package/dist/_chunks/router-BboD243b.js.map +0 -1
- package/dist/_chunks/router-CvMnSjb9.mjs.map +0 -1
- package/strapi-server.js +0 -3
- /package/dist/admin/src/routes/settings/{:id.d.ts → id.d.ts} +0 -0
|
@@ -8,17 +8,15 @@ const designSystem = require("@strapi/design-system");
|
|
|
8
8
|
const icons = require("@strapi/icons");
|
|
9
9
|
const fractionalIndexing = require("fractional-indexing");
|
|
10
10
|
const reactIntl = require("react-intl");
|
|
11
|
-
const reactRedux = require("react-redux");
|
|
12
11
|
const reactRouterDom = require("react-router-dom");
|
|
13
12
|
const yup = require("yup");
|
|
14
|
-
const index = require("./index-
|
|
15
|
-
const Layout = require("./Layout-
|
|
13
|
+
const index = require("./index-Nf1qO5tM.js");
|
|
14
|
+
const Layout = require("./Layout-DcZnQxp9.js");
|
|
16
15
|
const reactDndHtml5Backend = require("react-dnd-html5-backend");
|
|
17
16
|
const styledComponents = require("styled-components");
|
|
18
17
|
const reactDnd = require("react-dnd");
|
|
19
18
|
function _interopNamespace(e) {
|
|
20
|
-
if (e && e.__esModule)
|
|
21
|
-
return e;
|
|
19
|
+
if (e && e.__esModule) return e;
|
|
22
20
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
23
21
|
if (e) {
|
|
24
22
|
for (const k in e) {
|
|
@@ -160,8 +158,7 @@ const useDragAndDrop = (active, {
|
|
|
160
158
|
const hoverBoundingRect = objectRef.current?.getBoundingClientRect();
|
|
161
159
|
const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
|
|
162
160
|
const clientOffset = monitor.getClientOffset();
|
|
163
|
-
if (!clientOffset)
|
|
164
|
-
return;
|
|
161
|
+
if (!clientOffset) return;
|
|
165
162
|
const hoverClientY = clientOffset && clientOffset.y - hoverBoundingRect.top;
|
|
166
163
|
if (typeof dragIndex === "number" && typeof newIndex === "number") {
|
|
167
164
|
if (dragIndex === newIndex) {
|
|
@@ -214,10 +211,8 @@ const useDragAndDrop = (active, {
|
|
|
214
211
|
const getDragDirection = (monitor) => {
|
|
215
212
|
if (monitor && monitor.isDragging() && !monitor.didDrop() && monitor.getInitialClientOffset() && monitor.getClientOffset()) {
|
|
216
213
|
const deltaY = monitor.getInitialClientOffset().y - monitor.getClientOffset().y;
|
|
217
|
-
if (deltaY > 0)
|
|
218
|
-
|
|
219
|
-
if (deltaY < 0)
|
|
220
|
-
return DIRECTIONS.DOWNWARD;
|
|
214
|
+
if (deltaY > 0) return DIRECTIONS.UPWARD;
|
|
215
|
+
if (deltaY < 0) return DIRECTIONS.DOWNWARD;
|
|
221
216
|
return null;
|
|
222
217
|
}
|
|
223
218
|
return null;
|
|
@@ -313,35 +308,23 @@ const Stages = ({ canDelete = true, canUpdate = true, isCreating }) => {
|
|
|
313
308
|
left: "50%",
|
|
314
309
|
position: "absolute",
|
|
315
310
|
top: "0",
|
|
316
|
-
width: 2
|
|
317
|
-
zIndex: 1
|
|
311
|
+
width: 2
|
|
318
312
|
}
|
|
319
313
|
),
|
|
320
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
321
|
-
designSystem.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
canDelete: stages.length > 1 && canDelete,
|
|
335
|
-
canReorder: stages.length > 1,
|
|
336
|
-
canUpdate,
|
|
337
|
-
stagesCount: stages.length,
|
|
338
|
-
defaultOpen: isCreating,
|
|
339
|
-
...stage
|
|
340
|
-
}
|
|
341
|
-
) }, stage.__temp_key__);
|
|
342
|
-
})
|
|
343
|
-
}
|
|
344
|
-
)
|
|
314
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, position: "relative", tag: "ol", children: stages.map((stage, index2) => {
|
|
315
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { tag: "li", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
316
|
+
Stage,
|
|
317
|
+
{
|
|
318
|
+
index: index2,
|
|
319
|
+
canDelete: stages.length > 1 && canDelete,
|
|
320
|
+
canReorder: stages.length > 1,
|
|
321
|
+
canUpdate,
|
|
322
|
+
stagesCount: stages.length,
|
|
323
|
+
defaultOpen: !stage.id,
|
|
324
|
+
...stage
|
|
325
|
+
}
|
|
326
|
+
) }, stage.__temp_key__);
|
|
327
|
+
}) })
|
|
345
328
|
] }),
|
|
346
329
|
canUpdate && /* @__PURE__ */ jsxRuntime.jsx(
|
|
347
330
|
AddStage,
|
|
@@ -458,7 +441,7 @@ const Stage = ({
|
|
|
458
441
|
addFieldRow("stages", { name, color, permissions });
|
|
459
442
|
};
|
|
460
443
|
const id = React__namespace.useId();
|
|
461
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { ref: composedRef, children: [
|
|
444
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { ref: composedRef, shadow: "tableShadow", children: [
|
|
462
445
|
liveText && /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { "aria-live": "assertive", children: liveText }),
|
|
463
446
|
isDragging ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
464
447
|
designSystem.Box,
|
|
@@ -509,7 +492,7 @@ const Stage = ({
|
|
|
509
492
|
{
|
|
510
493
|
background: "transparent",
|
|
511
494
|
hasRadius: true,
|
|
512
|
-
|
|
495
|
+
variant: "ghost",
|
|
513
496
|
"data-handler-id": handlerId,
|
|
514
497
|
ref: dragRef,
|
|
515
498
|
label: formatMessage({
|
|
@@ -523,7 +506,7 @@ const Stage = ({
|
|
|
523
506
|
)
|
|
524
507
|
] }) : null })
|
|
525
508
|
] }),
|
|
526
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 4, padding: 6, children: [
|
|
509
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, padding: 6, children: [
|
|
527
510
|
{
|
|
528
511
|
disabled: !canUpdate,
|
|
529
512
|
label: formatMessage({
|
|
@@ -561,7 +544,7 @@ const Stage = ({
|
|
|
561
544
|
size: 6,
|
|
562
545
|
type: "permissions"
|
|
563
546
|
}
|
|
564
|
-
].map(({ size, ...field }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
547
|
+
].map(({ size, ...field }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: size, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(InputRenderer, { ...field }) }, field.name)) }) })
|
|
565
548
|
] })
|
|
566
549
|
}
|
|
567
550
|
)
|
|
@@ -666,20 +649,22 @@ const PermissionsField = ({ disabled, name, placeholder, required }) => {
|
|
|
666
649
|
const { value = [], error, onChange } = strapiAdmin.useField(name);
|
|
667
650
|
const allStages = strapiAdmin.useForm("PermissionsField", (state) => state.values.stages);
|
|
668
651
|
const onFormValueChange = strapiAdmin.useForm("PermissionsField", (state) => state.onChange);
|
|
669
|
-
const
|
|
652
|
+
const rolesErrorCount = React__namespace.useRef(0);
|
|
653
|
+
const { data: roles = [], isLoading, error: getRolesError } = useGetAdminRolesQuery();
|
|
670
654
|
const filteredRoles = roles?.filter((role) => role.code !== "strapi-super-admin") ?? [];
|
|
671
655
|
React__namespace.useEffect(() => {
|
|
672
|
-
if (!isLoading &&
|
|
656
|
+
if (!isLoading && getRolesError && "status" in getRolesError && getRolesError.status == 403 && rolesErrorCount.current === 0) {
|
|
657
|
+
rolesErrorCount.current = 1;
|
|
673
658
|
toggleNotification({
|
|
674
659
|
blockTransition: true,
|
|
675
660
|
type: "danger",
|
|
676
661
|
message: formatMessage({
|
|
677
662
|
id: "review-workflows.stage.permissions.noPermissions.description",
|
|
678
|
-
defaultMessage: "You don’t have the permission to see roles"
|
|
663
|
+
defaultMessage: "You don’t have the permission to see roles. Contact your administrator."
|
|
679
664
|
})
|
|
680
665
|
});
|
|
681
666
|
}
|
|
682
|
-
}, [formatMessage, isLoading, roles, toggleNotification]);
|
|
667
|
+
}, [formatMessage, isLoading, roles, toggleNotification, getRolesError]);
|
|
683
668
|
if (!isLoading && filteredRoles.length === 0) {
|
|
684
669
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
685
670
|
designSystem.Field.Root,
|
|
@@ -713,45 +698,45 @@ const PermissionsField = ({ disabled, name, placeholder, required }) => {
|
|
|
713
698
|
}
|
|
714
699
|
);
|
|
715
700
|
}
|
|
716
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
717
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.
|
|
718
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
}) }),
|
|
723
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
724
|
-
designSystem.MultiSelect,
|
|
725
|
-
{
|
|
726
|
-
disabled,
|
|
727
|
-
onChange: (values) => {
|
|
728
|
-
const permissions = values.map((value2) => ({
|
|
729
|
-
role: parseInt(value2, 10),
|
|
730
|
-
action: "admin::review-workflows.stage.transition"
|
|
731
|
-
}));
|
|
732
|
-
onChange(name, permissions);
|
|
733
|
-
},
|
|
734
|
-
placeholder,
|
|
735
|
-
value: value.map((permission) => `${permission.role}`),
|
|
736
|
-
withTags: true,
|
|
737
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
738
|
-
designSystem.MultiSelectGroup,
|
|
739
|
-
{
|
|
740
|
-
label: formatMessage({
|
|
741
|
-
id: "Settings.review-workflows.stage.permissions.allRoles.label",
|
|
742
|
-
defaultMessage: "All roles"
|
|
743
|
-
}),
|
|
744
|
-
values: filteredRoles.map((r) => `${r.id}`),
|
|
745
|
-
children: filteredRoles.map((role) => {
|
|
746
|
-
return /* @__PURE__ */ jsxRuntime.jsx(NestedOption$1, { value: `${role.id}`, children: role.name }, role.id);
|
|
747
|
-
})
|
|
748
|
-
}
|
|
749
|
-
)
|
|
750
|
-
}
|
|
751
|
-
),
|
|
752
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
753
|
-
] }) }),
|
|
701
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "flex-end", gap: 3, children: [
|
|
702
|
+
/* @__PURE__ */ jsxRuntime.jsx(PermissionWrapper, { grow: 1, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { error, name, required: true, children: [
|
|
703
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
704
|
+
id: "Settings.review-workflows.stage.permissions.label",
|
|
705
|
+
defaultMessage: "Roles that can change this stage"
|
|
706
|
+
}) }),
|
|
754
707
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
708
|
+
designSystem.MultiSelect,
|
|
709
|
+
{
|
|
710
|
+
disabled,
|
|
711
|
+
onChange: (values) => {
|
|
712
|
+
const permissions = values.map((value2) => ({
|
|
713
|
+
role: parseInt(value2, 10),
|
|
714
|
+
action: "admin::review-workflows.stage.transition"
|
|
715
|
+
}));
|
|
716
|
+
onChange(name, permissions);
|
|
717
|
+
},
|
|
718
|
+
placeholder,
|
|
719
|
+
value: value.map((permission) => `${permission.role}`),
|
|
720
|
+
withTags: true,
|
|
721
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
722
|
+
designSystem.MultiSelectGroup,
|
|
723
|
+
{
|
|
724
|
+
label: formatMessage({
|
|
725
|
+
id: "Settings.review-workflows.stage.permissions.allRoles.label",
|
|
726
|
+
defaultMessage: "All roles"
|
|
727
|
+
}),
|
|
728
|
+
values: filteredRoles.map((r) => `${r.id}`),
|
|
729
|
+
children: filteredRoles.map((role) => {
|
|
730
|
+
return /* @__PURE__ */ jsxRuntime.jsx(NestedOption$1, { value: `${role.id}`, children: role.name }, role.id);
|
|
731
|
+
})
|
|
732
|
+
}
|
|
733
|
+
)
|
|
734
|
+
}
|
|
735
|
+
),
|
|
736
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
737
|
+
] }) }),
|
|
738
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Dialog.Root, { open: isApplyAllConfirmationOpen, onOpenChange: setIsApplyAllConfirmationOpen, children: [
|
|
739
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
755
740
|
designSystem.IconButton,
|
|
756
741
|
{
|
|
757
742
|
disabled,
|
|
@@ -760,42 +745,38 @@ const PermissionsField = ({ disabled, name, placeholder, required }) => {
|
|
|
760
745
|
defaultMessage: "Apply to all stages"
|
|
761
746
|
}),
|
|
762
747
|
size: "L",
|
|
763
|
-
variant: "secondary",
|
|
764
|
-
onClick: () => setIsApplyAllConfirmationOpen(true),
|
|
765
748
|
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Duplicate, {})
|
|
766
749
|
}
|
|
750
|
+
) }),
|
|
751
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
752
|
+
strapiAdmin.ConfirmDialog,
|
|
753
|
+
{
|
|
754
|
+
onConfirm: () => {
|
|
755
|
+
onFormValueChange(
|
|
756
|
+
"stages",
|
|
757
|
+
allStages.map((stage) => ({
|
|
758
|
+
...stage,
|
|
759
|
+
permissions: value
|
|
760
|
+
}))
|
|
761
|
+
);
|
|
762
|
+
setIsApplyAllConfirmationOpen(false);
|
|
763
|
+
toggleNotification({
|
|
764
|
+
type: "success",
|
|
765
|
+
message: formatMessage({
|
|
766
|
+
id: "Settings.review-workflows.page.edit.confirm.stages.permissions.copy.success",
|
|
767
|
+
defaultMessage: "Applied roles to all other stages of the workflow"
|
|
768
|
+
})
|
|
769
|
+
});
|
|
770
|
+
},
|
|
771
|
+
variant: "default",
|
|
772
|
+
children: formatMessage({
|
|
773
|
+
id: "Settings.review-workflows.page.edit.confirm.stages.permissions.copy",
|
|
774
|
+
defaultMessage: "Roles that can change that stage will be applied to all the other stages."
|
|
775
|
+
})
|
|
776
|
+
}
|
|
767
777
|
)
|
|
768
|
-
] })
|
|
769
|
-
|
|
770
|
-
strapiAdmin.ConfirmDialog,
|
|
771
|
-
{
|
|
772
|
-
isOpen: isApplyAllConfirmationOpen,
|
|
773
|
-
onClose: () => setIsApplyAllConfirmationOpen(false),
|
|
774
|
-
onConfirm: () => {
|
|
775
|
-
onFormValueChange(
|
|
776
|
-
"stages",
|
|
777
|
-
allStages.map((stage) => ({
|
|
778
|
-
...stage,
|
|
779
|
-
permissions: value
|
|
780
|
-
}))
|
|
781
|
-
);
|
|
782
|
-
setIsApplyAllConfirmationOpen(false);
|
|
783
|
-
toggleNotification({
|
|
784
|
-
type: "success",
|
|
785
|
-
message: formatMessage({
|
|
786
|
-
id: "Settings.review-workflows.page.edit.confirm.stages.permissions.copy.success",
|
|
787
|
-
defaultMessage: "Applied roles to all other stages of the workflow"
|
|
788
|
-
})
|
|
789
|
-
});
|
|
790
|
-
},
|
|
791
|
-
variant: "default",
|
|
792
|
-
children: formatMessage({
|
|
793
|
-
id: "Settings.review-workflows.page.edit.confirm.stages.permissions.copy",
|
|
794
|
-
defaultMessage: "Roles that can change that stage will be applied to all the other stages."
|
|
795
|
-
})
|
|
796
|
-
}
|
|
797
|
-
)
|
|
798
|
-
] });
|
|
778
|
+
] })
|
|
779
|
+
] }) });
|
|
799
780
|
};
|
|
800
781
|
const NestedOption$1 = styledComponents.styled(designSystem.MultiSelectOption)`
|
|
801
782
|
padding-left: ${({ theme }) => theme.spaces[7]};
|
|
@@ -807,8 +788,8 @@ const PermissionWrapper = styledComponents.styled(designSystem.Flex)`
|
|
|
807
788
|
`;
|
|
808
789
|
const WorkflowAttributes = ({ canUpdate = true }) => {
|
|
809
790
|
const { formatMessage } = reactIntl.useIntl();
|
|
810
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid, { background: "neutral0", hasRadius: true, gap: 4, padding: 6, shadow: "tableShadow", children: [
|
|
811
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
791
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { background: "neutral0", hasRadius: true, gap: 4, padding: 6, shadow: "tableShadow", children: [
|
|
792
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
812
793
|
strapiAdmin.InputRenderer,
|
|
813
794
|
{
|
|
814
795
|
disabled: !canUpdate,
|
|
@@ -821,7 +802,8 @@ const WorkflowAttributes = ({ canUpdate = true }) => {
|
|
|
821
802
|
type: "string"
|
|
822
803
|
}
|
|
823
804
|
) }),
|
|
824
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
805
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(ContentTypesSelector, { disabled: !canUpdate }) }),
|
|
806
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(StageSelector, { disabled: !canUpdate }) })
|
|
825
807
|
] });
|
|
826
808
|
};
|
|
827
809
|
const ContentTypesSelector = ({ disabled }) => {
|
|
@@ -925,15 +907,63 @@ const NestedOption = styledComponents.styled(designSystem.MultiSelectOption)`
|
|
|
925
907
|
const ContentTypeTakeNotice = styledComponents.styled(designSystem.Typography)`
|
|
926
908
|
font-style: italic;
|
|
927
909
|
`;
|
|
910
|
+
const StageSelector = ({ disabled }) => {
|
|
911
|
+
const { value: stages = [] } = strapiAdmin.useField("stages");
|
|
912
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
913
|
+
const { error, value, onChange } = strapiAdmin.useField("stageRequiredToPublish");
|
|
914
|
+
const validStages = stages.filter((stage) => stage.name);
|
|
915
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
916
|
+
designSystem.Field.Root,
|
|
917
|
+
{
|
|
918
|
+
error,
|
|
919
|
+
name: "stageRequiredToPublish",
|
|
920
|
+
hint: formatMessage({
|
|
921
|
+
id: "settings.review-workflows.workflow.stageRequiredToPublish.hint",
|
|
922
|
+
defaultMessage: "Prevents entries from being published if they are not at the required stage."
|
|
923
|
+
}),
|
|
924
|
+
children: [
|
|
925
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
926
|
+
id: "settings.review-workflows.workflow.stageRequiredToPublish.label",
|
|
927
|
+
defaultMessage: "Required stage for publishing"
|
|
928
|
+
}) }),
|
|
929
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
930
|
+
designSystem.SingleSelect,
|
|
931
|
+
{
|
|
932
|
+
disabled,
|
|
933
|
+
onChange: (value2) => {
|
|
934
|
+
onChange("stageRequiredToPublish", value2);
|
|
935
|
+
},
|
|
936
|
+
value,
|
|
937
|
+
children: [
|
|
938
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "", children: formatMessage({
|
|
939
|
+
id: "settings.review-workflows.workflow.stageRequiredToPublish.any",
|
|
940
|
+
defaultMessage: "Any stage"
|
|
941
|
+
}) }),
|
|
942
|
+
validStages.map((stage, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
943
|
+
designSystem.SingleSelectOption,
|
|
944
|
+
{
|
|
945
|
+
value: stage.id?.toString() || stage.__temp_key__,
|
|
946
|
+
children: stage.name
|
|
947
|
+
},
|
|
948
|
+
`requiredToPublishStage-${stage.id || stage.__temp_key__}`
|
|
949
|
+
))
|
|
950
|
+
]
|
|
951
|
+
}
|
|
952
|
+
),
|
|
953
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
|
|
954
|
+
]
|
|
955
|
+
}
|
|
956
|
+
);
|
|
957
|
+
};
|
|
928
958
|
const WORKFLOW_SCHEMA = yup__namespace.object({
|
|
929
959
|
contentTypes: yup__namespace.array().of(yup__namespace.string()),
|
|
930
960
|
name: yup__namespace.string().max(255, {
|
|
931
961
|
id: "review-workflows.validation.name.max-length",
|
|
932
962
|
defaultMessage: "Name can not be longer than 255 characters"
|
|
933
|
-
}).required(),
|
|
963
|
+
}).required().nullable(),
|
|
934
964
|
stages: yup__namespace.array().of(
|
|
935
965
|
yup__namespace.object().shape({
|
|
936
|
-
name: yup__namespace.string().required({
|
|
966
|
+
name: yup__namespace.string().nullable().required({
|
|
937
967
|
id: "review-workflows.validation.stage.name",
|
|
938
968
|
defaultMessage: "Name is required"
|
|
939
969
|
}).max(255, {
|
|
@@ -950,7 +980,7 @@ const WORKFLOW_SCHEMA = yup__namespace.object({
|
|
|
950
980
|
return stages.filter((stage) => stage.name === stageName).length === 1;
|
|
951
981
|
}
|
|
952
982
|
),
|
|
953
|
-
color: yup__namespace.string().required({
|
|
983
|
+
color: yup__namespace.string().nullable().required({
|
|
954
984
|
id: "review-workflows.validation.stage.color",
|
|
955
985
|
defaultMessage: "Color is required"
|
|
956
986
|
}).matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),
|
|
@@ -967,7 +997,8 @@ const WORKFLOW_SCHEMA = yup__namespace.object({
|
|
|
967
997
|
})
|
|
968
998
|
).strict()
|
|
969
999
|
})
|
|
970
|
-
).min(1)
|
|
1000
|
+
).min(1),
|
|
1001
|
+
stageRequiredToPublish: yup__namespace.string().nullable()
|
|
971
1002
|
});
|
|
972
1003
|
const EditPage = () => {
|
|
973
1004
|
const { id = "" } = reactRouterDom.useParams();
|
|
@@ -976,7 +1007,6 @@ const EditPage = () => {
|
|
|
976
1007
|
const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
|
|
977
1008
|
const navigate = reactRouterDom.useNavigate();
|
|
978
1009
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
979
|
-
const dispatch = reactRedux.useDispatch();
|
|
980
1010
|
const {
|
|
981
1011
|
isLoading: isLoadingWorkflow,
|
|
982
1012
|
meta,
|
|
@@ -984,7 +1014,7 @@ const EditPage = () => {
|
|
|
984
1014
|
error,
|
|
985
1015
|
update,
|
|
986
1016
|
create
|
|
987
|
-
} = Layout.useReviewWorkflows(
|
|
1017
|
+
} = Layout.useReviewWorkflows();
|
|
988
1018
|
const permissions = index.useTypedSelector(
|
|
989
1019
|
(state) => state.admin_app.permissions["settings"]?.["review-workflows"]
|
|
990
1020
|
);
|
|
@@ -1001,13 +1031,17 @@ const EditPage = () => {
|
|
|
1001
1031
|
const stagesPerWorkflow = limits?.[index.CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];
|
|
1002
1032
|
const submitForm = async (data, helpers) => {
|
|
1003
1033
|
try {
|
|
1034
|
+
const { stageRequiredToPublish, ...rest } = data;
|
|
1035
|
+
const stageRequiredToPublishName = stageRequiredToPublish === "" ? null : rest.stages.find(
|
|
1036
|
+
(stage) => stage.id === Number(stageRequiredToPublish) || stage.__temp_key__ === stageRequiredToPublish
|
|
1037
|
+
)?.name;
|
|
1004
1038
|
if (!isCreatingWorkflow) {
|
|
1005
1039
|
const res = await update(id, {
|
|
1006
|
-
...
|
|
1040
|
+
...rest,
|
|
1007
1041
|
// compare permissions of stages and only submit them if at least one has
|
|
1008
1042
|
// changed; this enables partial updates e.g. for users who don't have
|
|
1009
1043
|
// permissions to see roles
|
|
1010
|
-
stages:
|
|
1044
|
+
stages: rest.stages.map((stage) => {
|
|
1011
1045
|
let hasUpdatedPermissions = true;
|
|
1012
1046
|
const serverStage = currentWorkflow?.stages?.find(
|
|
1013
1047
|
(serverStage2) => serverStage2.id === stage?.id
|
|
@@ -1023,40 +1057,21 @@ const EditPage = () => {
|
|
|
1023
1057
|
...stage,
|
|
1024
1058
|
permissions: hasUpdatedPermissions ? stage.permissions : void 0
|
|
1025
1059
|
};
|
|
1026
|
-
})
|
|
1060
|
+
}),
|
|
1061
|
+
stageRequiredToPublishName
|
|
1027
1062
|
});
|
|
1028
1063
|
if ("error" in res && index.isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
|
1029
1064
|
helpers.setErrors(formatValidationErrors(res.error));
|
|
1030
|
-
} else if ("data" in res) {
|
|
1031
|
-
for (const uid of res.data.contentTypes) {
|
|
1032
|
-
dispatch({
|
|
1033
|
-
type: "contentManagerApi/invalidateTags",
|
|
1034
|
-
payload: [
|
|
1035
|
-
{
|
|
1036
|
-
type: "ContentTypesConfiguration",
|
|
1037
|
-
id: uid
|
|
1038
|
-
}
|
|
1039
|
-
]
|
|
1040
|
-
});
|
|
1041
|
-
}
|
|
1042
1065
|
}
|
|
1043
1066
|
} else {
|
|
1044
|
-
const res = await create(
|
|
1067
|
+
const res = await create({
|
|
1068
|
+
...rest,
|
|
1069
|
+
stageRequiredToPublishName
|
|
1070
|
+
});
|
|
1045
1071
|
if ("error" in res && index.isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
|
1046
1072
|
helpers.setErrors(formatValidationErrors(res.error));
|
|
1047
1073
|
} else if ("data" in res) {
|
|
1048
|
-
|
|
1049
|
-
dispatch({
|
|
1050
|
-
type: "contentManagerApi/invalidateTags",
|
|
1051
|
-
payload: [
|
|
1052
|
-
{
|
|
1053
|
-
type: "ContentTypesConfiguration",
|
|
1054
|
-
id: uid
|
|
1055
|
-
}
|
|
1056
|
-
]
|
|
1057
|
-
});
|
|
1058
|
-
}
|
|
1059
|
-
navigate(`../${res.data.id}`);
|
|
1074
|
+
navigate(`../${res.data.id}`, { replace: true });
|
|
1060
1075
|
}
|
|
1061
1076
|
}
|
|
1062
1077
|
} catch (error2) {
|
|
@@ -1120,13 +1135,15 @@ const EditPage = () => {
|
|
|
1120
1135
|
return {
|
|
1121
1136
|
name: "",
|
|
1122
1137
|
stages: [],
|
|
1123
|
-
contentTypes: []
|
|
1138
|
+
contentTypes: [],
|
|
1139
|
+
stageRequiredToPublish: ""
|
|
1124
1140
|
};
|
|
1125
1141
|
} else {
|
|
1126
1142
|
return {
|
|
1127
1143
|
name: currentWorkflow.name,
|
|
1128
1144
|
stages: addTmpKeysToStages(currentWorkflow.stages),
|
|
1129
|
-
contentTypes: currentWorkflow.contentTypes
|
|
1145
|
+
contentTypes: currentWorkflow.contentTypes,
|
|
1146
|
+
stageRequiredToPublish: currentWorkflow.stageRequiredToPublish?.id.toString() ?? ""
|
|
1130
1147
|
};
|
|
1131
1148
|
}
|
|
1132
1149
|
}, [currentWorkflow, isCreatingWorkflow]);
|
|
@@ -1149,13 +1166,12 @@ const EditPage = () => {
|
|
|
1149
1166
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1150
1167
|
Layout.Header,
|
|
1151
1168
|
{
|
|
1152
|
-
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
|
|
1169
|
+
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, { fallback: ".." }),
|
|
1153
1170
|
primaryAction: canUpdate || canCreate ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1154
1171
|
designSystem.Button,
|
|
1155
1172
|
{
|
|
1156
1173
|
startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Check, {}),
|
|
1157
1174
|
type: "submit",
|
|
1158
|
-
size: "M",
|
|
1159
1175
|
disabled: !modified || isSubmitting || values.stages.length === 0,
|
|
1160
1176
|
loading: !Boolean(Object.keys(savePrompts).length > 0) && isSubmitting,
|
|
1161
1177
|
children: formatMessage({
|
|
@@ -1178,23 +1194,22 @@ const EditPage = () => {
|
|
|
1178
1194
|
}
|
|
1179
1195
|
),
|
|
1180
1196
|
/* @__PURE__ */ jsxRuntime.jsx(Layout.Root, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "stretch", direction: "column", gap: 7, children: [
|
|
1181
|
-
/* @__PURE__ */ jsxRuntime.jsx(WorkflowAttributes, { canUpdate }),
|
|
1197
|
+
/* @__PURE__ */ jsxRuntime.jsx(WorkflowAttributes, { canUpdate: canUpdate || canCreate }),
|
|
1182
1198
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1183
1199
|
Stages,
|
|
1184
1200
|
{
|
|
1185
1201
|
canDelete,
|
|
1186
|
-
canUpdate,
|
|
1202
|
+
canUpdate: canUpdate || canCreate,
|
|
1187
1203
|
isCreating: isCreatingWorkflow
|
|
1188
1204
|
}
|
|
1189
1205
|
)
|
|
1190
1206
|
] }) }),
|
|
1191
1207
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1192
|
-
|
|
1208
|
+
designSystem.Dialog.Root,
|
|
1193
1209
|
{
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
onConfirm: handleConfirmDeleteDialog(values, { setErrors }),
|
|
1197
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 5, children: [
|
|
1210
|
+
open: Object.keys(savePrompts).length > 0,
|
|
1211
|
+
onOpenChange: handleConfirmClose,
|
|
1212
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, { onConfirm: handleConfirmDeleteDialog(values, { setErrors }), children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 5, children: [
|
|
1198
1213
|
savePrompts.hasDeletedServerStages && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textAlign: "center", variant: "omega", children: formatMessage({
|
|
1199
1214
|
id: "review-workflows.page.delete.confirm.stages.body",
|
|
1200
1215
|
defaultMessage: "All entries assigned to deleted stages will be moved to the previous stage."
|
|
@@ -1206,7 +1221,7 @@ const EditPage = () => {
|
|
|
1206
1221
|
},
|
|
1207
1222
|
{
|
|
1208
1223
|
count: contentTypesFromOtherWorkflows?.filter(
|
|
1209
|
-
(contentType) =>
|
|
1224
|
+
(contentType) => values.contentTypes.includes(contentType)
|
|
1210
1225
|
).length ?? 0
|
|
1211
1226
|
}
|
|
1212
1227
|
) }),
|
|
@@ -1214,7 +1229,7 @@ const EditPage = () => {
|
|
|
1214
1229
|
id: "review-workflows.page.delete.confirm.confirm",
|
|
1215
1230
|
defaultMessage: "Are you sure you want to save?"
|
|
1216
1231
|
}) })
|
|
1217
|
-
] })
|
|
1232
|
+
] }) })
|
|
1218
1233
|
}
|
|
1219
1234
|
)
|
|
1220
1235
|
] })
|
|
@@ -1223,8 +1238,8 @@ const EditPage = () => {
|
|
|
1223
1238
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1224
1239
|
index.LimitsModal.Root,
|
|
1225
1240
|
{
|
|
1226
|
-
|
|
1227
|
-
|
|
1241
|
+
open: showLimitModal === "workflow",
|
|
1242
|
+
onOpenChange: () => setShowLimitModal(null),
|
|
1228
1243
|
children: [
|
|
1229
1244
|
/* @__PURE__ */ jsxRuntime.jsx(index.LimitsModal.Title, { children: formatMessage({
|
|
1230
1245
|
id: "review-workflows.edit.page.workflows.limit.title",
|
|
@@ -1237,16 +1252,23 @@ const EditPage = () => {
|
|
|
1237
1252
|
]
|
|
1238
1253
|
}
|
|
1239
1254
|
),
|
|
1240
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1255
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1256
|
+
index.LimitsModal.Root,
|
|
1257
|
+
{
|
|
1258
|
+
open: showLimitModal === "stage",
|
|
1259
|
+
onOpenChange: () => setShowLimitModal(null),
|
|
1260
|
+
children: [
|
|
1261
|
+
/* @__PURE__ */ jsxRuntime.jsx(index.LimitsModal.Title, { children: formatMessage({
|
|
1262
|
+
id: "review-workflows.edit.page.stages.limit.title",
|
|
1263
|
+
defaultMessage: "You have reached the limit of stages for this workflow in your plan"
|
|
1264
|
+
}) }),
|
|
1265
|
+
/* @__PURE__ */ jsxRuntime.jsx(index.LimitsModal.Body, { children: formatMessage({
|
|
1266
|
+
id: "review-workflows.edit.page.stages.limit.body",
|
|
1267
|
+
defaultMessage: "Try deleting some stages or contact Sales to enable more stages."
|
|
1268
|
+
}) })
|
|
1269
|
+
]
|
|
1270
|
+
}
|
|
1271
|
+
)
|
|
1250
1272
|
] });
|
|
1251
1273
|
};
|
|
1252
1274
|
const addTmpKeysToStages = (data) => {
|
|
@@ -1268,4 +1290,4 @@ const ProtectedEditPage = () => {
|
|
|
1268
1290
|
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Protect, { permissions, children: /* @__PURE__ */ jsxRuntime.jsx(EditPage, {}) });
|
|
1269
1291
|
};
|
|
1270
1292
|
exports.ProtectedEditPage = ProtectedEditPage;
|
|
1271
|
-
//# sourceMappingURL=
|
|
1293
|
+
//# sourceMappingURL=id-BI6AAFQF.js.map
|