@strapi/review-workflows 0.0.0-experimental.edc24aaa3bb5a90fa5fd4fee208167dd4e2e38d4 → 0.0.0-experimental.ee7402bacc4656d268ab76aa9c334a7b7a951201
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/dist/_chunks/{Layout-D3DDQmMI.js → Layout-C3IORH2n.js} +9 -11
- package/dist/_chunks/Layout-C3IORH2n.js.map +1 -0
- package/dist/_chunks/{Layout-Da8jupiA.mjs → Layout-DNKR5bym.mjs} +8 -9
- package/dist/_chunks/Layout-DNKR5bym.mjs.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-xSrgPSJs.mjs → id-C9Ku9Br9.mjs} +85 -55
- package/dist/_chunks/id-C9Ku9Br9.mjs.map +1 -0
- package/dist/_chunks/{_id-CnRDP3Xx.js → id-oOE1bYls.js} +86 -57
- package/dist/_chunks/id-oOE1bYls.js.map +1 -0
- package/dist/_chunks/{index-DDsJlZQw.mjs → index-ByXbOW-R.mjs} +91 -77
- package/dist/_chunks/index-ByXbOW-R.mjs.map +1 -0
- package/dist/_chunks/{index-4kp4AkBB.js → index-CmHHjN95.js} +12 -34
- package/dist/_chunks/index-CmHHjN95.js.map +1 -0
- package/dist/_chunks/{index-jfO5GxtW.mjs → index-CyhaJuJG.mjs} +13 -34
- package/dist/_chunks/index-CyhaJuJG.mjs.map +1 -0
- package/dist/_chunks/{index-DhPxWpsW.js → index-DMT27jNE.js} +91 -78
- package/dist/_chunks/index-DMT27jNE.js.map +1 -0
- package/dist/_chunks/{purchase-review-workflows-DlCDg0fD.js → purchase-review-workflows-BxoDFxQ5.js} +2 -2
- package/dist/_chunks/purchase-review-workflows-BxoDFxQ5.js.map +1 -0
- package/dist/_chunks/{purchase-review-workflows-BN-5Ube7.mjs → purchase-review-workflows-DyFV_H0I.mjs} +2 -2
- package/dist/_chunks/{purchase-review-workflows-BN-5Ube7.mjs.map → purchase-review-workflows-DyFV_H0I.mjs.map} +1 -1
- package/dist/_chunks/{router-DOEULOpS.mjs → router-BPl2HZMq.mjs} +3 -3
- package/dist/_chunks/router-BPl2HZMq.mjs.map +1 -0
- package/dist/_chunks/{router-DSXpeew4.js → router-vDfGt9bq.js} +3 -3
- package/dist/_chunks/router-vDfGt9bq.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- 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 +12 -13
- package/dist/_chunks/Layout-D3DDQmMI.js.map +0 -1
- package/dist/_chunks/Layout-Da8jupiA.mjs.map +0 -1
- package/dist/_chunks/_id-CnRDP3Xx.js.map +0 -1
- package/dist/_chunks/_id-xSrgPSJs.mjs.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-4kp4AkBB.js.map +0 -1
- package/dist/_chunks/index-DDsJlZQw.mjs.map +0 -1
- package/dist/_chunks/index-DhPxWpsW.js.map +0 -1
- package/dist/_chunks/index-jfO5GxtW.mjs.map +0 -1
- package/dist/_chunks/purchase-review-workflows-DlCDg0fD.js.map +0 -1
- package/dist/_chunks/router-DOEULOpS.mjs.map +0 -1
- package/dist/_chunks/router-DSXpeew4.js.map +0 -1
- package/strapi-server.js +0 -3
- /package/dist/admin/src/routes/settings/{:id.d.ts → id.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CmHHjN95.js","sources":["../../admin/src/routes/settings/index.tsx"],"sourcesContent":["/* eslint-disable check-file/no-index */\n/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useTracking, ConfirmDialog, useRBAC, Table } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Flex, IconButton, TFooter, Typography, LinkButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Link, useNavigate } from 'react-router-dom';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport { CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME } from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { ContentType, useGetContentTypesQuery } from '../../services/content-manager';\n\nimport * as Layout from './components/Layout';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nexport const ReviewWorkflowsListView = () => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const [workflowToDelete, setWorkflowToDelete] = React.useState<string | null>(null);\n const [showLimitModal, setShowLimitModal] = React.useState<boolean>(false);\n const { data, isLoading: isLoadingModels } = useGetContentTypesQuery();\n const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows();\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']\n );\n const {\n allowedActions: { canCreate, canRead, canUpdate, canDelete },\n } = useRBAC(permissions);\n\n const limits = getFeature('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] as string;\n\n const handleDeleteWorkflow = (workflowId: string) => {\n setWorkflowToDelete(workflowId);\n };\n\n const toggleConfirmDeleteDialog = () => {\n setWorkflowToDelete(null);\n };\n\n const handleConfirmDeleteDialog = async () => {\n if (!workflowToDelete) return;\n\n await deleteAction(workflowToDelete);\n\n setWorkflowToDelete(null);\n };\n\n const handleCreateClick: React.MouseEventHandler<HTMLAnchorElement> &\n ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void) = (event) => {\n event.preventDefault();\n /**\n * If the current license has a workflow limit:\n * check if the total count of workflows exceeds that limit. If so,\n * prevent the navigation and show the limits overlay.\n *\n * If the current license does not have a limit (e.g. offline license):\n * allow the user to navigate to the create-view. In case they exceed the\n * current hard-limit of 200 they will see an error thrown by the API.\n */\n\n if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n event.preventDefault();\n setShowLimitModal(true);\n } else {\n navigate('create');\n trackUsage('willCreateWorkflow');\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoading && !isLicenseLoading) {\n if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal(true);\n }\n }\n }, [isLicenseLoading, isLoading, meta, meta?.workflowCount, numberOfWorkflows]);\n\n const headers = [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.name.title',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.stages.title',\n defaultMessage: 'Stages',\n }),\n name: 'stages',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',\n defaultMessage: 'Content Types',\n }),\n name: 'content-types',\n },\n ];\n\n if (isLoading || isLoadingModels) {\n return <Page.Loading />;\n }\n\n const contentTypes = Object.values(data ?? {}).reduce<ContentType[]>((acc, curr) => {\n acc.push(...curr);\n return acc;\n }, []);\n\n return (\n <>\n <Layout.Header\n primaryAction={\n canCreate ? (\n <LinkButton\n startIcon={<Plus />}\n size=\"S\"\n tag={NavLink}\n to=\"create\"\n onClick={handleCreateClick}\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n ) : null\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n <Table.Root\n isLoading={isLoading}\n rows={workflows}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" icon={<Plus />} onClick={handleCreateClick}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n ) : null\n }\n headers={headers}\n >\n <Table.Content>\n <Table.Head>\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n\n <Table.Body>\n {workflows.map((workflow) => (\n <Table.Row\n onClick={() => {\n navigate(`${workflow.id}`);\n }}\n key={workflow.id}\n >\n <Table.Cell width=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">\n {workflow.contentTypes\n .map((uid: string) => {\n const contentType = contentTypes.find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName ?? '';\n })\n .join(', ')}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n {canRead || canUpdate ? (\n <IconButton\n tag={Link}\n to={workflow.id.toString()}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {workflows.length > 1 && canDelete ? (\n <IconButton\n withTooltip={false}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteWorkflow(String(workflow.id));\n }}\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Dialog.Root open={!!workflowToDelete} onOpenChange={toggleConfirmDeleteDialog}>\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n\n <LimitsModal.Root open={showLimitModal} onOpenChange={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </Layout.Root>\n </>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ReviewWorkflowsListView />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage };\n"],"names":["useIntl","useNavigate","useTracking","React","useGetContentTypesQuery","useReviewWorkflows","useLicenseLimits","useTypedSelector","useRBAC","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","jsx","Page","jsxs","Fragment","Layout.Header","LinkButton","Plus","NavLink","Layout.Root","Table","TFooter","Typography","contentType","Flex","IconButton","Link","Pencil","Trash","Dialog","ConfirmDialog","LimitsModal"],"mappings":"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"}
|
|
@@ -2,13 +2,12 @@ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { useTracking, useRBAC, Page, Table, ConfirmDialog } from "@strapi/admin/strapi-admin";
|
|
4
4
|
import { useLicenseLimits } from "@strapi/admin/strapi-admin/ee";
|
|
5
|
-
import { LinkButton, TFooter, Typography, Flex, IconButton, Dialog
|
|
5
|
+
import { LinkButton, TFooter, Typography, Flex, IconButton, Dialog } from "@strapi/design-system";
|
|
6
6
|
import { Plus, Pencil, Trash } from "@strapi/icons";
|
|
7
7
|
import { useIntl } from "react-intl";
|
|
8
|
-
import { useNavigate, NavLink } from "react-router-dom";
|
|
9
|
-
import {
|
|
10
|
-
import { u as
|
|
11
|
-
import { u as useReviewWorkflows, H as Header, R as Root } from "./Layout-Da8jupiA.mjs";
|
|
8
|
+
import { useNavigate, NavLink, Link } from "react-router-dom";
|
|
9
|
+
import { u as useGetContentTypesQuery, a as useTypedSelector, C as CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME, L as LimitsModal } from "./index-ByXbOW-R.mjs";
|
|
10
|
+
import { u as useReviewWorkflows, H as Header, R as Root } from "./Layout-DNKR5bym.mjs";
|
|
12
11
|
const ReviewWorkflowsListView = () => {
|
|
13
12
|
const { formatMessage } = useIntl();
|
|
14
13
|
const navigate = useNavigate();
|
|
@@ -33,8 +32,7 @@ const ReviewWorkflowsListView = () => {
|
|
|
33
32
|
setWorkflowToDelete(null);
|
|
34
33
|
};
|
|
35
34
|
const handleConfirmDeleteDialog = async () => {
|
|
36
|
-
if (!workflowToDelete)
|
|
37
|
-
return;
|
|
35
|
+
if (!workflowToDelete) return;
|
|
38
36
|
await deleteAction(workflowToDelete);
|
|
39
37
|
setWorkflowToDelete(null);
|
|
40
38
|
};
|
|
@@ -119,7 +117,7 @@ const ReviewWorkflowsListView = () => {
|
|
|
119
117
|
{
|
|
120
118
|
isLoading,
|
|
121
119
|
rows: workflows,
|
|
122
|
-
footer: canCreate ? /* @__PURE__ */ jsx(TFooter, { icon: /* @__PURE__ */ jsx(Plus, {}), onClick: handleCreateClick, children: formatMessage({
|
|
120
|
+
footer: canCreate ? /* @__PURE__ */ jsx(TFooter, { cursor: "pointer", icon: /* @__PURE__ */ jsx(Plus, {}), onClick: handleCreateClick, children: formatMessage({
|
|
123
121
|
id: "Settings.review-workflows.list.page.create",
|
|
124
122
|
defaultMessage: "Create new workflow"
|
|
125
123
|
}) }) : null,
|
|
@@ -143,16 +141,18 @@ const ReviewWorkflowsListView = () => {
|
|
|
143
141
|
}).join(", ") }) }),
|
|
144
142
|
/* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", justifyContent: "end", children: [
|
|
145
143
|
canRead || canUpdate ? /* @__PURE__ */ jsx(
|
|
146
|
-
|
|
144
|
+
IconButton,
|
|
147
145
|
{
|
|
148
|
-
|
|
149
|
-
|
|
146
|
+
tag: Link,
|
|
147
|
+
to: workflow.id.toString(),
|
|
148
|
+
label: formatMessage(
|
|
150
149
|
{
|
|
151
150
|
id: "Settings.review-workflows.list.page.list.column.actions.edit.label",
|
|
152
151
|
defaultMessage: "Edit {name}"
|
|
153
152
|
},
|
|
154
153
|
{ name: workflow.name }
|
|
155
154
|
),
|
|
155
|
+
variant: "ghost",
|
|
156
156
|
children: /* @__PURE__ */ jsx(Pencil, {})
|
|
157
157
|
}
|
|
158
158
|
) : null,
|
|
@@ -167,7 +167,7 @@ const ReviewWorkflowsListView = () => {
|
|
|
167
167
|
},
|
|
168
168
|
{ name: "Default workflow" }
|
|
169
169
|
),
|
|
170
|
-
|
|
170
|
+
variant: "ghost",
|
|
171
171
|
onClick: (e) => {
|
|
172
172
|
e.stopPropagation();
|
|
173
173
|
handleDeleteWorkflow(String(workflow.id));
|
|
@@ -200,27 +200,6 @@ const ReviewWorkflowsListView = () => {
|
|
|
200
200
|
] })
|
|
201
201
|
] });
|
|
202
202
|
};
|
|
203
|
-
const ActionLink = styled(Link)`
|
|
204
|
-
align-items: center;
|
|
205
|
-
display: flex;
|
|
206
|
-
justify-content: center;
|
|
207
|
-
padding: ${({ theme }) => `${theme.spaces[2]}}`};
|
|
208
|
-
& > span {
|
|
209
|
-
line-height: 1rem;
|
|
210
|
-
font-size: 1rem;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
& svg > path {
|
|
214
|
-
fill: ${({ theme }) => theme.colors.neutral500};
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
&:hover,
|
|
218
|
-
&:focus {
|
|
219
|
-
svg > path {
|
|
220
|
-
fill: ${({ theme }) => theme.colors.neutral800};
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
`;
|
|
224
203
|
const ProtectedListPage = () => {
|
|
225
204
|
const permissions = useTypedSelector(
|
|
226
205
|
(state) => state.admin_app.permissions.settings?.["review-workflows"]?.main
|
|
@@ -231,4 +210,4 @@ export {
|
|
|
231
210
|
ProtectedListPage,
|
|
232
211
|
ReviewWorkflowsListView
|
|
233
212
|
};
|
|
234
|
-
//# sourceMappingURL=index-
|
|
213
|
+
//# sourceMappingURL=index-CyhaJuJG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CyhaJuJG.mjs","sources":["../../admin/src/routes/settings/index.tsx"],"sourcesContent":["/* eslint-disable check-file/no-index */\n/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useTracking, ConfirmDialog, useRBAC, Table } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Flex, IconButton, TFooter, Typography, LinkButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Link, useNavigate } from 'react-router-dom';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport { CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME } from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { ContentType, useGetContentTypesQuery } from '../../services/content-manager';\n\nimport * as Layout from './components/Layout';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nexport const ReviewWorkflowsListView = () => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const [workflowToDelete, setWorkflowToDelete] = React.useState<string | null>(null);\n const [showLimitModal, setShowLimitModal] = React.useState<boolean>(false);\n const { data, isLoading: isLoadingModels } = useGetContentTypesQuery();\n const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows();\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']\n );\n const {\n allowedActions: { canCreate, canRead, canUpdate, canDelete },\n } = useRBAC(permissions);\n\n const limits = getFeature('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] as string;\n\n const handleDeleteWorkflow = (workflowId: string) => {\n setWorkflowToDelete(workflowId);\n };\n\n const toggleConfirmDeleteDialog = () => {\n setWorkflowToDelete(null);\n };\n\n const handleConfirmDeleteDialog = async () => {\n if (!workflowToDelete) return;\n\n await deleteAction(workflowToDelete);\n\n setWorkflowToDelete(null);\n };\n\n const handleCreateClick: React.MouseEventHandler<HTMLAnchorElement> &\n ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void) = (event) => {\n event.preventDefault();\n /**\n * If the current license has a workflow limit:\n * check if the total count of workflows exceeds that limit. If so,\n * prevent the navigation and show the limits overlay.\n *\n * If the current license does not have a limit (e.g. offline license):\n * allow the user to navigate to the create-view. In case they exceed the\n * current hard-limit of 200 they will see an error thrown by the API.\n */\n\n if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n event.preventDefault();\n setShowLimitModal(true);\n } else {\n navigate('create');\n trackUsage('willCreateWorkflow');\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoading && !isLicenseLoading) {\n if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal(true);\n }\n }\n }, [isLicenseLoading, isLoading, meta, meta?.workflowCount, numberOfWorkflows]);\n\n const headers = [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.name.title',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.stages.title',\n defaultMessage: 'Stages',\n }),\n name: 'stages',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',\n defaultMessage: 'Content Types',\n }),\n name: 'content-types',\n },\n ];\n\n if (isLoading || isLoadingModels) {\n return <Page.Loading />;\n }\n\n const contentTypes = Object.values(data ?? {}).reduce<ContentType[]>((acc, curr) => {\n acc.push(...curr);\n return acc;\n }, []);\n\n return (\n <>\n <Layout.Header\n primaryAction={\n canCreate ? (\n <LinkButton\n startIcon={<Plus />}\n size=\"S\"\n tag={NavLink}\n to=\"create\"\n onClick={handleCreateClick}\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n ) : null\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n <Table.Root\n isLoading={isLoading}\n rows={workflows}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" icon={<Plus />} onClick={handleCreateClick}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n ) : null\n }\n headers={headers}\n >\n <Table.Content>\n <Table.Head>\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n\n <Table.Body>\n {workflows.map((workflow) => (\n <Table.Row\n onClick={() => {\n navigate(`${workflow.id}`);\n }}\n key={workflow.id}\n >\n <Table.Cell width=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">\n {workflow.contentTypes\n .map((uid: string) => {\n const contentType = contentTypes.find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName ?? '';\n })\n .join(', ')}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n {canRead || canUpdate ? (\n <IconButton\n tag={Link}\n to={workflow.id.toString()}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {workflows.length > 1 && canDelete ? (\n <IconButton\n withTooltip={false}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteWorkflow(String(workflow.id));\n }}\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Dialog.Root open={!!workflowToDelete} onOpenChange={toggleConfirmDeleteDialog}>\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n\n <LimitsModal.Root open={showLimitModal} onOpenChange={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </Layout.Root>\n </>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ReviewWorkflowsListView />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage };\n"],"names":["Layout.Header","Layout.Root","contentType"],"mappings":"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"}
|
|
@@ -11,8 +11,7 @@ const ee = require("@strapi/admin/strapi-admin/ee");
|
|
|
11
11
|
const icons = require("@strapi/icons");
|
|
12
12
|
const styledComponents = require("styled-components");
|
|
13
13
|
function _interopNamespace(e) {
|
|
14
|
-
if (e && e.__esModule)
|
|
15
|
-
return e;
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
16
15
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
17
16
|
if (e) {
|
|
18
17
|
for (const k in e) {
|
|
@@ -29,13 +28,20 @@ function _interopNamespace(e) {
|
|
|
29
28
|
return Object.freeze(n);
|
|
30
29
|
}
|
|
31
30
|
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
32
|
-
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
|
31
|
+
const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
33
32
|
const v = glob[path];
|
|
34
33
|
if (v) {
|
|
35
34
|
return typeof v === "function" ? v() : Promise.resolve(v);
|
|
36
35
|
}
|
|
37
36
|
return new Promise((_, reject) => {
|
|
38
|
-
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
|
37
|
+
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
|
38
|
+
reject.bind(
|
|
39
|
+
null,
|
|
40
|
+
new Error(
|
|
41
|
+
"Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
);
|
|
39
45
|
});
|
|
40
46
|
};
|
|
41
47
|
const PLUGIN_ID = "review-workflows";
|
|
@@ -45,8 +51,9 @@ const CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME = "stagesPerWorkflow";
|
|
|
45
51
|
const STAGE_COLOR_DEFAULT = designSystem.lightTheme.colors.primary600;
|
|
46
52
|
const useTypedSelector = reactRedux.useSelector;
|
|
47
53
|
const reviewWorkflowsApi = strapiAdmin.adminApi.enhanceEndpoints({
|
|
48
|
-
addTagTypes: ["ReviewWorkflow", "ReviewWorkflowStages"]
|
|
54
|
+
addTagTypes: ["ReviewWorkflow", "ReviewWorkflowStages", "Document", "ContentTypeSettings"]
|
|
49
55
|
});
|
|
56
|
+
const SINGLE_TYPES = "single-types";
|
|
50
57
|
const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
51
58
|
endpoints: (builder) => ({
|
|
52
59
|
getStages: builder.query({
|
|
@@ -74,7 +81,17 @@ const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
74
81
|
params
|
|
75
82
|
}
|
|
76
83
|
}),
|
|
77
|
-
transformResponse: (res) => res.data
|
|
84
|
+
transformResponse: (res) => res.data,
|
|
85
|
+
invalidatesTags: (_result, _error, { slug, id, model }) => {
|
|
86
|
+
return [
|
|
87
|
+
{
|
|
88
|
+
type: "Document",
|
|
89
|
+
id: slug !== SINGLE_TYPES ? `${model}_${id}` : model
|
|
90
|
+
},
|
|
91
|
+
{ type: "Document", id: `${model}_LIST` },
|
|
92
|
+
"ReviewWorkflowStages"
|
|
93
|
+
];
|
|
94
|
+
}
|
|
78
95
|
}),
|
|
79
96
|
updateAssignee: builder.mutation({
|
|
80
97
|
query: ({ model, slug, id, params, ...data }) => ({
|
|
@@ -85,7 +102,16 @@ const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
85
102
|
params
|
|
86
103
|
}
|
|
87
104
|
}),
|
|
88
|
-
transformResponse: (res) => res.data
|
|
105
|
+
transformResponse: (res) => res.data,
|
|
106
|
+
invalidatesTags: (_result, _error, { slug, id, model }) => {
|
|
107
|
+
return [
|
|
108
|
+
{
|
|
109
|
+
type: "Document",
|
|
110
|
+
id: slug !== SINGLE_TYPES ? `${model}_${id}` : model
|
|
111
|
+
},
|
|
112
|
+
{ type: "Document", id: `${model}_LIST` }
|
|
113
|
+
];
|
|
114
|
+
}
|
|
89
115
|
}),
|
|
90
116
|
getContentTypes: builder.query({
|
|
91
117
|
query: () => ({
|
|
@@ -120,8 +146,7 @@ const isBaseQueryError = (error) => {
|
|
|
120
146
|
return error.name !== void 0;
|
|
121
147
|
};
|
|
122
148
|
const buildValidParams = (query) => {
|
|
123
|
-
if (!query)
|
|
124
|
-
return query;
|
|
149
|
+
if (!query) return query;
|
|
125
150
|
const { plugins: _, ...validQueryParams } = {
|
|
126
151
|
...query,
|
|
127
152
|
...Object.values(query?.plugins ?? {}).reduce(
|
|
@@ -129,9 +154,6 @@ const buildValidParams = (query) => {
|
|
|
129
154
|
{}
|
|
130
155
|
)
|
|
131
156
|
};
|
|
132
|
-
if ("_q" in validQueryParams) {
|
|
133
|
-
validQueryParams._q = encodeURIComponent(validQueryParams._q);
|
|
134
|
-
}
|
|
135
157
|
return validQueryParams;
|
|
136
158
|
};
|
|
137
159
|
const getDisplayName = ({
|
|
@@ -156,7 +178,6 @@ const AssigneeSelect = () => {
|
|
|
156
178
|
id,
|
|
157
179
|
slug: model = ""
|
|
158
180
|
} = reactRouterDom.useParams();
|
|
159
|
-
const dispatch = reactRedux.useDispatch();
|
|
160
181
|
const permissions = useTypedSelector((state) => state.admin_app.permissions);
|
|
161
182
|
const { formatMessage } = reactIntl.useIntl();
|
|
162
183
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
@@ -177,13 +198,13 @@ const AssigneeSelect = () => {
|
|
|
177
198
|
documentId: id
|
|
178
199
|
},
|
|
179
200
|
{
|
|
180
|
-
skip: !id
|
|
201
|
+
skip: !id && collectionType !== "single-types"
|
|
181
202
|
}
|
|
182
203
|
);
|
|
183
204
|
const users = data?.users || [];
|
|
184
205
|
const currentAssignee = document ? document[ASSIGNEE_ATTRIBUTE_NAME] : null;
|
|
185
206
|
const [updateAssignee, { error, isLoading: isMutating }] = useUpdateAssigneeMutation();
|
|
186
|
-
if (!collectionType || !model || !
|
|
207
|
+
if (!collectionType || !model || !document?.documentId) {
|
|
187
208
|
return null;
|
|
188
209
|
}
|
|
189
210
|
const handleChange = async (assigneeId) => {
|
|
@@ -193,22 +214,13 @@ const AssigneeSelect = () => {
|
|
|
193
214
|
const res = await updateAssignee({
|
|
194
215
|
slug: collectionType,
|
|
195
216
|
model,
|
|
196
|
-
id,
|
|
217
|
+
id: document.documentId,
|
|
197
218
|
params,
|
|
198
219
|
data: {
|
|
199
220
|
id: assigneeId ? parseInt(assigneeId, 10) : null
|
|
200
221
|
}
|
|
201
222
|
});
|
|
202
223
|
if ("data" in res) {
|
|
203
|
-
dispatch({
|
|
204
|
-
type: "contentManagerApi/invalidateTags",
|
|
205
|
-
payload: [
|
|
206
|
-
{
|
|
207
|
-
type: "Document",
|
|
208
|
-
id: `${model}_${id}`
|
|
209
|
-
}
|
|
210
|
-
]
|
|
211
|
-
});
|
|
212
224
|
toggleNotification({
|
|
213
225
|
type: "success",
|
|
214
226
|
message: formatMessage({
|
|
@@ -239,7 +251,7 @@ const AssigneeSelect = () => {
|
|
|
239
251
|
id: "content-manager.reviewWorkflows.assignee.clear",
|
|
240
252
|
defaultMessage: "Clear assignee"
|
|
241
253
|
}),
|
|
242
|
-
disabled: !isLoadingPermissions && !isLoading && users.length === 0 || !
|
|
254
|
+
disabled: !isLoadingPermissions && !isLoading && users.length === 0 || !document.documentId,
|
|
243
255
|
value: currentAssignee ? currentAssignee.id.toString() : null,
|
|
244
256
|
onChange: handleChange,
|
|
245
257
|
onClear: () => handleChange(null),
|
|
@@ -376,31 +388,31 @@ const StageSelect = () => {
|
|
|
376
388
|
slug: model = "",
|
|
377
389
|
id = ""
|
|
378
390
|
} = reactRouterDom.useParams();
|
|
379
|
-
const dispatch = reactRedux.useDispatch();
|
|
380
391
|
const { formatMessage } = reactIntl.useIntl();
|
|
381
392
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
382
393
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
383
394
|
const [{ query }] = strapiAdmin.useQueryParams();
|
|
384
395
|
const params = React__namespace.useMemo(() => buildValidParams(query), [query]);
|
|
385
|
-
const {
|
|
396
|
+
const { document, isLoading: isLoadingDocument } = strapiAdmin$1.unstable_useDocument(
|
|
386
397
|
{
|
|
387
|
-
|
|
398
|
+
collectionType,
|
|
388
399
|
model,
|
|
389
|
-
id
|
|
390
|
-
params
|
|
400
|
+
documentId: id
|
|
391
401
|
},
|
|
392
402
|
{
|
|
393
|
-
skip: !id
|
|
403
|
+
skip: !id && collectionType !== "single-types"
|
|
394
404
|
}
|
|
395
405
|
);
|
|
396
|
-
const {
|
|
406
|
+
const { data, isLoading: isLoadingStages } = useGetStagesQuery(
|
|
397
407
|
{
|
|
398
|
-
collectionType,
|
|
408
|
+
slug: collectionType,
|
|
399
409
|
model,
|
|
400
|
-
|
|
410
|
+
// @ts-expect-error – `id` is not correctly typed in the DS.
|
|
411
|
+
id: document?.documentId,
|
|
412
|
+
params
|
|
401
413
|
},
|
|
402
414
|
{
|
|
403
|
-
skip: !
|
|
415
|
+
skip: !document?.documentId
|
|
404
416
|
}
|
|
405
417
|
);
|
|
406
418
|
const { meta, stages = [] } = data ?? {};
|
|
@@ -416,24 +428,15 @@ const StageSelect = () => {
|
|
|
416
428
|
} else if (limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] && parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10) < stages.length) {
|
|
417
429
|
setShowLimitModal("stage");
|
|
418
430
|
} else {
|
|
419
|
-
if (
|
|
431
|
+
if (document?.documentId) {
|
|
420
432
|
const res = await updateStage({
|
|
421
433
|
model,
|
|
422
|
-
id,
|
|
434
|
+
id: document.documentId,
|
|
423
435
|
slug: collectionType,
|
|
424
436
|
params,
|
|
425
437
|
data: { id: stageId }
|
|
426
438
|
});
|
|
427
439
|
if ("data" in res) {
|
|
428
|
-
dispatch({
|
|
429
|
-
type: "contentManagerApi/invalidateTags",
|
|
430
|
-
payload: [
|
|
431
|
-
{
|
|
432
|
-
type: "Document",
|
|
433
|
-
id: `${model}_${id}`
|
|
434
|
-
}
|
|
435
|
-
]
|
|
436
|
-
});
|
|
437
440
|
toggleNotification({
|
|
438
441
|
type: "success",
|
|
439
442
|
message: formatMessage({
|
|
@@ -455,6 +458,7 @@ const StageSelect = () => {
|
|
|
455
458
|
}
|
|
456
459
|
};
|
|
457
460
|
const { themeColorName } = getStageColorByHex(activeWorkflowStage?.color) ?? {};
|
|
461
|
+
const isLoading = isLoadingStages || isLoadingDocument;
|
|
458
462
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
459
463
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
460
464
|
designSystem.Field.Root,
|
|
@@ -567,12 +571,16 @@ const StageSelect = () => {
|
|
|
567
571
|
] });
|
|
568
572
|
};
|
|
569
573
|
const Panel = () => {
|
|
570
|
-
const {
|
|
574
|
+
const {
|
|
575
|
+
slug = "",
|
|
576
|
+
id,
|
|
577
|
+
collectionType
|
|
578
|
+
} = reactRouterDom.useParams();
|
|
571
579
|
const {
|
|
572
580
|
edit: { options }
|
|
573
581
|
} = strapiAdmin$1.unstable_useDocumentLayout(slug);
|
|
574
582
|
const { formatMessage } = reactIntl.useIntl();
|
|
575
|
-
if (!window.strapi.isEE || !options?.reviewWorkflows || !id || id === "create") {
|
|
583
|
+
if (!window.strapi.isEE || !options?.reviewWorkflows || collectionType !== "single-types" && !id || id === "create") {
|
|
576
584
|
return null;
|
|
577
585
|
}
|
|
578
586
|
return {
|
|
@@ -591,36 +599,25 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
591
599
|
endpoints: (builder) => ({
|
|
592
600
|
getWorkflows: builder.query({
|
|
593
601
|
query: (args) => {
|
|
594
|
-
const { id, ...params } = args ?? {};
|
|
595
602
|
return {
|
|
596
|
-
url:
|
|
603
|
+
url: "/review-workflows/workflows",
|
|
597
604
|
method: "GET",
|
|
598
605
|
config: {
|
|
599
|
-
params
|
|
606
|
+
params: args ?? {}
|
|
600
607
|
}
|
|
601
608
|
};
|
|
602
609
|
},
|
|
603
610
|
transformResponse: (res) => {
|
|
604
|
-
let workflows = [];
|
|
605
|
-
if (Array.isArray(res.data)) {
|
|
606
|
-
workflows = res.data;
|
|
607
|
-
} else {
|
|
608
|
-
workflows = [res.data];
|
|
609
|
-
}
|
|
610
611
|
return {
|
|
611
|
-
workflows,
|
|
612
|
+
workflows: res.data,
|
|
612
613
|
meta: "meta" in res ? res.meta : void 0
|
|
613
614
|
};
|
|
614
615
|
},
|
|
615
|
-
providesTags: (res
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
...res?.workflows.map(({ id }) => ({ type: "ReviewWorkflow", id })) ?? [],
|
|
621
|
-
{ type: "ReviewWorkflow", id: "LIST" }
|
|
622
|
-
];
|
|
623
|
-
}
|
|
616
|
+
providesTags: (res) => {
|
|
617
|
+
return [
|
|
618
|
+
...res?.workflows.map(({ id }) => ({ type: "ReviewWorkflow", id })) ?? [],
|
|
619
|
+
{ type: "ReviewWorkflow", id: "LIST" }
|
|
620
|
+
];
|
|
624
621
|
}
|
|
625
622
|
}),
|
|
626
623
|
createWorkflow: builder.mutation({
|
|
@@ -630,7 +627,18 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
630
627
|
data
|
|
631
628
|
}),
|
|
632
629
|
transformResponse: (res) => res.data,
|
|
633
|
-
invalidatesTags
|
|
630
|
+
invalidatesTags(res) {
|
|
631
|
+
return [
|
|
632
|
+
{ type: "ReviewWorkflow", id: "LIST" },
|
|
633
|
+
"ReviewWorkflowStages",
|
|
634
|
+
{ type: "Document", id: `ALL_LIST` },
|
|
635
|
+
{ type: "ContentTypeSettings", id: "LIST" },
|
|
636
|
+
...res?.contentTypes.map((uid) => ({
|
|
637
|
+
type: "Document",
|
|
638
|
+
id: `${uid}_ALL_ITEMS`
|
|
639
|
+
})) ?? []
|
|
640
|
+
];
|
|
641
|
+
}
|
|
634
642
|
}),
|
|
635
643
|
updateWorkflow: builder.mutation({
|
|
636
644
|
query: ({ id, ...data }) => ({
|
|
@@ -641,7 +649,13 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
641
649
|
transformResponse: (res) => res.data,
|
|
642
650
|
invalidatesTags: (res, _err, arg) => [
|
|
643
651
|
{ type: "ReviewWorkflow", id: arg.id },
|
|
644
|
-
"ReviewWorkflowStages"
|
|
652
|
+
"ReviewWorkflowStages",
|
|
653
|
+
{ type: "Document", id: "ALL_LIST" },
|
|
654
|
+
{ type: "ContentTypeSettings", id: "LIST" },
|
|
655
|
+
...res?.contentTypes.map((uid) => ({
|
|
656
|
+
type: "Document",
|
|
657
|
+
id: `${uid}_ALL_ITEMS`
|
|
658
|
+
})) ?? []
|
|
645
659
|
]
|
|
646
660
|
}),
|
|
647
661
|
deleteWorkflow: builder.mutation({
|
|
@@ -652,7 +666,9 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
652
666
|
transformResponse: (res) => res.data,
|
|
653
667
|
invalidatesTags: (res, _err, arg) => [
|
|
654
668
|
{ type: "ReviewWorkflow", id: arg.id },
|
|
655
|
-
"ReviewWorkflowStages"
|
|
669
|
+
"ReviewWorkflowStages",
|
|
670
|
+
{ type: "Document", id: `ALL_LIST` },
|
|
671
|
+
{ type: "ContentTypeSettings", id: "LIST" }
|
|
656
672
|
]
|
|
657
673
|
})
|
|
658
674
|
}),
|
|
@@ -737,9 +753,6 @@ const addColumnToTableHook = ({ displayedHeaders, layout }) => {
|
|
|
737
753
|
};
|
|
738
754
|
};
|
|
739
755
|
const prefixPluginTranslations = (trad, pluginId) => {
|
|
740
|
-
if (!pluginId) {
|
|
741
|
-
throw new TypeError("pluginId can't be empty");
|
|
742
|
-
}
|
|
743
756
|
return Object.keys(trad).reduce((acc, current) => {
|
|
744
757
|
acc[`${pluginId}.${current}`] = trad[current];
|
|
745
758
|
return acc;
|
|
@@ -762,7 +775,7 @@ const admin = {
|
|
|
762
775
|
},
|
|
763
776
|
permissions: [],
|
|
764
777
|
async Component() {
|
|
765
|
-
const { Router } = await Promise.resolve().then(() => require("./router-
|
|
778
|
+
const { Router } = await Promise.resolve().then(() => require("./router-vDfGt9bq.js"));
|
|
766
779
|
return { default: Router };
|
|
767
780
|
}
|
|
768
781
|
});
|
|
@@ -777,7 +790,7 @@ const admin = {
|
|
|
777
790
|
licenseOnly: true,
|
|
778
791
|
permissions: [],
|
|
779
792
|
async Component() {
|
|
780
|
-
const { PurchaseReviewWorkflows } = await Promise.resolve().then(() => require("./purchase-review-workflows-
|
|
793
|
+
const { PurchaseReviewWorkflows } = await Promise.resolve().then(() => require("./purchase-review-workflows-BxoDFxQ5.js"));
|
|
781
794
|
return { default: PurchaseReviewWorkflows };
|
|
782
795
|
}
|
|
783
796
|
});
|
|
@@ -786,7 +799,7 @@ const admin = {
|
|
|
786
799
|
async registerTrads({ locales }) {
|
|
787
800
|
const importedTrads = await Promise.all(
|
|
788
801
|
locales.map((locale) => {
|
|
789
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-
|
|
802
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-CYgjfSep.js")) }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
|
|
790
803
|
return {
|
|
791
804
|
data: prefixPluginTranslations(data, PLUGIN_ID),
|
|
792
805
|
locale
|
|
@@ -816,4 +829,4 @@ exports.useGetContentTypesQuery = useGetContentTypesQuery;
|
|
|
816
829
|
exports.useGetWorkflowsQuery = useGetWorkflowsQuery;
|
|
817
830
|
exports.useTypedSelector = useTypedSelector;
|
|
818
831
|
exports.useUpdateWorkflowMutation = useUpdateWorkflowMutation;
|
|
819
|
-
//# sourceMappingURL=index-
|
|
832
|
+
//# sourceMappingURL=index-DMT27jNE.js.map
|