@strapi/review-workflows 5.12.0 → 5.12.2
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/admin/{chunks/index-DcEF47R4.mjs → assets/balloon.png.js} +3 -1078
- package/dist/admin/assets/balloon.png.js.map +1 -0
- package/dist/admin/{chunks/index-CzdEqFOm.js → assets/balloon.png.mjs} +2 -1113
- package/dist/admin/assets/balloon.png.mjs.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
- package/dist/admin/{chunks/purchase-review-workflows-4n0KXAeo.mjs → assets/purchase-page-illustration-light.svg.js} +3 -197
- package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
- package/dist/admin/{chunks/purchase-review-workflows-BDLncDcz.js → assets/purchase-page-illustration-light.svg.mjs} +2 -200
- package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
- package/dist/admin/components/LimitsModal.js +122 -0
- package/dist/admin/components/LimitsModal.js.map +1 -0
- package/dist/admin/components/LimitsModal.mjs +120 -0
- package/dist/admin/components/LimitsModal.mjs.map +1 -0
- package/dist/admin/constants.js +18 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +12 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/index.js +87 -13
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +88 -12
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/modules/hooks.js +8 -0
- package/dist/admin/modules/hooks.js.map +1 -0
- package/dist/admin/modules/hooks.mjs +6 -0
- package/dist/admin/modules/hooks.mjs.map +1 -0
- package/dist/admin/{chunks/router-ChVwf8TN.js → router.js} +3 -3
- package/dist/admin/router.js.map +1 -0
- package/dist/admin/{chunks/router-D-YCUzYy.mjs → router.mjs} +3 -3
- package/dist/admin/router.mjs.map +1 -0
- package/dist/admin/routes/content-manager/model/components/TableColumns.js +44 -0
- package/dist/admin/routes/content-manager/model/components/TableColumns.js.map +1 -0
- package/dist/admin/routes/content-manager/model/components/TableColumns.mjs +41 -0
- package/dist/admin/routes/content-manager/model/components/TableColumns.mjs.map +1 -0
- package/dist/admin/routes/content-manager/model/constants.js +60 -0
- package/dist/admin/routes/content-manager/model/constants.js.map +1 -0
- package/dist/admin/routes/content-manager/model/constants.mjs +58 -0
- package/dist/admin/routes/content-manager/model/constants.mjs.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js +169 -0
- package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs +148 -0
- package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/Header.js +31 -0
- package/dist/admin/routes/content-manager/model/id/components/Header.js.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/Header.mjs +29 -0
- package/dist/admin/routes/content-manager/model/id/components/Header.mjs.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/Panel.js +39 -0
- package/dist/admin/routes/content-manager/model/id/components/Panel.js.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/Panel.mjs +37 -0
- package/dist/admin/routes/content-manager/model/id/components/Panel.mjs.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/StageSelect.js +329 -0
- package/dist/admin/routes/content-manager/model/id/components/StageSelect.js.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs +308 -0
- package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/constants.js +8 -0
- package/dist/admin/routes/content-manager/model/id/components/constants.js.map +1 -0
- package/dist/admin/routes/content-manager/model/id/components/constants.mjs +5 -0
- package/dist/admin/routes/content-manager/model/id/components/constants.mjs.map +1 -0
- package/dist/admin/routes/purchase-review-workflows.js +194 -0
- package/dist/admin/routes/purchase-review-workflows.js.map +1 -0
- package/dist/admin/routes/purchase-review-workflows.mjs +192 -0
- package/dist/admin/routes/purchase-review-workflows.mjs.map +1 -0
- package/dist/admin/routes/settings/components/AddStage.js +51 -0
- package/dist/admin/routes/settings/components/AddStage.js.map +1 -0
- package/dist/admin/routes/settings/components/AddStage.mjs +49 -0
- package/dist/admin/routes/settings/components/AddStage.mjs.map +1 -0
- package/dist/admin/routes/settings/components/Layout.js +86 -0
- package/dist/admin/routes/settings/components/Layout.js.map +1 -0
- package/dist/admin/routes/settings/components/Layout.mjs +82 -0
- package/dist/admin/routes/settings/components/Layout.mjs.map +1 -0
- package/dist/admin/routes/settings/components/StageDragPreview.js +40 -0
- package/dist/admin/routes/settings/components/StageDragPreview.js.map +1 -0
- package/dist/admin/routes/settings/components/StageDragPreview.mjs +38 -0
- package/dist/admin/routes/settings/components/StageDragPreview.mjs.map +1 -0
- package/dist/admin/routes/settings/components/Stages.js +593 -0
- package/dist/admin/routes/settings/components/Stages.js.map +1 -0
- package/dist/admin/routes/settings/components/Stages.mjs +572 -0
- package/dist/admin/routes/settings/components/Stages.mjs.map +1 -0
- package/dist/admin/routes/settings/components/WorkflowAttributes.js +203 -0
- package/dist/admin/routes/settings/components/WorkflowAttributes.js.map +1 -0
- package/dist/admin/routes/settings/components/WorkflowAttributes.mjs +201 -0
- package/dist/admin/routes/settings/components/WorkflowAttributes.mjs.map +1 -0
- package/dist/admin/routes/settings/constants.js +8 -0
- package/dist/admin/routes/settings/constants.js.map +1 -0
- package/dist/admin/routes/settings/constants.mjs +6 -0
- package/dist/admin/routes/settings/constants.mjs.map +1 -0
- package/dist/admin/routes/settings/hooks/useDragAndDrop.js +193 -0
- package/dist/admin/routes/settings/hooks/useDragAndDrop.js.map +1 -0
- package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs +170 -0
- package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs.map +1 -0
- package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js +94 -0
- package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js.map +1 -0
- package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs +73 -0
- package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs.map +1 -0
- package/dist/admin/{chunks/Layout-C4ri_ldC.js → routes/settings/hooks/useReviewWorkflows.js} +6 -121
- package/dist/admin/routes/settings/hooks/useReviewWorkflows.js.map +1 -0
- package/dist/admin/{chunks/Layout-CF497D6H.mjs → routes/settings/hooks/useReviewWorkflows.mjs} +4 -115
- package/dist/admin/routes/settings/hooks/useReviewWorkflows.mjs.map +1 -0
- package/dist/admin/routes/settings/id.js +404 -0
- package/dist/admin/routes/settings/id.js.map +1 -0
- package/dist/admin/routes/settings/id.mjs +382 -0
- package/dist/admin/routes/settings/id.mjs.map +1 -0
- package/dist/admin/{chunks/index-CCx4kT-t.js → routes/settings/index.js} +15 -15
- package/dist/admin/routes/settings/index.js.map +1 -0
- package/dist/admin/{chunks/index-iChY7MsG.mjs → routes/settings/index.mjs} +7 -7
- package/dist/admin/routes/settings/index.mjs.map +1 -0
- package/dist/admin/services/admin.js +23 -0
- package/dist/admin/services/admin.js.map +1 -0
- package/dist/admin/services/admin.mjs +21 -0
- package/dist/admin/services/admin.mjs.map +1 -0
- package/dist/admin/services/api.js +15 -0
- package/dist/admin/services/api.js.map +1 -0
- package/dist/admin/services/api.mjs +13 -0
- package/dist/admin/services/api.mjs.map +1 -0
- package/dist/admin/services/content-manager.js +101 -0
- package/dist/admin/services/content-manager.js.map +1 -0
- package/dist/admin/services/content-manager.mjs +96 -0
- package/dist/admin/services/content-manager.mjs.map +1 -0
- package/dist/admin/services/settings.js +123 -0
- package/dist/admin/services/settings.js.map +1 -0
- package/dist/admin/services/settings.mjs +118 -0
- package/dist/admin/services/settings.mjs.map +1 -0
- package/dist/admin/{chunks/en-BNGiWajd.js → translations/en.json.js} +2 -2
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/{chunks/en-BrZXFtVv.mjs → translations/en.json.mjs} +1 -1
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/{chunks/uk-CbRUr1I7.js → translations/uk.json.js} +2 -2
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/{chunks/uk-DLlzEBUF.mjs → translations/uk.json.mjs} +1 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/utils/api.js +22 -0
- package/dist/admin/utils/api.js.map +1 -0
- package/dist/admin/utils/api.mjs +19 -0
- package/dist/admin/utils/api.mjs.map +1 -0
- package/dist/admin/utils/cm-hooks.js +23 -0
- package/dist/admin/utils/cm-hooks.js.map +1 -0
- package/dist/admin/utils/cm-hooks.mjs +21 -0
- package/dist/admin/utils/cm-hooks.mjs.map +1 -0
- package/dist/admin/utils/colors.js +50 -0
- package/dist/admin/utils/colors.js.map +1 -0
- package/dist/admin/utils/colors.mjs +47 -0
- package/dist/admin/utils/colors.mjs.map +1 -0
- package/dist/admin/utils/translations.js +11 -0
- package/dist/admin/utils/translations.js.map +1 -0
- package/dist/admin/utils/translations.mjs +9 -0
- package/dist/admin/utils/translations.mjs.map +1 -0
- package/dist/admin/utils/users.js +17 -0
- package/dist/admin/utils/users.js.map +1 -0
- package/dist/admin/utils/users.mjs +15 -0
- package/dist/admin/utils/users.mjs.map +1 -0
- package/dist/server/bootstrap.js +54 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +52 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/config/actions.js +47 -0
- package/dist/server/config/actions.js.map +1 -0
- package/dist/server/config/actions.mjs +45 -0
- package/dist/server/config/actions.mjs.map +1 -0
- package/dist/server/constants/default-stages.json.js +23 -0
- package/dist/server/constants/default-stages.json.js.map +1 -0
- package/dist/server/constants/default-stages.json.mjs +21 -0
- package/dist/server/constants/default-stages.json.mjs.map +1 -0
- package/dist/server/constants/default-workflow.json.js +12 -0
- package/dist/server/constants/default-workflow.json.js.map +1 -0
- package/dist/server/constants/default-workflow.json.mjs +7 -0
- package/dist/server/constants/default-workflow.json.mjs.map +1 -0
- package/dist/server/constants/webhook-events.js +12 -0
- package/dist/server/constants/webhook-events.js.map +1 -0
- package/dist/server/constants/webhook-events.mjs +7 -0
- package/dist/server/constants/webhook-events.mjs.map +1 -0
- package/dist/server/constants/workflows.js +53 -0
- package/dist/server/constants/workflows.js.map +1 -0
- package/dist/server/constants/workflows.mjs +42 -0
- package/dist/server/constants/workflows.mjs.map +1 -0
- package/dist/server/content-types/index.js +12 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/index.mjs +10 -0
- package/dist/server/content-types/index.mjs.map +1 -0
- package/dist/server/content-types/workflow/index.js +50 -0
- package/dist/server/content-types/workflow/index.js.map +1 -0
- package/dist/server/content-types/workflow/index.mjs +48 -0
- package/dist/server/content-types/workflow/index.mjs.map +1 -0
- package/dist/server/content-types/workflow-stage/index.js +54 -0
- package/dist/server/content-types/workflow-stage/index.js.map +1 -0
- package/dist/server/content-types/workflow-stage/index.mjs +52 -0
- package/dist/server/content-types/workflow-stage/index.mjs.map +1 -0
- package/dist/server/controllers/assignees.js +57 -0
- package/dist/server/controllers/assignees.js.map +1 -0
- package/dist/server/controllers/assignees.mjs +55 -0
- package/dist/server/controllers/assignees.mjs.map +1 -0
- package/dist/server/controllers/index.js +14 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +12 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/stages.js +167 -0
- package/dist/server/controllers/stages.js.map +1 -0
- package/dist/server/controllers/stages.mjs +165 -0
- package/dist/server/controllers/stages.mjs.map +1 -0
- package/dist/server/controllers/workflows.js +136 -0
- package/dist/server/controllers/workflows.js.map +1 -0
- package/dist/server/controllers/workflows.mjs +134 -0
- package/dist/server/controllers/workflows.mjs.map +1 -0
- package/dist/server/destroy.js +6 -0
- package/dist/server/destroy.js.map +1 -0
- package/dist/server/destroy.mjs +4 -0
- package/dist/server/destroy.mjs.map +1 -0
- package/dist/server/index.js +12 -2333
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +7 -2328
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/review-workflows.js +42 -0
- package/dist/server/middlewares/review-workflows.js.map +1 -0
- package/dist/server/middlewares/review-workflows.mjs +37 -0
- package/dist/server/middlewares/review-workflows.mjs.map +1 -0
- package/dist/server/migrations/handle-deleted-ct-in-workflows.js +40 -0
- package/dist/server/migrations/handle-deleted-ct-in-workflows.js.map +1 -0
- package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs +38 -0
- package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs.map +1 -0
- package/dist/server/migrations/multiple-workflows.js +41 -0
- package/dist/server/migrations/multiple-workflows.js.map +1 -0
- package/dist/server/migrations/multiple-workflows.mjs +39 -0
- package/dist/server/migrations/multiple-workflows.mjs.map +1 -0
- package/dist/server/migrations/set-stages-default-color.js +22 -0
- package/dist/server/migrations/set-stages-default-color.js.map +1 -0
- package/dist/server/migrations/set-stages-default-color.mjs +20 -0
- package/dist/server/migrations/set-stages-default-color.mjs.map +1 -0
- package/dist/server/migrations/set-stages-roles.js +56 -0
- package/dist/server/migrations/set-stages-roles.js.map +1 -0
- package/dist/server/migrations/set-stages-roles.mjs +54 -0
- package/dist/server/migrations/set-stages-roles.mjs.map +1 -0
- package/dist/server/migrations/set-workflow-default-name.js +29 -0
- package/dist/server/migrations/set-workflow-default-name.js.map +1 -0
- package/dist/server/migrations/set-workflow-default-name.mjs +27 -0
- package/dist/server/migrations/set-workflow-default-name.mjs.map +1 -0
- package/dist/server/migrations/shorten-stage-attribute.js +45 -0
- package/dist/server/migrations/shorten-stage-attribute.js.map +1 -0
- package/dist/server/migrations/shorten-stage-attribute.mjs +43 -0
- package/dist/server/migrations/shorten-stage-attribute.mjs.map +1 -0
- package/dist/server/register.js +116 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +114 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/index.js +10 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +8 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/routes/review-workflows.js +186 -0
- package/dist/server/routes/review-workflows.js.map +1 -0
- package/dist/server/routes/review-workflows.mjs +184 -0
- package/dist/server/routes/review-workflows.mjs.map +1 -0
- package/dist/server/routes/utils.js +11 -0
- package/dist/server/routes/utils.js.map +1 -0
- package/dist/server/routes/utils.mjs +9 -0
- package/dist/server/routes/utils.mjs.map +1 -0
- package/dist/server/services/assignees.js +68 -0
- package/dist/server/services/assignees.js.map +1 -0
- package/dist/server/services/assignees.mjs +66 -0
- package/dist/server/services/assignees.mjs.map +1 -0
- package/dist/server/services/document-service-middleware.js +130 -0
- package/dist/server/services/document-service-middleware.js.map +1 -0
- package/dist/server/services/document-service-middleware.mjs +128 -0
- package/dist/server/services/document-service-middleware.mjs.map +1 -0
- package/dist/server/services/index.js +24 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +22 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/metrics/index.js +67 -0
- package/dist/server/services/metrics/index.js.map +1 -0
- package/dist/server/services/metrics/index.mjs +55 -0
- package/dist/server/services/metrics/index.mjs.map +1 -0
- package/dist/server/services/metrics/weekly-metrics.js +84 -0
- package/dist/server/services/metrics/weekly-metrics.js.map +1 -0
- package/dist/server/services/metrics/weekly-metrics.mjs +82 -0
- package/dist/server/services/metrics/weekly-metrics.mjs.map +1 -0
- package/dist/server/services/stage-permissions.js +59 -0
- package/dist/server/services/stage-permissions.js.map +1 -0
- package/dist/server/services/stage-permissions.mjs +57 -0
- package/dist/server/services/stage-permissions.mjs.map +1 -0
- package/dist/server/services/stages.js +353 -0
- package/dist/server/services/stages.js.map +1 -0
- package/dist/server/services/stages.mjs +351 -0
- package/dist/server/services/stages.mjs.map +1 -0
- package/dist/server/services/validation.js +69 -0
- package/dist/server/services/validation.js.map +1 -0
- package/dist/server/services/validation.mjs +67 -0
- package/dist/server/services/validation.mjs.map +1 -0
- package/dist/server/services/workflow-content-types.js +90 -0
- package/dist/server/services/workflow-content-types.js.map +1 -0
- package/dist/server/services/workflow-content-types.mjs +88 -0
- package/dist/server/services/workflow-content-types.mjs.map +1 -0
- package/dist/server/services/workflows.js +279 -0
- package/dist/server/services/workflows.js.map +1 -0
- package/dist/server/services/workflows.mjs +277 -0
- package/dist/server/services/workflows.mjs.map +1 -0
- package/dist/server/utils/index.js +16 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/index.mjs +13 -0
- package/dist/server/utils/index.mjs.map +1 -0
- package/dist/server/utils/review-workflows.js +36 -0
- package/dist/server/utils/review-workflows.js.map +1 -0
- package/dist/server/utils/review-workflows.mjs +30 -0
- package/dist/server/utils/review-workflows.mjs.map +1 -0
- package/dist/server/validation/review-workflows.js +71 -0
- package/dist/server/validation/review-workflows.js.map +1 -0
- package/dist/server/validation/review-workflows.mjs +65 -0
- package/dist/server/validation/review-workflows.mjs.map +1 -0
- package/package.json +5 -5
- package/dist/admin/chunks/Layout-C4ri_ldC.js.map +0 -1
- package/dist/admin/chunks/Layout-CF497D6H.mjs.map +0 -1
- package/dist/admin/chunks/en-BNGiWajd.js.map +0 -1
- package/dist/admin/chunks/en-BrZXFtVv.mjs.map +0 -1
- package/dist/admin/chunks/id-DVOtqJqn.js +0 -1442
- package/dist/admin/chunks/id-DVOtqJqn.js.map +0 -1
- package/dist/admin/chunks/id-QD0V9dME.mjs +0 -1420
- package/dist/admin/chunks/id-QD0V9dME.mjs.map +0 -1
- package/dist/admin/chunks/index-CCx4kT-t.js.map +0 -1
- package/dist/admin/chunks/index-CzdEqFOm.js.map +0 -1
- package/dist/admin/chunks/index-DcEF47R4.mjs.map +0 -1
- package/dist/admin/chunks/index-iChY7MsG.mjs.map +0 -1
- package/dist/admin/chunks/purchase-review-workflows-4n0KXAeo.mjs.map +0 -1
- package/dist/admin/chunks/purchase-review-workflows-BDLncDcz.js.map +0 -1
- package/dist/admin/chunks/router-ChVwf8TN.js.map +0 -1
- package/dist/admin/chunks/router-D-YCUzYy.mjs.map +0 -1
- package/dist/admin/chunks/uk-CbRUr1I7.js.map +0 -1
- package/dist/admin/chunks/uk-DLlzEBUF.mjs.map +0 -1
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
+
var ee = require('@strapi/admin/strapi-admin/ee');
|
|
7
|
+
var designSystem = require('@strapi/design-system');
|
|
8
|
+
var icons = require('@strapi/icons');
|
|
9
|
+
var fractionalIndexing = require('fractional-indexing');
|
|
10
|
+
var reactIntl = require('react-intl');
|
|
11
|
+
var reactRouterDom = require('react-router-dom');
|
|
12
|
+
var yup = require('yup');
|
|
13
|
+
var LimitsModal = require('../../components/LimitsModal.js');
|
|
14
|
+
var constants = require('../../constants.js');
|
|
15
|
+
var hooks = require('../../modules/hooks.js');
|
|
16
|
+
var api = require('../../utils/api.js');
|
|
17
|
+
var Layout = require('./components/Layout.js');
|
|
18
|
+
var Stages = require('./components/Stages.js');
|
|
19
|
+
var WorkflowAttributes = require('./components/WorkflowAttributes.js');
|
|
20
|
+
var useReviewWorkflows = require('./hooks/useReviewWorkflows.js');
|
|
21
|
+
|
|
22
|
+
function _interopNamespaceDefault(e) {
|
|
23
|
+
var n = Object.create(null);
|
|
24
|
+
if (e) {
|
|
25
|
+
Object.keys(e).forEach(function (k) {
|
|
26
|
+
if (k !== 'default') {
|
|
27
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
28
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
get: function () { return e[k]; }
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
n.default = e;
|
|
36
|
+
return Object.freeze(n);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
40
|
+
var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
|
|
41
|
+
|
|
42
|
+
/* -------------------------------------------------------------------------------------------------
|
|
43
|
+
* EditPage
|
|
44
|
+
* -----------------------------------------------------------------------------------------------*/ const WORKFLOW_SCHEMA = yup__namespace.object({
|
|
45
|
+
contentTypes: yup__namespace.array().of(yup__namespace.string()),
|
|
46
|
+
name: yup__namespace.string().max(255, {
|
|
47
|
+
id: 'review-workflows.validation.name.max-length',
|
|
48
|
+
defaultMessage: 'Name can not be longer than 255 characters'
|
|
49
|
+
}).required().nullable(),
|
|
50
|
+
stages: yup__namespace.array().of(yup__namespace.object().shape({
|
|
51
|
+
name: yup__namespace.string().nullable().required({
|
|
52
|
+
id: 'review-workflows.validation.stage.name',
|
|
53
|
+
defaultMessage: 'Name is required'
|
|
54
|
+
}).max(255, {
|
|
55
|
+
id: 'review-workflows.validation.stage.max-length',
|
|
56
|
+
defaultMessage: 'Name can not be longer than 255 characters'
|
|
57
|
+
}).test('unique-name', {
|
|
58
|
+
id: 'review-workflows.validation.stage.duplicate',
|
|
59
|
+
defaultMessage: 'Stage name must be unique'
|
|
60
|
+
}, (stageName, context)=>{
|
|
61
|
+
// @ts-expect-error it does exist.
|
|
62
|
+
const { stages } = context.from[1].value;
|
|
63
|
+
return stages.filter((stage)=>stage.name === stageName).length === 1;
|
|
64
|
+
}),
|
|
65
|
+
color: yup__namespace.string().nullable().required({
|
|
66
|
+
id: 'review-workflows.validation.stage.color',
|
|
67
|
+
defaultMessage: 'Color is required'
|
|
68
|
+
}).matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),
|
|
69
|
+
permissions: yup__namespace.array(yup__namespace.object({
|
|
70
|
+
role: yup__namespace.number().strict().typeError({
|
|
71
|
+
id: 'review-workflows.validation.stage.permissions.role.number',
|
|
72
|
+
defaultMessage: 'Role must be of type number'
|
|
73
|
+
}).required(),
|
|
74
|
+
action: yup__namespace.string().required({
|
|
75
|
+
id: 'review-workflows.validation.stage.permissions.action.required',
|
|
76
|
+
defaultMessage: 'Action is a required argument'
|
|
77
|
+
})
|
|
78
|
+
})).strict()
|
|
79
|
+
})).min(1),
|
|
80
|
+
stageRequiredToPublish: yup__namespace.string().nullable()
|
|
81
|
+
});
|
|
82
|
+
const EditPage = ()=>{
|
|
83
|
+
const { id = '' } = reactRouterDom.useParams();
|
|
84
|
+
const isCreatingWorkflow = id === 'create';
|
|
85
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
86
|
+
const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
|
|
87
|
+
const navigate = reactRouterDom.useNavigate();
|
|
88
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
89
|
+
const { isLoading: isLoadingWorkflow, meta, workflows, error, update, create } = useReviewWorkflows.useReviewWorkflows();
|
|
90
|
+
const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions['settings']?.['review-workflows']);
|
|
91
|
+
const { allowedActions: { canDelete, canUpdate, canCreate } } = strapiAdmin.useRBAC(permissions);
|
|
92
|
+
const [savePrompts, setSavePrompts] = React__namespace.useState({});
|
|
93
|
+
const { getFeature, isLoading: isLicenseLoading } = ee.useLicenseLimits();
|
|
94
|
+
const [showLimitModal, setShowLimitModal] = React__namespace.useState(null);
|
|
95
|
+
const currentWorkflow = workflows?.find((workflow)=>workflow.id === parseInt(id, 10));
|
|
96
|
+
const contentTypesFromOtherWorkflows = workflows?.filter((workflow)=>workflow.id !== parseInt(id, 10)).flatMap((workflow)=>workflow.contentTypes);
|
|
97
|
+
const limits = getFeature('review-workflows');
|
|
98
|
+
const numberOfWorkflows = limits?.[constants.CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];
|
|
99
|
+
const stagesPerWorkflow = limits?.[constants.CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];
|
|
100
|
+
const submitForm = async (data, helpers)=>{
|
|
101
|
+
try {
|
|
102
|
+
const { stageRequiredToPublish, ...rest } = data;
|
|
103
|
+
const stageRequiredToPublishName = stageRequiredToPublish === '' ? null : rest.stages.find((stage)=>stage.id === Number(stageRequiredToPublish) || stage.__temp_key__ === stageRequiredToPublish)?.name;
|
|
104
|
+
if (!isCreatingWorkflow) {
|
|
105
|
+
const res = await update(id, {
|
|
106
|
+
...rest,
|
|
107
|
+
// compare permissions of stages and only submit them if at least one has
|
|
108
|
+
// changed; this enables partial updates e.g. for users who don't have
|
|
109
|
+
// permissions to see roles
|
|
110
|
+
stages: rest.stages.map((stage)=>{
|
|
111
|
+
let hasUpdatedPermissions = true;
|
|
112
|
+
const serverStage = currentWorkflow?.stages?.find((serverStage)=>serverStage.id === stage?.id);
|
|
113
|
+
if (serverStage) {
|
|
114
|
+
hasUpdatedPermissions = serverStage.permissions?.length !== stage.permissions?.length || !serverStage.permissions?.every((serverPermission)=>!!stage.permissions?.find((permission)=>permission.role === serverPermission.role));
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
...stage,
|
|
118
|
+
permissions: hasUpdatedPermissions ? stage.permissions : undefined
|
|
119
|
+
};
|
|
120
|
+
}),
|
|
121
|
+
stageRequiredToPublishName
|
|
122
|
+
});
|
|
123
|
+
if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
124
|
+
helpers.setErrors(formatValidationErrors(res.error));
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
const res = await create({
|
|
128
|
+
...rest,
|
|
129
|
+
stageRequiredToPublishName
|
|
130
|
+
});
|
|
131
|
+
if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
132
|
+
helpers.setErrors(formatValidationErrors(res.error));
|
|
133
|
+
} else if ('data' in res) {
|
|
134
|
+
navigate(`../${res.data.id}`, {
|
|
135
|
+
replace: true
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
} catch (error) {
|
|
140
|
+
toggleNotification({
|
|
141
|
+
type: 'danger',
|
|
142
|
+
message: formatMessage({
|
|
143
|
+
id: 'notification.error',
|
|
144
|
+
defaultMessage: 'An error occurred'
|
|
145
|
+
})
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
setSavePrompts({});
|
|
149
|
+
};
|
|
150
|
+
const handleConfirmDeleteDialog = (data, helpers)=>async ()=>{
|
|
151
|
+
await submitForm(data, helpers);
|
|
152
|
+
};
|
|
153
|
+
const handleConfirmClose = ()=>{
|
|
154
|
+
setSavePrompts({});
|
|
155
|
+
};
|
|
156
|
+
const handleSubmit = async (data, helpers)=>{
|
|
157
|
+
const isContentTypeReassignment = data.contentTypes.some((contentType)=>contentTypesFromOtherWorkflows?.includes(contentType));
|
|
158
|
+
const hasDeletedServerStages = !isCreatingWorkflow && !currentWorkflow?.stages.every((stage)=>data.stages.some((newStage)=>newStage.id === stage.id));
|
|
159
|
+
if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {
|
|
160
|
+
/**
|
|
161
|
+
* If the current license has a limit, check if the total count of workflows
|
|
162
|
+
* exceeds that limit and display the limits modal instead of sending the
|
|
163
|
+
* update, because it would throw an API error.
|
|
164
|
+
*/ setShowLimitModal('workflow');
|
|
165
|
+
/**
|
|
166
|
+
* If the current license has a limit, check if the total count of stages
|
|
167
|
+
* exceeds that limit and display the limits modal instead of sending the
|
|
168
|
+
* update, because it would throw an API error.
|
|
169
|
+
*/ } else if (data.stages && stagesPerWorkflow && data.stages.length > parseInt(stagesPerWorkflow, 10)) {
|
|
170
|
+
setShowLimitModal('stage');
|
|
171
|
+
} else if (hasDeletedServerStages || isContentTypeReassignment) {
|
|
172
|
+
if (hasDeletedServerStages) {
|
|
173
|
+
setSavePrompts((prev)=>({
|
|
174
|
+
...prev,
|
|
175
|
+
hasDeletedServerStages: true
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
if (isContentTypeReassignment) {
|
|
179
|
+
setSavePrompts((prev)=>({
|
|
180
|
+
...prev,
|
|
181
|
+
hasReassignedContentTypes: true
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
} else {
|
|
185
|
+
await submitForm(data, helpers);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* If the current license has a limit:
|
|
190
|
+
* check if the total count of workflows or stages exceeds that limit and display
|
|
191
|
+
* the limits modal on page load. It can be closed by the user, but the
|
|
192
|
+
* API will throw an error in case they try to create a new workflow or update the
|
|
193
|
+
* stages.
|
|
194
|
+
*
|
|
195
|
+
* If the current license does not have a limit (e.g. offline license):
|
|
196
|
+
* do nothing (for now). In case they are trying to create the 201st workflow/ stage
|
|
197
|
+
* the API will throw an error.
|
|
198
|
+
*
|
|
199
|
+
*/ React__namespace.useEffect(()=>{
|
|
200
|
+
if (!isLoadingWorkflow && !isLicenseLoading) {
|
|
201
|
+
if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {
|
|
202
|
+
setShowLimitModal('workflow');
|
|
203
|
+
} else if (currentWorkflow && currentWorkflow.stages && stagesPerWorkflow && currentWorkflow.stages.length > parseInt(stagesPerWorkflow, 10)) {
|
|
204
|
+
setShowLimitModal('stage');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}, [
|
|
208
|
+
currentWorkflow,
|
|
209
|
+
isLicenseLoading,
|
|
210
|
+
isLoadingWorkflow,
|
|
211
|
+
limits,
|
|
212
|
+
meta,
|
|
213
|
+
numberOfWorkflows,
|
|
214
|
+
stagesPerWorkflow
|
|
215
|
+
]);
|
|
216
|
+
const initialValues = React__namespace.useMemo(()=>{
|
|
217
|
+
if (isCreatingWorkflow || !currentWorkflow) {
|
|
218
|
+
return {
|
|
219
|
+
name: '',
|
|
220
|
+
stages: [],
|
|
221
|
+
contentTypes: [],
|
|
222
|
+
stageRequiredToPublish: ''
|
|
223
|
+
};
|
|
224
|
+
} else {
|
|
225
|
+
return {
|
|
226
|
+
name: currentWorkflow.name,
|
|
227
|
+
stages: addTmpKeysToStages(currentWorkflow.stages),
|
|
228
|
+
contentTypes: currentWorkflow.contentTypes,
|
|
229
|
+
stageRequiredToPublish: currentWorkflow.stageRequiredToPublish?.id.toString() ?? ''
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
}, [
|
|
233
|
+
currentWorkflow,
|
|
234
|
+
isCreatingWorkflow
|
|
235
|
+
]);
|
|
236
|
+
if (isLoadingWorkflow) {
|
|
237
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
|
238
|
+
}
|
|
239
|
+
if (error) {
|
|
240
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
|
|
241
|
+
}
|
|
242
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
243
|
+
children: [
|
|
244
|
+
/*#__PURE__*/ jsxRuntime.jsx(Layout.DragLayerRendered, {}),
|
|
245
|
+
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
|
|
246
|
+
method: isCreatingWorkflow ? 'POST' : 'PUT',
|
|
247
|
+
initialValues: initialValues,
|
|
248
|
+
validationSchema: WORKFLOW_SCHEMA,
|
|
249
|
+
onSubmit: handleSubmit,
|
|
250
|
+
children: ({ modified, isSubmitting, values, setErrors })=>/*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
251
|
+
children: [
|
|
252
|
+
/*#__PURE__*/ jsxRuntime.jsx(Layout.Header, {
|
|
253
|
+
navigationAction: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.BackButton, {
|
|
254
|
+
fallback: ".."
|
|
255
|
+
}),
|
|
256
|
+
primaryAction: canUpdate || canCreate ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
257
|
+
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {}),
|
|
258
|
+
type: "submit",
|
|
259
|
+
disabled: !modified || isSubmitting || values.stages.length === 0,
|
|
260
|
+
// if the confirm dialog is open the loading state is on
|
|
261
|
+
// the confirm button already
|
|
262
|
+
loading: !Boolean(Object.keys(savePrompts).length > 0) && isSubmitting,
|
|
263
|
+
children: formatMessage({
|
|
264
|
+
id: 'global.save',
|
|
265
|
+
defaultMessage: 'Save'
|
|
266
|
+
})
|
|
267
|
+
}) : null,
|
|
268
|
+
subtitle: formatMessage({
|
|
269
|
+
id: 'review-workflows.page.subtitle',
|
|
270
|
+
defaultMessage: '{count, plural, one {# stage} other {# stages}}'
|
|
271
|
+
}, {
|
|
272
|
+
count: currentWorkflow?.stages?.length ?? 0
|
|
273
|
+
}),
|
|
274
|
+
title: currentWorkflow?.name || formatMessage({
|
|
275
|
+
id: 'Settings.review-workflows.create.page.title',
|
|
276
|
+
defaultMessage: 'Create Review Workflow'
|
|
277
|
+
})
|
|
278
|
+
}),
|
|
279
|
+
/*#__PURE__*/ jsxRuntime.jsx(Layout.Root, {
|
|
280
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
281
|
+
alignItems: "stretch",
|
|
282
|
+
direction: "column",
|
|
283
|
+
gap: 7,
|
|
284
|
+
children: [
|
|
285
|
+
/*#__PURE__*/ jsxRuntime.jsx(WorkflowAttributes.WorkflowAttributes, {
|
|
286
|
+
canUpdate: canUpdate || canCreate
|
|
287
|
+
}),
|
|
288
|
+
/*#__PURE__*/ jsxRuntime.jsx(Stages.Stages, {
|
|
289
|
+
canDelete: canDelete,
|
|
290
|
+
canUpdate: canUpdate || canCreate,
|
|
291
|
+
isCreating: isCreatingWorkflow
|
|
292
|
+
})
|
|
293
|
+
]
|
|
294
|
+
})
|
|
295
|
+
}),
|
|
296
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
|
|
297
|
+
open: Object.keys(savePrompts).length > 0,
|
|
298
|
+
onOpenChange: handleConfirmClose,
|
|
299
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
|
|
300
|
+
onConfirm: handleConfirmDeleteDialog(values, {
|
|
301
|
+
setErrors
|
|
302
|
+
}),
|
|
303
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
304
|
+
direction: "column",
|
|
305
|
+
gap: 5,
|
|
306
|
+
children: [
|
|
307
|
+
savePrompts.hasDeletedServerStages && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
308
|
+
textAlign: "center",
|
|
309
|
+
variant: "omega",
|
|
310
|
+
children: formatMessage({
|
|
311
|
+
id: 'review-workflows.page.delete.confirm.stages.body',
|
|
312
|
+
defaultMessage: 'All entries assigned to deleted stages will be moved to the previous stage.'
|
|
313
|
+
})
|
|
314
|
+
}),
|
|
315
|
+
savePrompts.hasReassignedContentTypes && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
316
|
+
textAlign: "center",
|
|
317
|
+
variant: "omega",
|
|
318
|
+
children: formatMessage({
|
|
319
|
+
id: 'review-workflows.page.delete.confirm.contentType.body',
|
|
320
|
+
defaultMessage: '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.'
|
|
321
|
+
}, {
|
|
322
|
+
count: contentTypesFromOtherWorkflows?.filter((contentType)=>values.contentTypes.includes(contentType)).length ?? 0
|
|
323
|
+
})
|
|
324
|
+
}),
|
|
325
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
326
|
+
textAlign: "center",
|
|
327
|
+
variant: "omega",
|
|
328
|
+
children: formatMessage({
|
|
329
|
+
id: 'review-workflows.page.delete.confirm.confirm',
|
|
330
|
+
defaultMessage: 'Are you sure you want to save?'
|
|
331
|
+
})
|
|
332
|
+
})
|
|
333
|
+
]
|
|
334
|
+
})
|
|
335
|
+
})
|
|
336
|
+
})
|
|
337
|
+
]
|
|
338
|
+
})
|
|
339
|
+
}),
|
|
340
|
+
/*#__PURE__*/ jsxRuntime.jsxs(LimitsModal.LimitsModal.Root, {
|
|
341
|
+
open: showLimitModal === 'workflow',
|
|
342
|
+
onOpenChange: ()=>setShowLimitModal(null),
|
|
343
|
+
children: [
|
|
344
|
+
/*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Title, {
|
|
345
|
+
children: formatMessage({
|
|
346
|
+
id: 'review-workflows.edit.page.workflows.limit.title',
|
|
347
|
+
defaultMessage: 'You’ve reached the limit of workflows in your plan'
|
|
348
|
+
})
|
|
349
|
+
}),
|
|
350
|
+
/*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Body, {
|
|
351
|
+
children: formatMessage({
|
|
352
|
+
id: 'review-workflows.edit.page.workflows.limit.body',
|
|
353
|
+
defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.'
|
|
354
|
+
})
|
|
355
|
+
})
|
|
356
|
+
]
|
|
357
|
+
}),
|
|
358
|
+
/*#__PURE__*/ jsxRuntime.jsxs(LimitsModal.LimitsModal.Root, {
|
|
359
|
+
open: showLimitModal === 'stage',
|
|
360
|
+
onOpenChange: ()=>setShowLimitModal(null),
|
|
361
|
+
children: [
|
|
362
|
+
/*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Title, {
|
|
363
|
+
children: formatMessage({
|
|
364
|
+
id: 'review-workflows.edit.page.stages.limit.title',
|
|
365
|
+
defaultMessage: 'You have reached the limit of stages for this workflow in your plan'
|
|
366
|
+
})
|
|
367
|
+
}),
|
|
368
|
+
/*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Body, {
|
|
369
|
+
children: formatMessage({
|
|
370
|
+
id: 'review-workflows.edit.page.stages.limit.body',
|
|
371
|
+
defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.'
|
|
372
|
+
})
|
|
373
|
+
})
|
|
374
|
+
]
|
|
375
|
+
})
|
|
376
|
+
]
|
|
377
|
+
});
|
|
378
|
+
};
|
|
379
|
+
const addTmpKeysToStages = (data)=>{
|
|
380
|
+
const keys = fractionalIndexing.generateNKeysBetween(undefined, undefined, data.length);
|
|
381
|
+
return data.map((datum, index)=>({
|
|
382
|
+
...datum,
|
|
383
|
+
__temp_key__: keys[index]
|
|
384
|
+
}));
|
|
385
|
+
};
|
|
386
|
+
/* -------------------------------------------------------------------------------------------------
|
|
387
|
+
* ProtectedEditPage
|
|
388
|
+
* -----------------------------------------------------------------------------------------------*/ const ProtectedEditPage = ()=>{
|
|
389
|
+
const permissions = hooks.useTypedSelector((state)=>{
|
|
390
|
+
const { create = [], update = [], read = [] } = state.admin_app.permissions.settings?.['review-workflows'] ?? {};
|
|
391
|
+
return [
|
|
392
|
+
...create,
|
|
393
|
+
...update,
|
|
394
|
+
...read
|
|
395
|
+
];
|
|
396
|
+
});
|
|
397
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Protect, {
|
|
398
|
+
permissions: permissions,
|
|
399
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(EditPage, {})
|
|
400
|
+
});
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
exports.ProtectedEditPage = ProtectedEditPage;
|
|
404
|
+
//# sourceMappingURL=id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sources":["../../../../admin/src/routes/settings/id.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n BackButton,\n useNotification,\n useAPIErrorHandler,\n useRBAC,\n Form,\n Page,\n FormProps,\n FormHelpers,\n} from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Button, Dialog, Flex, Typography } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport {\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n} from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { isBaseQueryError } from '../../utils/api';\n\nimport * as Layout from './components/Layout';\nimport { Stages, WorkflowStage } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nimport type { Stage, Workflow } from '../../../../shared/contracts/review-workflows';\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst WORKFLOW_SCHEMA = yup.object({\n contentTypes: yup.array().of(yup.string()),\n name: yup\n .string()\n .max(255, {\n id: 'review-workflows.validation.name.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n .required()\n .nullable(),\n stages: yup\n .array()\n .of(\n yup.object().shape({\n name: yup\n .string()\n .nullable()\n .required({\n id: 'review-workflows.validation.stage.name',\n defaultMessage: 'Name is required',\n })\n .max(255, {\n id: 'review-workflows.validation.stage.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n .test(\n 'unique-name',\n {\n id: 'review-workflows.validation.stage.duplicate',\n defaultMessage: 'Stage name must be unique',\n },\n (stageName, context) => {\n // @ts-expect-error it does exist.\n const { stages } = context.from[1].value;\n\n return stages.filter((stage: Stage) => stage.name === stageName).length === 1;\n }\n ),\n color: yup\n .string()\n .nullable()\n .required({\n id: 'review-workflows.validation.stage.color',\n defaultMessage: 'Color is required',\n })\n .matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),\n\n permissions: yup\n .array(\n yup.object({\n role: yup\n .number()\n .strict()\n .typeError({\n id: 'review-workflows.validation.stage.permissions.role.number',\n defaultMessage: 'Role must be of type number',\n })\n .required(),\n action: yup.string().required({\n id: 'review-workflows.validation.stage.permissions.action.required',\n defaultMessage: 'Action is a required argument',\n }),\n })\n )\n .strict(),\n })\n )\n .min(1),\n stageRequiredToPublish: yup.string().nullable(),\n});\n\nconst EditPage = () => {\n const { id = '' } = useParams<{ id: string }>();\n const isCreatingWorkflow = id === 'create';\n const { formatMessage } = useIntl();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const {\n isLoading: isLoadingWorkflow,\n meta,\n workflows,\n error,\n update,\n create,\n } = useReviewWorkflows();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions['settings']?.['review-workflows']\n );\n const {\n allowedActions: { canDelete, canUpdate, canCreate },\n } = useRBAC(permissions);\n\n const [savePrompts, setSavePrompts] = React.useState<{\n hasDeletedServerStages?: boolean;\n hasReassignedContentTypes?: boolean;\n }>({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n\n const currentWorkflow = workflows?.find((workflow) => workflow.id === parseInt(id, 10));\n const contentTypesFromOtherWorkflows = workflows\n ?.filter((workflow) => workflow.id !== parseInt(id, 10))\n .flatMap((workflow) => workflow.contentTypes);\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n\n interface FormValues {\n name: string;\n stages: WorkflowStage[];\n contentTypes: string[];\n stageRequiredToPublish: string | null;\n }\n\n const submitForm = async (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => {\n try {\n const { stageRequiredToPublish, ...rest } = data;\n const stageRequiredToPublishName =\n stageRequiredToPublish === ''\n ? null\n : rest.stages.find(\n (stage) =>\n stage.id === Number(stageRequiredToPublish) ||\n stage.__temp_key__ === stageRequiredToPublish\n )?.name;\n\n if (!isCreatingWorkflow) {\n const res = await update(id, {\n ...rest,\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: rest.stages.map((stage) => {\n let hasUpdatedPermissions = true;\n const serverStage = currentWorkflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n if (serverStage) {\n hasUpdatedPermissions =\n serverStage.permissions?.length !== stage.permissions?.length ||\n !serverStage.permissions?.every(\n (serverPermission) =>\n !!stage.permissions?.find(\n (permission) => permission.role === serverPermission.role\n )\n );\n }\n return {\n ...stage,\n permissions: hasUpdatedPermissions ? stage.permissions : undefined,\n } satisfies Stage;\n }),\n stageRequiredToPublishName,\n });\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n }\n } else {\n const res = await create({\n ...rest,\n stageRequiredToPublishName,\n });\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else if ('data' in res) {\n navigate(`../${res.data.id}`, { replace: true });\n }\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n setSavePrompts({});\n };\n\n const handleConfirmDeleteDialog =\n (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => async () => {\n await submitForm(data, helpers);\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const handleSubmit: FormProps<FormValues>['onSubmit'] = async (data, helpers) => {\n const isContentTypeReassignment = data.contentTypes.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n const hasDeletedServerStages =\n !isCreatingWorkflow &&\n !currentWorkflow?.stages.every((stage) =>\n data.stages.some((newStage) => newStage.id === stage.id)\n );\n\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n data.stages &&\n stagesPerWorkflow &&\n data.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\n } else {\n await submitForm(data, helpers);\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 (!isLoadingWorkflow && !isLicenseLoading) {\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n } else if (\n currentWorkflow &&\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta,\n numberOfWorkflows,\n stagesPerWorkflow,\n ]);\n\n const initialValues: FormValues = React.useMemo(() => {\n if (isCreatingWorkflow || !currentWorkflow) {\n return {\n name: '',\n stages: [],\n contentTypes: [],\n stageRequiredToPublish: '',\n };\n } else {\n return {\n name: currentWorkflow.name,\n stages: addTmpKeysToStages(currentWorkflow.stages),\n contentTypes: currentWorkflow.contentTypes,\n stageRequiredToPublish: currentWorkflow.stageRequiredToPublish?.id.toString() ?? '',\n };\n }\n }, [currentWorkflow, isCreatingWorkflow]);\n\n if (isLoadingWorkflow) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <Form\n method={isCreatingWorkflow ? 'POST' : 'PUT'}\n initialValues={initialValues}\n validationSchema={WORKFLOW_SCHEMA}\n onSubmit={handleSubmit}\n >\n {({ modified, isSubmitting, values, setErrors }) => (\n <>\n <Layout.Header\n navigationAction={<BackButton fallback=\"..\" />}\n primaryAction={\n canUpdate || canCreate ? (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n disabled={!modified || isSubmitting || values.stages.length === 0}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Boolean(Object.keys(savePrompts).length > 0) && isSubmitting}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: 'review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n title={\n currentWorkflow?.name ||\n formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })\n }\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate || canCreate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate || canCreate}\n isCreating={isCreatingWorkflow}\n />\n </Flex>\n </Layout.Root>\n <Dialog.Root\n open={Object.keys(savePrompts).length > 0}\n onOpenChange={handleConfirmClose}\n >\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog(values, { setErrors })}>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count:\n contentTypesFromOtherWorkflows?.filter((contentType) =>\n values.contentTypes.includes(contentType)\n ).length ?? 0,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n </>\n )}\n </Form>\n\n <LimitsModal.Root\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.edit.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: 'review-workflows.edit.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.edit.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'review-workflows.edit.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n\nconst addTmpKeysToStages = (data: Workflow['stages']) => {\n const keys = generateNKeysBetween(undefined, undefined, data.length);\n\n return data.map((datum, index) => ({\n ...datum,\n __temp_key__: keys[index],\n }));\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector((state) => {\n const {\n create = [],\n update = [],\n read = [],\n } = state.admin_app.permissions.settings?.['review-workflows'] ?? {};\n\n return [...create, ...update, ...read];\n });\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedEditPage };\n"],"names":["WORKFLOW_SCHEMA","yup","object","contentTypes","array","of","string","name","max","id","defaultMessage","required","nullable","stages","shape","test","stageName","context","from","value","filter","stage","length","color","matches","permissions","role","number","strict","typeError","action","min","stageRequiredToPublish","EditPage","useParams","isCreatingWorkflow","formatMessage","useIntl","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","toggleNotification","useNotification","isLoading","isLoadingWorkflow","meta","workflows","error","update","create","useReviewWorkflows","useTypedSelector","state","admin_app","allowedActions","canDelete","canUpdate","canCreate","useRBAC","savePrompts","setSavePrompts","React","useState","getFeature","isLicenseLoading","useLicenseLimits","showLimitModal","setShowLimitModal","currentWorkflow","find","workflow","parseInt","contentTypesFromOtherWorkflows","flatMap","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","stagesPerWorkflow","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","submitForm","data","helpers","rest","stageRequiredToPublishName","Number","__temp_key__","res","map","hasUpdatedPermissions","serverStage","every","serverPermission","permission","undefined","isBaseQueryError","setErrors","replace","type","message","handleConfirmDeleteDialog","handleConfirmClose","handleSubmit","isContentTypeReassignment","some","contentType","includes","hasDeletedServerStages","newStage","workflowCount","prev","hasReassignedContentTypes","useEffect","initialValues","useMemo","addTmpKeysToStages","toString","_jsx","Page","Loading","Error","_jsxs","_Fragment","Layout","Form","method","validationSchema","onSubmit","modified","isSubmitting","values","navigationAction","BackButton","fallback","primaryAction","Button","startIcon","Check","disabled","loading","Boolean","Object","keys","subtitle","count","title","Flex","alignItems","direction","gap","WorkflowAttributes","Stages","isCreating","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","Typography","textAlign","variant","LimitsModal","Title","Body","generateNKeysBetween","datum","index","ProtectedEditPage","read","settings","Protect"],"mappings":"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"}
|