@strapi/review-workflows 0.0.0-next.64bd4f3d1efcc9420d27c4f4d2013677ded62360 → 0.0.0-next.66fd5e4469bf52fd13fc9d4d8099cf66722cab24

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 (110) hide show
  1. package/dist/admin/chunks/Layout-C4ri_ldC.js +290 -0
  2. package/dist/admin/chunks/Layout-C4ri_ldC.js.map +1 -0
  3. package/dist/admin/chunks/Layout-CF497D6H.mjs +265 -0
  4. package/dist/admin/chunks/Layout-CF497D6H.mjs.map +1 -0
  5. package/dist/admin/chunks/en-BNGiWajd.js +20 -0
  6. package/dist/admin/chunks/en-BNGiWajd.js.map +1 -0
  7. package/dist/admin/chunks/en-BrZXFtVv.mjs +18 -0
  8. package/dist/admin/chunks/en-BrZXFtVv.mjs.map +1 -0
  9. package/dist/admin/chunks/id-DVOtqJqn.js +1442 -0
  10. package/dist/admin/chunks/id-DVOtqJqn.js.map +1 -0
  11. package/dist/admin/chunks/id-QD0V9dME.mjs +1420 -0
  12. package/dist/admin/chunks/id-QD0V9dME.mjs.map +1 -0
  13. package/dist/admin/chunks/index-CCx4kT-t.js +293 -0
  14. package/dist/admin/chunks/index-CCx4kT-t.js.map +1 -0
  15. package/dist/admin/chunks/index-CzdEqFOm.js +1115 -0
  16. package/dist/admin/chunks/index-CzdEqFOm.js.map +1 -0
  17. package/dist/admin/chunks/index-DcEF47R4.mjs +1081 -0
  18. package/dist/admin/chunks/index-DcEF47R4.mjs.map +1 -0
  19. package/dist/admin/chunks/index-iChY7MsG.mjs +271 -0
  20. package/dist/admin/chunks/index-iChY7MsG.mjs.map +1 -0
  21. package/dist/admin/chunks/purchase-review-workflows-4n0KXAeo.mjs +200 -0
  22. package/dist/admin/chunks/purchase-review-workflows-4n0KXAeo.mjs.map +1 -0
  23. package/dist/admin/chunks/purchase-review-workflows-BDLncDcz.js +202 -0
  24. package/dist/admin/chunks/purchase-review-workflows-BDLncDcz.js.map +1 -0
  25. package/dist/admin/chunks/router-ChVwf8TN.js +30 -0
  26. package/dist/admin/chunks/router-ChVwf8TN.js.map +1 -0
  27. package/dist/admin/chunks/router-D-YCUzYy.mjs +28 -0
  28. package/dist/admin/chunks/router-D-YCUzYy.mjs.map +1 -0
  29. package/dist/admin/chunks/uk-CbRUr1I7.js +16 -0
  30. package/dist/admin/chunks/uk-CbRUr1I7.js.map +1 -0
  31. package/dist/admin/chunks/uk-DLlzEBUF.mjs +14 -0
  32. package/dist/admin/chunks/uk-DLlzEBUF.mjs.map +1 -0
  33. package/dist/admin/index.js +17 -2
  34. package/dist/admin/index.js.map +1 -1
  35. package/dist/admin/index.mjs +12 -4
  36. package/dist/admin/index.mjs.map +1 -1
  37. package/dist/admin/src/routes/content-manager/model/id/components/AssigneeSelect.d.ts +4 -0
  38. package/dist/admin/src/routes/content-manager/model/id/components/Header.d.ts +5 -0
  39. package/dist/admin/src/routes/content-manager/model/id/components/StageSelect.d.ts +3 -0
  40. package/dist/admin/src/services/settings.d.ts +7 -3
  41. package/dist/server/index.js +2112 -7994
  42. package/dist/server/index.js.map +1 -1
  43. package/dist/server/index.mjs +2118 -8003
  44. package/dist/server/index.mjs.map +1 -1
  45. package/dist/server/src/bootstrap.d.ts.map +1 -1
  46. package/dist/server/src/constants/workflows.d.ts +1 -0
  47. package/dist/server/src/constants/workflows.d.ts.map +1 -1
  48. package/dist/server/src/content-types/index.d.ts +6 -0
  49. package/dist/server/src/content-types/index.d.ts.map +1 -1
  50. package/dist/server/src/content-types/workflow/index.d.ts +6 -0
  51. package/dist/server/src/content-types/workflow/index.d.ts.map +1 -1
  52. package/dist/server/src/controllers/assignees.d.ts.map +1 -1
  53. package/dist/server/src/controllers/stages.d.ts.map +1 -1
  54. package/dist/server/src/index.d.ts +28 -6
  55. package/dist/server/src/index.d.ts.map +1 -1
  56. package/dist/server/src/register.d.ts.map +1 -1
  57. package/dist/server/src/services/assignees.d.ts +8 -4
  58. package/dist/server/src/services/assignees.d.ts.map +1 -1
  59. package/dist/server/src/services/document-service-middleware.d.ts +2 -1
  60. package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
  61. package/dist/server/src/services/index.d.ts +16 -6
  62. package/dist/server/src/services/index.d.ts.map +1 -1
  63. package/dist/server/src/services/metrics/index.d.ts +4 -4
  64. package/dist/server/src/services/metrics/index.d.ts.map +1 -1
  65. package/dist/server/src/services/stages.d.ts +6 -1
  66. package/dist/server/src/services/stages.d.ts.map +1 -1
  67. package/dist/server/src/services/workflows.d.ts.map +1 -1
  68. package/dist/server/src/validation/review-workflows.d.ts +4 -0
  69. package/dist/server/src/validation/review-workflows.d.ts.map +1 -1
  70. package/dist/shared/contracts/review-workflows.d.ts +8 -4
  71. package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
  72. package/package.json +17 -16
  73. package/dist/_chunks/Layout-C_uZ98Uf.mjs +0 -233
  74. package/dist/_chunks/Layout-C_uZ98Uf.mjs.map +0 -1
  75. package/dist/_chunks/Layout-b_msoxIP.js +0 -251
  76. package/dist/_chunks/Layout-b_msoxIP.js.map +0 -1
  77. package/dist/_chunks/_id-4xBYY7wK.js +0 -1237
  78. package/dist/_chunks/_id-4xBYY7wK.js.map +0 -1
  79. package/dist/_chunks/_id-mkPbu6GX.mjs +0 -1217
  80. package/dist/_chunks/_id-mkPbu6GX.mjs.map +0 -1
  81. package/dist/_chunks/en-D9ZrQAV6.mjs +0 -12
  82. package/dist/_chunks/en-D9ZrQAV6.mjs.map +0 -1
  83. package/dist/_chunks/en-xcewH2pC.js +0 -12
  84. package/dist/_chunks/en-xcewH2pC.js.map +0 -1
  85. package/dist/_chunks/index-C5NgBQMb.js +0 -830
  86. package/dist/_chunks/index-C5NgBQMb.js.map +0 -1
  87. package/dist/_chunks/index-CIGzoVfk.js +0 -233
  88. package/dist/_chunks/index-CIGzoVfk.js.map +0 -1
  89. package/dist/_chunks/index-DL8-Q4Q5.mjs +0 -812
  90. package/dist/_chunks/index-DL8-Q4Q5.mjs.map +0 -1
  91. package/dist/_chunks/index-D_k4wfAN.mjs +0 -214
  92. package/dist/_chunks/index-D_k4wfAN.mjs.map +0 -1
  93. package/dist/_chunks/purchase-review-workflows-BN-5Ube7.mjs +0 -52
  94. package/dist/_chunks/purchase-review-workflows-BN-5Ube7.mjs.map +0 -1
  95. package/dist/_chunks/purchase-review-workflows-DlCDg0fD.js +0 -52
  96. package/dist/_chunks/purchase-review-workflows-DlCDg0fD.js.map +0 -1
  97. package/dist/_chunks/router-BFr5lHsE.js +0 -24
  98. package/dist/_chunks/router-BFr5lHsE.js.map +0 -1
  99. package/dist/_chunks/router-DnQKLQOJ.mjs +0 -24
  100. package/dist/_chunks/router-DnQKLQOJ.mjs.map +0 -1
  101. package/dist/admin/src/routes/content-manager/[model]/[id]/components/AssigneeSelect.d.ts +0 -2
  102. package/dist/admin/src/routes/content-manager/[model]/[id]/components/StageSelect.d.ts +0 -1
  103. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/AssigneeFilter.d.ts +0 -0
  104. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/StageFilter.d.ts +0 -0
  105. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/TableColumns.d.ts +0 -0
  106. /package/dist/admin/src/routes/content-manager/{[model] → model}/configure/constants.d.ts +0 -0
  107. /package/dist/admin/src/routes/content-manager/{[model] → model}/constants.d.ts +0 -0
  108. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/Panel.d.ts +0 -0
  109. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/constants.d.ts +0 -0
  110. /package/dist/admin/src/routes/settings/{:id.d.ts → id.d.ts} +0 -0
@@ -1,233 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const React = require("react");
5
- const strapiAdmin = require("@strapi/admin/strapi-admin");
6
- const ee = require("@strapi/admin/strapi-admin/ee");
7
- const designSystem = require("@strapi/design-system");
8
- const icons = require("@strapi/icons");
9
- const reactIntl = require("react-intl");
10
- const reactRouterDom = require("react-router-dom");
11
- const index = require("./index-C5NgBQMb.js");
12
- const Layout = require("./Layout-b_msoxIP.js");
13
- function _interopNamespace(e) {
14
- if (e && e.__esModule)
15
- return e;
16
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
17
- if (e) {
18
- for (const k in e) {
19
- if (k !== "default") {
20
- const d = Object.getOwnPropertyDescriptor(e, k);
21
- Object.defineProperty(n, k, d.get ? d : {
22
- enumerable: true,
23
- get: () => e[k]
24
- });
25
- }
26
- }
27
- }
28
- n.default = e;
29
- return Object.freeze(n);
30
- }
31
- const React__namespace = /* @__PURE__ */ _interopNamespace(React);
32
- const ReviewWorkflowsListView = () => {
33
- const { formatMessage } = reactIntl.useIntl();
34
- const navigate = reactRouterDom.useNavigate();
35
- const { trackUsage } = strapiAdmin.useTracking();
36
- const [workflowToDelete, setWorkflowToDelete] = React__namespace.useState(null);
37
- const [showLimitModal, setShowLimitModal] = React__namespace.useState(false);
38
- const { data, isLoading: isLoadingModels } = index.useGetContentTypesQuery();
39
- const { meta, workflows, isLoading, delete: deleteAction } = Layout.useReviewWorkflows();
40
- const { getFeature, isLoading: isLicenseLoading } = ee.useLicenseLimits();
41
- const permissions = index.useTypedSelector(
42
- (state) => state.admin_app.permissions.settings?.["review-workflows"]
43
- );
44
- const {
45
- allowedActions: { canCreate, canRead, canUpdate, canDelete }
46
- } = strapiAdmin.useRBAC(permissions);
47
- const limits = getFeature("review-workflows");
48
- const numberOfWorkflows = limits?.[index.CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];
49
- const handleDeleteWorkflow = (workflowId) => {
50
- setWorkflowToDelete(workflowId);
51
- };
52
- const toggleConfirmDeleteDialog = () => {
53
- setWorkflowToDelete(null);
54
- };
55
- const handleConfirmDeleteDialog = async () => {
56
- if (!workflowToDelete)
57
- return;
58
- await deleteAction(workflowToDelete);
59
- setWorkflowToDelete(null);
60
- };
61
- const handleCreateClick = (event) => {
62
- event.preventDefault();
63
- if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {
64
- event.preventDefault();
65
- setShowLimitModal(true);
66
- } else {
67
- navigate("create");
68
- trackUsage("willCreateWorkflow");
69
- }
70
- };
71
- React__namespace.useEffect(() => {
72
- if (!isLoading && !isLicenseLoading) {
73
- if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {
74
- setShowLimitModal(true);
75
- }
76
- }
77
- }, [isLicenseLoading, isLoading, meta, meta?.workflowCount, numberOfWorkflows]);
78
- const headers = [
79
- {
80
- label: formatMessage({
81
- id: "Settings.review-workflows.list.page.list.column.name.title",
82
- defaultMessage: "Name"
83
- }),
84
- name: "name"
85
- },
86
- {
87
- label: formatMessage({
88
- id: "Settings.review-workflows.list.page.list.column.stages.title",
89
- defaultMessage: "Stages"
90
- }),
91
- name: "stages"
92
- },
93
- {
94
- label: formatMessage({
95
- id: "Settings.review-workflows.list.page.list.column.contentTypes.title",
96
- defaultMessage: "Content Types"
97
- }),
98
- name: "content-types"
99
- }
100
- ];
101
- if (isLoading || isLoadingModels) {
102
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
103
- }
104
- const contentTypes = Object.values(data ?? {}).reduce((acc, curr) => {
105
- acc.push(...curr);
106
- return acc;
107
- }, []);
108
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
109
- /* @__PURE__ */ jsxRuntime.jsx(
110
- Layout.Header,
111
- {
112
- primaryAction: canCreate ? /* @__PURE__ */ jsxRuntime.jsx(
113
- designSystem.LinkButton,
114
- {
115
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
116
- size: "S",
117
- tag: reactRouterDom.NavLink,
118
- to: "create",
119
- onClick: handleCreateClick,
120
- children: formatMessage({
121
- id: "Settings.review-workflows.list.page.create",
122
- defaultMessage: "Create new workflow"
123
- })
124
- }
125
- ) : null,
126
- subtitle: formatMessage({
127
- id: "Settings.review-workflows.list.page.subtitle",
128
- defaultMessage: "Manage your content review process"
129
- }),
130
- title: formatMessage({
131
- id: "Settings.review-workflows.list.page.title",
132
- defaultMessage: "Review Workflows"
133
- })
134
- }
135
- ),
136
- /* @__PURE__ */ jsxRuntime.jsxs(Layout.Root, { children: [
137
- /* @__PURE__ */ jsxRuntime.jsx(
138
- strapiAdmin.Table.Root,
139
- {
140
- isLoading,
141
- rows: workflows,
142
- footer: canCreate ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.TFooter, { icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}), onClick: handleCreateClick, children: formatMessage({
143
- id: "Settings.review-workflows.list.page.create",
144
- defaultMessage: "Create new workflow"
145
- }) }) : null,
146
- headers,
147
- children: /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Content, { children: [
148
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Head, { children: headers.map((head) => /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, { ...head }, head.name)) }),
149
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: workflows.map((workflow) => /* @__PURE__ */ jsxRuntime.jsxs(
150
- strapiAdmin.Table.Row,
151
- {
152
- onClick: () => {
153
- navigate(`${workflow.id}`);
154
- },
155
- children: [
156
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { width: "25rem", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", fontWeight: "bold", ellipsis: true, children: workflow.name }) }),
157
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: workflow.stages.length }) }),
158
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: workflow.contentTypes.map((uid) => {
159
- const contentType = contentTypes.find(
160
- (contentType2) => contentType2.uid === uid
161
- );
162
- return contentType?.info.displayName ?? "";
163
- }).join(", ") }) }),
164
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", justifyContent: "end", children: [
165
- canRead || canUpdate ? /* @__PURE__ */ jsxRuntime.jsx(
166
- designSystem.IconButton,
167
- {
168
- tag: reactRouterDom.Link,
169
- to: workflow.id.toString(),
170
- label: formatMessage(
171
- {
172
- id: "Settings.review-workflows.list.page.list.column.actions.edit.label",
173
- defaultMessage: "Edit {name}"
174
- },
175
- { name: workflow.name }
176
- ),
177
- variant: "ghost",
178
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
179
- }
180
- ) : null,
181
- workflows.length > 1 && canDelete ? /* @__PURE__ */ jsxRuntime.jsx(
182
- designSystem.IconButton,
183
- {
184
- withTooltip: false,
185
- label: formatMessage(
186
- {
187
- id: "Settings.review-workflows.list.page.list.column.actions.delete.label",
188
- defaultMessage: "Delete {name}"
189
- },
190
- { name: "Default workflow" }
191
- ),
192
- variant: "ghost",
193
- onClick: (e) => {
194
- e.stopPropagation();
195
- handleDeleteWorkflow(String(workflow.id));
196
- },
197
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
198
- }
199
- ) : null
200
- ] }) })
201
- ]
202
- },
203
- workflow.id
204
- )) })
205
- ] })
206
- }
207
- ),
208
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Root, { open: !!workflowToDelete, onOpenChange: toggleConfirmDeleteDialog, children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, { onConfirm: handleConfirmDeleteDialog, children: formatMessage({
209
- id: "Settings.review-workflows.list.page.delete.confirm.body",
210
- defaultMessage: "If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?"
211
- }) }) }),
212
- /* @__PURE__ */ jsxRuntime.jsxs(index.LimitsModal.Root, { open: showLimitModal, onOpenChange: () => setShowLimitModal(false), children: [
213
- /* @__PURE__ */ jsxRuntime.jsx(index.LimitsModal.Title, { children: formatMessage({
214
- id: "Settings.review-workflows.list.page.workflows.limit.title",
215
- defaultMessage: "You’ve reached the limit of workflows in your plan"
216
- }) }),
217
- /* @__PURE__ */ jsxRuntime.jsx(index.LimitsModal.Body, { children: formatMessage({
218
- id: "Settings.review-workflows.list.page.workflows.limit.body",
219
- defaultMessage: "Delete a workflow or contact Sales to enable more workflows."
220
- }) })
221
- ] })
222
- ] })
223
- ] });
224
- };
225
- const ProtectedListPage = () => {
226
- const permissions = index.useTypedSelector(
227
- (state) => state.admin_app.permissions.settings?.["review-workflows"]?.main
228
- );
229
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Protect, { permissions, children: /* @__PURE__ */ jsxRuntime.jsx(ReviewWorkflowsListView, {}) });
230
- };
231
- exports.ProtectedListPage = ProtectedListPage;
232
- exports.ReviewWorkflowsListView = ReviewWorkflowsListView;
233
- //# sourceMappingURL=index-CIGzoVfk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CIGzoVfk.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 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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"}