@strapi/review-workflows 0.0.0-experimental.779667bd163026468f566293decf331a0246fff9 → 0.0.0-experimental.780730225a7b82dc9f04ceb9ef60710e52d832ab
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-BmKilx1K.mjs} +8 -9
- package/dist/_chunks/Layout-BmKilx1K.mjs.map +1 -0
- package/dist/_chunks/{Layout-D3DDQmMI.js → Layout-Bv8Nx1fv.js} +8 -9
- package/dist/_chunks/Layout-Bv8Nx1fv.js.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-CnRDP3Xx.js → id-CsSxw398.js} +82 -49
- package/dist/_chunks/id-CsSxw398.js.map +1 -0
- package/dist/_chunks/{_id-xSrgPSJs.mjs → id-DEppSbOE.mjs} +82 -49
- package/dist/_chunks/id-DEppSbOE.mjs.map +1 -0
- package/dist/_chunks/{index-DDsJlZQw.mjs → index-B40EWubS.mjs} +80 -69
- package/dist/_chunks/index-B40EWubS.mjs.map +1 -0
- package/dist/_chunks/{index-4kp4AkBB.js → index-BxrwA-_0.js} +10 -30
- package/dist/_chunks/index-BxrwA-_0.js.map +1 -0
- package/dist/_chunks/{index-DhPxWpsW.js → index-C_J52ViX.js} +79 -68
- package/dist/_chunks/index-C_J52ViX.js.map +1 -0
- package/dist/_chunks/{index-jfO5GxtW.mjs → index-YTnpzhNo.mjs} +12 -32
- package/dist/_chunks/index-YTnpzhNo.mjs.map +1 -0
- package/dist/_chunks/{router-DSXpeew4.js → router-8E0pDcC7.js} +3 -3
- package/dist/_chunks/router-8E0pDcC7.js.map +1 -0
- package/dist/_chunks/{router-DOEULOpS.mjs → router-BKGmmyPp.mjs} +3 -3
- package/dist/_chunks/router-BKGmmyPp.mjs.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 +180 -108
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +180 -108
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/constants/workflows.d.ts +1 -0
- package/dist/server/src/constants/workflows.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +6 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/content-types/workflow/index.d.ts +6 -0
- package/dist/server/src/content-types/workflow/index.d.ts.map +1 -1
- package/dist/server/src/controllers/assignees.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +0 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/stages.d.ts.map +1 -1
- package/dist/server/src/controllers/workflows.d.ts +0 -7
- package/dist/server/src/controllers/workflows.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +28 -7
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/review-workflows.d.ts.map +1 -1
- package/dist/server/src/services/assignees.d.ts +8 -4
- package/dist/server/src/services/assignees.d.ts.map +1 -1
- package/dist/server/src/services/document-service-middleware.d.ts +1 -0
- package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +16 -6
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics/index.d.ts +4 -4
- package/dist/server/src/services/metrics/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics/weekly-metrics.d.ts.map +1 -1
- package/dist/server/src/services/stages.d.ts +7 -7
- package/dist/server/src/services/stages.d.ts.map +1 -1
- package/dist/server/src/services/workflows.d.ts.map +1 -1
- package/dist/server/src/validation/review-workflows.d.ts +4 -0
- package/dist/server/src/validation/review-workflows.d.ts.map +1 -1
- package/dist/shared/contracts/review-workflows.d.ts +9 -17
- package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
- package/package.json +12 -12
- package/dist/_chunks/Layout-D3DDQmMI.js.map +0 -1
- package/dist/_chunks/Layout-Da8jupiA.mjs.map +0 -1
- package/dist/_chunks/_id-CnRDP3Xx.js.map +0 -1
- package/dist/_chunks/_id-xSrgPSJs.mjs.map +0 -1
- package/dist/_chunks/en-D9ZrQAV6.mjs.map +0 -1
- package/dist/_chunks/en-xcewH2pC.js.map +0 -1
- package/dist/_chunks/index-4kp4AkBB.js.map +0 -1
- package/dist/_chunks/index-DDsJlZQw.mjs.map +0 -1
- package/dist/_chunks/index-DhPxWpsW.js.map +0 -1
- package/dist/_chunks/index-jfO5GxtW.mjs.map +0 -1
- package/dist/_chunks/router-DOEULOpS.mjs.map +0 -1
- package/dist/_chunks/router-DSXpeew4.js.map +0 -1
- package/strapi-server.js +0 -3
- /package/dist/admin/src/routes/settings/{:id.d.ts → id.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BxrwA-_0.js","sources":["../../admin/src/routes/settings/index.tsx"],"sourcesContent":["/* eslint-disable check-file/no-index */\n/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useTracking, ConfirmDialog, useRBAC, Table } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Flex, IconButton, TFooter, Typography, LinkButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Link, useNavigate } from 'react-router-dom';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport { CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME } from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { ContentType, useGetContentTypesQuery } from '../../services/content-manager';\n\nimport * as Layout from './components/Layout';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nexport const ReviewWorkflowsListView = () => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const [workflowToDelete, setWorkflowToDelete] = React.useState<string | null>(null);\n const [showLimitModal, setShowLimitModal] = React.useState<boolean>(false);\n const { data, isLoading: isLoadingModels } = useGetContentTypesQuery();\n const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows();\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']\n );\n const {\n allowedActions: { canCreate, canRead, canUpdate, canDelete },\n } = useRBAC(permissions);\n\n const limits = getFeature('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] as string;\n\n const handleDeleteWorkflow = (workflowId: string) => {\n setWorkflowToDelete(workflowId);\n };\n\n const toggleConfirmDeleteDialog = () => {\n setWorkflowToDelete(null);\n };\n\n const handleConfirmDeleteDialog = async () => {\n if (!workflowToDelete) return;\n\n await deleteAction(workflowToDelete);\n\n setWorkflowToDelete(null);\n };\n\n const handleCreateClick: React.MouseEventHandler<HTMLAnchorElement> &\n ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void) = (event) => {\n event.preventDefault();\n /**\n * If the current license has a workflow limit:\n * check if the total count of workflows exceeds that limit. If so,\n * prevent the navigation and show the limits overlay.\n *\n * If the current license does not have a limit (e.g. offline license):\n * allow the user to navigate to the create-view. In case they exceed the\n * current hard-limit of 200 they will see an error thrown by the API.\n */\n\n if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n event.preventDefault();\n setShowLimitModal(true);\n } else {\n navigate('create');\n trackUsage('willCreateWorkflow');\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoading && !isLicenseLoading) {\n if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal(true);\n }\n }\n }, [isLicenseLoading, isLoading, meta, meta?.workflowCount, numberOfWorkflows]);\n\n const headers = [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.name.title',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.stages.title',\n defaultMessage: 'Stages',\n }),\n name: 'stages',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',\n defaultMessage: 'Content Types',\n }),\n name: 'content-types',\n },\n ];\n\n if (isLoading || isLoadingModels) {\n return <Page.Loading />;\n }\n\n const contentTypes = Object.values(data ?? {}).reduce<ContentType[]>((acc, curr) => {\n acc.push(...curr);\n return acc;\n }, []);\n\n return (\n <>\n <Layout.Header\n primaryAction={\n canCreate ? (\n <LinkButton\n startIcon={<Plus />}\n size=\"S\"\n tag={NavLink}\n to=\"create\"\n onClick={handleCreateClick}\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n ) : null\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n <Table.Root\n isLoading={isLoading}\n rows={workflows}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" icon={<Plus />} onClick={handleCreateClick}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n ) : null\n }\n headers={headers}\n >\n <Table.Content>\n <Table.Head>\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n\n <Table.Body>\n {workflows.map((workflow) => (\n <Table.Row\n onClick={() => {\n navigate(`${workflow.id}`);\n }}\n key={workflow.id}\n >\n <Table.Cell width=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">\n {workflow.contentTypes\n .map((uid: string) => {\n const contentType = contentTypes.find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName ?? '';\n })\n .join(', ')}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n {canRead || canUpdate ? (\n <IconButton\n tag={Link}\n to={workflow.id.toString()}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {workflows.length > 1 && canDelete ? (\n <IconButton\n withTooltip={false}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteWorkflow(String(workflow.id));\n }}\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Dialog.Root open={!!workflowToDelete} onOpenChange={toggleConfirmDeleteDialog}>\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n\n <LimitsModal.Root open={showLimitModal} onOpenChange={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </Layout.Root>\n </>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ReviewWorkflowsListView />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage };\n"],"names":["useIntl","useNavigate","useTracking","React","useGetContentTypesQuery","useReviewWorkflows","useLicenseLimits","useTypedSelector","useRBAC","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","jsx","Page","jsxs","Fragment","Layout.Header","LinkButton","Plus","NavLink","Layout.Root","Table","TFooter","Typography","contentType","Flex","IconButton","Link","Pencil","Trash","Dialog","ConfirmDialog","LimitsModal"],"mappings":"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"}
|
|
@@ -45,8 +45,9 @@ const CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME = "stagesPerWorkflow";
|
|
|
45
45
|
const STAGE_COLOR_DEFAULT = designSystem.lightTheme.colors.primary600;
|
|
46
46
|
const useTypedSelector = reactRedux.useSelector;
|
|
47
47
|
const reviewWorkflowsApi = strapiAdmin.adminApi.enhanceEndpoints({
|
|
48
|
-
addTagTypes: ["ReviewWorkflow", "ReviewWorkflowStages"]
|
|
48
|
+
addTagTypes: ["ReviewWorkflow", "ReviewWorkflowStages", "Document", "ContentTypeSettings"]
|
|
49
49
|
});
|
|
50
|
+
const SINGLE_TYPES = "single-types";
|
|
50
51
|
const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
51
52
|
endpoints: (builder) => ({
|
|
52
53
|
getStages: builder.query({
|
|
@@ -74,7 +75,17 @@ const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
74
75
|
params
|
|
75
76
|
}
|
|
76
77
|
}),
|
|
77
|
-
transformResponse: (res) => res.data
|
|
78
|
+
transformResponse: (res) => res.data,
|
|
79
|
+
invalidatesTags: (_result, _error, { slug, id, model }) => {
|
|
80
|
+
return [
|
|
81
|
+
{
|
|
82
|
+
type: "Document",
|
|
83
|
+
id: slug !== SINGLE_TYPES ? `${model}_${id}` : model
|
|
84
|
+
},
|
|
85
|
+
{ type: "Document", id: `${model}_LIST` },
|
|
86
|
+
"ReviewWorkflowStages"
|
|
87
|
+
];
|
|
88
|
+
}
|
|
78
89
|
}),
|
|
79
90
|
updateAssignee: builder.mutation({
|
|
80
91
|
query: ({ model, slug, id, params, ...data }) => ({
|
|
@@ -85,7 +96,16 @@ const contentManagerApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
85
96
|
params
|
|
86
97
|
}
|
|
87
98
|
}),
|
|
88
|
-
transformResponse: (res) => res.data
|
|
99
|
+
transformResponse: (res) => res.data,
|
|
100
|
+
invalidatesTags: (_result, _error, { slug, id, model }) => {
|
|
101
|
+
return [
|
|
102
|
+
{
|
|
103
|
+
type: "Document",
|
|
104
|
+
id: slug !== SINGLE_TYPES ? `${model}_${id}` : model
|
|
105
|
+
},
|
|
106
|
+
{ type: "Document", id: `${model}_LIST` }
|
|
107
|
+
];
|
|
108
|
+
}
|
|
89
109
|
}),
|
|
90
110
|
getContentTypes: builder.query({
|
|
91
111
|
query: () => ({
|
|
@@ -156,7 +176,6 @@ const AssigneeSelect = () => {
|
|
|
156
176
|
id,
|
|
157
177
|
slug: model = ""
|
|
158
178
|
} = reactRouterDom.useParams();
|
|
159
|
-
const dispatch = reactRedux.useDispatch();
|
|
160
179
|
const permissions = useTypedSelector((state) => state.admin_app.permissions);
|
|
161
180
|
const { formatMessage } = reactIntl.useIntl();
|
|
162
181
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
@@ -177,13 +196,13 @@ const AssigneeSelect = () => {
|
|
|
177
196
|
documentId: id
|
|
178
197
|
},
|
|
179
198
|
{
|
|
180
|
-
skip: !id
|
|
199
|
+
skip: !id && collectionType !== "single-types"
|
|
181
200
|
}
|
|
182
201
|
);
|
|
183
202
|
const users = data?.users || [];
|
|
184
203
|
const currentAssignee = document ? document[ASSIGNEE_ATTRIBUTE_NAME] : null;
|
|
185
204
|
const [updateAssignee, { error, isLoading: isMutating }] = useUpdateAssigneeMutation();
|
|
186
|
-
if (!collectionType || !model || !
|
|
205
|
+
if (!collectionType || !model || !document?.documentId) {
|
|
187
206
|
return null;
|
|
188
207
|
}
|
|
189
208
|
const handleChange = async (assigneeId) => {
|
|
@@ -193,22 +212,13 @@ const AssigneeSelect = () => {
|
|
|
193
212
|
const res = await updateAssignee({
|
|
194
213
|
slug: collectionType,
|
|
195
214
|
model,
|
|
196
|
-
id,
|
|
215
|
+
id: document.documentId,
|
|
197
216
|
params,
|
|
198
217
|
data: {
|
|
199
218
|
id: assigneeId ? parseInt(assigneeId, 10) : null
|
|
200
219
|
}
|
|
201
220
|
});
|
|
202
221
|
if ("data" in res) {
|
|
203
|
-
dispatch({
|
|
204
|
-
type: "contentManagerApi/invalidateTags",
|
|
205
|
-
payload: [
|
|
206
|
-
{
|
|
207
|
-
type: "Document",
|
|
208
|
-
id: `${model}_${id}`
|
|
209
|
-
}
|
|
210
|
-
]
|
|
211
|
-
});
|
|
212
222
|
toggleNotification({
|
|
213
223
|
type: "success",
|
|
214
224
|
message: formatMessage({
|
|
@@ -239,7 +249,7 @@ const AssigneeSelect = () => {
|
|
|
239
249
|
id: "content-manager.reviewWorkflows.assignee.clear",
|
|
240
250
|
defaultMessage: "Clear assignee"
|
|
241
251
|
}),
|
|
242
|
-
disabled: !isLoadingPermissions && !isLoading && users.length === 0 || !
|
|
252
|
+
disabled: !isLoadingPermissions && !isLoading && users.length === 0 || !document.documentId,
|
|
243
253
|
value: currentAssignee ? currentAssignee.id.toString() : null,
|
|
244
254
|
onChange: handleChange,
|
|
245
255
|
onClear: () => handleChange(null),
|
|
@@ -376,31 +386,31 @@ const StageSelect = () => {
|
|
|
376
386
|
slug: model = "",
|
|
377
387
|
id = ""
|
|
378
388
|
} = reactRouterDom.useParams();
|
|
379
|
-
const dispatch = reactRedux.useDispatch();
|
|
380
389
|
const { formatMessage } = reactIntl.useIntl();
|
|
381
390
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
382
391
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
383
392
|
const [{ query }] = strapiAdmin.useQueryParams();
|
|
384
393
|
const params = React__namespace.useMemo(() => buildValidParams(query), [query]);
|
|
385
|
-
const {
|
|
394
|
+
const { document, isLoading: isLoadingDocument } = strapiAdmin$1.unstable_useDocument(
|
|
386
395
|
{
|
|
387
|
-
|
|
396
|
+
collectionType,
|
|
388
397
|
model,
|
|
389
|
-
id
|
|
390
|
-
params
|
|
398
|
+
documentId: id
|
|
391
399
|
},
|
|
392
400
|
{
|
|
393
|
-
skip: !id
|
|
401
|
+
skip: !id && collectionType !== "single-types"
|
|
394
402
|
}
|
|
395
403
|
);
|
|
396
|
-
const {
|
|
404
|
+
const { data, isLoading: isLoadingStages } = useGetStagesQuery(
|
|
397
405
|
{
|
|
398
|
-
collectionType,
|
|
406
|
+
slug: collectionType,
|
|
399
407
|
model,
|
|
400
|
-
|
|
408
|
+
// @ts-expect-error – `id` is not correctly typed in the DS.
|
|
409
|
+
id: document?.documentId,
|
|
410
|
+
params
|
|
401
411
|
},
|
|
402
412
|
{
|
|
403
|
-
skip: !
|
|
413
|
+
skip: !document?.documentId
|
|
404
414
|
}
|
|
405
415
|
);
|
|
406
416
|
const { meta, stages = [] } = data ?? {};
|
|
@@ -416,24 +426,15 @@ const StageSelect = () => {
|
|
|
416
426
|
} else if (limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] && parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10) < stages.length) {
|
|
417
427
|
setShowLimitModal("stage");
|
|
418
428
|
} else {
|
|
419
|
-
if (
|
|
429
|
+
if (document?.documentId) {
|
|
420
430
|
const res = await updateStage({
|
|
421
431
|
model,
|
|
422
|
-
id,
|
|
432
|
+
id: document.documentId,
|
|
423
433
|
slug: collectionType,
|
|
424
434
|
params,
|
|
425
435
|
data: { id: stageId }
|
|
426
436
|
});
|
|
427
437
|
if ("data" in res) {
|
|
428
|
-
dispatch({
|
|
429
|
-
type: "contentManagerApi/invalidateTags",
|
|
430
|
-
payload: [
|
|
431
|
-
{
|
|
432
|
-
type: "Document",
|
|
433
|
-
id: `${model}_${id}`
|
|
434
|
-
}
|
|
435
|
-
]
|
|
436
|
-
});
|
|
437
438
|
toggleNotification({
|
|
438
439
|
type: "success",
|
|
439
440
|
message: formatMessage({
|
|
@@ -455,6 +456,7 @@ const StageSelect = () => {
|
|
|
455
456
|
}
|
|
456
457
|
};
|
|
457
458
|
const { themeColorName } = getStageColorByHex(activeWorkflowStage?.color) ?? {};
|
|
459
|
+
const isLoading = isLoadingStages || isLoadingDocument;
|
|
458
460
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
459
461
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
460
462
|
designSystem.Field.Root,
|
|
@@ -567,12 +569,16 @@ const StageSelect = () => {
|
|
|
567
569
|
] });
|
|
568
570
|
};
|
|
569
571
|
const Panel = () => {
|
|
570
|
-
const {
|
|
572
|
+
const {
|
|
573
|
+
slug = "",
|
|
574
|
+
id,
|
|
575
|
+
collectionType
|
|
576
|
+
} = reactRouterDom.useParams();
|
|
571
577
|
const {
|
|
572
578
|
edit: { options }
|
|
573
579
|
} = strapiAdmin$1.unstable_useDocumentLayout(slug);
|
|
574
580
|
const { formatMessage } = reactIntl.useIntl();
|
|
575
|
-
if (!window.strapi.isEE || !options?.reviewWorkflows || !id || id === "create") {
|
|
581
|
+
if (!window.strapi.isEE || !options?.reviewWorkflows || collectionType !== "single-types" && !id || id === "create") {
|
|
576
582
|
return null;
|
|
577
583
|
}
|
|
578
584
|
return {
|
|
@@ -591,36 +597,25 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
591
597
|
endpoints: (builder) => ({
|
|
592
598
|
getWorkflows: builder.query({
|
|
593
599
|
query: (args) => {
|
|
594
|
-
const { id, ...params } = args ?? {};
|
|
595
600
|
return {
|
|
596
|
-
url:
|
|
601
|
+
url: "/review-workflows/workflows",
|
|
597
602
|
method: "GET",
|
|
598
603
|
config: {
|
|
599
|
-
params
|
|
604
|
+
params: args ?? {}
|
|
600
605
|
}
|
|
601
606
|
};
|
|
602
607
|
},
|
|
603
608
|
transformResponse: (res) => {
|
|
604
|
-
let workflows = [];
|
|
605
|
-
if (Array.isArray(res.data)) {
|
|
606
|
-
workflows = res.data;
|
|
607
|
-
} else {
|
|
608
|
-
workflows = [res.data];
|
|
609
|
-
}
|
|
610
609
|
return {
|
|
611
|
-
workflows,
|
|
610
|
+
workflows: res.data,
|
|
612
611
|
meta: "meta" in res ? res.meta : void 0
|
|
613
612
|
};
|
|
614
613
|
},
|
|
615
|
-
providesTags: (res
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
...res?.workflows.map(({ id }) => ({ type: "ReviewWorkflow", id })) ?? [],
|
|
621
|
-
{ type: "ReviewWorkflow", id: "LIST" }
|
|
622
|
-
];
|
|
623
|
-
}
|
|
614
|
+
providesTags: (res) => {
|
|
615
|
+
return [
|
|
616
|
+
...res?.workflows.map(({ id }) => ({ type: "ReviewWorkflow", id })) ?? [],
|
|
617
|
+
{ type: "ReviewWorkflow", id: "LIST" }
|
|
618
|
+
];
|
|
624
619
|
}
|
|
625
620
|
}),
|
|
626
621
|
createWorkflow: builder.mutation({
|
|
@@ -630,7 +625,18 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
630
625
|
data
|
|
631
626
|
}),
|
|
632
627
|
transformResponse: (res) => res.data,
|
|
633
|
-
invalidatesTags
|
|
628
|
+
invalidatesTags(res) {
|
|
629
|
+
return [
|
|
630
|
+
{ type: "ReviewWorkflow", id: "LIST" },
|
|
631
|
+
"ReviewWorkflowStages",
|
|
632
|
+
{ type: "Document", id: `ALL_LIST` },
|
|
633
|
+
{ type: "ContentTypeSettings", id: "LIST" },
|
|
634
|
+
...res?.contentTypes.map((uid) => ({
|
|
635
|
+
type: "Document",
|
|
636
|
+
id: `${uid}_ALL_ITEMS`
|
|
637
|
+
})) ?? []
|
|
638
|
+
];
|
|
639
|
+
}
|
|
634
640
|
}),
|
|
635
641
|
updateWorkflow: builder.mutation({
|
|
636
642
|
query: ({ id, ...data }) => ({
|
|
@@ -641,7 +647,13 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
641
647
|
transformResponse: (res) => res.data,
|
|
642
648
|
invalidatesTags: (res, _err, arg) => [
|
|
643
649
|
{ type: "ReviewWorkflow", id: arg.id },
|
|
644
|
-
"ReviewWorkflowStages"
|
|
650
|
+
"ReviewWorkflowStages",
|
|
651
|
+
{ type: "Document", id: "ALL_LIST" },
|
|
652
|
+
{ type: "ContentTypeSettings", id: "LIST" },
|
|
653
|
+
...res?.contentTypes.map((uid) => ({
|
|
654
|
+
type: "Document",
|
|
655
|
+
id: `${uid}_ALL_ITEMS`
|
|
656
|
+
})) ?? []
|
|
645
657
|
]
|
|
646
658
|
}),
|
|
647
659
|
deleteWorkflow: builder.mutation({
|
|
@@ -652,7 +664,9 @@ const settingsApi = reviewWorkflowsApi.injectEndpoints({
|
|
|
652
664
|
transformResponse: (res) => res.data,
|
|
653
665
|
invalidatesTags: (res, _err, arg) => [
|
|
654
666
|
{ type: "ReviewWorkflow", id: arg.id },
|
|
655
|
-
"ReviewWorkflowStages"
|
|
667
|
+
"ReviewWorkflowStages",
|
|
668
|
+
{ type: "Document", id: `ALL_LIST` },
|
|
669
|
+
{ type: "ContentTypeSettings", id: "LIST" }
|
|
656
670
|
]
|
|
657
671
|
})
|
|
658
672
|
}),
|
|
@@ -737,9 +751,6 @@ const addColumnToTableHook = ({ displayedHeaders, layout }) => {
|
|
|
737
751
|
};
|
|
738
752
|
};
|
|
739
753
|
const prefixPluginTranslations = (trad, pluginId) => {
|
|
740
|
-
if (!pluginId) {
|
|
741
|
-
throw new TypeError("pluginId can't be empty");
|
|
742
|
-
}
|
|
743
754
|
return Object.keys(trad).reduce((acc, current) => {
|
|
744
755
|
acc[`${pluginId}.${current}`] = trad[current];
|
|
745
756
|
return acc;
|
|
@@ -762,7 +773,7 @@ const admin = {
|
|
|
762
773
|
},
|
|
763
774
|
permissions: [],
|
|
764
775
|
async Component() {
|
|
765
|
-
const { Router } = await Promise.resolve().then(() => require("./router-
|
|
776
|
+
const { Router } = await Promise.resolve().then(() => require("./router-8E0pDcC7.js"));
|
|
766
777
|
return { default: Router };
|
|
767
778
|
}
|
|
768
779
|
});
|
|
@@ -786,7 +797,7 @@ const admin = {
|
|
|
786
797
|
async registerTrads({ locales }) {
|
|
787
798
|
const importedTrads = await Promise.all(
|
|
788
799
|
locales.map((locale) => {
|
|
789
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-
|
|
800
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-CYgjfSep.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
|
|
790
801
|
return {
|
|
791
802
|
data: prefixPluginTranslations(data, PLUGIN_ID),
|
|
792
803
|
locale
|
|
@@ -816,4 +827,4 @@ exports.useGetContentTypesQuery = useGetContentTypesQuery;
|
|
|
816
827
|
exports.useGetWorkflowsQuery = useGetWorkflowsQuery;
|
|
817
828
|
exports.useTypedSelector = useTypedSelector;
|
|
818
829
|
exports.useUpdateWorkflowMutation = useUpdateWorkflowMutation;
|
|
819
|
-
//# sourceMappingURL=index-
|
|
830
|
+
//# sourceMappingURL=index-C_J52ViX.js.map
|