@strapi/review-workflows 5.46.0 → 5.46.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/admin/index.js +6 -0
  2. package/dist/admin/index.js.map +1 -1
  3. package/dist/admin/index.mjs +7 -1
  4. package/dist/admin/index.mjs.map +1 -1
  5. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.js +83 -0
  6. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.js.map +1 -0
  7. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.mjs +62 -0
  8. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.mjs.map +1 -0
  9. package/dist/admin/routes/content-manager/model/components/StageFilter.js +70 -0
  10. package/dist/admin/routes/content-manager/model/components/StageFilter.js.map +1 -0
  11. package/dist/admin/routes/content-manager/model/components/StageFilter.mjs +68 -0
  12. package/dist/admin/routes/content-manager/model/components/StageFilter.mjs.map +1 -0
  13. package/dist/admin/routes/content-manager/model/constants.js +63 -9
  14. package/dist/admin/routes/content-manager/model/constants.js.map +1 -1
  15. package/dist/admin/routes/content-manager/model/constants.mjs +63 -10
  16. package/dist/admin/routes/content-manager/model/constants.mjs.map +1 -1
  17. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js +5 -5
  18. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js.map +1 -1
  19. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs +5 -5
  20. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs.map +1 -1
  21. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js +45 -18
  22. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js.map +1 -1
  23. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs +45 -18
  24. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs.map +1 -1
  25. package/dist/admin/routes/settings/components/Stages.js +1 -1
  26. package/dist/admin/routes/settings/components/Stages.js.map +1 -1
  27. package/dist/admin/routes/settings/components/Stages.mjs +1 -1
  28. package/dist/admin/routes/settings/components/Stages.mjs.map +1 -1
  29. package/dist/admin/routes/settings/id.js +4 -4
  30. package/dist/admin/routes/settings/id.js.map +1 -1
  31. package/dist/admin/routes/settings/id.mjs +4 -4
  32. package/dist/admin/routes/settings/id.mjs.map +1 -1
  33. package/dist/admin/routes/settings/index.js +2 -2
  34. package/dist/admin/routes/settings/index.js.map +1 -1
  35. package/dist/admin/routes/settings/index.mjs +2 -2
  36. package/dist/admin/routes/settings/index.mjs.map +1 -1
  37. package/dist/admin/src/utils/cm-hooks.d.ts +42 -2
  38. package/dist/admin/translations/cs.json.js +2 -1
  39. package/dist/admin/translations/cs.json.js.map +1 -1
  40. package/dist/admin/translations/cs.json.mjs +2 -1
  41. package/dist/admin/translations/cs.json.mjs.map +1 -1
  42. package/dist/admin/translations/de.json.js +8 -0
  43. package/dist/admin/translations/de.json.js.map +1 -0
  44. package/dist/admin/translations/de.json.mjs +6 -0
  45. package/dist/admin/translations/de.json.mjs.map +1 -0
  46. package/dist/admin/translations/en.json.js +20 -1
  47. package/dist/admin/translations/en.json.js.map +1 -1
  48. package/dist/admin/translations/en.json.mjs +20 -1
  49. package/dist/admin/translations/en.json.mjs.map +1 -1
  50. package/dist/admin/translations/es.json.js +2 -1
  51. package/dist/admin/translations/es.json.js.map +1 -1
  52. package/dist/admin/translations/es.json.mjs +2 -1
  53. package/dist/admin/translations/es.json.mjs.map +1 -1
  54. package/dist/admin/translations/fr.json.js +8 -0
  55. package/dist/admin/translations/fr.json.js.map +1 -0
  56. package/dist/admin/translations/fr.json.mjs +6 -0
  57. package/dist/admin/translations/fr.json.mjs.map +1 -0
  58. package/dist/admin/translations/nl.json.js +2 -1
  59. package/dist/admin/translations/nl.json.js.map +1 -1
  60. package/dist/admin/translations/nl.json.mjs +2 -1
  61. package/dist/admin/translations/nl.json.mjs.map +1 -1
  62. package/dist/admin/translations/pl.json.js +8 -0
  63. package/dist/admin/translations/pl.json.js.map +1 -0
  64. package/dist/admin/translations/pl.json.mjs +6 -0
  65. package/dist/admin/translations/pl.json.mjs.map +1 -0
  66. package/dist/admin/translations/ru.json.js +8 -0
  67. package/dist/admin/translations/ru.json.js.map +1 -0
  68. package/dist/admin/translations/ru.json.mjs +6 -0
  69. package/dist/admin/translations/ru.json.mjs.map +1 -0
  70. package/dist/admin/translations/uk.json.js +2 -1
  71. package/dist/admin/translations/uk.json.js.map +1 -1
  72. package/dist/admin/translations/uk.json.mjs +2 -1
  73. package/dist/admin/translations/uk.json.mjs.map +1 -1
  74. package/dist/admin/translations/zh-Hans.json.js +8 -0
  75. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  76. package/dist/admin/translations/zh-Hans.json.mjs +6 -0
  77. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  78. package/dist/admin/utils/cm-hooks.js +16 -0
  79. package/dist/admin/utils/cm-hooks.js.map +1 -1
  80. package/dist/admin/utils/cm-hooks.mjs +17 -2
  81. package/dist/admin/utils/cm-hooks.mjs.map +1 -1
  82. package/dist/server/controllers/stages.js +24 -14
  83. package/dist/server/controllers/stages.js.map +1 -1
  84. package/dist/server/controllers/stages.mjs +24 -14
  85. package/dist/server/controllers/stages.mjs.map +1 -1
  86. package/dist/server/src/controllers/stages.d.ts.map +1 -1
  87. package/dist/shared/contracts/review-workflows.d.ts +2 -0
  88. package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
  89. package/package.json +6 -6
@@ -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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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 const { data, isLoading: isLoadingStages } = useGetStagesQuery(\n {\n slug: collectionType,\n model: model,\n // @ts-expect-error – `id` is not correctly typed in the DS.\n id: document?.documentId,\n params,\n },\n {\n skip: !document?.documentId,\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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.stage.label',\n defaultMessage: 'Review stage',\n });\n const reviewStageHint =\n !isLoading &&\n stages.length === 0 &&\n // TODO: Handle errors and hints\n formatMessage({\n id: 'content-manager.reviewWorkflows.stages.no-transition',\n defaultMessage: 'You don’t have the permission to update this stage.',\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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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","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","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 (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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"}
@@ -23,13 +23,13 @@ import { STAGE_ATTRIBUTE_NAME } from './constants.mjs';
23
23
  children: [
24
24
  /*#__PURE__*/ jsx(LimitsModal.Title, {
25
25
  children: formatMessage({
26
- id: 'content-manager.reviewWorkflows.workflows.limit.title',
26
+ id: 'review-workflows.workflows.limit.title',
27
27
  defaultMessage: 'You’ve reached the limit of workflows in your plan'
28
28
  })
29
29
  }),
30
30
  /*#__PURE__*/ jsx(LimitsModal.Body, {
31
31
  children: formatMessage({
32
- id: 'content-manager.reviewWorkflows.workflows.limit.body',
32
+ id: 'review-workflows.workflows.limit.body',
33
33
  defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.'
34
34
  })
35
35
  })
@@ -44,13 +44,13 @@ const StageLimitModal = ({ open, onOpenChange })=>{
44
44
  children: [
45
45
  /*#__PURE__*/ jsx(LimitsModal.Title, {
46
46
  children: formatMessage({
47
- id: 'content-manager.reviewWorkflows.stages.limit.title',
47
+ id: 'review-workflows.stages.limit.title',
48
48
  defaultMessage: 'You have reached the limit of stages for this workflow in your plan'
49
49
  })
50
50
  }),
51
51
  /*#__PURE__*/ jsx(LimitsModal.Body, {
52
52
  children: formatMessage({
53
- id: 'content-manager.reviewWorkflows.stages.limit.body',
53
+ id: 'review-workflows.stages.limit.body',
54
54
  defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.'
55
55
  })
56
56
  })
@@ -65,7 +65,7 @@ const StageLimitModal = ({ open, onOpenChange })=>{
65
65
  return /*#__PURE__*/ jsx(SingleSelect, {
66
66
  disabled: stages.length === 0,
67
67
  placeholder: formatMessage({
68
- id: 'content-manager.reviewWorkflows.assignee.placeholder',
68
+ id: 'review-workflows.assignee.placeholder',
69
69
  defaultMessage: 'Select…'
70
70
  }),
71
71
  startIcon: activeWorkflowStage && /*#__PURE__*/ jsx(Flex, {
@@ -138,14 +138,17 @@ const StageSelect = ({ isCompact })=>{
138
138
  }, {
139
139
  skip: !id && collectionType !== 'single-types'
140
140
  });
141
+ // Fall back to the URL `id` so the stages endpoint is still queried when the
142
+ // selected locale has no entry yet. The backend returns workflow metadata
143
+ // even when the entity for `documentId + locale` does not exist.
144
+ const stagesDocumentId = document?.documentId ?? id;
141
145
  const { data, isLoading: isLoadingStages } = useGetStagesQuery({
142
146
  slug: collectionType,
143
147
  model: model,
144
- // @ts-expect-error – `id` is not correctly typed in the DS.
145
- id: document?.documentId,
148
+ id: stagesDocumentId,
146
149
  params
147
150
  }, {
148
- skip: !document?.documentId
151
+ skip: !stagesDocumentId || stagesDocumentId === 'create'
149
152
  });
150
153
  const { meta, stages = [] } = data ?? {};
151
154
  const { getFeature } = useLicenseLimits();
@@ -190,7 +193,7 @@ const StageSelect = ({ isCompact })=>{
190
193
  toggleNotification({
191
194
  type: 'success',
192
195
  message: formatMessage({
193
- id: 'content-manager.reviewWorkflows.stage.notification.saved',
196
+ id: 'review-workflows.stage.notification.saved',
194
197
  defaultMessage: 'Review stage updated'
195
198
  })
196
199
  });
@@ -207,7 +210,7 @@ const StageSelect = ({ isCompact })=>{
207
210
  toggleNotification({
208
211
  type: 'danger',
209
212
  message: formatMessage({
210
- id: 'content-manager.reviewWorkflows.stage.notification.error',
213
+ id: 'review-workflows.stage.notification.error',
211
214
  defaultMessage: 'An error occurred while updating the review stage'
212
215
  })
213
216
  });
@@ -215,14 +218,38 @@ const StageSelect = ({ isCompact })=>{
215
218
  };
216
219
  const isLoading = isLoadingStages || isLoadingDocument;
217
220
  const reviewStageLabel = formatMessage({
218
- id: 'content-manager.reviewWorkflows.stage.label',
221
+ id: 'review-workflows.stage.label',
219
222
  defaultMessage: 'Review stage'
220
223
  });
221
- const reviewStageHint = !isLoading && stages.length === 0 && // TODO: Handle errors and hints
222
- formatMessage({
223
- id: 'content-manager.reviewWorkflows.stages.no-transition',
224
- defaultMessage: 'You don’t have the permission to update this stage.'
225
- });
224
+ // The Edit View renders the Review Workflows panel even when the user
225
+ // switches to a locale that has not been saved yet. In that case the
226
+ // document for the selected locale does not exist and we cannot transition
227
+ // any stage until the entry is first saved, so surface a dedicated hint
228
+ // rather than the misleading "no permission" message.
229
+ const hasDocumentForLocale = Boolean(document?.documentId);
230
+ const totalWorkflowStages = meta?.stageCount ?? 0;
231
+ const canTransition = meta?.canTransition ?? true;
232
+ let reviewStageHint;
233
+ if (!isLoading) {
234
+ if (!hasDocumentForLocale) {
235
+ reviewStageHint = formatMessage({
236
+ id: 'review-workflows.stages.save-first',
237
+ defaultMessage: 'Save this entry to assign a workflow stage.'
238
+ });
239
+ } else if (stages.length === 0) {
240
+ if (canTransition && totalWorkflowStages === 1) {
241
+ reviewStageHint = formatMessage({
242
+ id: 'review-workflows.stages.single-stage',
243
+ defaultMessage: 'This workflow only has one stage. Add more stages to be able to update it here.'
244
+ });
245
+ } else {
246
+ reviewStageHint = formatMessage({
247
+ id: 'review-workflows.stages.no-transition',
248
+ defaultMessage: 'You don’t have the permission to update this stage.'
249
+ });
250
+ }
251
+ }
252
+ }
226
253
  if (isCompact) {
227
254
  return /*#__PURE__*/ jsxs(Fragment, {
228
255
  children: [
@@ -247,7 +274,7 @@ const StageSelect = ({ isCompact })=>{
247
274
  value: activeWorkflowStage?.id,
248
275
  onChange: handleChange,
249
276
  placeholder: formatMessage({
250
- id: 'content-manager.reviewWorkflows.assignee.placeholder',
277
+ id: 'review-workflows.assignee.placeholder',
251
278
  defaultMessage: 'Select…'
252
279
  })
253
280
  })
@@ -285,7 +312,7 @@ const StageSelect = ({ isCompact })=>{
285
312
  value: activeWorkflowStage?.id,
286
313
  onChange: handleChange,
287
314
  placeholder: formatMessage({
288
- id: 'content-manager.reviewWorkflows.assignee.placeholder',
315
+ id: 'review-workflows.assignee.placeholder',
289
316
  defaultMessage: 'Select…'
290
317
  })
291
318
  }),
@@ -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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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 const { data, isLoading: isLoadingStages } = useGetStagesQuery(\n {\n slug: collectionType,\n model: model,\n // @ts-expect-error – `id` is not correctly typed in the DS.\n id: document?.documentId,\n params,\n },\n {\n skip: !document?.documentId,\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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.stage.label',\n defaultMessage: 'Review stage',\n });\n const reviewStageHint =\n !isLoading &&\n stages.length === 0 &&\n // TODO: Handle errors and hints\n formatMessage({\n id: 'content-manager.reviewWorkflows.stages.no-transition',\n defaultMessage: 'You don’t have the permission to update this stage.',\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: 'content-manager.reviewWorkflows.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: 'content-manager.reviewWorkflows.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","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","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 (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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"}
@@ -293,7 +293,7 @@ const Stage = ({ index, canDelete = false, canReorder = false, canUpdate = false
293
293
  {
294
294
  disabled: !canUpdate,
295
295
  label: formatMessage({
296
- id: 'content-manager.reviewWorkflows.stage.color',
296
+ id: 'review-workflows.stage.color',
297
297
  defaultMessage: 'Color'
298
298
  }),
299
299
  name: `stages.${index}.color`,
@@ -1 +1 @@
1
- {"version":3,"file":"Stages.js","sources":["../../../../../admin/src/routes/settings/components/Stages.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useField,\n useForm,\n useTracking,\n ConfirmDialog,\n useNotification,\n InputRenderer as AdminInputRenderer,\n InputProps,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n MultiSelectOption,\n Accordion,\n Grid,\n IconButton,\n MultiSelect,\n MultiSelectGroup,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n VisuallyHidden,\n useComposedRefs,\n Menu,\n Field,\n Dialog,\n} from '@strapi/design-system';\nimport { Duplicate, Drag, More, EyeStriked } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Stage as IStage, StagePermission } from '../../../../../shared/contracts/review-workflows';\nimport { useGetAdminRolesQuery } from '../../../services/admin';\nimport { AVAILABLE_COLORS, getStageColorByHex } from '../../../utils/colors';\nimport { DRAG_DROP_TYPES } from '../constants';\nimport { useDragAndDrop } from '../hooks/useDragAndDrop';\n\nimport { AddStage } from './AddStage';\n\ninterface WorkflowStage\n extends Pick<IStage, 'id' | 'name' | 'fromPermissions' | 'toPermissions' | 'color'> {\n __temp_key__: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Stages\n * -----------------------------------------------------------------------------------------------*/\ninterface StagesProps {\n canDelete?: boolean;\n canUpdate?: boolean;\n isCreating?: boolean;\n}\n\nconst Stages = ({ canDelete = true, canUpdate = true, isCreating }: StagesProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const addFieldRow = useForm('Stages', (state) => state.addFieldRow);\n const { value: stages = [] } = useField<WorkflowStage[]>('stages');\n\n return (\n <Flex direction=\"column\" gap={6} width=\"100%\">\n <Box position=\"relative\" width=\"100%\">\n <Background\n background=\"neutral200\"\n height=\"100%\"\n left=\"50%\"\n position=\"absolute\"\n top=\"0\"\n width={2}\n />\n\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\" tag=\"ol\">\n {stages.map((stage, index) => {\n return (\n <Box key={stage.__temp_key__} tag=\"li\">\n <Stage\n index={index}\n canDelete={stages.length > 1 && canDelete}\n canReorder={stages.length > 1}\n canUpdate={canUpdate}\n stagesCount={stages.length}\n defaultOpen={!stage.id}\n {...stage}\n />\n </Box>\n );\n })}\n </Flex>\n </Box>\n\n {canUpdate && (\n <AddStage\n type=\"button\"\n onClick={() => {\n addFieldRow('stages', { name: '' });\n trackUsage('willCreateStage');\n }}\n >\n {formatMessage({\n id: 'Settings.review-workflows.stage.add',\n defaultMessage: 'Add new stage',\n })}\n </AddStage>\n )}\n </Flex>\n );\n};\n\nconst Background = styled(Box)`\n transform: translateX(-50%);\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Stage\n * -----------------------------------------------------------------------------------------------*/\ninterface StageProps extends WorkflowStage {\n canDelete?: boolean;\n canReorder?: boolean;\n canUpdate?: boolean;\n index: number;\n stagesCount: number;\n defaultOpen?: boolean;\n}\n\nconst Stage = ({\n index,\n canDelete = false,\n canReorder = false,\n canUpdate = false,\n stagesCount,\n name,\n fromPermissions,\n toPermissions,\n color,\n defaultOpen,\n}: StageProps) => {\n const [liveText, setLiveText] = React.useState<string>();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const stageErrors = useForm('Stages', (state) => state.errors.stages as object[]);\n const error = stageErrors?.[index];\n const addFieldRow = useForm('Stage', (state) => state.addFieldRow);\n const moveFieldRow = useForm('Stage', (state) => state.moveFieldRow);\n const removeFieldRow = useForm('Stage', (state) => state.removeFieldRow);\n\n const getItemPos = (index: number) => `${index + 1} of ${stagesCount}`;\n\n const handleGrabStage = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.grab-item',\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: name,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropStage = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.drop-item',\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: name,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleCancelDragStage = () => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.cancel-item',\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: name,\n }\n )\n );\n };\n\n const handleMoveStage = (newIndex: number, oldIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.reorder',\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: name,\n position: getItemPos(newIndex),\n }\n )\n );\n\n moveFieldRow('stages', oldIndex, newIndex);\n };\n\n const [{ handlerId, isDragging, handleKeyDown }, stageRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(canReorder, {\n index,\n item: {\n index,\n name,\n },\n onGrabItem: handleGrabStage,\n onDropItem: handleDropStage,\n onMoveItem: handleMoveStage,\n onCancel: handleCancelDragStage,\n type: DRAG_DROP_TYPES.STAGE,\n });\n\n // @ts-expect-error – the stageRef is incorrectly typed.\n const composedRef = useComposedRefs<HTMLDivElement>(stageRef, dropRef);\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const handleCloneClick = () => {\n addFieldRow('stages', { name, color, fromPermissions, toPermissions });\n };\n\n const id = React.useId();\n\n return (\n <Box ref={composedRef} shadow=\"tableShadow\">\n {liveText && <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>}\n\n {isDragging ? (\n <Box\n background=\"primary100\"\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n display=\"block\"\n hasRadius\n padding={6}\n />\n ) : (\n <AccordionRoot\n onValueChange={(value) => {\n if (value) {\n trackUsage('willEditStage');\n }\n }}\n defaultValue={defaultOpen ? id : undefined}\n $error={Object.values(error ?? {}).length > 0}\n >\n <Accordion.Item value={id}>\n <Accordion.Header>\n <Accordion.Trigger>{name}</Accordion.Trigger>\n <Accordion.Actions>\n {canDelete || canUpdate ? (\n <>\n <Menu.Root>\n <ContextMenuTrigger size=\"S\" endIcon={null} paddingLeft={2} paddingRight={2}>\n <More aria-hidden focusable={false} />\n <VisuallyHidden tag=\"span\">\n {formatMessage({\n id: '[tbdb].components.DynamicZone.more-actions',\n defaultMessage: 'More actions',\n })}\n </VisuallyHidden>\n </ContextMenuTrigger>\n {/* z-index needs to be as big as the one defined for the wrapper in Stages, otherwise the menu\n * disappears behind the accordion\n */}\n <Menu.Content popoverPlacement=\"bottom-end\" zIndex={2}>\n <Menu.SubRoot>\n {canUpdate && (\n <Menu.Item onClick={handleCloneClick}>\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Duplicate stage',\n })}\n </Menu.Item>\n )}\n\n {canDelete && (\n <Menu.Item\n onClick={() => removeFieldRow('stages', index)}\n variant=\"danger\"\n >\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Delete',\n })}\n </Menu.Item>\n )}\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n\n {canUpdate && (\n <IconButton\n background=\"transparent\"\n hasRadius\n variant=\"ghost\"\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.drag',\n defaultMessage: 'Drag',\n })}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n </>\n ) : null}\n </Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <Grid.Root gap={4} padding={6}>\n {[\n {\n disabled: !canUpdate,\n label: formatMessage({\n id: 'Settings.review-workflows.stage.name.label',\n defaultMessage: 'Stage name',\n }),\n name: `stages.${index}.name`,\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n disabled: !canUpdate,\n label: formatMessage({\n id: 'content-manager.reviewWorkflows.stage.color',\n defaultMessage: 'Color',\n }),\n name: `stages.${index}.color`,\n required: true,\n size: 6,\n type: 'color' as const,\n },\n {\n disabled: !canUpdate,\n label: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.label',\n defaultMessage: 'Roles that can change from this stage',\n }),\n name: `stages.${index}.fromPermissions`,\n placeholder: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.placeholder',\n defaultMessage: 'Select a role',\n }),\n required: true,\n size: 6,\n type: 'permissions' as const,\n },\n {\n disabled: !canUpdate,\n label: formatMessage({\n id: 'Settings.review-workflows.stage.toPermissions.label',\n defaultMessage: 'Roles that can move content to this stage',\n }),\n name: `stages.${index}.toPermissions`,\n placeholder: formatMessage({\n id: 'Settings.review-workflows.stage.toPermissions.placeholder',\n defaultMessage: 'Select a role',\n }),\n required: false,\n size: 6,\n type: 'permissions' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Accordion.Content>\n </Accordion.Item>\n </AccordionRoot>\n )}\n </Box>\n );\n};\n\nconst AccordionRoot = styled(Accordion.Root)<{ $error?: boolean }>`\n border: 1px solid\n ${({ theme, $error }) => ($error ? theme.colors.danger600 : theme.colors.neutral200)};\n`;\n\n// Removing the font-size from the child-span aligns the\n// more icon vertically\nconst ContextMenuTrigger = styled(Menu.Trigger)`\n :hover,\n :focus {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n > span {\n font-size: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * InputRenderer\n * -----------------------------------------------------------------------------------------------*/\n\ntype InputRendererProps = InputProps | ColorSelectorProps | PermissionsFieldProps;\n\nconst InputRenderer = (props: InputRendererProps) => {\n switch (props.type) {\n case 'color':\n return <ColorSelector {...props} />;\n case 'permissions':\n return <PermissionsField {...props} />;\n default:\n return <AdminInputRenderer {...props} />;\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ColorSelector\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ColorSelectorProps\n extends Omit<Extract<InputProps, { type: 'enumeration' }>, 'type' | 'options'> {\n type: 'color';\n}\n\nconst ColorSelector = ({ disabled, label, name, required }: ColorSelectorProps) => {\n const { formatMessage } = useIntl();\n const { value, error, onChange } = useField<string>(name);\n\n const colorOptions = AVAILABLE_COLORS.map(({ hex, name }) => ({\n value: hex,\n label: formatMessage(\n {\n id: 'Settings.review-workflows.stage.color.name',\n defaultMessage: '{name}',\n },\n { name }\n ),\n color: hex,\n }));\n\n const { themeColorName } = getStageColorByHex(value) ?? {};\n\n return (\n <Field.Root error={error} name={name} required={required}>\n <Field.Label>{label}</Field.Label>\n <SingleSelect\n disabled={disabled}\n onChange={(v) => {\n onChange(name, v.toString());\n }}\n value={value?.toUpperCase()}\n startIcon={\n <Flex\n tag=\"span\"\n height={2}\n background={value}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : 'transparent'}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n >\n {colorOptions.map(({ value, label, color }) => {\n const { themeColorName } = getStageColorByHex(color) || {};\n\n return (\n <SingleSelectOption\n value={value}\n key={value}\n startIcon={\n <Flex\n tag=\"span\"\n height={2}\n background={color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : 'transparent'}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n >\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n <Field.Error />\n </Field.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PermissionsField\n * -----------------------------------------------------------------------------------------------*/\ninterface PermissionsFieldProps\n extends Omit<Extract<InputProps, { type: 'enumeration' }>, 'type' | 'options'> {\n type: 'permissions';\n}\n\nconst PermissionsField = ({\n label,\n disabled,\n name,\n placeholder,\n required,\n}: PermissionsFieldProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const [isApplyAllConfirmationOpen, setIsApplyAllConfirmationOpen] = React.useState(false);\n const { value = [], error, onChange } = useField<StagePermission[]>(name);\n const allStages = useForm<WorkflowStage[]>('PermissionsField', (state) => state.values.stages);\n const onFormValueChange = useForm('PermissionsField', (state) => state.onChange);\n\n // Derive the field key (e.g. \"fromPermissions\" or \"toPermissions\") from the full field name\n const fieldKey = name.split('.').pop() as keyof WorkflowStage;\n const rolesErrorCount = React.useRef(0);\n\n const { data: roles = [], isLoading, error: getRolesError } = useGetAdminRolesQuery();\n\n // Super admins always have permissions to do everything and therefore\n // there is no point for this role to show up in the role combobox\n const filteredRoles = roles?.filter((role) => role.code !== 'strapi-super-admin') ?? [];\n\n React.useEffect(() => {\n if (\n !isLoading &&\n getRolesError &&\n 'status' in getRolesError &&\n getRolesError.status == 403 &&\n rolesErrorCount.current === 0\n ) {\n rolesErrorCount.current = 1;\n\n toggleNotification({\n blockTransition: true,\n type: 'danger',\n message: formatMessage({\n id: 'review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles. Contact your administrator.',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification, getRolesError]);\n\n if (!isLoading && filteredRoles.length === 0) {\n return (\n <Field.Root\n name={name}\n hint={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n })}\n required={required}\n >\n <Field.Label>{label}</Field.Label>\n <TextInput\n disabled\n placeholder={formatMessage({\n id: 'components.NotAllowedInput.text',\n defaultMessage: 'No permissions to see this field',\n })}\n startAction={<EyeStriked fill=\"neutral600\" />}\n type=\"text\"\n value=\"\"\n />\n <Field.Hint />\n </Field.Root>\n );\n }\n\n return (\n <>\n <Flex alignItems=\"flex-end\" gap={3}>\n <PermissionWrapper grow={1}>\n <Field.Root error={error} name={name} required>\n <Field.Label>{label}</Field.Label>\n\n <MultiSelect\n disabled={disabled}\n onChange={(values) => {\n // Because the select components expects strings for values, but\n // the yup schema validates we are sending full permission objects to the API,\n // we must coerce the string value back to an object\n const permissions = values.map((value) => ({\n role: parseInt(value, 10),\n action: 'admin::review-workflows.stage.transition',\n }));\n\n onChange(name, permissions);\n }}\n placeholder={placeholder}\n // The Select component expects strings for values\n value={value.map((permission) => `${permission.role}`)}\n withTags\n >\n <MultiSelectGroup\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.allRoles.label',\n defaultMessage: 'All roles',\n })}\n values={filteredRoles.map((r) => `${r.id}`)}\n >\n {filteredRoles.map((role) => {\n return (\n <NestedOption key={role.id} value={`${role.id}`}>\n {role.name}\n </NestedOption>\n );\n })}\n </MultiSelectGroup>\n </MultiSelect>\n <Field.Error />\n </Field.Root>\n </PermissionWrapper>\n <Dialog.Root open={isApplyAllConfirmationOpen} onOpenChange={setIsApplyAllConfirmationOpen}>\n <Dialog.Trigger>\n <IconButton\n disabled={disabled}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.apply.label',\n defaultMessage: 'Apply to all stages',\n })}\n size=\"L\"\n >\n <Duplicate />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog\n onConfirm={() => {\n onFormValueChange(\n 'stages',\n allStages.map((stage) => ({\n ...stage,\n [fieldKey]: value,\n }))\n );\n\n setIsApplyAllConfirmationOpen(false);\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'Settings.review-workflows.page.edit.confirm.stages.permissions.copy.success',\n defaultMessage: 'Applied roles to all other stages of the workflow',\n }),\n });\n }}\n variant=\"default\"\n >\n {formatMessage({\n id: 'Settings.review-workflows.page.edit.confirm.stages.permissions.copy',\n defaultMessage:\n 'Roles that can change that stage will be applied to all the other stages.',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </Flex>\n </>\n );\n};\n\nconst NestedOption = styled(MultiSelectOption)`\n padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\n// Grow the size of the permission Select\nconst PermissionWrapper = styled(Flex)`\n > * {\n flex-grow: 1;\n }\n`;\n\nexport { Stages };\nexport type { StagesProps, WorkflowStage };\n"],"names":["Stages","canDelete","canUpdate","isCreating","formatMessage","useIntl","trackUsage","useTracking","addFieldRow","useForm","state","value","stages","useField","_jsxs","Flex","direction","gap","width","Box","position","_jsx","Background","background","height","left","top","alignItems","tag","map","stage","index","Stage","length","canReorder","stagesCount","defaultOpen","id","__temp_key__","AddStage","type","onClick","name","defaultMessage","styled","fromPermissions","toPermissions","color","liveText","setLiveText","React","useState","stageErrors","errors","error","moveFieldRow","removeFieldRow","getItemPos","handleGrabStage","item","handleDropStage","handleCancelDragStage","handleMoveStage","newIndex","oldIndex","handlerId","isDragging","handleKeyDown","stageRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","onGrabItem","onDropItem","onMoveItem","onCancel","DRAG_DROP_TYPES","STAGE","composedRef","useComposedRefs","useEffect","getEmptyImage","captureDraggingState","handleCloneClick","useId","ref","shadow","VisuallyHidden","aria-live","borderStyle","borderColor","borderWidth","display","hasRadius","padding","AccordionRoot","onValueChange","defaultValue","undefined","$error","Object","values","Accordion","Item","Header","Trigger","Actions","_Fragment","Menu","Root","ContextMenuTrigger","size","endIcon","paddingLeft","paddingRight","More","aria-hidden","focusable","Content","popoverPlacement","zIndex","SubRoot","variant","IconButton","data-handler-id","label","e","stopPropagation","onKeyDown","Drag","Grid","disabled","required","placeholder","field","col","xs","InputRenderer","theme","colors","danger600","neutral200","neutral100","props","ColorSelector","PermissionsField","AdminInputRenderer","onChange","colorOptions","AVAILABLE_COLORS","hex","themeColorName","getStageColorByHex","Field","Label","SingleSelect","v","toString","toUpperCase","startIcon","shrink","SingleSelectOption","Error","toggleNotification","useNotification","isApplyAllConfirmationOpen","setIsApplyAllConfirmationOpen","allStages","onFormValueChange","fieldKey","split","pop","rolesErrorCount","useRef","data","roles","isLoading","getRolesError","useGetAdminRolesQuery","filteredRoles","filter","role","code","status","current","blockTransition","message","hint","TextInput","startAction","EyeStriked","fill","Hint","PermissionWrapper","grow","MultiSelect","permissions","parseInt","action","permission","withTags","MultiSelectGroup","r","NestedOption","Dialog","open","onOpenChange","Duplicate","ConfirmDialog","onConfirm","MultiSelectOption","spaces"],"mappings":"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"}
1
+ {"version":3,"file":"Stages.js","sources":["../../../../../admin/src/routes/settings/components/Stages.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useField,\n useForm,\n useTracking,\n ConfirmDialog,\n useNotification,\n InputRenderer as AdminInputRenderer,\n InputProps,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n MultiSelectOption,\n Accordion,\n Grid,\n IconButton,\n MultiSelect,\n MultiSelectGroup,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n VisuallyHidden,\n useComposedRefs,\n Menu,\n Field,\n Dialog,\n} from '@strapi/design-system';\nimport { Duplicate, Drag, More, EyeStriked } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Stage as IStage, StagePermission } from '../../../../../shared/contracts/review-workflows';\nimport { useGetAdminRolesQuery } from '../../../services/admin';\nimport { AVAILABLE_COLORS, getStageColorByHex } from '../../../utils/colors';\nimport { DRAG_DROP_TYPES } from '../constants';\nimport { useDragAndDrop } from '../hooks/useDragAndDrop';\n\nimport { AddStage } from './AddStage';\n\ninterface WorkflowStage\n extends Pick<IStage, 'id' | 'name' | 'fromPermissions' | 'toPermissions' | 'color'> {\n __temp_key__: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Stages\n * -----------------------------------------------------------------------------------------------*/\ninterface StagesProps {\n canDelete?: boolean;\n canUpdate?: boolean;\n isCreating?: boolean;\n}\n\nconst Stages = ({ canDelete = true, canUpdate = true, isCreating }: StagesProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const addFieldRow = useForm('Stages', (state) => state.addFieldRow);\n const { value: stages = [] } = useField<WorkflowStage[]>('stages');\n\n return (\n <Flex direction=\"column\" gap={6} width=\"100%\">\n <Box position=\"relative\" width=\"100%\">\n <Background\n background=\"neutral200\"\n height=\"100%\"\n left=\"50%\"\n position=\"absolute\"\n top=\"0\"\n width={2}\n />\n\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\" tag=\"ol\">\n {stages.map((stage, index) => {\n return (\n <Box key={stage.__temp_key__} tag=\"li\">\n <Stage\n index={index}\n canDelete={stages.length > 1 && canDelete}\n canReorder={stages.length > 1}\n canUpdate={canUpdate}\n stagesCount={stages.length}\n defaultOpen={!stage.id}\n {...stage}\n />\n </Box>\n );\n })}\n </Flex>\n </Box>\n\n {canUpdate && (\n <AddStage\n type=\"button\"\n onClick={() => {\n addFieldRow('stages', { name: '' });\n trackUsage('willCreateStage');\n }}\n >\n {formatMessage({\n id: 'Settings.review-workflows.stage.add',\n defaultMessage: 'Add new stage',\n })}\n </AddStage>\n )}\n </Flex>\n );\n};\n\nconst Background = styled(Box)`\n transform: translateX(-50%);\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Stage\n * -----------------------------------------------------------------------------------------------*/\ninterface StageProps extends WorkflowStage {\n canDelete?: boolean;\n canReorder?: boolean;\n canUpdate?: boolean;\n index: number;\n stagesCount: number;\n defaultOpen?: boolean;\n}\n\nconst Stage = ({\n index,\n canDelete = false,\n canReorder = false,\n canUpdate = false,\n stagesCount,\n name,\n fromPermissions,\n toPermissions,\n color,\n defaultOpen,\n}: StageProps) => {\n const [liveText, setLiveText] = React.useState<string>();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const stageErrors = useForm('Stages', (state) => state.errors.stages as object[]);\n const error = stageErrors?.[index];\n const addFieldRow = useForm('Stage', (state) => state.addFieldRow);\n const moveFieldRow = useForm('Stage', (state) => state.moveFieldRow);\n const removeFieldRow = useForm('Stage', (state) => state.removeFieldRow);\n\n const getItemPos = (index: number) => `${index + 1} of ${stagesCount}`;\n\n const handleGrabStage = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.grab-item',\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: name,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropStage = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.drop-item',\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: name,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleCancelDragStage = () => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.cancel-item',\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: name,\n }\n )\n );\n };\n\n const handleMoveStage = (newIndex: number, oldIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.reorder',\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: name,\n position: getItemPos(newIndex),\n }\n )\n );\n\n moveFieldRow('stages', oldIndex, newIndex);\n };\n\n const [{ handlerId, isDragging, handleKeyDown }, stageRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(canReorder, {\n index,\n item: {\n index,\n name,\n },\n onGrabItem: handleGrabStage,\n onDropItem: handleDropStage,\n onMoveItem: handleMoveStage,\n onCancel: handleCancelDragStage,\n type: DRAG_DROP_TYPES.STAGE,\n });\n\n // @ts-expect-error – the stageRef is incorrectly typed.\n const composedRef = useComposedRefs<HTMLDivElement>(stageRef, dropRef);\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const handleCloneClick = () => {\n addFieldRow('stages', { name, color, fromPermissions, toPermissions });\n };\n\n const id = React.useId();\n\n return (\n <Box ref={composedRef} shadow=\"tableShadow\">\n {liveText && <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>}\n\n {isDragging ? (\n <Box\n background=\"primary100\"\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n display=\"block\"\n hasRadius\n padding={6}\n />\n ) : (\n <AccordionRoot\n onValueChange={(value) => {\n if (value) {\n trackUsage('willEditStage');\n }\n }}\n defaultValue={defaultOpen ? id : undefined}\n $error={Object.values(error ?? {}).length > 0}\n >\n <Accordion.Item value={id}>\n <Accordion.Header>\n <Accordion.Trigger>{name}</Accordion.Trigger>\n <Accordion.Actions>\n {canDelete || canUpdate ? (\n <>\n <Menu.Root>\n <ContextMenuTrigger size=\"S\" endIcon={null} paddingLeft={2} paddingRight={2}>\n <More aria-hidden focusable={false} />\n <VisuallyHidden tag=\"span\">\n {formatMessage({\n id: '[tbdb].components.DynamicZone.more-actions',\n defaultMessage: 'More actions',\n })}\n </VisuallyHidden>\n </ContextMenuTrigger>\n {/* z-index needs to be as big as the one defined for the wrapper in Stages, otherwise the menu\n * disappears behind the accordion\n */}\n <Menu.Content popoverPlacement=\"bottom-end\" zIndex={2}>\n <Menu.SubRoot>\n {canUpdate && (\n <Menu.Item onClick={handleCloneClick}>\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Duplicate stage',\n })}\n </Menu.Item>\n )}\n\n {canDelete && (\n <Menu.Item\n onClick={() => removeFieldRow('stages', index)}\n variant=\"danger\"\n >\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Delete',\n })}\n </Menu.Item>\n )}\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n\n {canUpdate && (\n <IconButton\n background=\"transparent\"\n hasRadius\n variant=\"ghost\"\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.drag',\n defaultMessage: 'Drag',\n })}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n </>\n ) : null}\n </Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <Grid.Root gap={4} padding={6}>\n {[\n {\n disabled: !canUpdate,\n label: formatMessage({\n id: 'Settings.review-workflows.stage.name.label',\n defaultMessage: 'Stage name',\n }),\n name: `stages.${index}.name`,\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n disabled: !canUpdate,\n label: formatMessage({\n id: 'review-workflows.stage.color',\n defaultMessage: 'Color',\n }),\n name: `stages.${index}.color`,\n required: true,\n size: 6,\n type: 'color' as const,\n },\n {\n disabled: !canUpdate,\n label: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.label',\n defaultMessage: 'Roles that can change from this stage',\n }),\n name: `stages.${index}.fromPermissions`,\n placeholder: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.placeholder',\n defaultMessage: 'Select a role',\n }),\n required: true,\n size: 6,\n type: 'permissions' as const,\n },\n {\n disabled: !canUpdate,\n label: formatMessage({\n id: 'Settings.review-workflows.stage.toPermissions.label',\n defaultMessage: 'Roles that can move content to this stage',\n }),\n name: `stages.${index}.toPermissions`,\n placeholder: formatMessage({\n id: 'Settings.review-workflows.stage.toPermissions.placeholder',\n defaultMessage: 'Select a role',\n }),\n required: false,\n size: 6,\n type: 'permissions' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Accordion.Content>\n </Accordion.Item>\n </AccordionRoot>\n )}\n </Box>\n );\n};\n\nconst AccordionRoot = styled(Accordion.Root)<{ $error?: boolean }>`\n border: 1px solid\n ${({ theme, $error }) => ($error ? theme.colors.danger600 : theme.colors.neutral200)};\n`;\n\n// Removing the font-size from the child-span aligns the\n// more icon vertically\nconst ContextMenuTrigger = styled(Menu.Trigger)`\n :hover,\n :focus {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n > span {\n font-size: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * InputRenderer\n * -----------------------------------------------------------------------------------------------*/\n\ntype InputRendererProps = InputProps | ColorSelectorProps | PermissionsFieldProps;\n\nconst InputRenderer = (props: InputRendererProps) => {\n switch (props.type) {\n case 'color':\n return <ColorSelector {...props} />;\n case 'permissions':\n return <PermissionsField {...props} />;\n default:\n return <AdminInputRenderer {...props} />;\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ColorSelector\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ColorSelectorProps\n extends Omit<Extract<InputProps, { type: 'enumeration' }>, 'type' | 'options'> {\n type: 'color';\n}\n\nconst ColorSelector = ({ disabled, label, name, required }: ColorSelectorProps) => {\n const { formatMessage } = useIntl();\n const { value, error, onChange } = useField<string>(name);\n\n const colorOptions = AVAILABLE_COLORS.map(({ hex, name }) => ({\n value: hex,\n label: formatMessage(\n {\n id: 'Settings.review-workflows.stage.color.name',\n defaultMessage: '{name}',\n },\n { name }\n ),\n color: hex,\n }));\n\n const { themeColorName } = getStageColorByHex(value) ?? {};\n\n return (\n <Field.Root error={error} name={name} required={required}>\n <Field.Label>{label}</Field.Label>\n <SingleSelect\n disabled={disabled}\n onChange={(v) => {\n onChange(name, v.toString());\n }}\n value={value?.toUpperCase()}\n startIcon={\n <Flex\n tag=\"span\"\n height={2}\n background={value}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : 'transparent'}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n >\n {colorOptions.map(({ value, label, color }) => {\n const { themeColorName } = getStageColorByHex(color) || {};\n\n return (\n <SingleSelectOption\n value={value}\n key={value}\n startIcon={\n <Flex\n tag=\"span\"\n height={2}\n background={color}\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : 'transparent'}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n >\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n <Field.Error />\n </Field.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PermissionsField\n * -----------------------------------------------------------------------------------------------*/\ninterface PermissionsFieldProps\n extends Omit<Extract<InputProps, { type: 'enumeration' }>, 'type' | 'options'> {\n type: 'permissions';\n}\n\nconst PermissionsField = ({\n label,\n disabled,\n name,\n placeholder,\n required,\n}: PermissionsFieldProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const [isApplyAllConfirmationOpen, setIsApplyAllConfirmationOpen] = React.useState(false);\n const { value = [], error, onChange } = useField<StagePermission[]>(name);\n const allStages = useForm<WorkflowStage[]>('PermissionsField', (state) => state.values.stages);\n const onFormValueChange = useForm('PermissionsField', (state) => state.onChange);\n\n // Derive the field key (e.g. \"fromPermissions\" or \"toPermissions\") from the full field name\n const fieldKey = name.split('.').pop() as keyof WorkflowStage;\n const rolesErrorCount = React.useRef(0);\n\n const { data: roles = [], isLoading, error: getRolesError } = useGetAdminRolesQuery();\n\n // Super admins always have permissions to do everything and therefore\n // there is no point for this role to show up in the role combobox\n const filteredRoles = roles?.filter((role) => role.code !== 'strapi-super-admin') ?? [];\n\n React.useEffect(() => {\n if (\n !isLoading &&\n getRolesError &&\n 'status' in getRolesError &&\n getRolesError.status == 403 &&\n rolesErrorCount.current === 0\n ) {\n rolesErrorCount.current = 1;\n\n toggleNotification({\n blockTransition: true,\n type: 'danger',\n message: formatMessage({\n id: 'review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles. Contact your administrator.',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification, getRolesError]);\n\n if (!isLoading && filteredRoles.length === 0) {\n return (\n <Field.Root\n name={name}\n hint={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n })}\n required={required}\n >\n <Field.Label>{label}</Field.Label>\n <TextInput\n disabled\n placeholder={formatMessage({\n id: 'components.NotAllowedInput.text',\n defaultMessage: 'No permissions to see this field',\n })}\n startAction={<EyeStriked fill=\"neutral600\" />}\n type=\"text\"\n value=\"\"\n />\n <Field.Hint />\n </Field.Root>\n );\n }\n\n return (\n <>\n <Flex alignItems=\"flex-end\" gap={3}>\n <PermissionWrapper grow={1}>\n <Field.Root error={error} name={name} required>\n <Field.Label>{label}</Field.Label>\n\n <MultiSelect\n disabled={disabled}\n onChange={(values) => {\n // Because the select components expects strings for values, but\n // the yup schema validates we are sending full permission objects to the API,\n // we must coerce the string value back to an object\n const permissions = values.map((value) => ({\n role: parseInt(value, 10),\n action: 'admin::review-workflows.stage.transition',\n }));\n\n onChange(name, permissions);\n }}\n placeholder={placeholder}\n // The Select component expects strings for values\n value={value.map((permission) => `${permission.role}`)}\n withTags\n >\n <MultiSelectGroup\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.allRoles.label',\n defaultMessage: 'All roles',\n })}\n values={filteredRoles.map((r) => `${r.id}`)}\n >\n {filteredRoles.map((role) => {\n return (\n <NestedOption key={role.id} value={`${role.id}`}>\n {role.name}\n </NestedOption>\n );\n })}\n </MultiSelectGroup>\n </MultiSelect>\n <Field.Error />\n </Field.Root>\n </PermissionWrapper>\n <Dialog.Root open={isApplyAllConfirmationOpen} onOpenChange={setIsApplyAllConfirmationOpen}>\n <Dialog.Trigger>\n <IconButton\n disabled={disabled}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.apply.label',\n defaultMessage: 'Apply to all stages',\n })}\n size=\"L\"\n >\n <Duplicate />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog\n onConfirm={() => {\n onFormValueChange(\n 'stages',\n allStages.map((stage) => ({\n ...stage,\n [fieldKey]: value,\n }))\n );\n\n setIsApplyAllConfirmationOpen(false);\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'Settings.review-workflows.page.edit.confirm.stages.permissions.copy.success',\n defaultMessage: 'Applied roles to all other stages of the workflow',\n }),\n });\n }}\n variant=\"default\"\n >\n {formatMessage({\n id: 'Settings.review-workflows.page.edit.confirm.stages.permissions.copy',\n defaultMessage:\n 'Roles that can change that stage will be applied to all the other stages.',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </Flex>\n </>\n );\n};\n\nconst NestedOption = styled(MultiSelectOption)`\n padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\n// Grow the size of the permission Select\nconst PermissionWrapper = styled(Flex)`\n > * {\n flex-grow: 1;\n }\n`;\n\nexport { Stages };\nexport type { StagesProps, WorkflowStage };\n"],"names":["Stages","canDelete","canUpdate","isCreating","formatMessage","useIntl","trackUsage","useTracking","addFieldRow","useForm","state","value","stages","useField","_jsxs","Flex","direction","gap","width","Box","position","_jsx","Background","background","height","left","top","alignItems","tag","map","stage","index","Stage","length","canReorder","stagesCount","defaultOpen","id","__temp_key__","AddStage","type","onClick","name","defaultMessage","styled","fromPermissions","toPermissions","color","liveText","setLiveText","React","useState","stageErrors","errors","error","moveFieldRow","removeFieldRow","getItemPos","handleGrabStage","item","handleDropStage","handleCancelDragStage","handleMoveStage","newIndex","oldIndex","handlerId","isDragging","handleKeyDown","stageRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","onGrabItem","onDropItem","onMoveItem","onCancel","DRAG_DROP_TYPES","STAGE","composedRef","useComposedRefs","useEffect","getEmptyImage","captureDraggingState","handleCloneClick","useId","ref","shadow","VisuallyHidden","aria-live","borderStyle","borderColor","borderWidth","display","hasRadius","padding","AccordionRoot","onValueChange","defaultValue","undefined","$error","Object","values","Accordion","Item","Header","Trigger","Actions","_Fragment","Menu","Root","ContextMenuTrigger","size","endIcon","paddingLeft","paddingRight","More","aria-hidden","focusable","Content","popoverPlacement","zIndex","SubRoot","variant","IconButton","data-handler-id","label","e","stopPropagation","onKeyDown","Drag","Grid","disabled","required","placeholder","field","col","xs","InputRenderer","theme","colors","danger600","neutral200","neutral100","props","ColorSelector","PermissionsField","AdminInputRenderer","onChange","colorOptions","AVAILABLE_COLORS","hex","themeColorName","getStageColorByHex","Field","Label","SingleSelect","v","toString","toUpperCase","startIcon","shrink","SingleSelectOption","Error","toggleNotification","useNotification","isApplyAllConfirmationOpen","setIsApplyAllConfirmationOpen","allStages","onFormValueChange","fieldKey","split","pop","rolesErrorCount","useRef","data","roles","isLoading","getRolesError","useGetAdminRolesQuery","filteredRoles","filter","role","code","status","current","blockTransition","message","hint","TextInput","startAction","EyeStriked","fill","Hint","PermissionWrapper","grow","MultiSelect","permissions","parseInt","action","permission","withTags","MultiSelectGroup","r","NestedOption","Dialog","open","onOpenChange","Duplicate","ConfirmDialog","onConfirm","MultiSelectOption","spaces"],"mappings":"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"}