@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.
Files changed (55) hide show
  1. package/dist/_chunks/{Layout-Da8jupiA.mjs → Layout-BJOxxAeM.mjs} +7 -8
  2. package/dist/_chunks/Layout-BJOxxAeM.mjs.map +1 -0
  3. package/dist/_chunks/{Layout-D3DDQmMI.js → Layout-DnEAvmeU.js} +7 -8
  4. package/dist/_chunks/Layout-DnEAvmeU.js.map +1 -0
  5. package/dist/_chunks/{_id-xSrgPSJs.mjs → _id-6LK95-rZ.mjs} +13 -39
  6. package/dist/_chunks/_id-6LK95-rZ.mjs.map +1 -0
  7. package/dist/_chunks/{_id-CnRDP3Xx.js → _id-DSDzUpwX.js} +13 -39
  8. package/dist/_chunks/_id-DSDzUpwX.js.map +1 -0
  9. package/dist/_chunks/{index-4kp4AkBB.js → index-6FZL88pd.js} +9 -29
  10. package/dist/_chunks/index-6FZL88pd.js.map +1 -0
  11. package/dist/_chunks/{index-DhPxWpsW.js → index-DZSLya4b.js} +78 -64
  12. package/dist/_chunks/index-DZSLya4b.js.map +1 -0
  13. package/dist/_chunks/{index-jfO5GxtW.mjs → index-Df1alkCk.mjs} +11 -31
  14. package/dist/_chunks/index-Df1alkCk.mjs.map +1 -0
  15. package/dist/_chunks/{index-DDsJlZQw.mjs → index-lJqpw8bs.mjs} +79 -65
  16. package/dist/_chunks/index-lJqpw8bs.mjs.map +1 -0
  17. package/dist/_chunks/{router-DSXpeew4.js → router-CZqe-02r.js} +3 -3
  18. package/dist/_chunks/{router-DSXpeew4.js.map → router-CZqe-02r.js.map} +1 -1
  19. package/dist/_chunks/{router-DOEULOpS.mjs → router-DeSH-NeW.mjs} +3 -3
  20. package/dist/_chunks/{router-DOEULOpS.mjs.map → router-DeSH-NeW.mjs.map} +1 -1
  21. package/dist/admin/index.js +1 -1
  22. package/dist/admin/index.mjs +1 -1
  23. package/dist/admin/src/services/admin.d.ts +1 -1
  24. package/dist/admin/src/services/api.d.ts +1 -1
  25. package/dist/admin/src/services/content-manager.d.ts +4 -4
  26. package/dist/admin/src/services/settings.d.ts +1733 -7
  27. package/dist/server/index.js +35 -61
  28. package/dist/server/index.js.map +1 -1
  29. package/dist/server/index.mjs +35 -61
  30. package/dist/server/index.mjs.map +1 -1
  31. package/dist/server/src/controllers/assignees.d.ts.map +1 -1
  32. package/dist/server/src/controllers/index.d.ts +0 -1
  33. package/dist/server/src/controllers/index.d.ts.map +1 -1
  34. package/dist/server/src/controllers/stages.d.ts.map +1 -1
  35. package/dist/server/src/controllers/workflows.d.ts +0 -7
  36. package/dist/server/src/controllers/workflows.d.ts.map +1 -1
  37. package/dist/server/src/index.d.ts +1 -2
  38. package/dist/server/src/index.d.ts.map +1 -1
  39. package/dist/server/src/routes/review-workflows.d.ts.map +1 -1
  40. package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
  41. package/dist/server/src/services/index.d.ts +1 -1
  42. package/dist/server/src/services/stages.d.ts +2 -7
  43. package/dist/server/src/services/stages.d.ts.map +1 -1
  44. package/dist/shared/contracts/review-workflows.d.ts +1 -14
  45. package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
  46. package/package.json +9 -9
  47. package/dist/_chunks/Layout-D3DDQmMI.js.map +0 -1
  48. package/dist/_chunks/Layout-Da8jupiA.mjs.map +0 -1
  49. package/dist/_chunks/_id-CnRDP3Xx.js.map +0 -1
  50. package/dist/_chunks/_id-xSrgPSJs.mjs.map +0 -1
  51. package/dist/_chunks/index-4kp4AkBB.js.map +0 -1
  52. package/dist/_chunks/index-DDsJlZQw.mjs.map +0 -1
  53. package/dist/_chunks/index-DhPxWpsW.js.map +0 -1
  54. package/dist/_chunks/index-jfO5GxtW.mjs.map +0 -1
  55. 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, useDispatch } from "react-redux";
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 || !id) {
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 || !id,
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 { data, isLoading } = useGetStagesQuery(
374
+ const { document, isLoading: isLoadingDocument } = unstable_useDocument(
366
375
  {
367
- slug: collectionType,
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 { document } = unstable_useDocument(
384
+ const { data, isLoading: isLoadingStages } = useGetStagesQuery(
377
385
  {
378
- collectionType,
386
+ slug: collectionType,
379
387
  model,
380
- documentId: id
388
+ // @ts-expect-error – `id` is not correctly typed in the DS.
389
+ id: document?.documentId,
390
+ params
381
391
  },
382
392
  {
383
- skip: !id
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 (id) {
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 { slug = "", id } = useParams();
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: `/review-workflows/workflows${id ? `/${id}` : ""}`,
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, _err, arg) => {
596
- if (typeof arg === "object" && "id" in arg && arg.id !== "") {
597
- return [{ type: "ReviewWorkflow", id: arg.id }];
598
- } else {
599
- return [
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: [{ type: "ReviewWorkflow", id: "LIST" }, "ReviewWorkflowStages"]
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-DOEULOpS.mjs");
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-DDsJlZQw.mjs.map
815
+ //# sourceMappingURL=index-lJqpw8bs.mjs.map