@strapi/review-workflows 0.0.0-next.f0bfcece1007e5aa527570187635aefc86db536e → 0.0.0-next.f0f36e3df4b18f167036dcbca529dcb933bf4e1d

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 (49) hide show
  1. package/dist/admin/components/LimitsModal.js.map +1 -1
  2. package/dist/admin/components/LimitsModal.mjs.map +1 -1
  3. package/dist/admin/components/Widgets.js.map +1 -1
  4. package/dist/admin/components/Widgets.mjs.map +1 -1
  5. package/dist/admin/index.js.map +1 -1
  6. package/dist/admin/index.mjs.map +1 -1
  7. package/dist/admin/routes/purchase-review-workflows.js +5 -5
  8. package/dist/admin/routes/purchase-review-workflows.js.map +1 -1
  9. package/dist/admin/routes/purchase-review-workflows.mjs +7 -7
  10. package/dist/admin/routes/purchase-review-workflows.mjs.map +1 -1
  11. package/dist/admin/routes/settings/components/Stages.js +1 -0
  12. package/dist/admin/routes/settings/components/Stages.js.map +1 -1
  13. package/dist/admin/routes/settings/components/Stages.mjs +1 -0
  14. package/dist/admin/routes/settings/components/Stages.mjs.map +1 -1
  15. package/dist/admin/routes/settings/components/WorkflowAttributes.js +4 -1
  16. package/dist/admin/routes/settings/components/WorkflowAttributes.js.map +1 -1
  17. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs +4 -1
  18. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs.map +1 -1
  19. package/dist/admin/routes/settings/id.js +9 -2
  20. package/dist/admin/routes/settings/id.js.map +1 -1
  21. package/dist/admin/routes/settings/id.mjs +10 -3
  22. package/dist/admin/routes/settings/id.mjs.map +1 -1
  23. package/dist/admin/routes/settings/index.js +1 -0
  24. package/dist/admin/routes/settings/index.js.map +1 -1
  25. package/dist/admin/routes/settings/index.mjs +1 -0
  26. package/dist/admin/routes/settings/index.mjs.map +1 -1
  27. package/dist/admin/services/content-manager.js.map +1 -1
  28. package/dist/admin/services/content-manager.mjs.map +1 -1
  29. package/dist/admin/services/settings.js.map +1 -1
  30. package/dist/admin/services/settings.mjs.map +1 -1
  31. package/dist/admin/src/services/admin.d.ts +1 -1
  32. package/dist/admin/src/services/api.d.ts +1 -1
  33. package/dist/admin/src/services/content-manager.d.ts +4 -4
  34. package/dist/admin/src/services/settings.d.ts +3 -3
  35. package/dist/admin/utils/translations.js.map +1 -1
  36. package/dist/admin/utils/translations.mjs.map +1 -1
  37. package/dist/admin/utils/users.js.map +1 -1
  38. package/dist/admin/utils/users.mjs.map +1 -1
  39. package/dist/server/migrations/shorten-stage-attribute.js.map +1 -1
  40. package/dist/server/migrations/shorten-stage-attribute.mjs.map +1 -1
  41. package/dist/server/services/metrics/weekly-metrics.js.map +1 -1
  42. package/dist/server/services/metrics/weekly-metrics.mjs.map +1 -1
  43. package/dist/server/services/stage-permissions.js.map +1 -1
  44. package/dist/server/services/stage-permissions.mjs.map +1 -1
  45. package/dist/server/services/stages.js.map +1 -1
  46. package/dist/server/services/stages.mjs.map +1 -1
  47. package/dist/server/utils/index.js.map +1 -1
  48. package/dist/server/utils/index.mjs.map +1 -1
  49. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowAttributes.mjs","sources":["../../../../../admin/src/routes/settings/components/WorkflowAttributes.tsx"],"sourcesContent":["import { InputRenderer, useField, useForm } from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Grid,\n MultiSelect,\n MultiSelectGroup,\n MultiSelectOption,\n Typography,\n useCollator,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useGetContentTypesQuery } from '../../../services/content-manager';\nimport { useReviewWorkflows } from '../hooks/useReviewWorkflows';\n\nimport type { WorkflowStage } from './Stages';\n\n/* -------------------------------------------------------------------------------------------------\n * WorkflowAttributes\n * -----------------------------------------------------------------------------------------------*/\ninterface WorkflowAttributesProps {\n canUpdate?: boolean;\n}\n\nconst WorkflowAttributes = ({ canUpdate = true }: WorkflowAttributesProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Grid.Root background=\"neutral0\" hasRadius gap={4} padding={6} shadow=\"tableShadow\">\n <Grid.Item col={6} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer\n disabled={!canUpdate}\n label={formatMessage({\n id: 'Settings.review-workflows.workflow.name.label',\n defaultMessage: 'Workflow Name',\n })}\n name=\"name\"\n required\n type=\"string\"\n />\n </Grid.Item>\n <Grid.Item col={6} direction=\"column\" alignItems=\"stretch\">\n <ContentTypesSelector disabled={!canUpdate} />\n </Grid.Item>\n <Grid.Item col={6} direction=\"column\" alignItems=\"stretch\">\n <StageSelector disabled={!canUpdate} />\n </Grid.Item>\n </Grid.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ContentTypesSelector\n * -----------------------------------------------------------------------------------------------*/\ninterface ContentTypesSelectorProps {\n disabled?: boolean;\n}\n\nconst ContentTypesSelector = ({ disabled }: ContentTypesSelectorProps) => {\n const { formatMessage, locale } = useIntl();\n const { data: contentTypes, isLoading } = useGetContentTypesQuery();\n const { workflows } = useReviewWorkflows();\n const currentWorkflow = useForm('ContentTypesSelector', (state) => state.values);\n\n const { error, value, onChange } = useField('contentTypes');\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const isDisabled =\n disabled ||\n isLoading ||\n !contentTypes ||\n (contentTypes.collectionType.length === 0 && contentTypes.singleType.length === 0);\n\n const collectionTypes = (contentTypes?.collectionType ?? [])\n .toSorted((a, b) => formatter.compare(a.info.displayName, b.info.displayName))\n .map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n }));\n\n const singleTypes = (contentTypes?.singleType ?? []).map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n }));\n\n return (\n <Field.Root error={error} name={'contentTypes'}>\n <Field.Label>\n {formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.label',\n defaultMessage: 'Associated to',\n })}\n </Field.Label>\n <MultiSelect\n customizeContent={(value) =>\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.displayValue',\n defaultMessage:\n '{count} {count, plural, one {content type} other {content types}} selected',\n },\n { count: value?.length }\n )\n }\n disabled={isDisabled}\n onChange={(values) => {\n onChange('contentTypes', values);\n }}\n value={value}\n placeholder={formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.placeholder',\n defaultMessage: 'Select',\n })}\n >\n {[\n ...(collectionTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.collectionTypes.label',\n defaultMessage: 'Collection Types',\n }),\n children: collectionTypes,\n },\n ]\n : []),\n\n ...(singleTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.singleTypes.label',\n defaultMessage: 'Single Types',\n }),\n children: singleTypes,\n },\n ]\n : []),\n ].map((opt) => {\n return (\n <MultiSelectGroup\n key={opt.label}\n label={opt.label}\n values={opt.children.map((child) => child.value.toString())}\n >\n {opt.children.map((child) => {\n const { name: assignedWorkflowName } =\n workflows?.find(\n (workflow) =>\n ((currentWorkflow && workflow.id !== currentWorkflow.id) ||\n !currentWorkflow) &&\n workflow.contentTypes.includes(child.value)\n ) ?? {};\n\n return (\n <NestedOption key={child.value} value={child.value}>\n <Typography>\n {\n // @ts-expect-error - formatMessage options doesn't expect to be a React component but that's what we need actually for the <i> and <em> components\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.assigned.notice',\n defaultMessage:\n '{label} {name, select, undefined {} other {<i>(assigned to <em>{name}</em> workflow)</i>}}',\n },\n {\n label: child.label,\n name: assignedWorkflowName,\n em: (...children) => (\n <Typography tag=\"em\" fontWeight=\"bold\">\n {children}\n </Typography>\n ),\n i: (...children) => (\n <ContentTypeTakeNotice>{children}</ContentTypeTakeNotice>\n ),\n }\n )\n }\n </Typography>\n </NestedOption>\n );\n })}\n </MultiSelectGroup>\n );\n })}\n </MultiSelect>\n </Field.Root>\n );\n};\n\nconst NestedOption = styled(MultiSelectOption)`\n padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\nconst ContentTypeTakeNotice = styled(Typography)`\n font-style: italic;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * StageSelector\n * -----------------------------------------------------------------------------------------------*/\ninterface StageSelectorProps {\n disabled?: boolean;\n}\n\nconst StageSelector = ({ disabled }: StageSelectorProps) => {\n const { value: stages = [] } = useField<WorkflowStage[]>('stages');\n const { formatMessage } = useIntl();\n\n const { error, value, onChange } = useField('stageRequiredToPublish');\n\n // stages with empty names are not valid, so we avoid them from being used to avoid errors\n const validStages = stages.filter((stage) => stage.name);\n\n return (\n <Field.Root\n error={error}\n name=\"stageRequiredToPublish\"\n hint={formatMessage({\n id: 'settings.review-workflows.workflow.stageRequiredToPublish.hint',\n defaultMessage:\n 'Prevents entries from being published if they are not at the required stage.',\n })}\n >\n <Field.Label>\n {formatMessage({\n id: 'settings.review-workflows.workflow.stageRequiredToPublish.label',\n defaultMessage: 'Required stage for publishing',\n })}\n </Field.Label>\n <SingleSelect\n disabled={disabled}\n onChange={(value) => {\n onChange('stageRequiredToPublish', value);\n }}\n value={value}\n >\n <SingleSelectOption value={''}>\n {formatMessage({\n id: 'settings.review-workflows.workflow.stageRequiredToPublish.any',\n defaultMessage: 'Any stage',\n })}\n </SingleSelectOption>\n {validStages.map((stage, i) => (\n <SingleSelectOption\n key={`requiredToPublishStage-${stage.id || stage.__temp_key__}`}\n value={stage.id?.toString() || stage.__temp_key__}\n >\n {stage.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n <Field.Hint />\n </Field.Root>\n );\n};\n\nexport { WorkflowAttributes };\nexport type { WorkflowAttributesProps };\n"],"names":["WorkflowAttributes","canUpdate","formatMessage","useIntl","_jsxs","Grid","Root","background","hasRadius","gap","padding","shadow","_jsx","Item","col","direction","alignItems","InputRenderer","disabled","label","id","defaultMessage","name","required","type","ContentTypesSelector","StageSelector","locale","data","contentTypes","isLoading","useGetContentTypesQuery","workflows","useReviewWorkflows","currentWorkflow","useForm","state","values","error","value","onChange","useField","formatter","useCollator","sensitivity","isDisabled","collectionType","length","singleType","collectionTypes","toSorted","a","b","compare","info","displayName","map","contentType","uid","singleTypes","Field","Label","MultiSelect","customizeContent","count","placeholder","children","opt","MultiSelectGroup","child","toString","assignedWorkflowName","find","workflow","includes","NestedOption","Typography","em","tag","fontWeight","i","ContentTypeTakeNotice","styled","MultiSelectOption","theme","spaces","stages","validStages","filter","stage","hint","SingleSelect","SingleSelectOption","__temp_key__","Hint"],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowAttributes.mjs","sources":["../../../../../admin/src/routes/settings/components/WorkflowAttributes.tsx"],"sourcesContent":["import { InputRenderer, useField, useForm } from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Grid,\n MultiSelect,\n MultiSelectGroup,\n MultiSelectOption,\n Typography,\n useCollator,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useGetContentTypesQuery } from '../../../services/content-manager';\nimport { useReviewWorkflows } from '../hooks/useReviewWorkflows';\n\nimport type { WorkflowStage } from './Stages';\n\n/* -------------------------------------------------------------------------------------------------\n * WorkflowAttributes\n * -----------------------------------------------------------------------------------------------*/\ninterface WorkflowAttributesProps {\n canUpdate?: boolean;\n}\n\nconst WorkflowAttributes = ({ canUpdate = true }: WorkflowAttributesProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Grid.Root background=\"neutral0\" hasRadius gap={4} padding={6} shadow=\"tableShadow\">\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer\n disabled={!canUpdate}\n label={formatMessage({\n id: 'Settings.review-workflows.workflow.name.label',\n defaultMessage: 'Workflow Name',\n })}\n name=\"name\"\n required\n type=\"text\"\n />\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <ContentTypesSelector disabled={!canUpdate} />\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <StageSelector disabled={!canUpdate} />\n </Grid.Item>\n </Grid.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ContentTypesSelector\n * -----------------------------------------------------------------------------------------------*/\ninterface ContentTypesSelectorProps {\n disabled?: boolean;\n}\n\nconst ContentTypesSelector = ({ disabled }: ContentTypesSelectorProps) => {\n const { formatMessage, locale } = useIntl();\n const { data: contentTypes, isLoading } = useGetContentTypesQuery();\n const { workflows } = useReviewWorkflows();\n const currentWorkflow = useForm('ContentTypesSelector', (state) => state.values);\n\n const { error, value, onChange } = useField('contentTypes');\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const isDisabled =\n disabled ||\n isLoading ||\n !contentTypes ||\n (contentTypes.collectionType.length === 0 && contentTypes.singleType.length === 0);\n\n const collectionTypes = (contentTypes?.collectionType ?? [])\n .toSorted((a, b) => formatter.compare(a.info.displayName, b.info.displayName))\n .map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n }));\n\n const singleTypes = (contentTypes?.singleType ?? []).map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n }));\n\n return (\n <Field.Root error={error} name={'contentTypes'}>\n <Field.Label>\n {formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.label',\n defaultMessage: 'Associated to',\n })}\n </Field.Label>\n <MultiSelect\n customizeContent={(value) =>\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.displayValue',\n defaultMessage:\n '{count} {count, plural, one {content type} other {content types}} selected',\n },\n { count: value?.length }\n )\n }\n disabled={isDisabled}\n onChange={(values) => {\n onChange('contentTypes', values);\n }}\n value={value}\n placeholder={formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.placeholder',\n defaultMessage: 'Select',\n })}\n >\n {[\n ...(collectionTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.collectionTypes.label',\n defaultMessage: 'Collection Types',\n }),\n children: collectionTypes,\n },\n ]\n : []),\n\n ...(singleTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.singleTypes.label',\n defaultMessage: 'Single Types',\n }),\n children: singleTypes,\n },\n ]\n : []),\n ].map((opt) => {\n return (\n <MultiSelectGroup\n key={opt.label}\n label={opt.label}\n values={opt.children.map((child) => child.value.toString())}\n >\n {opt.children.map((child) => {\n const { name: assignedWorkflowName } =\n workflows?.find(\n (workflow) =>\n ((currentWorkflow && workflow.id !== currentWorkflow.id) ||\n !currentWorkflow) &&\n workflow.contentTypes.includes(child.value)\n ) ?? {};\n\n return (\n <NestedOption key={child.value} value={child.value}>\n <Typography>\n {\n // @ts-expect-error - formatMessage options doesn't expect to be a React component but that's what we need actually for the <i> and <em> components\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.assigned.notice',\n defaultMessage:\n '{label} {name, select, undefined {} other {<i>(assigned to <em>{name}</em> workflow)</i>}}',\n },\n {\n label: child.label,\n name: assignedWorkflowName,\n em: (...children) => (\n <Typography tag=\"em\" fontWeight=\"bold\">\n {children}\n </Typography>\n ),\n i: (...children) => (\n <ContentTypeTakeNotice>{children}</ContentTypeTakeNotice>\n ),\n }\n )\n }\n </Typography>\n </NestedOption>\n );\n })}\n </MultiSelectGroup>\n );\n })}\n </MultiSelect>\n </Field.Root>\n );\n};\n\nconst NestedOption = styled(MultiSelectOption)`\n padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\nconst ContentTypeTakeNotice = styled(Typography)`\n font-style: italic;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * StageSelector\n * -----------------------------------------------------------------------------------------------*/\ninterface StageSelectorProps {\n disabled?: boolean;\n}\n\nconst StageSelector = ({ disabled }: StageSelectorProps) => {\n const { value: stages = [] } = useField<WorkflowStage[]>('stages');\n const { formatMessage } = useIntl();\n\n const { error, value, onChange } = useField('stageRequiredToPublish');\n\n // stages with empty names are not valid, so we avoid them from being used to avoid errors\n const validStages = stages.filter((stage) => stage.name);\n\n return (\n <Field.Root\n error={error}\n name=\"stageRequiredToPublish\"\n hint={formatMessage({\n id: 'settings.review-workflows.workflow.stageRequiredToPublish.hint',\n defaultMessage:\n 'Prevents entries from being published if they are not at the required stage.',\n })}\n >\n <Field.Label>\n {formatMessage({\n id: 'settings.review-workflows.workflow.stageRequiredToPublish.label',\n defaultMessage: 'Required stage for publishing',\n })}\n </Field.Label>\n <SingleSelect\n disabled={disabled}\n onChange={(value) => {\n onChange('stageRequiredToPublish', value);\n }}\n value={value}\n >\n <SingleSelectOption value={''}>\n {formatMessage({\n id: 'settings.review-workflows.workflow.stageRequiredToPublish.any',\n defaultMessage: 'Any stage',\n })}\n </SingleSelectOption>\n {validStages.map((stage, i) => (\n <SingleSelectOption\n key={`requiredToPublishStage-${stage.id || stage.__temp_key__}`}\n value={stage.id?.toString() || stage.__temp_key__}\n >\n {stage.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n <Field.Hint />\n </Field.Root>\n );\n};\n\nexport { WorkflowAttributes };\nexport type { WorkflowAttributesProps };\n"],"names":["WorkflowAttributes","canUpdate","formatMessage","useIntl","_jsxs","Grid","Root","background","hasRadius","gap","padding","shadow","_jsx","Item","col","xs","direction","alignItems","InputRenderer","disabled","label","id","defaultMessage","name","required","type","ContentTypesSelector","StageSelector","locale","data","contentTypes","isLoading","useGetContentTypesQuery","workflows","useReviewWorkflows","currentWorkflow","useForm","state","values","error","value","onChange","useField","formatter","useCollator","sensitivity","isDisabled","collectionType","length","singleType","collectionTypes","toSorted","a","b","compare","info","displayName","map","contentType","uid","singleTypes","Field","Label","MultiSelect","customizeContent","count","placeholder","children","opt","MultiSelectGroup","child","toString","assignedWorkflowName","find","workflow","includes","NestedOption","Typography","em","tag","fontWeight","i","ContentTypeTakeNotice","styled","MultiSelectOption","theme","spaces","stages","validStages","filter","stage","hint","SingleSelect","SingleSelectOption","__temp_key__","Hint"],"mappings":"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"}
@@ -250,8 +250,15 @@ const EditPage = ()=>{
250
250
  children: ({ modified, isSubmitting, values, setErrors })=>/*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
251
251
  children: [
252
252
  /*#__PURE__*/ jsxRuntime.jsx(Layout.Header, {
253
- navigationAction: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.BackButton, {
254
- fallback: ".."
253
+ navigationAction: // The back link for mobile works differently; it is placed higher up in the DOM.
254
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
255
+ display: {
256
+ initial: 'none',
257
+ medium: 'block'
258
+ },
259
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.BackButton, {
260
+ fallback: ".."
261
+ })
255
262
  }),
256
263
  primaryAction: canUpdate || canCreate ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
257
264
  startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {}),
@@ -1 +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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"}
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 { Box, 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={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"..\" />\n </Box>\n }\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","Box","display","initial","medium","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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"}
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { Page, useAPIErrorHandler, useNotification, useRBAC, Form, BackButton, ConfirmDialog } from '@strapi/admin/strapi-admin';
4
4
  import { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';
5
- import { Button, Flex, Dialog, Typography } from '@strapi/design-system';
5
+ import { Box, Button, Flex, Dialog, Typography } from '@strapi/design-system';
6
6
  import { Check } from '@strapi/icons';
7
7
  import { generateNKeysBetween } from 'fractional-indexing';
8
8
  import { useIntl } from 'react-intl';
@@ -228,8 +228,15 @@ const EditPage = ()=>{
228
228
  children: ({ modified, isSubmitting, values, setErrors })=>/*#__PURE__*/ jsxs(Fragment, {
229
229
  children: [
230
230
  /*#__PURE__*/ jsx(Header, {
231
- navigationAction: /*#__PURE__*/ jsx(BackButton, {
232
- fallback: ".."
231
+ navigationAction: // The back link for mobile works differently; it is placed higher up in the DOM.
232
+ /*#__PURE__*/ jsx(Box, {
233
+ display: {
234
+ initial: 'none',
235
+ medium: 'block'
236
+ },
237
+ children: /*#__PURE__*/ jsx(BackButton, {
238
+ fallback: ".."
239
+ })
233
240
  }),
234
241
  primaryAction: canUpdate || canCreate ? /*#__PURE__*/ jsx(Button, {
235
242
  startIcon: /*#__PURE__*/ jsx(Check, {}),
@@ -1 +1 @@
1
- {"version":3,"file":"id.mjs","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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"}
1
+ {"version":3,"file":"id.mjs","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 { Box, 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={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"..\" />\n </Box>\n }\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","Box","display","initial","medium","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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"}
@@ -212,6 +212,7 @@ const ReviewWorkflowsListView = ()=>{
212
212
  children: [
213
213
  canRead || canUpdate ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
214
214
  tag: reactRouterDom.Link,
215
+ onClick: (e)=>e.stopPropagation(),
215
216
  to: workflow.id.toString(),
216
217
  label: formatMessage({
217
218
  id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',
@@ -1 +1 @@
1
- {"version":3,"file":"index.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":["ReviewWorkflowsListView","formatMessage","useIntl","navigate","useNavigate","trackUsage","useTracking","workflowToDelete","setWorkflowToDelete","React","useState","showLimitModal","setShowLimitModal","data","isLoading","isLoadingModels","useGetContentTypesQuery","meta","workflows","delete","deleteAction","useReviewWorkflows","getFeature","isLicenseLoading","useLicenseLimits","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canCreate","canRead","canUpdate","canDelete","useRBAC","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","handleDeleteWorkflow","workflowId","toggleConfirmDeleteDialog","handleConfirmDeleteDialog","handleCreateClick","event","preventDefault","workflowCount","parseInt","useEffect","headers","label","id","defaultMessage","name","_jsx","Page","Loading","contentTypes","Object","values","reduce","acc","curr","push","_jsxs","_Fragment","Layout","primaryAction","LinkButton","startIcon","Plus","size","tag","NavLink","to","onClick","subtitle","title","Table","Root","rows","footer","TFooter","cursor","icon","Content","Head","map","head","HeaderCell","Body","workflow","Row","Cell","width","Typography","textColor","fontWeight","ellipsis","stages","length","uid","contentType","find","info","displayName","join","Flex","alignItems","justifyContent","IconButton","Link","toString","variant","Pencil","withTooltip","e","stopPropagation","String","Trash","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","LimitsModal","Title","ProtectedListPage","main","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"index.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 onClick={(e) => e.stopPropagation()}\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":["ReviewWorkflowsListView","formatMessage","useIntl","navigate","useNavigate","trackUsage","useTracking","workflowToDelete","setWorkflowToDelete","React","useState","showLimitModal","setShowLimitModal","data","isLoading","isLoadingModels","useGetContentTypesQuery","meta","workflows","delete","deleteAction","useReviewWorkflows","getFeature","isLicenseLoading","useLicenseLimits","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canCreate","canRead","canUpdate","canDelete","useRBAC","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","handleDeleteWorkflow","workflowId","toggleConfirmDeleteDialog","handleConfirmDeleteDialog","handleCreateClick","event","preventDefault","workflowCount","parseInt","useEffect","headers","label","id","defaultMessage","name","_jsx","Page","Loading","contentTypes","Object","values","reduce","acc","curr","push","_jsxs","_Fragment","Layout","primaryAction","LinkButton","startIcon","Plus","size","tag","NavLink","to","onClick","subtitle","title","Table","Root","rows","footer","TFooter","cursor","icon","Content","Head","map","head","HeaderCell","Body","workflow","Row","Cell","width","Typography","textColor","fontWeight","ellipsis","stages","length","uid","contentType","find","info","displayName","join","Flex","alignItems","justifyContent","IconButton","Link","e","stopPropagation","toString","variant","Pencil","withTooltip","String","Trash","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","LimitsModal","Title","ProtectedListPage","main","Protect"],"mappings":"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"}