@strapi/review-workflows 5.51.1 → 5.51.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -228,7 +228,7 @@ const StageSelect = ({ isCompact })=>{
228
228
  }
229
229
  }
230
230
  }
231
- } catch (error) {
231
+ } catch {
232
232
  toggleNotification({
233
233
  type: 'danger',
234
234
  message: formatMessage({
@@ -1 +1 @@
1
- {"version":3,"file":"StageSelect.js","sources":["../../../../../../../admin/src/routes/content-manager/model/id/components/StageSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport {\n SingleSelect,\n type SingleSelectProps,\n SingleSelectOption,\n Field,\n Flex,\n Loader,\n Typography,\n VisuallyHidden,\n Tooltip,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { Stage } from '../../../../../../../shared/contracts/review-workflows';\nimport { LimitsModal, LimitsModalProps } from '../../../../../components/LimitsModal';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n} from '../../../../../constants';\nimport { useGetStagesQuery, useUpdateStageMutation } from '../../../../../services/content-manager';\nimport { buildValidParams } from '../../../../../utils/api';\nimport { getStageColorByHex } from '../../../../../utils/colors';\n\nimport { STAGE_ATTRIBUTE_NAME } from './constants';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * LimitModals\n * -----------------------------------------------------------------------------------------------*/\n\nconst WorkflowLimitModal = ({ open, onOpenChange }: LimitsModalProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LimitsModal.Root open={open} onOpenChange={onOpenChange}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.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.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n );\n};\n\nconst StageLimitModal = ({ open, onOpenChange }: LimitsModalProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LimitsModal.Root open={open} onOpenChange={onOpenChange}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.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.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/* -------------------------------------------------------------------------------------------------\n * StageSelect\n * -----------------------------------------------------------------------------------------------*/\n\nconst Select = ({\n stages,\n activeWorkflowStage,\n isLoading,\n ...props\n}: SingleSelectProps & { stages: Stage[]; activeWorkflowStage: Stage; isLoading: boolean }) => {\n const { formatMessage } = useIntl();\n const { themeColorName } = getStageColorByHex(activeWorkflowStage?.color) ?? {};\n\n return (\n <SingleSelect\n disabled={stages.length === 0}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n startIcon={\n activeWorkflowStage && (\n <Flex\n tag=\"span\"\n height={2}\n background={activeWorkflowStage?.color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : undefined}\n hasRadius\n shrink={0}\n width={2}\n marginRight=\"-3px\"\n />\n )\n }\n // @ts-expect-error – `customizeContent` is not correctly typed in the DS.\n customizeContent={() => {\n return (\n <Flex tag=\"span\" justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Typography textColor=\"neutral800\" ellipsis lineHeight=\"inherit\">\n {activeWorkflowStage?.name ?? ''}\n </Typography>\n {isLoading ? <Loader small style={{ display: 'flex' }} data-testid=\"loader\" /> : null}\n </Flex>\n );\n }}\n {...props}\n >\n {stages.map(({ id, color, name }) => {\n const { themeColorName } = getStageColorByHex(color) ?? {};\n\n return (\n <SingleSelectOption\n key={id}\n startIcon={\n <Flex\n height={2}\n background={color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : undefined}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n value={id}\n textValue={name}\n >\n {name}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n};\n\nexport const StageSelect = ({ isCompact }: { isCompact?: boolean }) => {\n const {\n collectionType = '',\n slug: model = '',\n id = '',\n } = useParams<{\n collectionType: string;\n slug: string;\n id: string;\n }>();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const { document, isLoading: isLoadingDocument } = unstable_useDocument(\n {\n collectionType,\n model,\n documentId: id,\n params,\n },\n {\n skip: !id && collectionType !== 'single-types',\n }\n );\n\n // Fall back to the URL `id` so the stages endpoint is still queried when the\n // selected locale has no entry yet. The backend returns workflow metadata\n // even when the entity for `documentId + locale` does not exist.\n const stagesDocumentId = document?.documentId ?? id;\n\n const { data, isLoading: isLoadingStages } = useGetStagesQuery(\n {\n slug: collectionType,\n model: model,\n id: stagesDocumentId,\n params,\n },\n {\n skip: !stagesDocumentId || stagesDocumentId === 'create',\n }\n );\n\n const { meta, stages = [] } = data ?? {};\n\n const { getFeature } = useLicenseLimits();\n const [showLimitModal, setShowLimitModal] = React.useState<'stage' | 'workflow' | null>(null);\n\n const limits = getFeature<string>('review-workflows') ?? {};\n\n const activeWorkflowStage = document ? document[STAGE_ATTRIBUTE_NAME] : null;\n\n const [updateStage, { error }] = useUpdateStageMutation();\n\n const handleChange = async (stageId: Data.ID) => {\n try {\n /**\n * If the current license has a limit:\n * check if the total count of workflows exceeds that limit and display\n * the limits modal.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now).\n *\n */\n\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10) < (meta?.workflowCount ?? 0)\n ) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit:\n * check if the total count of stages exceeds that limit and display\n * the limits modal.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now).\n *\n */\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10) < stages.length\n ) {\n setShowLimitModal('stage');\n } else {\n if (document?.documentId) {\n const res = await updateStage({\n model,\n id: document.documentId,\n slug: collectionType,\n params,\n data: { id: stageId },\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'review-workflows.stage.notification.saved',\n defaultMessage: 'Review stage updated',\n }),\n });\n }\n\n if (isCompact && 'error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n }\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'review-workflows.stage.notification.error',\n defaultMessage: 'An error occurred while updating the review stage',\n }),\n });\n }\n };\n\n const isLoading = isLoadingStages || isLoadingDocument;\n\n const reviewStageLabel = formatMessage({\n id: 'review-workflows.stage.label',\n defaultMessage: 'Review stage',\n });\n\n // The Edit View renders the Review Workflows panel even when the user\n // switches to a locale that has not been saved yet. In that case the\n // document for the selected locale does not exist and we cannot transition\n // any stage until the entry is first saved, so surface a dedicated hint\n // rather than the misleading \"no permission\" message.\n const hasDocumentForLocale = Boolean(document?.documentId);\n const totalWorkflowStages = meta?.stageCount ?? 0;\n const canTransition = meta?.canTransition ?? true;\n\n let reviewStageHint: string | undefined;\n if (!isLoading) {\n if (!hasDocumentForLocale) {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.save-first',\n defaultMessage: 'Save this entry to assign a workflow stage.',\n });\n } else if (stages.length === 0) {\n if (canTransition && totalWorkflowStages === 1) {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.single-stage',\n defaultMessage:\n 'This workflow only has one stage. Add more stages to be able to update it here.',\n });\n } else {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.no-transition',\n defaultMessage: 'You don’t have the permission to update this stage.',\n });\n }\n }\n }\n\n if (isCompact) {\n return (\n <>\n <Tooltip label={reviewStageHint}>\n <Field.Root name={STAGE_ATTRIBUTE_NAME} id={STAGE_ATTRIBUTE_NAME}>\n <>\n <VisuallyHidden>\n <Field.Label>{reviewStageLabel}</Field.Label>\n </VisuallyHidden>\n <Select\n stages={stages}\n activeWorkflowStage={activeWorkflowStage}\n isLoading={isLoading}\n size=\"S\"\n disabled={stages.length === 0}\n value={activeWorkflowStage?.id}\n onChange={handleChange}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n />\n </>\n </Field.Root>\n </Tooltip>\n <WorkflowLimitModal\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n <StageLimitModal\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n </>\n );\n }\n\n return (\n <>\n <Field.Root\n hint={reviewStageHint}\n error={(error && formatAPIError(error)) || undefined}\n name={STAGE_ATTRIBUTE_NAME}\n id={STAGE_ATTRIBUTE_NAME}\n >\n <Field.Label>{reviewStageLabel}</Field.Label>\n <Select\n stages={stages}\n activeWorkflowStage={activeWorkflowStage}\n isLoading={isLoading}\n disabled={stages.length === 0}\n value={activeWorkflowStage?.id}\n onChange={handleChange}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n <WorkflowLimitModal\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n <StageLimitModal\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n </>\n );\n};\n"],"names":["WorkflowLimitModal","open","onOpenChange","formatMessage","useIntl","_jsxs","LimitsModal","Root","_jsx","Title","id","defaultMessage","Body","StageLimitModal","Select","stages","activeWorkflowStage","isLoading","props","themeColorName","getStageColorByHex","color","SingleSelect","disabled","length","placeholder","startIcon","Flex","tag","height","background","borderColor","undefined","hasRadius","shrink","width","marginRight","customizeContent","justifyContent","alignItems","Typography","textColor","ellipsis","lineHeight","name","Loader","small","style","display","data-testid","map","SingleSelectOption","value","textValue","StageSelect","isCompact","collectionType","slug","model","useParams","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","query","useQueryParams","params","React","useMemo","buildValidParams","document","isLoadingDocument","unstable_useDocument","documentId","skip","stagesDocumentId","data","isLoadingStages","useGetStagesQuery","meta","getFeature","useLicenseLimits","showLimitModal","setShowLimitModal","useState","limits","STAGE_ATTRIBUTE_NAME","updateStage","error","useUpdateStageMutation","handleChange","stageId","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","parseInt","workflowCount","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","res","type","message","reviewStageLabel","hasDocumentForLocale","Boolean","totalWorkflowStages","stageCount","canTransition","reviewStageHint","_Fragment","Tooltip","label","Field","VisuallyHidden","Label","size","onChange","hint","Hint","Error"],"mappings":"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"}
1
+ {"version":3,"file":"StageSelect.js","sources":["../../../../../../../admin/src/routes/content-manager/model/id/components/StageSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport {\n SingleSelect,\n type SingleSelectProps,\n SingleSelectOption,\n Field,\n Flex,\n Loader,\n Typography,\n VisuallyHidden,\n Tooltip,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { Stage } from '../../../../../../../shared/contracts/review-workflows';\nimport { LimitsModal, LimitsModalProps } from '../../../../../components/LimitsModal';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n} from '../../../../../constants';\nimport { useGetStagesQuery, useUpdateStageMutation } from '../../../../../services/content-manager';\nimport { buildValidParams } from '../../../../../utils/api';\nimport { getStageColorByHex } from '../../../../../utils/colors';\n\nimport { STAGE_ATTRIBUTE_NAME } from './constants';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * LimitModals\n * -----------------------------------------------------------------------------------------------*/\n\nconst WorkflowLimitModal = ({ open, onOpenChange }: LimitsModalProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LimitsModal.Root open={open} onOpenChange={onOpenChange}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.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.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n );\n};\n\nconst StageLimitModal = ({ open, onOpenChange }: LimitsModalProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LimitsModal.Root open={open} onOpenChange={onOpenChange}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.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.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/* -------------------------------------------------------------------------------------------------\n * StageSelect\n * -----------------------------------------------------------------------------------------------*/\n\nconst Select = ({\n stages,\n activeWorkflowStage,\n isLoading,\n ...props\n}: SingleSelectProps & { stages: Stage[]; activeWorkflowStage: Stage; isLoading: boolean }) => {\n const { formatMessage } = useIntl();\n const { themeColorName } = getStageColorByHex(activeWorkflowStage?.color) ?? {};\n\n return (\n <SingleSelect\n disabled={stages.length === 0}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n startIcon={\n activeWorkflowStage && (\n <Flex\n tag=\"span\"\n height={2}\n background={activeWorkflowStage?.color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : undefined}\n hasRadius\n shrink={0}\n width={2}\n marginRight=\"-3px\"\n />\n )\n }\n // @ts-expect-error – `customizeContent` is not correctly typed in the DS.\n customizeContent={() => {\n return (\n <Flex tag=\"span\" justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Typography textColor=\"neutral800\" ellipsis lineHeight=\"inherit\">\n {activeWorkflowStage?.name ?? ''}\n </Typography>\n {isLoading ? <Loader small style={{ display: 'flex' }} data-testid=\"loader\" /> : null}\n </Flex>\n );\n }}\n {...props}\n >\n {stages.map(({ id, color, name }) => {\n const { themeColorName } = getStageColorByHex(color) ?? {};\n\n return (\n <SingleSelectOption\n key={id}\n startIcon={\n <Flex\n height={2}\n background={color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : undefined}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n value={id}\n textValue={name}\n >\n {name}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n};\n\nexport const StageSelect = ({ isCompact }: { isCompact?: boolean }) => {\n const {\n collectionType = '',\n slug: model = '',\n id = '',\n } = useParams<{\n collectionType: string;\n slug: string;\n id: string;\n }>();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const { document, isLoading: isLoadingDocument } = unstable_useDocument(\n {\n collectionType,\n model,\n documentId: id,\n params,\n },\n {\n skip: !id && collectionType !== 'single-types',\n }\n );\n\n // Fall back to the URL `id` so the stages endpoint is still queried when the\n // selected locale has no entry yet. The backend returns workflow metadata\n // even when the entity for `documentId + locale` does not exist.\n const stagesDocumentId = document?.documentId ?? id;\n\n const { data, isLoading: isLoadingStages } = useGetStagesQuery(\n {\n slug: collectionType,\n model: model,\n id: stagesDocumentId,\n params,\n },\n {\n skip: !stagesDocumentId || stagesDocumentId === 'create',\n }\n );\n\n const { meta, stages = [] } = data ?? {};\n\n const { getFeature } = useLicenseLimits();\n const [showLimitModal, setShowLimitModal] = React.useState<'stage' | 'workflow' | null>(null);\n\n const limits = getFeature<string>('review-workflows') ?? {};\n\n const activeWorkflowStage = document ? document[STAGE_ATTRIBUTE_NAME] : null;\n\n const [updateStage, { error }] = useUpdateStageMutation();\n\n const handleChange = async (stageId: Data.ID) => {\n try {\n /**\n * If the current license has a limit:\n * check if the total count of workflows exceeds that limit and display\n * the limits modal.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now).\n *\n */\n\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10) < (meta?.workflowCount ?? 0)\n ) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit:\n * check if the total count of stages exceeds that limit and display\n * the limits modal.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now).\n *\n */\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10) < stages.length\n ) {\n setShowLimitModal('stage');\n } else {\n if (document?.documentId) {\n const res = await updateStage({\n model,\n id: document.documentId,\n slug: collectionType,\n params,\n data: { id: stageId },\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'review-workflows.stage.notification.saved',\n defaultMessage: 'Review stage updated',\n }),\n });\n }\n\n if (isCompact && 'error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n }\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'review-workflows.stage.notification.error',\n defaultMessage: 'An error occurred while updating the review stage',\n }),\n });\n }\n };\n\n const isLoading = isLoadingStages || isLoadingDocument;\n\n const reviewStageLabel = formatMessage({\n id: 'review-workflows.stage.label',\n defaultMessage: 'Review stage',\n });\n\n // The Edit View renders the Review Workflows panel even when the user\n // switches to a locale that has not been saved yet. In that case the\n // document for the selected locale does not exist and we cannot transition\n // any stage until the entry is first saved, so surface a dedicated hint\n // rather than the misleading \"no permission\" message.\n const hasDocumentForLocale = Boolean(document?.documentId);\n const totalWorkflowStages = meta?.stageCount ?? 0;\n const canTransition = meta?.canTransition ?? true;\n\n let reviewStageHint: string | undefined;\n if (!isLoading) {\n if (!hasDocumentForLocale) {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.save-first',\n defaultMessage: 'Save this entry to assign a workflow stage.',\n });\n } else if (stages.length === 0) {\n if (canTransition && totalWorkflowStages === 1) {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.single-stage',\n defaultMessage:\n 'This workflow only has one stage. Add more stages to be able to update it here.',\n });\n } else {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.no-transition',\n defaultMessage: 'You don’t have the permission to update this stage.',\n });\n }\n }\n }\n\n if (isCompact) {\n return (\n <>\n <Tooltip label={reviewStageHint}>\n <Field.Root name={STAGE_ATTRIBUTE_NAME} id={STAGE_ATTRIBUTE_NAME}>\n <>\n <VisuallyHidden>\n <Field.Label>{reviewStageLabel}</Field.Label>\n </VisuallyHidden>\n <Select\n stages={stages}\n activeWorkflowStage={activeWorkflowStage}\n isLoading={isLoading}\n size=\"S\"\n disabled={stages.length === 0}\n value={activeWorkflowStage?.id}\n onChange={handleChange}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n />\n </>\n </Field.Root>\n </Tooltip>\n <WorkflowLimitModal\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n <StageLimitModal\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n </>\n );\n }\n\n return (\n <>\n <Field.Root\n hint={reviewStageHint}\n error={(error && formatAPIError(error)) || undefined}\n name={STAGE_ATTRIBUTE_NAME}\n id={STAGE_ATTRIBUTE_NAME}\n >\n <Field.Label>{reviewStageLabel}</Field.Label>\n <Select\n stages={stages}\n activeWorkflowStage={activeWorkflowStage}\n isLoading={isLoading}\n disabled={stages.length === 0}\n value={activeWorkflowStage?.id}\n onChange={handleChange}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n <WorkflowLimitModal\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n <StageLimitModal\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n </>\n );\n};\n"],"names":["WorkflowLimitModal","open","onOpenChange","formatMessage","useIntl","_jsxs","LimitsModal","Root","_jsx","Title","id","defaultMessage","Body","StageLimitModal","Select","stages","activeWorkflowStage","isLoading","props","themeColorName","getStageColorByHex","color","SingleSelect","disabled","length","placeholder","startIcon","Flex","tag","height","background","borderColor","undefined","hasRadius","shrink","width","marginRight","customizeContent","justifyContent","alignItems","Typography","textColor","ellipsis","lineHeight","name","Loader","small","style","display","data-testid","map","SingleSelectOption","value","textValue","StageSelect","isCompact","collectionType","slug","model","useParams","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","query","useQueryParams","params","React","useMemo","buildValidParams","document","isLoadingDocument","unstable_useDocument","documentId","skip","stagesDocumentId","data","isLoadingStages","useGetStagesQuery","meta","getFeature","useLicenseLimits","showLimitModal","setShowLimitModal","useState","limits","STAGE_ATTRIBUTE_NAME","updateStage","error","useUpdateStageMutation","handleChange","stageId","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","parseInt","workflowCount","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","res","type","message","reviewStageLabel","hasDocumentForLocale","Boolean","totalWorkflowStages","stageCount","canTransition","reviewStageHint","_Fragment","Tooltip","label","Field","VisuallyHidden","Label","size","onChange","hint","Hint","Error"],"mappings":"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"}
@@ -206,7 +206,7 @@ const StageSelect = ({ isCompact })=>{
206
206
  }
207
207
  }
208
208
  }
209
- } catch (error) {
209
+ } catch {
210
210
  toggleNotification({
211
211
  type: 'danger',
212
212
  message: formatMessage({
@@ -1 +1 @@
1
- {"version":3,"file":"StageSelect.mjs","sources":["../../../../../../../admin/src/routes/content-manager/model/id/components/StageSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport {\n SingleSelect,\n type SingleSelectProps,\n SingleSelectOption,\n Field,\n Flex,\n Loader,\n Typography,\n VisuallyHidden,\n Tooltip,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { Stage } from '../../../../../../../shared/contracts/review-workflows';\nimport { LimitsModal, LimitsModalProps } from '../../../../../components/LimitsModal';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n} from '../../../../../constants';\nimport { useGetStagesQuery, useUpdateStageMutation } from '../../../../../services/content-manager';\nimport { buildValidParams } from '../../../../../utils/api';\nimport { getStageColorByHex } from '../../../../../utils/colors';\n\nimport { STAGE_ATTRIBUTE_NAME } from './constants';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * LimitModals\n * -----------------------------------------------------------------------------------------------*/\n\nconst WorkflowLimitModal = ({ open, onOpenChange }: LimitsModalProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LimitsModal.Root open={open} onOpenChange={onOpenChange}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.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.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n );\n};\n\nconst StageLimitModal = ({ open, onOpenChange }: LimitsModalProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LimitsModal.Root open={open} onOpenChange={onOpenChange}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.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.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/* -------------------------------------------------------------------------------------------------\n * StageSelect\n * -----------------------------------------------------------------------------------------------*/\n\nconst Select = ({\n stages,\n activeWorkflowStage,\n isLoading,\n ...props\n}: SingleSelectProps & { stages: Stage[]; activeWorkflowStage: Stage; isLoading: boolean }) => {\n const { formatMessage } = useIntl();\n const { themeColorName } = getStageColorByHex(activeWorkflowStage?.color) ?? {};\n\n return (\n <SingleSelect\n disabled={stages.length === 0}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n startIcon={\n activeWorkflowStage && (\n <Flex\n tag=\"span\"\n height={2}\n background={activeWorkflowStage?.color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : undefined}\n hasRadius\n shrink={0}\n width={2}\n marginRight=\"-3px\"\n />\n )\n }\n // @ts-expect-error – `customizeContent` is not correctly typed in the DS.\n customizeContent={() => {\n return (\n <Flex tag=\"span\" justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Typography textColor=\"neutral800\" ellipsis lineHeight=\"inherit\">\n {activeWorkflowStage?.name ?? ''}\n </Typography>\n {isLoading ? <Loader small style={{ display: 'flex' }} data-testid=\"loader\" /> : null}\n </Flex>\n );\n }}\n {...props}\n >\n {stages.map(({ id, color, name }) => {\n const { themeColorName } = getStageColorByHex(color) ?? {};\n\n return (\n <SingleSelectOption\n key={id}\n startIcon={\n <Flex\n height={2}\n background={color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : undefined}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n value={id}\n textValue={name}\n >\n {name}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n};\n\nexport const StageSelect = ({ isCompact }: { isCompact?: boolean }) => {\n const {\n collectionType = '',\n slug: model = '',\n id = '',\n } = useParams<{\n collectionType: string;\n slug: string;\n id: string;\n }>();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const { document, isLoading: isLoadingDocument } = unstable_useDocument(\n {\n collectionType,\n model,\n documentId: id,\n params,\n },\n {\n skip: !id && collectionType !== 'single-types',\n }\n );\n\n // Fall back to the URL `id` so the stages endpoint is still queried when the\n // selected locale has no entry yet. The backend returns workflow metadata\n // even when the entity for `documentId + locale` does not exist.\n const stagesDocumentId = document?.documentId ?? id;\n\n const { data, isLoading: isLoadingStages } = useGetStagesQuery(\n {\n slug: collectionType,\n model: model,\n id: stagesDocumentId,\n params,\n },\n {\n skip: !stagesDocumentId || stagesDocumentId === 'create',\n }\n );\n\n const { meta, stages = [] } = data ?? {};\n\n const { getFeature } = useLicenseLimits();\n const [showLimitModal, setShowLimitModal] = React.useState<'stage' | 'workflow' | null>(null);\n\n const limits = getFeature<string>('review-workflows') ?? {};\n\n const activeWorkflowStage = document ? document[STAGE_ATTRIBUTE_NAME] : null;\n\n const [updateStage, { error }] = useUpdateStageMutation();\n\n const handleChange = async (stageId: Data.ID) => {\n try {\n /**\n * If the current license has a limit:\n * check if the total count of workflows exceeds that limit and display\n * the limits modal.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now).\n *\n */\n\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10) < (meta?.workflowCount ?? 0)\n ) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit:\n * check if the total count of stages exceeds that limit and display\n * the limits modal.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now).\n *\n */\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10) < stages.length\n ) {\n setShowLimitModal('stage');\n } else {\n if (document?.documentId) {\n const res = await updateStage({\n model,\n id: document.documentId,\n slug: collectionType,\n params,\n data: { id: stageId },\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'review-workflows.stage.notification.saved',\n defaultMessage: 'Review stage updated',\n }),\n });\n }\n\n if (isCompact && 'error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n }\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'review-workflows.stage.notification.error',\n defaultMessage: 'An error occurred while updating the review stage',\n }),\n });\n }\n };\n\n const isLoading = isLoadingStages || isLoadingDocument;\n\n const reviewStageLabel = formatMessage({\n id: 'review-workflows.stage.label',\n defaultMessage: 'Review stage',\n });\n\n // The Edit View renders the Review Workflows panel even when the user\n // switches to a locale that has not been saved yet. In that case the\n // document for the selected locale does not exist and we cannot transition\n // any stage until the entry is first saved, so surface a dedicated hint\n // rather than the misleading \"no permission\" message.\n const hasDocumentForLocale = Boolean(document?.documentId);\n const totalWorkflowStages = meta?.stageCount ?? 0;\n const canTransition = meta?.canTransition ?? true;\n\n let reviewStageHint: string | undefined;\n if (!isLoading) {\n if (!hasDocumentForLocale) {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.save-first',\n defaultMessage: 'Save this entry to assign a workflow stage.',\n });\n } else if (stages.length === 0) {\n if (canTransition && totalWorkflowStages === 1) {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.single-stage',\n defaultMessage:\n 'This workflow only has one stage. Add more stages to be able to update it here.',\n });\n } else {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.no-transition',\n defaultMessage: 'You don’t have the permission to update this stage.',\n });\n }\n }\n }\n\n if (isCompact) {\n return (\n <>\n <Tooltip label={reviewStageHint}>\n <Field.Root name={STAGE_ATTRIBUTE_NAME} id={STAGE_ATTRIBUTE_NAME}>\n <>\n <VisuallyHidden>\n <Field.Label>{reviewStageLabel}</Field.Label>\n </VisuallyHidden>\n <Select\n stages={stages}\n activeWorkflowStage={activeWorkflowStage}\n isLoading={isLoading}\n size=\"S\"\n disabled={stages.length === 0}\n value={activeWorkflowStage?.id}\n onChange={handleChange}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n />\n </>\n </Field.Root>\n </Tooltip>\n <WorkflowLimitModal\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n <StageLimitModal\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n </>\n );\n }\n\n return (\n <>\n <Field.Root\n hint={reviewStageHint}\n error={(error && formatAPIError(error)) || undefined}\n name={STAGE_ATTRIBUTE_NAME}\n id={STAGE_ATTRIBUTE_NAME}\n >\n <Field.Label>{reviewStageLabel}</Field.Label>\n <Select\n stages={stages}\n activeWorkflowStage={activeWorkflowStage}\n isLoading={isLoading}\n disabled={stages.length === 0}\n value={activeWorkflowStage?.id}\n onChange={handleChange}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n <WorkflowLimitModal\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n <StageLimitModal\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n </>\n );\n};\n"],"names":["WorkflowLimitModal","open","onOpenChange","formatMessage","useIntl","_jsxs","LimitsModal","Root","_jsx","Title","id","defaultMessage","Body","StageLimitModal","Select","stages","activeWorkflowStage","isLoading","props","themeColorName","getStageColorByHex","color","SingleSelect","disabled","length","placeholder","startIcon","Flex","tag","height","background","borderColor","undefined","hasRadius","shrink","width","marginRight","customizeContent","justifyContent","alignItems","Typography","textColor","ellipsis","lineHeight","name","Loader","small","style","display","data-testid","map","SingleSelectOption","value","textValue","StageSelect","isCompact","collectionType","slug","model","useParams","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","query","useQueryParams","params","React","useMemo","buildValidParams","document","isLoadingDocument","unstable_useDocument","documentId","skip","stagesDocumentId","data","isLoadingStages","useGetStagesQuery","meta","getFeature","useLicenseLimits","showLimitModal","setShowLimitModal","useState","limits","STAGE_ATTRIBUTE_NAME","updateStage","error","useUpdateStageMutation","handleChange","stageId","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","parseInt","workflowCount","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","res","type","message","reviewStageLabel","hasDocumentForLocale","Boolean","totalWorkflowStages","stageCount","canTransition","reviewStageHint","_Fragment","Tooltip","label","Field","VisuallyHidden","Label","size","onChange","hint","Hint","Error"],"mappings":"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"}
1
+ {"version":3,"file":"StageSelect.mjs","sources":["../../../../../../../admin/src/routes/content-manager/model/id/components/StageSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport {\n SingleSelect,\n type SingleSelectProps,\n SingleSelectOption,\n Field,\n Flex,\n Loader,\n Typography,\n VisuallyHidden,\n Tooltip,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { Stage } from '../../../../../../../shared/contracts/review-workflows';\nimport { LimitsModal, LimitsModalProps } from '../../../../../components/LimitsModal';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n} from '../../../../../constants';\nimport { useGetStagesQuery, useUpdateStageMutation } from '../../../../../services/content-manager';\nimport { buildValidParams } from '../../../../../utils/api';\nimport { getStageColorByHex } from '../../../../../utils/colors';\n\nimport { STAGE_ATTRIBUTE_NAME } from './constants';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * LimitModals\n * -----------------------------------------------------------------------------------------------*/\n\nconst WorkflowLimitModal = ({ open, onOpenChange }: LimitsModalProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LimitsModal.Root open={open} onOpenChange={onOpenChange}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.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.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n );\n};\n\nconst StageLimitModal = ({ open, onOpenChange }: LimitsModalProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LimitsModal.Root open={open} onOpenChange={onOpenChange}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.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.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/* -------------------------------------------------------------------------------------------------\n * StageSelect\n * -----------------------------------------------------------------------------------------------*/\n\nconst Select = ({\n stages,\n activeWorkflowStage,\n isLoading,\n ...props\n}: SingleSelectProps & { stages: Stage[]; activeWorkflowStage: Stage; isLoading: boolean }) => {\n const { formatMessage } = useIntl();\n const { themeColorName } = getStageColorByHex(activeWorkflowStage?.color) ?? {};\n\n return (\n <SingleSelect\n disabled={stages.length === 0}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n startIcon={\n activeWorkflowStage && (\n <Flex\n tag=\"span\"\n height={2}\n background={activeWorkflowStage?.color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : undefined}\n hasRadius\n shrink={0}\n width={2}\n marginRight=\"-3px\"\n />\n )\n }\n // @ts-expect-error – `customizeContent` is not correctly typed in the DS.\n customizeContent={() => {\n return (\n <Flex tag=\"span\" justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Typography textColor=\"neutral800\" ellipsis lineHeight=\"inherit\">\n {activeWorkflowStage?.name ?? ''}\n </Typography>\n {isLoading ? <Loader small style={{ display: 'flex' }} data-testid=\"loader\" /> : null}\n </Flex>\n );\n }}\n {...props}\n >\n {stages.map(({ id, color, name }) => {\n const { themeColorName } = getStageColorByHex(color) ?? {};\n\n return (\n <SingleSelectOption\n key={id}\n startIcon={\n <Flex\n height={2}\n background={color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : undefined}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n value={id}\n textValue={name}\n >\n {name}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n};\n\nexport const StageSelect = ({ isCompact }: { isCompact?: boolean }) => {\n const {\n collectionType = '',\n slug: model = '',\n id = '',\n } = useParams<{\n collectionType: string;\n slug: string;\n id: string;\n }>();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const { document, isLoading: isLoadingDocument } = unstable_useDocument(\n {\n collectionType,\n model,\n documentId: id,\n params,\n },\n {\n skip: !id && collectionType !== 'single-types',\n }\n );\n\n // Fall back to the URL `id` so the stages endpoint is still queried when the\n // selected locale has no entry yet. The backend returns workflow metadata\n // even when the entity for `documentId + locale` does not exist.\n const stagesDocumentId = document?.documentId ?? id;\n\n const { data, isLoading: isLoadingStages } = useGetStagesQuery(\n {\n slug: collectionType,\n model: model,\n id: stagesDocumentId,\n params,\n },\n {\n skip: !stagesDocumentId || stagesDocumentId === 'create',\n }\n );\n\n const { meta, stages = [] } = data ?? {};\n\n const { getFeature } = useLicenseLimits();\n const [showLimitModal, setShowLimitModal] = React.useState<'stage' | 'workflow' | null>(null);\n\n const limits = getFeature<string>('review-workflows') ?? {};\n\n const activeWorkflowStage = document ? document[STAGE_ATTRIBUTE_NAME] : null;\n\n const [updateStage, { error }] = useUpdateStageMutation();\n\n const handleChange = async (stageId: Data.ID) => {\n try {\n /**\n * If the current license has a limit:\n * check if the total count of workflows exceeds that limit and display\n * the limits modal.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now).\n *\n */\n\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10) < (meta?.workflowCount ?? 0)\n ) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit:\n * check if the total count of stages exceeds that limit and display\n * the limits modal.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now).\n *\n */\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10) < stages.length\n ) {\n setShowLimitModal('stage');\n } else {\n if (document?.documentId) {\n const res = await updateStage({\n model,\n id: document.documentId,\n slug: collectionType,\n params,\n data: { id: stageId },\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'review-workflows.stage.notification.saved',\n defaultMessage: 'Review stage updated',\n }),\n });\n }\n\n if (isCompact && 'error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n }\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'review-workflows.stage.notification.error',\n defaultMessage: 'An error occurred while updating the review stage',\n }),\n });\n }\n };\n\n const isLoading = isLoadingStages || isLoadingDocument;\n\n const reviewStageLabel = formatMessage({\n id: 'review-workflows.stage.label',\n defaultMessage: 'Review stage',\n });\n\n // The Edit View renders the Review Workflows panel even when the user\n // switches to a locale that has not been saved yet. In that case the\n // document for the selected locale does not exist and we cannot transition\n // any stage until the entry is first saved, so surface a dedicated hint\n // rather than the misleading \"no permission\" message.\n const hasDocumentForLocale = Boolean(document?.documentId);\n const totalWorkflowStages = meta?.stageCount ?? 0;\n const canTransition = meta?.canTransition ?? true;\n\n let reviewStageHint: string | undefined;\n if (!isLoading) {\n if (!hasDocumentForLocale) {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.save-first',\n defaultMessage: 'Save this entry to assign a workflow stage.',\n });\n } else if (stages.length === 0) {\n if (canTransition && totalWorkflowStages === 1) {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.single-stage',\n defaultMessage:\n 'This workflow only has one stage. Add more stages to be able to update it here.',\n });\n } else {\n reviewStageHint = formatMessage({\n id: 'review-workflows.stages.no-transition',\n defaultMessage: 'You don’t have the permission to update this stage.',\n });\n }\n }\n }\n\n if (isCompact) {\n return (\n <>\n <Tooltip label={reviewStageHint}>\n <Field.Root name={STAGE_ATTRIBUTE_NAME} id={STAGE_ATTRIBUTE_NAME}>\n <>\n <VisuallyHidden>\n <Field.Label>{reviewStageLabel}</Field.Label>\n </VisuallyHidden>\n <Select\n stages={stages}\n activeWorkflowStage={activeWorkflowStage}\n isLoading={isLoading}\n size=\"S\"\n disabled={stages.length === 0}\n value={activeWorkflowStage?.id}\n onChange={handleChange}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n />\n </>\n </Field.Root>\n </Tooltip>\n <WorkflowLimitModal\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n <StageLimitModal\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n </>\n );\n }\n\n return (\n <>\n <Field.Root\n hint={reviewStageHint}\n error={(error && formatAPIError(error)) || undefined}\n name={STAGE_ATTRIBUTE_NAME}\n id={STAGE_ATTRIBUTE_NAME}\n >\n <Field.Label>{reviewStageLabel}</Field.Label>\n <Select\n stages={stages}\n activeWorkflowStage={activeWorkflowStage}\n isLoading={isLoading}\n disabled={stages.length === 0}\n value={activeWorkflowStage?.id}\n onChange={handleChange}\n placeholder={formatMessage({\n id: 'review-workflows.assignee.placeholder',\n defaultMessage: 'Select…',\n })}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n <WorkflowLimitModal\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n <StageLimitModal\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n />\n </>\n );\n};\n"],"names":["WorkflowLimitModal","open","onOpenChange","formatMessage","useIntl","_jsxs","LimitsModal","Root","_jsx","Title","id","defaultMessage","Body","StageLimitModal","Select","stages","activeWorkflowStage","isLoading","props","themeColorName","getStageColorByHex","color","SingleSelect","disabled","length","placeholder","startIcon","Flex","tag","height","background","borderColor","undefined","hasRadius","shrink","width","marginRight","customizeContent","justifyContent","alignItems","Typography","textColor","ellipsis","lineHeight","name","Loader","small","style","display","data-testid","map","SingleSelectOption","value","textValue","StageSelect","isCompact","collectionType","slug","model","useParams","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","query","useQueryParams","params","React","useMemo","buildValidParams","document","isLoadingDocument","unstable_useDocument","documentId","skip","stagesDocumentId","data","isLoadingStages","useGetStagesQuery","meta","getFeature","useLicenseLimits","showLimitModal","setShowLimitModal","useState","limits","STAGE_ATTRIBUTE_NAME","updateStage","error","useUpdateStageMutation","handleChange","stageId","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","parseInt","workflowCount","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","res","type","message","reviewStageLabel","hasDocumentForLocale","Boolean","totalWorkflowStages","stageCount","canTransition","reviewStageHint","_Fragment","Tooltip","label","Field","VisuallyHidden","Label","size","onChange","hint","Hint","Error"],"mappings":";;;;;;;;;;;;;;;AAiCA;;AAEkG,qGAElG,MAAMA,kBAAAA,GAAqB,CAAC,EAAEC,IAAI,EAAEC,YAAY,EAAoB,GAAA;IAClE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,qBACEC,IAAA,CAACC,YAAYC,IAAI,EAAA;QAACN,IAAAA,EAAMA,IAAAA;QAAMC,YAAAA,EAAcA,YAAAA;;AAC1C,0BAAAM,GAAA,CAACF,YAAYG,KAAK,EAAA;0BACfN,aAAAA,CAAc;oBACbO,EAAAA,EAAI,wCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;AAGF,0BAAAH,GAAA,CAACF,YAAYM,IAAI,EAAA;0BACdT,aAAAA,CAAc;oBACbO,EAAAA,EAAI,uCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;AAEA,MAAME,kBAAkB,CAAC,EAAEZ,IAAI,EAAEC,YAAY,EAAoB,GAAA;IAC/D,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,qBACEC,IAAA,CAACC,YAAYC,IAAI,EAAA;QAACN,IAAAA,EAAMA,IAAAA;QAAMC,YAAAA,EAAcA,YAAAA;;AAC1C,0BAAAM,GAAA,CAACF,YAAYG,KAAK,EAAA;0BACfN,aAAAA,CAAc;oBACbO,EAAAA,EAAI,qCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;AAGF,0BAAAH,GAAA,CAACF,YAAYM,IAAI,EAAA;0BACdT,aAAAA,CAAc;oBACbO,EAAAA,EAAI,oCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;AAEA;;qGAIA,MAAMG,MAAAA,GAAS,CAAC,EACdC,MAAM,EACNC,mBAAmB,EACnBC,SAAS,EACT,GAAGC,KAAAA,EACqF,GAAA;IACxF,MAAM,EAAEf,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEe,cAAc,EAAE,GAAGC,kBAAAA,CAAmBJ,mBAAAA,EAAqBK,UAAU,EAAC;AAE9E,IAAA,qBACEb,GAAA,CAACc,YAAAA,EAAAA;QACCC,QAAAA,EAAUR,MAAAA,CAAOS,MAAM,KAAK,CAAA;AAC5BC,QAAAA,WAAAA,EAAatB,aAAAA,CAAc;YACzBO,EAAAA,EAAI,uCAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA,CAAA;AACAe,QAAAA,SAAAA,EACEV,qCACER,GAAA,CAACmB,IAAAA,EAAAA;YACCC,GAAAA,EAAI,MAAA;YACJC,MAAAA,EAAQ,CAAA;AACRC,YAAAA,UAAAA,EAAYd,mBAAAA,EAAqBK,KAAAA;YACjCU,WAAAA,EAAaZ,cAAAA,KAAmB,aAAa,YAAA,GAAea,SAAAA;YAC5DC,SAAS,EAAA,IAAA;YACTC,MAAAA,EAAQ,CAAA;YACRC,KAAAA,EAAO,CAAA;YACPC,WAAAA,EAAY;;;QAKlBC,gBAAAA,EAAkB,IAAA;AAChB,YAAA,qBACEhC,IAAA,CAACsB,IAAAA,EAAAA;gBAAKC,GAAAA,EAAI,MAAA;gBAAOU,cAAAA,EAAe,eAAA;gBAAgBC,UAAAA,EAAW,QAAA;gBAASJ,KAAAA,EAAM,MAAA;;kCACxE3B,GAAA,CAACgC,UAAAA,EAAAA;wBAAWC,SAAAA,EAAU,YAAA;wBAAaC,QAAQ,EAAA,IAAA;wBAACC,UAAAA,EAAW,SAAA;AACpD3B,wBAAAA,QAAAA,EAAAA,mBAAAA,EAAqB4B,IAAAA,IAAQ;;AAE/B3B,oBAAAA,SAAAA,iBAAYT,GAAA,CAACqC,MAAAA,EAAAA;wBAAOC,KAAK,EAAA,IAAA;wBAACC,KAAAA,EAAO;4BAAEC,OAAAA,EAAS;AAAO,yBAAA;wBAAGC,aAAAA,EAAY;AAAc,qBAAA,CAAA,GAAA;;;AAGvF,QAAA,CAAA;AACC,QAAA,GAAG/B,KAAK;kBAERH,MAAAA,CAAOmC,GAAG,CAAC,CAAC,EAAExC,EAAE,EAAEW,KAAK,EAAEuB,IAAI,EAAE,GAAA;AAC9B,YAAA,MAAM,EAAEzB,cAAc,EAAE,GAAGC,kBAAAA,CAAmBC,UAAU,EAAC;AAEzD,YAAA,qBACEb,GAAA,CAAC2C,kBAAAA,EAAAA;AAECzB,gBAAAA,SAAAA,gBACElB,GAAA,CAACmB,IAAAA,EAAAA;oBACCE,MAAAA,EAAQ,CAAA;oBACRC,UAAAA,EAAYT,KAAAA;oBACZU,WAAAA,EAAaZ,cAAAA,KAAmB,aAAa,YAAA,GAAea,SAAAA;oBAC5DC,SAAS,EAAA,IAAA;oBACTC,MAAAA,EAAQ,CAAA;oBACRC,KAAAA,EAAO;;gBAGXiB,KAAAA,EAAO1C,EAAAA;gBACP2C,SAAAA,EAAWT,IAAAA;AAEVA,gBAAAA,QAAAA,EAAAA;AAdIlC,aAAAA,EAAAA,EAAAA,CAAAA;AAiBX,QAAA,CAAA;;AAGN,CAAA;AAEO,MAAM4C,WAAAA,GAAc,CAAC,EAAEC,SAAS,EAA2B,GAAA;IAChE,MAAM,EACJC,cAAAA,GAAiB,EAAE,EACnBC,IAAAA,EAAMC,KAAAA,GAAQ,EAAE,EAChBhD,EAAAA,GAAK,EAAE,EACR,GAAGiD,SAAAA,EAAAA;IAKJ,MAAM,EAAExD,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEwD,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;IACpD,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,SAASC,KAAAA,CAAMC,OAAO,CAAC,IAAMC,iBAAiBL,KAAAA,CAAAA,EAAQ;AAACA,QAAAA;AAAM,KAAA,CAAA;AACnE,IAAA,MAAM,EAAEM,QAAQ,EAAEtD,WAAWuD,iBAAiB,EAAE,GAAGC,oBAAAA,CACjD;AACEjB,QAAAA,cAAAA;AACAE,QAAAA,KAAAA;QACAgB,UAAAA,EAAYhE,EAAAA;AACZyD,QAAAA;KACF,EACA;QACEQ,IAAAA,EAAM,CAACjE,MAAM8C,cAAAA,KAAmB;AAClC,KAAA,CAAA;;;;IAMF,MAAMoB,gBAAAA,GAAmBL,UAAUG,UAAAA,IAAchE,EAAAA;AAEjD,IAAA,MAAM,EAAEmE,IAAI,EAAE5D,WAAW6D,eAAe,EAAE,GAAGC,iBAAAA,CAC3C;QACEtB,IAAAA,EAAMD,cAAAA;QACNE,KAAAA,EAAOA,KAAAA;QACPhD,EAAAA,EAAIkE,gBAAAA;AACJT,QAAAA;KACF,EACA;QACEQ,IAAAA,EAAM,CAACC,oBAAoBA,gBAAAA,KAAqB;AAClD,KAAA,CAAA;IAGF,MAAM,EAAEI,IAAI,EAAEjE,MAAAA,GAAS,EAAE,EAAE,GAAG8D,QAAQ,EAAC;IAEvC,MAAM,EAAEI,UAAU,EAAE,GAAGC,gBAAAA,EAAAA;AACvB,IAAA,MAAM,CAACC,cAAAA,EAAgBC,iBAAAA,CAAkB,GAAGhB,KAAAA,CAAMiB,QAAQ,CAA8B,IAAA,CAAA;IAExF,MAAMC,MAAAA,GAASL,UAAAA,CAAmB,kBAAA,CAAA,IAAuB,EAAC;AAE1D,IAAA,MAAMjE,mBAAAA,GAAsBuD,QAAAA,GAAWA,QAAQ,CAACgB,qBAAqB,GAAG,IAAA;AAExE,IAAA,MAAM,CAACC,WAAAA,EAAa,EAAEC,KAAK,EAAE,CAAC,GAAGC,sBAAAA,EAAAA;AAEjC,IAAA,MAAMC,eAAe,OAAOC,OAAAA,GAAAA;QAC1B,IAAI;AACF;;;;;;;;AAQC,UAED,IACEN,MAAAA,GAASO,mCAAAA,CAAoC,IAC7CC,QAAAA,CAASR,MAAM,CAACO,mCAAAA,CAAoC,EAAE,EAAA,CAAA,IAAOb,IAAAA,EAAMe,aAAAA,IAAiB,CAAA,CAAA,EACpF;gBACAX,iBAAAA,CAAkB,UAAA,CAAA;AAElB;;;;;;;;AAQC,YACH,CAAA,MAAO,IACLE,MAAAA,GAASU,+CAA+C,IACxDF,QAAAA,CAASR,MAAM,CAACU,8CAAAA,CAA+C,EAAE,EAAA,CAAA,GAAMjF,MAAAA,CAAOS,MAAM,EACpF;gBACA4D,iBAAAA,CAAkB,OAAA,CAAA;YACpB,CAAA,MAAO;AACL,gBAAA,IAAIb,UAAUG,UAAAA,EAAY;oBACxB,MAAMuB,GAAAA,GAAM,MAAMT,WAAAA,CAAY;AAC5B9B,wBAAAA,KAAAA;AACAhD,wBAAAA,EAAAA,EAAI6D,SAASG,UAAU;wBACvBjB,IAAAA,EAAMD,cAAAA;AACNW,wBAAAA,MAAAA;wBACAU,IAAAA,EAAM;4BAAEnE,EAAAA,EAAIkF;AAAQ;AACtB,qBAAA,CAAA;AAEA,oBAAA,IAAI,UAAUK,GAAAA,EAAK;wBACjBlC,kBAAAA,CAAmB;4BACjBmC,IAAAA,EAAM,SAAA;AACNC,4BAAAA,OAAAA,EAAShG,aAAAA,CAAc;gCACrBO,EAAAA,EAAI,2CAAA;gCACJC,cAAAA,EAAgB;AAClB,6BAAA;AACF,yBAAA,CAAA;AACF,oBAAA;oBAEA,IAAI4C,SAAAA,IAAa,WAAW0C,GAAAA,EAAK;wBAC/BlC,kBAAAA,CAAmB;4BACjBmC,IAAAA,EAAM,QAAA;4BACNC,OAAAA,EAAStC,cAAAA,CAAeoC,IAAIR,KAAK;AACnC,yBAAA,CAAA;AACF,oBAAA;AACF,gBAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;YACN1B,kBAAAA,CAAmB;gBACjBmC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAAShG,aAAAA,CAAc;oBACrBO,EAAAA,EAAI,2CAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMM,YAAY6D,eAAAA,IAAmBN,iBAAAA;AAErC,IAAA,MAAM4B,mBAAmBjG,aAAAA,CAAc;QACrCO,EAAAA,EAAI,8BAAA;QACJC,cAAAA,EAAgB;AAClB,KAAA,CAAA;;;;;;IAOA,MAAM0F,oBAAAA,GAAuBC,QAAQ/B,QAAAA,EAAUG,UAAAA,CAAAA;IAC/C,MAAM6B,mBAAAA,GAAsBvB,MAAMwB,UAAAA,IAAc,CAAA;IAChD,MAAMC,aAAAA,GAAgBzB,MAAMyB,aAAAA,IAAiB,IAAA;IAE7C,IAAIC,eAAAA;AACJ,IAAA,IAAI,CAACzF,SAAAA,EAAW;AACd,QAAA,IAAI,CAACoF,oBAAAA,EAAsB;AACzBK,YAAAA,eAAAA,GAAkBvG,aAAAA,CAAc;gBAC9BO,EAAAA,EAAI,oCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;AACF,QAAA,CAAA,MAAO,IAAII,MAAAA,CAAOS,MAAM,KAAK,CAAA,EAAG;YAC9B,IAAIiF,aAAAA,IAAiBF,wBAAwB,CAAA,EAAG;AAC9CG,gBAAAA,eAAAA,GAAkBvG,aAAAA,CAAc;oBAC9BO,EAAAA,EAAI,sCAAA;oBACJC,cAAAA,EACE;AACJ,iBAAA,CAAA;YACF,CAAA,MAAO;AACL+F,gBAAAA,eAAAA,GAAkBvG,aAAAA,CAAc;oBAC9BO,EAAAA,EAAI,uCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AACF,YAAA;AACF,QAAA;AACF,IAAA;AAEA,IAAA,IAAI4C,SAAAA,EAAW;QACb,qBACElD,IAAA,CAAAsG,QAAA,EAAA;;8BACEnG,GAAA,CAACoG,OAAAA,EAAAA;oBAAQC,KAAAA,EAAOH,eAAAA;4CACdlG,GAAA,CAACsG,MAAMvG,IAAI,EAAA;wBAACqC,IAAAA,EAAM2C,oBAAAA;wBAAsB7E,EAAAA,EAAI6E,oBAAAA;gDAC1ClF,IAAA,CAAAsG,QAAA,EAAA;;8CACEnG,GAAA,CAACuG,cAAAA,EAAAA;4DACCvG,GAAA,CAACsG,MAAME,KAAK,EAAA;AAAEZ,wCAAAA,QAAAA,EAAAA;;;8CAEhB5F,GAAA,CAACM,MAAAA,EAAAA;oCACCC,MAAAA,EAAQA,MAAAA;oCACRC,mBAAAA,EAAqBA,mBAAAA;oCACrBC,SAAAA,EAAWA,SAAAA;oCACXgG,IAAAA,EAAK,GAAA;oCACL1F,QAAAA,EAAUR,MAAAA,CAAOS,MAAM,KAAK,CAAA;AAC5B4B,oCAAAA,KAAAA,EAAOpC,mBAAAA,EAAqBN,EAAAA;oCAC5BwG,QAAAA,EAAUvB,YAAAA;AACVlE,oCAAAA,WAAAA,EAAatB,aAAAA,CAAc;wCACzBO,EAAAA,EAAI,uCAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA;;;;;;8BAKRH,GAAA,CAACR,kBAAAA,EAAAA;AACCC,oBAAAA,IAAAA,EAAMkF,cAAAA,KAAmB,UAAA;AACzBjF,oBAAAA,YAAAA,EAAc,IAAMkF,iBAAAA,CAAkB,IAAA;;8BAExC5E,GAAA,CAACK,eAAAA,EAAAA;AACCZ,oBAAAA,IAAAA,EAAMkF,cAAAA,KAAmB,OAAA;AACzBjF,oBAAAA,YAAAA,EAAc,IAAMkF,iBAAAA,CAAkB,IAAA;;;;AAI9C,IAAA;IAEA,qBACE/E,IAAA,CAAAsG,QAAA,EAAA;;AACE,0BAAAtG,IAAA,CAACyG,MAAMvG,IAAI,EAAA;gBACT4G,IAAAA,EAAMT,eAAAA;gBACNjB,KAAAA,EAAQA,KAAAA,IAAS5B,cAAAA,CAAe4B,KAAAA,CAAAA,IAAWzD,SAAAA;gBAC3CY,IAAAA,EAAM2C,oBAAAA;gBACN7E,EAAAA,EAAI6E,oBAAAA;;AAEJ,kCAAA/E,GAAA,CAACsG,MAAME,KAAK,EAAA;AAAEZ,wBAAAA,QAAAA,EAAAA;;kCACd5F,GAAA,CAACM,MAAAA,EAAAA;wBACCC,MAAAA,EAAQA,MAAAA;wBACRC,mBAAAA,EAAqBA,mBAAAA;wBACrBC,SAAAA,EAAWA,SAAAA;wBACXM,QAAAA,EAAUR,MAAAA,CAAOS,MAAM,KAAK,CAAA;AAC5B4B,wBAAAA,KAAAA,EAAOpC,mBAAAA,EAAqBN,EAAAA;wBAC5BwG,QAAAA,EAAUvB,YAAAA;AACVlE,wBAAAA,WAAAA,EAAatB,aAAAA,CAAc;4BACzBO,EAAAA,EAAI,uCAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;;AAEF,kCAAAH,GAAA,CAACsG,MAAMM,IAAI,EAAA,EAAA,CAAA;AACX,kCAAA5G,GAAA,CAACsG,MAAMO,KAAK,EAAA,EAAA;;;0BAEd7G,GAAA,CAACR,kBAAAA,EAAAA;AACCC,gBAAAA,IAAAA,EAAMkF,cAAAA,KAAmB,UAAA;AACzBjF,gBAAAA,YAAAA,EAAc,IAAMkF,iBAAAA,CAAkB,IAAA;;0BAExC5E,GAAA,CAACK,eAAAA,EAAAA;AACCZ,gBAAAA,IAAAA,EAAMkF,cAAAA,KAAmB,OAAA;AACzBjF,gBAAAA,YAAAA,EAAc,IAAMkF,iBAAAA,CAAkB,IAAA;;;;AAI9C;;;;"}
@@ -152,7 +152,7 @@ const EditPage = ()=>{
152
152
  });
153
153
  }
154
154
  }
155
- } catch (error) {
155
+ } catch {
156
156
  toggleNotification({
157
157
  type: 'danger',
158
158
  message: formatMessage({
@@ -282,7 +282,7 @@ const EditPage = ()=>{
282
282
  disabled: !modified || isSubmitting || values.stages.length === 0,
283
283
  // if the confirm dialog is open the loading state is on
284
284
  // the confirm button already
285
- loading: !Boolean(Object.keys(savePrompts).length > 0) && isSubmitting,
285
+ loading: Object.keys(savePrompts).length === 0 && isSubmitting,
286
286
  fullWidth: true,
287
287
  children: formatMessage({
288
288
  id: 'global.save',
@@ -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 { 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 {\n Stage,\n StagePermission,\n Workflow,\n} from '../../../../shared/contracts/review-workflows';\n\nconst havePermissionsChanged = (before?: StagePermission[], after?: StagePermission[]): boolean => {\n if (before?.length !== after?.length) {\n return true;\n }\n return !before?.every((beforePermission) =>\n after?.some((afterPermission) => afterPermission.role === beforePermission.role)\n );\n};\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 fromPermissions: 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 toPermissions: 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 const serverStage = currentWorkflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n const hasUpdatedPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.fromPermissions, stage.fromPermissions);\n const hasUpdatedToPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.toPermissions, stage.toPermissions);\n\n return {\n ...stage,\n fromPermissions: hasUpdatedPermissions ? stage.fromPermissions : undefined,\n toPermissions: hasUpdatedToPermissions ? stage.toPermissions : 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 fullWidth\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.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.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.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.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":["havePermissionsChanged","before","after","length","every","beforePermission","some","afterPermission","role","WORKFLOW_SCHEMA","yup","object","contentTypes","array","of","string","name","max","id","defaultMessage","required","nullable","stages","shape","test","stageName","context","from","value","filter","stage","color","matches","fromPermissions","number","strict","typeError","action","toPermissions","min","stageRequiredToPublish","EditPage","useParams","isCreatingWorkflow","formatMessage","useIntl","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","toggleNotification","useNotification","isLoading","isLoadingWorkflow","meta","workflows","error","update","create","useReviewWorkflows","permissions","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","serverStage","hasUpdatedPermissions","hasUpdatedToPermissions","undefined","isBaseQueryError","setErrors","replace","type","message","handleConfirmDeleteDialog","handleConfirmClose","handleSubmit","isContentTypeReassignment","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","fullWidth","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 {\n Stage,\n StagePermission,\n Workflow,\n} from '../../../../shared/contracts/review-workflows';\n\nconst havePermissionsChanged = (before?: StagePermission[], after?: StagePermission[]): boolean => {\n if (before?.length !== after?.length) {\n return true;\n }\n return !before?.every((beforePermission) =>\n after?.some((afterPermission) => afterPermission.role === beforePermission.role)\n );\n};\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 fromPermissions: 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 toPermissions: 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 const serverStage = currentWorkflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n const hasUpdatedPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.fromPermissions, stage.fromPermissions);\n const hasUpdatedToPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.toPermissions, stage.toPermissions);\n\n return {\n ...stage,\n fromPermissions: hasUpdatedPermissions ? stage.fromPermissions : undefined,\n toPermissions: hasUpdatedToPermissions ? stage.toPermissions : 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 {\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={Object.keys(savePrompts).length === 0 && isSubmitting}\n fullWidth\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.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.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.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.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":["havePermissionsChanged","before","after","length","every","beforePermission","some","afterPermission","role","WORKFLOW_SCHEMA","yup","object","contentTypes","array","of","string","name","max","id","defaultMessage","required","nullable","stages","shape","test","stageName","context","from","value","filter","stage","color","matches","fromPermissions","number","strict","typeError","action","toPermissions","min","stageRequiredToPublish","EditPage","useParams","isCreatingWorkflow","formatMessage","useIntl","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","toggleNotification","useNotification","isLoading","isLoadingWorkflow","meta","workflows","error","update","create","useReviewWorkflows","permissions","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","serverStage","hasUpdatedPermissions","hasUpdatedToPermissions","undefined","isBaseQueryError","setErrors","replace","type","message","handleConfirmDeleteDialog","handleConfirmClose","handleSubmit","isContentTypeReassignment","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","Object","keys","fullWidth","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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"}
@@ -129,7 +129,7 @@ const EditPage = ()=>{
129
129
  });
130
130
  }
131
131
  }
132
- } catch (error) {
132
+ } catch {
133
133
  toggleNotification({
134
134
  type: 'danger',
135
135
  message: formatMessage({
@@ -259,7 +259,7 @@ const EditPage = ()=>{
259
259
  disabled: !modified || isSubmitting || values.stages.length === 0,
260
260
  // if the confirm dialog is open the loading state is on
261
261
  // the confirm button already
262
- loading: !Boolean(Object.keys(savePrompts).length > 0) && isSubmitting,
262
+ loading: Object.keys(savePrompts).length === 0 && isSubmitting,
263
263
  fullWidth: true,
264
264
  children: formatMessage({
265
265
  id: 'global.save',
@@ -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 { 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 {\n Stage,\n StagePermission,\n Workflow,\n} from '../../../../shared/contracts/review-workflows';\n\nconst havePermissionsChanged = (before?: StagePermission[], after?: StagePermission[]): boolean => {\n if (before?.length !== after?.length) {\n return true;\n }\n return !before?.every((beforePermission) =>\n after?.some((afterPermission) => afterPermission.role === beforePermission.role)\n );\n};\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 fromPermissions: 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 toPermissions: 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 const serverStage = currentWorkflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n const hasUpdatedPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.fromPermissions, stage.fromPermissions);\n const hasUpdatedToPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.toPermissions, stage.toPermissions);\n\n return {\n ...stage,\n fromPermissions: hasUpdatedPermissions ? stage.fromPermissions : undefined,\n toPermissions: hasUpdatedToPermissions ? stage.toPermissions : 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 fullWidth\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.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.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.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.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":["havePermissionsChanged","before","after","length","every","beforePermission","some","afterPermission","role","WORKFLOW_SCHEMA","yup","object","contentTypes","array","of","string","name","max","id","defaultMessage","required","nullable","stages","shape","test","stageName","context","from","value","filter","stage","color","matches","fromPermissions","number","strict","typeError","action","toPermissions","min","stageRequiredToPublish","EditPage","useParams","isCreatingWorkflow","formatMessage","useIntl","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","toggleNotification","useNotification","isLoading","isLoadingWorkflow","meta","workflows","error","update","create","useReviewWorkflows","permissions","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","serverStage","hasUpdatedPermissions","hasUpdatedToPermissions","undefined","isBaseQueryError","setErrors","replace","type","message","handleConfirmDeleteDialog","handleConfirmClose","handleSubmit","isContentTypeReassignment","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","fullWidth","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 {\n Stage,\n StagePermission,\n Workflow,\n} from '../../../../shared/contracts/review-workflows';\n\nconst havePermissionsChanged = (before?: StagePermission[], after?: StagePermission[]): boolean => {\n if (before?.length !== after?.length) {\n return true;\n }\n return !before?.every((beforePermission) =>\n after?.some((afterPermission) => afterPermission.role === beforePermission.role)\n );\n};\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 fromPermissions: 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 toPermissions: 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 const serverStage = currentWorkflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n const hasUpdatedPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.fromPermissions, stage.fromPermissions);\n const hasUpdatedToPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.toPermissions, stage.toPermissions);\n\n return {\n ...stage,\n fromPermissions: hasUpdatedPermissions ? stage.fromPermissions : undefined,\n toPermissions: hasUpdatedToPermissions ? stage.toPermissions : 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 {\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={Object.keys(savePrompts).length === 0 && isSubmitting}\n fullWidth\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.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.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.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.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":["havePermissionsChanged","before","after","length","every","beforePermission","some","afterPermission","role","WORKFLOW_SCHEMA","yup","object","contentTypes","array","of","string","name","max","id","defaultMessage","required","nullable","stages","shape","test","stageName","context","from","value","filter","stage","color","matches","fromPermissions","number","strict","typeError","action","toPermissions","min","stageRequiredToPublish","EditPage","useParams","isCreatingWorkflow","formatMessage","useIntl","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","toggleNotification","useNotification","isLoading","isLoadingWorkflow","meta","workflows","error","update","create","useReviewWorkflows","permissions","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","serverStage","hasUpdatedPermissions","hasUpdatedToPermissions","undefined","isBaseQueryError","setErrors","replace","type","message","handleConfirmDeleteDialog","handleConfirmClose","handleSubmit","isContentTypeReassignment","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","Object","keys","fullWidth","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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/review-workflows",
3
- "version": "5.51.1",
3
+ "version": "5.51.2",
4
4
  "description": "Review workflows for your content",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -64,7 +64,7 @@
64
64
  "@reduxjs/toolkit": "1.9.7",
65
65
  "@strapi/design-system": "2.2.3",
66
66
  "@strapi/icons": "2.2.3",
67
- "@strapi/utils": "5.51.1",
67
+ "@strapi/utils": "5.51.2",
68
68
  "date-fns": "2.30.0",
69
69
  "fractional-indexing": "3.2.0",
70
70
  "koa": "2.16.4",
@@ -78,9 +78,9 @@
78
78
  "yup": "0.32.9"
79
79
  },
80
80
  "devDependencies": {
81
- "@strapi/admin": "5.51.1",
82
- "@strapi/content-manager": "5.51.1",
83
- "@strapi/types": "5.51.1",
81
+ "@strapi/admin": "5.51.2",
82
+ "@strapi/content-manager": "5.51.2",
83
+ "@strapi/types": "5.51.2",
84
84
  "@testing-library/dom": "10.4.1",
85
85
  "@testing-library/jest-dom": "6.9.1",
86
86
  "@testing-library/react": "16.3.2",
@@ -91,7 +91,7 @@
91
91
  "msw": "2.13.4",
92
92
  "react": "18.3.1",
93
93
  "react-dom": "18.3.1",
94
- "react-router-dom": "6.30.3",
94
+ "react-router-dom": "6.30.4",
95
95
  "styled-components": "6.4.1"
96
96
  },
97
97
  "peerDependencies": {