@strapi/review-workflows 0.0.0-experimental.d53e940834bf72ddc725f1d2fd36dac9abec30cb → 0.0.0-experimental.d6bba97c7ed8309e57888e84d4788fa279d473fd
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-BWzD-Tfe.js → Layout-DAfX35xh.js} +10 -12
- package/dist/_chunks/Layout-DAfX35xh.js.map +1 -0
- package/dist/_chunks/{Layout-D292CXD6.mjs → Layout-DTcaK6xT.mjs} +9 -10
- package/dist/_chunks/Layout-DTcaK6xT.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-CoX9yljN.js → id-CKzKf6TF.js} +108 -89
- package/dist/_chunks/id-CKzKf6TF.js.map +1 -0
- package/dist/_chunks/{_id-DqEUzU_u.mjs → id-CeWP_af0.mjs} +107 -87
- package/dist/_chunks/id-CeWP_af0.mjs.map +1 -0
- package/dist/_chunks/{index-D-KMrml_.js → index-BsGVnBaL.js} +91 -78
- package/dist/_chunks/index-BsGVnBaL.js.map +1 -0
- package/dist/_chunks/{index-2nkLt-AE.mjs → index-Dv9tQUGq.mjs} +13 -34
- package/dist/_chunks/index-Dv9tQUGq.mjs.map +1 -0
- package/dist/_chunks/{index-udedGkii.mjs → index-DzQoUVQo.mjs} +91 -77
- package/dist/_chunks/index-DzQoUVQo.mjs.map +1 -0
- package/dist/_chunks/{index-CDMcvtW9.js → index-bL6TS44K.js} +12 -34
- package/dist/_chunks/index-bL6TS44K.js.map +1 -0
- package/dist/_chunks/{purchase-review-workflows-DlCDg0fD.js → purchase-review-workflows-KiBiYXNZ.js} +2 -2
- package/dist/_chunks/{purchase-review-workflows-DlCDg0fD.js.map → purchase-review-workflows-KiBiYXNZ.js.map} +1 -1
- package/dist/_chunks/{purchase-review-workflows-BN-5Ube7.mjs → purchase-review-workflows-WyeSs4Y4.mjs} +2 -2
- package/dist/_chunks/{purchase-review-workflows-BN-5Ube7.mjs.map → purchase-review-workflows-WyeSs4Y4.mjs.map} +1 -1
- package/dist/_chunks/{router-bmjk-Tpf.mjs → router-BUgAAtkq.mjs} +3 -3
- package/dist/_chunks/router-BUgAAtkq.mjs.map +1 -0
- package/dist/_chunks/{router-C19H1Rju.js → router-DOrCMw1R.js} +3 -3
- package/dist/_chunks/router-DOrCMw1R.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 +13 -13
- package/dist/_chunks/Layout-BWzD-Tfe.js.map +0 -1
- package/dist/_chunks/Layout-D292CXD6.mjs.map +0 -1
- package/dist/_chunks/_id-CoX9yljN.js.map +0 -1
- package/dist/_chunks/_id-DqEUzU_u.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-2nkLt-AE.mjs.map +0 -1
- package/dist/_chunks/index-CDMcvtW9.js.map +0 -1
- package/dist/_chunks/index-D-KMrml_.js.map +0 -1
- package/dist/_chunks/index-udedGkii.mjs.map +0 -1
- package/dist/_chunks/router-C19H1Rju.js.map +0 -1
- package/dist/_chunks/router-bmjk-Tpf.mjs.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-Dv9tQUGq.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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"}
|
|
@@ -5,17 +5,24 @@ import { useIntl } from "react-intl";
|
|
|
5
5
|
import { useParams } from "react-router-dom";
|
|
6
6
|
import * as React from "react";
|
|
7
7
|
import { adminApi, useAPIErrorHandler, useNotification, useRBAC, useQueryParams, useAdminUsers } from "@strapi/admin/strapi-admin";
|
|
8
|
-
import { useSelector
|
|
8
|
+
import { useSelector } from "react-redux";
|
|
9
9
|
import { useLicenseLimits } from "@strapi/admin/strapi-admin/ee";
|
|
10
10
|
import { Cross } from "@strapi/icons";
|
|
11
11
|
import { styled } from "styled-components";
|
|
12
|
-
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
|
12
|
+
const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
13
13
|
const v = glob[path];
|
|
14
14
|
if (v) {
|
|
15
15
|
return typeof v === "function" ? v() : Promise.resolve(v);
|
|
16
16
|
}
|
|
17
17
|
return new Promise((_, reject) => {
|
|
18
|
-
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
|
18
|
+
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
|
19
|
+
reject.bind(
|
|
20
|
+
null,
|
|
21
|
+
new Error(
|
|
22
|
+
"Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
|
|
23
|
+
)
|
|
24
|
+
)
|
|
25
|
+
);
|
|
19
26
|
});
|
|
20
27
|
};
|
|
21
28
|
const PLUGIN_ID = "review-workflows";
|
|
@@ -25,8 +32,9 @@ const CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME = "stagesPerWorkflow";
|
|
|
25
32
|
const STAGE_COLOR_DEFAULT = lightTheme.colors.primary600;
|
|
26
33
|
const useTypedSelector = useSelector;
|
|
27
34
|
const reviewWorkflowsApi = adminApi.enhanceEndpoints({
|
|
28
|
-
addTagTypes: ["ReviewWorkflow", "ReviewWorkflowStages"]
|
|
35
|
+
addTagTypes: ["ReviewWorkflow", "ReviewWorkflowStages", "Document", "ContentTypeSettings"]
|
|
29
36
|
});
|
|
37
|
+
const SINGLE_TYPES = "single-types";
|
|
30
38
|
const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
31
39
|
endpoints: (builder) => ({
|
|
32
40
|
getStages: builder.query({
|
|
@@ -54,7 +62,17 @@ const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
54
62
|
params
|
|
55
63
|
}
|
|
56
64
|
}),
|
|
57
|
-
transformResponse: (res) => res.data
|
|
65
|
+
transformResponse: (res) => res.data,
|
|
66
|
+
invalidatesTags: (_result, _error, { slug, id, model }) => {
|
|
67
|
+
return [
|
|
68
|
+
{
|
|
69
|
+
type: "Document",
|
|
70
|
+
id: slug !== SINGLE_TYPES ? `${model}_${id}` : model
|
|
71
|
+
},
|
|
72
|
+
{ type: "Document", id: `${model}_LIST` },
|
|
73
|
+
"ReviewWorkflowStages"
|
|
74
|
+
];
|
|
75
|
+
}
|
|
58
76
|
}),
|
|
59
77
|
updateAssignee: builder.mutation({
|
|
60
78
|
query: ({ model, slug, id, params, ...data }) => ({
|
|
@@ -65,7 +83,16 @@ const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
65
83
|
params
|
|
66
84
|
}
|
|
67
85
|
}),
|
|
68
|
-
transformResponse: (res) => res.data
|
|
86
|
+
transformResponse: (res) => res.data,
|
|
87
|
+
invalidatesTags: (_result, _error, { slug, id, model }) => {
|
|
88
|
+
return [
|
|
89
|
+
{
|
|
90
|
+
type: "Document",
|
|
91
|
+
id: slug !== SINGLE_TYPES ? `${model}_${id}` : model
|
|
92
|
+
},
|
|
93
|
+
{ type: "Document", id: `${model}_LIST` }
|
|
94
|
+
];
|
|
95
|
+
}
|
|
69
96
|
}),
|
|
70
97
|
getContentTypes: builder.query({
|
|
71
98
|
query: () => ({
|
|
@@ -100,8 +127,7 @@ const isBaseQueryError = (error) => {
|
|
|
100
127
|
return error.name !== void 0;
|
|
101
128
|
};
|
|
102
129
|
const buildValidParams = (query) => {
|
|
103
|
-
if (!query)
|
|
104
|
-
return query;
|
|
130
|
+
if (!query) return query;
|
|
105
131
|
const { plugins: _, ...validQueryParams } = {
|
|
106
132
|
...query,
|
|
107
133
|
...Object.values(query?.plugins ?? {}).reduce(
|
|
@@ -109,9 +135,6 @@ const buildValidParams = (query) => {
|
|
|
109
135
|
{}
|
|
110
136
|
)
|
|
111
137
|
};
|
|
112
|
-
if ("_q" in validQueryParams) {
|
|
113
|
-
validQueryParams._q = encodeURIComponent(validQueryParams._q);
|
|
114
|
-
}
|
|
115
138
|
return validQueryParams;
|
|
116
139
|
};
|
|
117
140
|
const getDisplayName = ({
|
|
@@ -136,7 +159,6 @@ const AssigneeSelect = () => {
|
|
|
136
159
|
id,
|
|
137
160
|
slug: model = ""
|
|
138
161
|
} = useParams();
|
|
139
|
-
const dispatch = useDispatch();
|
|
140
162
|
const permissions = useTypedSelector((state) => state.admin_app.permissions);
|
|
141
163
|
const { formatMessage } = useIntl();
|
|
142
164
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
@@ -157,13 +179,13 @@ const AssigneeSelect = () => {
|
|
|
157
179
|
documentId: id
|
|
158
180
|
},
|
|
159
181
|
{
|
|
160
|
-
skip: !id
|
|
182
|
+
skip: !id && collectionType !== "single-types"
|
|
161
183
|
}
|
|
162
184
|
);
|
|
163
185
|
const users = data?.users || [];
|
|
164
186
|
const currentAssignee = document ? document[ASSIGNEE_ATTRIBUTE_NAME] : null;
|
|
165
187
|
const [updateAssignee, { error, isLoading: isMutating }] = useUpdateAssigneeMutation();
|
|
166
|
-
if (!collectionType || !model || !
|
|
188
|
+
if (!collectionType || !model || !document?.documentId) {
|
|
167
189
|
return null;
|
|
168
190
|
}
|
|
169
191
|
const handleChange = async (assigneeId) => {
|
|
@@ -173,22 +195,13 @@ const AssigneeSelect = () => {
|
|
|
173
195
|
const res = await updateAssignee({
|
|
174
196
|
slug: collectionType,
|
|
175
197
|
model,
|
|
176
|
-
id,
|
|
198
|
+
id: document.documentId,
|
|
177
199
|
params,
|
|
178
200
|
data: {
|
|
179
201
|
id: assigneeId ? parseInt(assigneeId, 10) : null
|
|
180
202
|
}
|
|
181
203
|
});
|
|
182
204
|
if ("data" in res) {
|
|
183
|
-
dispatch({
|
|
184
|
-
type: "contentManagerApi/invalidateTags",
|
|
185
|
-
payload: [
|
|
186
|
-
{
|
|
187
|
-
type: "Document",
|
|
188
|
-
id: `${model}_${id}`
|
|
189
|
-
}
|
|
190
|
-
]
|
|
191
|
-
});
|
|
192
205
|
toggleNotification({
|
|
193
206
|
type: "success",
|
|
194
207
|
message: formatMessage({
|
|
@@ -219,7 +232,7 @@ const AssigneeSelect = () => {
|
|
|
219
232
|
id: "content-manager.reviewWorkflows.assignee.clear",
|
|
220
233
|
defaultMessage: "Clear assignee"
|
|
221
234
|
}),
|
|
222
|
-
disabled: !isLoadingPermissions && !isLoading && users.length === 0 || !
|
|
235
|
+
disabled: !isLoadingPermissions && !isLoading && users.length === 0 || !document.documentId,
|
|
223
236
|
value: currentAssignee ? currentAssignee.id.toString() : null,
|
|
224
237
|
onChange: handleChange,
|
|
225
238
|
onClear: () => handleChange(null),
|
|
@@ -356,31 +369,31 @@ const StageSelect = () => {
|
|
|
356
369
|
slug: model = "",
|
|
357
370
|
id = ""
|
|
358
371
|
} = useParams();
|
|
359
|
-
const dispatch = useDispatch();
|
|
360
372
|
const { formatMessage } = useIntl();
|
|
361
373
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
362
374
|
const { toggleNotification } = useNotification();
|
|
363
375
|
const [{ query }] = useQueryParams();
|
|
364
376
|
const params = React.useMemo(() => buildValidParams(query), [query]);
|
|
365
|
-
const {
|
|
377
|
+
const { document, isLoading: isLoadingDocument } = unstable_useDocument(
|
|
366
378
|
{
|
|
367
|
-
|
|
379
|
+
collectionType,
|
|
368
380
|
model,
|
|
369
|
-
id
|
|
370
|
-
params
|
|
381
|
+
documentId: id
|
|
371
382
|
},
|
|
372
383
|
{
|
|
373
|
-
skip: !id
|
|
384
|
+
skip: !id && collectionType !== "single-types"
|
|
374
385
|
}
|
|
375
386
|
);
|
|
376
|
-
const {
|
|
387
|
+
const { data, isLoading: isLoadingStages } = useGetStagesQuery(
|
|
377
388
|
{
|
|
378
|
-
collectionType,
|
|
389
|
+
slug: collectionType,
|
|
379
390
|
model,
|
|
380
|
-
|
|
391
|
+
// @ts-expect-error – `id` is not correctly typed in the DS.
|
|
392
|
+
id: document?.documentId,
|
|
393
|
+
params
|
|
381
394
|
},
|
|
382
395
|
{
|
|
383
|
-
skip: !
|
|
396
|
+
skip: !document?.documentId
|
|
384
397
|
}
|
|
385
398
|
);
|
|
386
399
|
const { meta, stages = [] } = data ?? {};
|
|
@@ -396,24 +409,15 @@ const StageSelect = () => {
|
|
|
396
409
|
} else if (limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] && parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10) < stages.length) {
|
|
397
410
|
setShowLimitModal("stage");
|
|
398
411
|
} else {
|
|
399
|
-
if (
|
|
412
|
+
if (document?.documentId) {
|
|
400
413
|
const res = await updateStage({
|
|
401
414
|
model,
|
|
402
|
-
id,
|
|
415
|
+
id: document.documentId,
|
|
403
416
|
slug: collectionType,
|
|
404
417
|
params,
|
|
405
418
|
data: { id: stageId }
|
|
406
419
|
});
|
|
407
420
|
if ("data" in res) {
|
|
408
|
-
dispatch({
|
|
409
|
-
type: "contentManagerApi/invalidateTags",
|
|
410
|
-
payload: [
|
|
411
|
-
{
|
|
412
|
-
type: "Document",
|
|
413
|
-
id: `${model}_${id}`
|
|
414
|
-
}
|
|
415
|
-
]
|
|
416
|
-
});
|
|
417
421
|
toggleNotification({
|
|
418
422
|
type: "success",
|
|
419
423
|
message: formatMessage({
|
|
@@ -435,6 +439,7 @@ const StageSelect = () => {
|
|
|
435
439
|
}
|
|
436
440
|
};
|
|
437
441
|
const { themeColorName } = getStageColorByHex(activeWorkflowStage?.color) ?? {};
|
|
442
|
+
const isLoading = isLoadingStages || isLoadingDocument;
|
|
438
443
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
439
444
|
/* @__PURE__ */ jsxs(
|
|
440
445
|
Field.Root,
|
|
@@ -547,12 +552,16 @@ const StageSelect = () => {
|
|
|
547
552
|
] });
|
|
548
553
|
};
|
|
549
554
|
const Panel = () => {
|
|
550
|
-
const {
|
|
555
|
+
const {
|
|
556
|
+
slug = "",
|
|
557
|
+
id,
|
|
558
|
+
collectionType
|
|
559
|
+
} = useParams();
|
|
551
560
|
const {
|
|
552
561
|
edit: { options }
|
|
553
562
|
} = unstable_useDocumentLayout(slug);
|
|
554
563
|
const { formatMessage } = useIntl();
|
|
555
|
-
if (!window.strapi.isEE || !options?.reviewWorkflows || !id || id === "create") {
|
|
564
|
+
if (!window.strapi.isEE || !options?.reviewWorkflows || collectionType !== "single-types" && !id || id === "create") {
|
|
556
565
|
return null;
|
|
557
566
|
}
|
|
558
567
|
return {
|
|
@@ -571,36 +580,25 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
571
580
|
endpoints: (builder) => ({
|
|
572
581
|
getWorkflows: builder.query({
|
|
573
582
|
query: (args) => {
|
|
574
|
-
const { id, ...params } = args ?? {};
|
|
575
583
|
return {
|
|
576
|
-
url:
|
|
584
|
+
url: "/review-workflows/workflows",
|
|
577
585
|
method: "GET",
|
|
578
586
|
config: {
|
|
579
|
-
params
|
|
587
|
+
params: args ?? {}
|
|
580
588
|
}
|
|
581
589
|
};
|
|
582
590
|
},
|
|
583
591
|
transformResponse: (res) => {
|
|
584
|
-
let workflows = [];
|
|
585
|
-
if (Array.isArray(res.data)) {
|
|
586
|
-
workflows = res.data;
|
|
587
|
-
} else {
|
|
588
|
-
workflows = [res.data];
|
|
589
|
-
}
|
|
590
592
|
return {
|
|
591
|
-
workflows,
|
|
593
|
+
workflows: res.data,
|
|
592
594
|
meta: "meta" in res ? res.meta : void 0
|
|
593
595
|
};
|
|
594
596
|
},
|
|
595
|
-
providesTags: (res
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
...res?.workflows.map(({ id }) => ({ type: "ReviewWorkflow", id })) ?? [],
|
|
601
|
-
{ type: "ReviewWorkflow", id: "LIST" }
|
|
602
|
-
];
|
|
603
|
-
}
|
|
597
|
+
providesTags: (res) => {
|
|
598
|
+
return [
|
|
599
|
+
...res?.workflows.map(({ id }) => ({ type: "ReviewWorkflow", id })) ?? [],
|
|
600
|
+
{ type: "ReviewWorkflow", id: "LIST" }
|
|
601
|
+
];
|
|
604
602
|
}
|
|
605
603
|
}),
|
|
606
604
|
createWorkflow: builder.mutation({
|
|
@@ -610,7 +608,18 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
610
608
|
data
|
|
611
609
|
}),
|
|
612
610
|
transformResponse: (res) => res.data,
|
|
613
|
-
invalidatesTags
|
|
611
|
+
invalidatesTags(res) {
|
|
612
|
+
return [
|
|
613
|
+
{ type: "ReviewWorkflow", id: "LIST" },
|
|
614
|
+
"ReviewWorkflowStages",
|
|
615
|
+
{ type: "Document", id: `ALL_LIST` },
|
|
616
|
+
{ type: "ContentTypeSettings", id: "LIST" },
|
|
617
|
+
...res?.contentTypes.map((uid) => ({
|
|
618
|
+
type: "Document",
|
|
619
|
+
id: `${uid}_ALL_ITEMS`
|
|
620
|
+
})) ?? []
|
|
621
|
+
];
|
|
622
|
+
}
|
|
614
623
|
}),
|
|
615
624
|
updateWorkflow: builder.mutation({
|
|
616
625
|
query: ({ id, ...data }) => ({
|
|
@@ -621,7 +630,13 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
621
630
|
transformResponse: (res) => res.data,
|
|
622
631
|
invalidatesTags: (res, _err, arg) => [
|
|
623
632
|
{ type: "ReviewWorkflow", id: arg.id },
|
|
624
|
-
"ReviewWorkflowStages"
|
|
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
|
+
})) ?? []
|
|
625
640
|
]
|
|
626
641
|
}),
|
|
627
642
|
deleteWorkflow: builder.mutation({
|
|
@@ -632,7 +647,9 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
632
647
|
transformResponse: (res) => res.data,
|
|
633
648
|
invalidatesTags: (res, _err, arg) => [
|
|
634
649
|
{ type: "ReviewWorkflow", id: arg.id },
|
|
635
|
-
"ReviewWorkflowStages"
|
|
650
|
+
"ReviewWorkflowStages",
|
|
651
|
+
{ type: "Document", id: `ALL_LIST` },
|
|
652
|
+
{ type: "ContentTypeSettings", id: "LIST" }
|
|
636
653
|
]
|
|
637
654
|
})
|
|
638
655
|
}),
|
|
@@ -717,9 +734,6 @@ const addColumnToTableHook = ({ displayedHeaders, layout }) => {
|
|
|
717
734
|
};
|
|
718
735
|
};
|
|
719
736
|
const prefixPluginTranslations = (trad, pluginId) => {
|
|
720
|
-
if (!pluginId) {
|
|
721
|
-
throw new TypeError("pluginId can't be empty");
|
|
722
|
-
}
|
|
723
737
|
return Object.keys(trad).reduce((acc, current) => {
|
|
724
738
|
acc[`${pluginId}.${current}`] = trad[current];
|
|
725
739
|
return acc;
|
|
@@ -742,7 +756,7 @@ const admin = {
|
|
|
742
756
|
},
|
|
743
757
|
permissions: [],
|
|
744
758
|
async Component() {
|
|
745
|
-
const { Router } = await import("./router-
|
|
759
|
+
const { Router } = await import("./router-BUgAAtkq.mjs");
|
|
746
760
|
return { default: Router };
|
|
747
761
|
}
|
|
748
762
|
});
|
|
@@ -757,7 +771,7 @@ const admin = {
|
|
|
757
771
|
licenseOnly: true,
|
|
758
772
|
permissions: [],
|
|
759
773
|
async Component() {
|
|
760
|
-
const { PurchaseReviewWorkflows } = await import("./purchase-review-workflows-
|
|
774
|
+
const { PurchaseReviewWorkflows } = await import("./purchase-review-workflows-WyeSs4Y4.mjs");
|
|
761
775
|
return { default: PurchaseReviewWorkflows };
|
|
762
776
|
}
|
|
763
777
|
});
|
|
@@ -766,7 +780,7 @@ const admin = {
|
|
|
766
780
|
async registerTrads({ locales }) {
|
|
767
781
|
const importedTrads = await Promise.all(
|
|
768
782
|
locales.map((locale) => {
|
|
769
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-
|
|
783
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-D9dxziEb.mjs") }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
|
|
770
784
|
return {
|
|
771
785
|
data: prefixPluginTranslations(data, PLUGIN_ID),
|
|
772
786
|
locale
|
|
@@ -798,4 +812,4 @@ export {
|
|
|
798
812
|
reviewWorkflowsApi as r,
|
|
799
813
|
useGetContentTypesQuery as u
|
|
800
814
|
};
|
|
801
|
-
//# sourceMappingURL=index-
|
|
815
|
+
//# sourceMappingURL=index-DzQoUVQo.mjs.map
|