@strapi/review-workflows 5.0.0-rc.3 → 5.0.0-rc.30
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-Da8jupiA.mjs → Layout-BJOxxAeM.mjs} +7 -8
- package/dist/_chunks/Layout-BJOxxAeM.mjs.map +1 -0
- package/dist/_chunks/{Layout-D3DDQmMI.js → Layout-DnEAvmeU.js} +7 -8
- package/dist/_chunks/Layout-DnEAvmeU.js.map +1 -0
- package/dist/_chunks/{_id-xSrgPSJs.mjs → _id-6LK95-rZ.mjs} +13 -39
- package/dist/_chunks/_id-6LK95-rZ.mjs.map +1 -0
- package/dist/_chunks/{_id-CnRDP3Xx.js → _id-DSDzUpwX.js} +13 -39
- package/dist/_chunks/_id-DSDzUpwX.js.map +1 -0
- package/dist/_chunks/{index-4kp4AkBB.js → index-6FZL88pd.js} +9 -29
- package/dist/_chunks/index-6FZL88pd.js.map +1 -0
- package/dist/_chunks/{index-DhPxWpsW.js → index-DZSLya4b.js} +78 -64
- package/dist/_chunks/index-DZSLya4b.js.map +1 -0
- package/dist/_chunks/{index-jfO5GxtW.mjs → index-Df1alkCk.mjs} +11 -31
- package/dist/_chunks/index-Df1alkCk.mjs.map +1 -0
- package/dist/_chunks/{index-DDsJlZQw.mjs → index-lJqpw8bs.mjs} +79 -65
- package/dist/_chunks/index-lJqpw8bs.mjs.map +1 -0
- package/dist/_chunks/{router-DSXpeew4.js → router-CZqe-02r.js} +3 -3
- package/dist/_chunks/{router-DSXpeew4.js.map → router-CZqe-02r.js.map} +1 -1
- package/dist/_chunks/{router-DOEULOpS.mjs → router-DeSH-NeW.mjs} +3 -3
- package/dist/_chunks/{router-DOEULOpS.mjs.map → router-DeSH-NeW.mjs.map} +1 -1
- 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 +1733 -7
- package/dist/server/index.js +35 -61
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +35 -61
- package/dist/server/index.mjs.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 +1 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/review-workflows.d.ts.map +1 -1
- package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -1
- package/dist/server/src/services/stages.d.ts +2 -7
- package/dist/server/src/services/stages.d.ts.map +1 -1
- package/dist/shared/contracts/review-workflows.d.ts +1 -14
- package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
- package/package.json +9 -9
- 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/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/strapi-server.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-Df1alkCk.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 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,7 +5,7 @@ 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";
|
|
@@ -25,8 +25,9 @@ const CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME = "stagesPerWorkflow";
|
|
|
25
25
|
const STAGE_COLOR_DEFAULT = lightTheme.colors.primary600;
|
|
26
26
|
const useTypedSelector = useSelector;
|
|
27
27
|
const reviewWorkflowsApi = adminApi.enhanceEndpoints({
|
|
28
|
-
addTagTypes: ["ReviewWorkflow", "ReviewWorkflowStages"]
|
|
28
|
+
addTagTypes: ["ReviewWorkflow", "ReviewWorkflowStages", "Document", "ContentTypeSettings"]
|
|
29
29
|
});
|
|
30
|
+
const SINGLE_TYPES = "single-types";
|
|
30
31
|
const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
31
32
|
endpoints: (builder) => ({
|
|
32
33
|
getStages: builder.query({
|
|
@@ -54,7 +55,17 @@ const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
54
55
|
params
|
|
55
56
|
}
|
|
56
57
|
}),
|
|
57
|
-
transformResponse: (res) => res.data
|
|
58
|
+
transformResponse: (res) => res.data,
|
|
59
|
+
invalidatesTags: (_result, _error, { slug, id, model }) => {
|
|
60
|
+
return [
|
|
61
|
+
{
|
|
62
|
+
type: "Document",
|
|
63
|
+
id: slug !== SINGLE_TYPES ? `${model}_${id}` : model
|
|
64
|
+
},
|
|
65
|
+
{ type: "Document", id: `${model}_LIST` },
|
|
66
|
+
"ReviewWorkflowStages"
|
|
67
|
+
];
|
|
68
|
+
}
|
|
58
69
|
}),
|
|
59
70
|
updateAssignee: builder.mutation({
|
|
60
71
|
query: ({ model, slug, id, params, ...data }) => ({
|
|
@@ -65,7 +76,16 @@ const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
65
76
|
params
|
|
66
77
|
}
|
|
67
78
|
}),
|
|
68
|
-
transformResponse: (res) => res.data
|
|
79
|
+
transformResponse: (res) => res.data,
|
|
80
|
+
invalidatesTags: (_result, _error, { slug, id, model }) => {
|
|
81
|
+
return [
|
|
82
|
+
{
|
|
83
|
+
type: "Document",
|
|
84
|
+
id: slug !== SINGLE_TYPES ? `${model}_${id}` : model
|
|
85
|
+
},
|
|
86
|
+
{ type: "Document", id: `${model}_LIST` }
|
|
87
|
+
];
|
|
88
|
+
}
|
|
69
89
|
}),
|
|
70
90
|
getContentTypes: builder.query({
|
|
71
91
|
query: () => ({
|
|
@@ -136,7 +156,6 @@ const AssigneeSelect = () => {
|
|
|
136
156
|
id,
|
|
137
157
|
slug: model = ""
|
|
138
158
|
} = useParams();
|
|
139
|
-
const dispatch = useDispatch();
|
|
140
159
|
const permissions = useTypedSelector((state) => state.admin_app.permissions);
|
|
141
160
|
const { formatMessage } = useIntl();
|
|
142
161
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
@@ -157,13 +176,13 @@ const AssigneeSelect = () => {
|
|
|
157
176
|
documentId: id
|
|
158
177
|
},
|
|
159
178
|
{
|
|
160
|
-
skip: !id
|
|
179
|
+
skip: !id && collectionType !== "single-types"
|
|
161
180
|
}
|
|
162
181
|
);
|
|
163
182
|
const users = data?.users || [];
|
|
164
183
|
const currentAssignee = document ? document[ASSIGNEE_ATTRIBUTE_NAME] : null;
|
|
165
184
|
const [updateAssignee, { error, isLoading: isMutating }] = useUpdateAssigneeMutation();
|
|
166
|
-
if (!collectionType || !model || !
|
|
185
|
+
if (!collectionType || !model || !document?.documentId) {
|
|
167
186
|
return null;
|
|
168
187
|
}
|
|
169
188
|
const handleChange = async (assigneeId) => {
|
|
@@ -173,22 +192,13 @@ const AssigneeSelect = () => {
|
|
|
173
192
|
const res = await updateAssignee({
|
|
174
193
|
slug: collectionType,
|
|
175
194
|
model,
|
|
176
|
-
id,
|
|
195
|
+
id: document.documentId,
|
|
177
196
|
params,
|
|
178
197
|
data: {
|
|
179
198
|
id: assigneeId ? parseInt(assigneeId, 10) : null
|
|
180
199
|
}
|
|
181
200
|
});
|
|
182
201
|
if ("data" in res) {
|
|
183
|
-
dispatch({
|
|
184
|
-
type: "contentManagerApi/invalidateTags",
|
|
185
|
-
payload: [
|
|
186
|
-
{
|
|
187
|
-
type: "Document",
|
|
188
|
-
id: `${model}_${id}`
|
|
189
|
-
}
|
|
190
|
-
]
|
|
191
|
-
});
|
|
192
202
|
toggleNotification({
|
|
193
203
|
type: "success",
|
|
194
204
|
message: formatMessage({
|
|
@@ -219,7 +229,7 @@ const AssigneeSelect = () => {
|
|
|
219
229
|
id: "content-manager.reviewWorkflows.assignee.clear",
|
|
220
230
|
defaultMessage: "Clear assignee"
|
|
221
231
|
}),
|
|
222
|
-
disabled: !isLoadingPermissions && !isLoading && users.length === 0 || !
|
|
232
|
+
disabled: !isLoadingPermissions && !isLoading && users.length === 0 || !document.documentId,
|
|
223
233
|
value: currentAssignee ? currentAssignee.id.toString() : null,
|
|
224
234
|
onChange: handleChange,
|
|
225
235
|
onClear: () => handleChange(null),
|
|
@@ -356,31 +366,31 @@ const StageSelect = () => {
|
|
|
356
366
|
slug: model = "",
|
|
357
367
|
id = ""
|
|
358
368
|
} = useParams();
|
|
359
|
-
const dispatch = useDispatch();
|
|
360
369
|
const { formatMessage } = useIntl();
|
|
361
370
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
362
371
|
const { toggleNotification } = useNotification();
|
|
363
372
|
const [{ query }] = useQueryParams();
|
|
364
373
|
const params = React.useMemo(() => buildValidParams(query), [query]);
|
|
365
|
-
const {
|
|
374
|
+
const { document, isLoading: isLoadingDocument } = unstable_useDocument(
|
|
366
375
|
{
|
|
367
|
-
|
|
376
|
+
collectionType,
|
|
368
377
|
model,
|
|
369
|
-
id
|
|
370
|
-
params
|
|
378
|
+
documentId: id
|
|
371
379
|
},
|
|
372
380
|
{
|
|
373
|
-
skip: !id
|
|
381
|
+
skip: !id && collectionType !== "single-types"
|
|
374
382
|
}
|
|
375
383
|
);
|
|
376
|
-
const {
|
|
384
|
+
const { data, isLoading: isLoadingStages } = useGetStagesQuery(
|
|
377
385
|
{
|
|
378
|
-
collectionType,
|
|
386
|
+
slug: collectionType,
|
|
379
387
|
model,
|
|
380
|
-
|
|
388
|
+
// @ts-expect-error – `id` is not correctly typed in the DS.
|
|
389
|
+
id: document?.documentId,
|
|
390
|
+
params
|
|
381
391
|
},
|
|
382
392
|
{
|
|
383
|
-
skip: !
|
|
393
|
+
skip: !document?.documentId
|
|
384
394
|
}
|
|
385
395
|
);
|
|
386
396
|
const { meta, stages = [] } = data ?? {};
|
|
@@ -396,24 +406,15 @@ const StageSelect = () => {
|
|
|
396
406
|
} else if (limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] && parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10) < stages.length) {
|
|
397
407
|
setShowLimitModal("stage");
|
|
398
408
|
} else {
|
|
399
|
-
if (
|
|
409
|
+
if (document?.documentId) {
|
|
400
410
|
const res = await updateStage({
|
|
401
411
|
model,
|
|
402
|
-
id,
|
|
412
|
+
id: document.documentId,
|
|
403
413
|
slug: collectionType,
|
|
404
414
|
params,
|
|
405
415
|
data: { id: stageId }
|
|
406
416
|
});
|
|
407
417
|
if ("data" in res) {
|
|
408
|
-
dispatch({
|
|
409
|
-
type: "contentManagerApi/invalidateTags",
|
|
410
|
-
payload: [
|
|
411
|
-
{
|
|
412
|
-
type: "Document",
|
|
413
|
-
id: `${model}_${id}`
|
|
414
|
-
}
|
|
415
|
-
]
|
|
416
|
-
});
|
|
417
418
|
toggleNotification({
|
|
418
419
|
type: "success",
|
|
419
420
|
message: formatMessage({
|
|
@@ -435,6 +436,7 @@ const StageSelect = () => {
|
|
|
435
436
|
}
|
|
436
437
|
};
|
|
437
438
|
const { themeColorName } = getStageColorByHex(activeWorkflowStage?.color) ?? {};
|
|
439
|
+
const isLoading = isLoadingStages || isLoadingDocument;
|
|
438
440
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
439
441
|
/* @__PURE__ */ jsxs(
|
|
440
442
|
Field.Root,
|
|
@@ -547,12 +549,16 @@ const StageSelect = () => {
|
|
|
547
549
|
] });
|
|
548
550
|
};
|
|
549
551
|
const Panel = () => {
|
|
550
|
-
const {
|
|
552
|
+
const {
|
|
553
|
+
slug = "",
|
|
554
|
+
id,
|
|
555
|
+
collectionType
|
|
556
|
+
} = useParams();
|
|
551
557
|
const {
|
|
552
558
|
edit: { options }
|
|
553
559
|
} = unstable_useDocumentLayout(slug);
|
|
554
560
|
const { formatMessage } = useIntl();
|
|
555
|
-
if (!window.strapi.isEE || !options?.reviewWorkflows || !id || id === "create") {
|
|
561
|
+
if (!window.strapi.isEE || !options?.reviewWorkflows || collectionType !== "single-types" && !id || id === "create") {
|
|
556
562
|
return null;
|
|
557
563
|
}
|
|
558
564
|
return {
|
|
@@ -571,36 +577,25 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
571
577
|
endpoints: (builder) => ({
|
|
572
578
|
getWorkflows: builder.query({
|
|
573
579
|
query: (args) => {
|
|
574
|
-
const { id, ...params } = args ?? {};
|
|
575
580
|
return {
|
|
576
|
-
url:
|
|
581
|
+
url: "/review-workflows/workflows",
|
|
577
582
|
method: "GET",
|
|
578
583
|
config: {
|
|
579
|
-
params
|
|
584
|
+
params: args ?? {}
|
|
580
585
|
}
|
|
581
586
|
};
|
|
582
587
|
},
|
|
583
588
|
transformResponse: (res) => {
|
|
584
|
-
let workflows = [];
|
|
585
|
-
if (Array.isArray(res.data)) {
|
|
586
|
-
workflows = res.data;
|
|
587
|
-
} else {
|
|
588
|
-
workflows = [res.data];
|
|
589
|
-
}
|
|
590
589
|
return {
|
|
591
|
-
workflows,
|
|
590
|
+
workflows: res.data,
|
|
592
591
|
meta: "meta" in res ? res.meta : void 0
|
|
593
592
|
};
|
|
594
593
|
},
|
|
595
|
-
providesTags: (res
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
...res?.workflows.map(({ id }) => ({ type: "ReviewWorkflow", id })) ?? [],
|
|
601
|
-
{ type: "ReviewWorkflow", id: "LIST" }
|
|
602
|
-
];
|
|
603
|
-
}
|
|
594
|
+
providesTags: (res) => {
|
|
595
|
+
return [
|
|
596
|
+
...res?.workflows.map(({ id }) => ({ type: "ReviewWorkflow", id })) ?? [],
|
|
597
|
+
{ type: "ReviewWorkflow", id: "LIST" }
|
|
598
|
+
];
|
|
604
599
|
}
|
|
605
600
|
}),
|
|
606
601
|
createWorkflow: builder.mutation({
|
|
@@ -610,7 +605,18 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
610
605
|
data
|
|
611
606
|
}),
|
|
612
607
|
transformResponse: (res) => res.data,
|
|
613
|
-
invalidatesTags
|
|
608
|
+
invalidatesTags(res) {
|
|
609
|
+
return [
|
|
610
|
+
{ type: "ReviewWorkflow", id: "LIST" },
|
|
611
|
+
"ReviewWorkflowStages",
|
|
612
|
+
{ type: "Document", id: `ALL_LIST` },
|
|
613
|
+
{ type: "ContentTypeSettings", id: "LIST" },
|
|
614
|
+
...res?.contentTypes.map((uid) => ({
|
|
615
|
+
type: "Document",
|
|
616
|
+
id: `${uid}_ALL_ITEMS`
|
|
617
|
+
})) ?? []
|
|
618
|
+
];
|
|
619
|
+
}
|
|
614
620
|
}),
|
|
615
621
|
updateWorkflow: builder.mutation({
|
|
616
622
|
query: ({ id, ...data }) => ({
|
|
@@ -621,7 +627,13 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
621
627
|
transformResponse: (res) => res.data,
|
|
622
628
|
invalidatesTags: (res, _err, arg) => [
|
|
623
629
|
{ type: "ReviewWorkflow", id: arg.id },
|
|
624
|
-
"ReviewWorkflowStages"
|
|
630
|
+
"ReviewWorkflowStages",
|
|
631
|
+
{ type: "Document", id: "ALL_LIST" },
|
|
632
|
+
{ type: "ContentTypeSettings", id: "LIST" },
|
|
633
|
+
...res?.contentTypes.map((uid) => ({
|
|
634
|
+
type: "Document",
|
|
635
|
+
id: `${uid}_ALL_ITEMS`
|
|
636
|
+
})) ?? []
|
|
625
637
|
]
|
|
626
638
|
}),
|
|
627
639
|
deleteWorkflow: builder.mutation({
|
|
@@ -632,7 +644,9 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
632
644
|
transformResponse: (res) => res.data,
|
|
633
645
|
invalidatesTags: (res, _err, arg) => [
|
|
634
646
|
{ type: "ReviewWorkflow", id: arg.id },
|
|
635
|
-
"ReviewWorkflowStages"
|
|
647
|
+
"ReviewWorkflowStages",
|
|
648
|
+
{ type: "Document", id: `ALL_LIST` },
|
|
649
|
+
{ type: "ContentTypeSettings", id: "LIST" }
|
|
636
650
|
]
|
|
637
651
|
})
|
|
638
652
|
}),
|
|
@@ -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-DeSH-NeW.mjs");
|
|
746
760
|
return { default: Router };
|
|
747
761
|
}
|
|
748
762
|
});
|
|
@@ -798,4 +812,4 @@ export {
|
|
|
798
812
|
reviewWorkflowsApi as r,
|
|
799
813
|
useGetContentTypesQuery as u
|
|
800
814
|
};
|
|
801
|
-
//# sourceMappingURL=index-
|
|
815
|
+
//# sourceMappingURL=index-lJqpw8bs.mjs.map
|