@strapi/review-workflows 5.9.0 → 5.10.0

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 (77) hide show
  1. package/dist/admin/chunks/Layout-27uslS7w.mjs +265 -0
  2. package/dist/admin/chunks/Layout-27uslS7w.mjs.map +1 -0
  3. package/dist/admin/chunks/Layout-B4l91S3p.js +290 -0
  4. package/dist/admin/chunks/Layout-B4l91S3p.js.map +1 -0
  5. package/dist/admin/chunks/en-BixG7IBu.mjs +14 -0
  6. package/dist/admin/chunks/en-BixG7IBu.mjs.map +1 -0
  7. package/dist/admin/chunks/en-C6SESe-Y.js +16 -0
  8. package/dist/admin/chunks/en-C6SESe-Y.js.map +1 -0
  9. package/dist/admin/chunks/id-DnRGfGvc.js +1442 -0
  10. package/dist/admin/chunks/id-DnRGfGvc.js.map +1 -0
  11. package/dist/admin/chunks/id-LAMc9ydb.mjs +1420 -0
  12. package/dist/admin/chunks/id-LAMc9ydb.mjs.map +1 -0
  13. package/dist/admin/chunks/index-BiGArvbK.mjs +271 -0
  14. package/dist/admin/chunks/index-BiGArvbK.mjs.map +1 -0
  15. package/dist/admin/chunks/index-C5IeISWp.js +960 -0
  16. package/dist/admin/chunks/index-C5IeISWp.js.map +1 -0
  17. package/dist/admin/chunks/index-CSYOmjZt.mjs +926 -0
  18. package/dist/admin/chunks/index-CSYOmjZt.mjs.map +1 -0
  19. package/dist/admin/chunks/index-DZpcSUvc.js +293 -0
  20. package/dist/admin/chunks/index-DZpcSUvc.js.map +1 -0
  21. package/dist/admin/chunks/purchase-review-workflows-CEP8kvxZ.mjs +53 -0
  22. package/dist/admin/chunks/purchase-review-workflows-CEP8kvxZ.mjs.map +1 -0
  23. package/dist/admin/chunks/purchase-review-workflows-Drlxm8yP.js +55 -0
  24. package/dist/admin/chunks/purchase-review-workflows-Drlxm8yP.js.map +1 -0
  25. package/dist/admin/chunks/router-CrN8UbpP.js +30 -0
  26. package/dist/admin/chunks/router-CrN8UbpP.js.map +1 -0
  27. package/dist/admin/chunks/router-Z3AR7XZ7.mjs +28 -0
  28. package/dist/admin/chunks/router-Z3AR7XZ7.mjs.map +1 -0
  29. package/dist/admin/index.js +17 -2
  30. package/dist/admin/index.js.map +1 -1
  31. package/dist/admin/index.mjs +12 -4
  32. package/dist/admin/index.mjs.map +1 -1
  33. package/dist/server/index.js +2109 -7839
  34. package/dist/server/index.js.map +1 -1
  35. package/dist/server/index.mjs +2114 -7847
  36. package/dist/server/index.mjs.map +1 -1
  37. package/dist/server/src/services/document-service-middleware.d.ts +1 -1
  38. package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
  39. package/dist/shared/contracts/review-workflows.d.ts +0 -1
  40. package/package.json +14 -10
  41. package/dist/_chunks/Layout-C3IORH2n.js +0 -250
  42. package/dist/_chunks/Layout-C3IORH2n.js.map +0 -1
  43. package/dist/_chunks/Layout-DNKR5bym.mjs +0 -233
  44. package/dist/_chunks/Layout-DNKR5bym.mjs.map +0 -1
  45. package/dist/_chunks/en-CYgjfSep.js +0 -15
  46. package/dist/_chunks/en-CYgjfSep.js.map +0 -1
  47. package/dist/_chunks/en-D9dxziEb.mjs +0 -15
  48. package/dist/_chunks/en-D9dxziEb.mjs.map +0 -1
  49. package/dist/_chunks/id-C9Ku9Br9.mjs +0 -1274
  50. package/dist/_chunks/id-C9Ku9Br9.mjs.map +0 -1
  51. package/dist/_chunks/id-oOE1bYls.js +0 -1293
  52. package/dist/_chunks/id-oOE1bYls.js.map +0 -1
  53. package/dist/_chunks/index-ByXbOW-R.mjs +0 -815
  54. package/dist/_chunks/index-ByXbOW-R.mjs.map +0 -1
  55. package/dist/_chunks/index-CmHHjN95.js +0 -231
  56. package/dist/_chunks/index-CmHHjN95.js.map +0 -1
  57. package/dist/_chunks/index-CyhaJuJG.mjs +0 -213
  58. package/dist/_chunks/index-CyhaJuJG.mjs.map +0 -1
  59. package/dist/_chunks/index-DMT27jNE.js +0 -832
  60. package/dist/_chunks/index-DMT27jNE.js.map +0 -1
  61. package/dist/_chunks/purchase-review-workflows-BxoDFxQ5.js +0 -52
  62. package/dist/_chunks/purchase-review-workflows-BxoDFxQ5.js.map +0 -1
  63. package/dist/_chunks/purchase-review-workflows-DyFV_H0I.mjs +0 -52
  64. package/dist/_chunks/purchase-review-workflows-DyFV_H0I.mjs.map +0 -1
  65. package/dist/_chunks/router-BPl2HZMq.mjs +0 -24
  66. package/dist/_chunks/router-BPl2HZMq.mjs.map +0 -1
  67. package/dist/_chunks/router-vDfGt9bq.js +0 -24
  68. package/dist/_chunks/router-vDfGt9bq.js.map +0 -1
  69. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/AssigneeFilter.d.ts +0 -0
  70. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/StageFilter.d.ts +0 -0
  71. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/TableColumns.d.ts +0 -0
  72. /package/dist/admin/src/routes/content-manager/{[model] → model}/configure/constants.d.ts +0 -0
  73. /package/dist/admin/src/routes/content-manager/{[model] → model}/constants.d.ts +0 -0
  74. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/AssigneeSelect.d.ts +0 -0
  75. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/Panel.d.ts +0 -0
  76. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/StageSelect.d.ts +0 -0
  77. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/constants.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-LAMc9ydb.mjs","sources":["../../../admin/src/services/admin.ts","../../../admin/src/routes/settings/hooks/useKeyboardDragAndDrop.ts","../../../admin/src/routes/settings/hooks/useDragAndDrop.ts","../../../admin/src/routes/settings/components/AddStage.tsx","../../../admin/src/routes/settings/components/Stages.tsx","../../../admin/src/routes/settings/components/WorkflowAttributes.tsx","../../../admin/src/routes/settings/id.tsx"],"sourcesContent":["import { SanitizedAdminUser } from '@strapi/admin/strapi-admin';\n\nimport { reviewWorkflowsApi } from './api';\n\ntype Roles = SanitizedAdminUser['roles'];\ntype RolesResponse = { data: Roles };\n\nconst adminApi = reviewWorkflowsApi.injectEndpoints({\n endpoints(builder) {\n return {\n getAdminRoles: builder.query<Roles, void>({\n query: () => ({\n url: `/admin/roles`,\n method: 'GET',\n }),\n transformResponse: (res: RolesResponse) => {\n return res.data;\n },\n }),\n };\n },\n});\n\nconst { useGetAdminRolesQuery } = adminApi;\n\nexport { useGetAdminRolesQuery };\nexport type { SanitizedAdminUser, Roles };\n","import * as React from 'react';\n\nexport type UseKeyboardDragAndDropCallbacks<TIndex extends number | Array<number> = number> = {\n onCancel?: (index: TIndex) => void;\n onDropItem?: (currentIndex: TIndex, newIndex?: TIndex) => void;\n onGrabItem?: (index: TIndex) => void;\n onMoveItem?: (newIndex: TIndex, currentIndex: TIndex) => void;\n};\n\n/**\n * Utility hook designed to implement keyboard accessibile drag and drop by\n * returning an onKeyDown handler to be passed to the drag icon button.\n *\n * @internal - You should use `useDragAndDrop` instead.\n */\nexport const useKeyboardDragAndDrop = <TIndex extends number | Array<number> = number>(\n active: boolean,\n index: TIndex,\n { onCancel, onDropItem, onGrabItem, onMoveItem }: UseKeyboardDragAndDropCallbacks<TIndex>\n) => {\n const [isSelected, setIsSelected] = React.useState(false);\n\n const handleMove = (movement: 'UP' | 'DOWN') => {\n if (!isSelected) {\n return;\n }\n if (typeof index === 'number' && onMoveItem) {\n if (movement === 'UP') {\n onMoveItem((index - 1) as TIndex, index);\n } else if (movement === 'DOWN') {\n onMoveItem((index + 1) as TIndex, index);\n }\n }\n };\n\n const handleDragClick = () => {\n if (isSelected) {\n if (onDropItem) {\n onDropItem(index);\n }\n setIsSelected(false);\n } else {\n if (onGrabItem) {\n onGrabItem(index);\n }\n setIsSelected(true);\n }\n };\n\n const handleCancel = () => {\n if (isSelected) {\n setIsSelected(false);\n\n if (onCancel) {\n onCancel(index);\n }\n }\n };\n\n const handleKeyDown = <E extends Element>(e: React.KeyboardEvent<E>) => {\n if (!active) {\n return;\n }\n\n if (e.key === 'Tab' && !isSelected) {\n return;\n }\n\n e.preventDefault();\n\n switch (e.key) {\n case ' ':\n case 'Enter':\n handleDragClick();\n break;\n\n case 'Escape':\n handleCancel();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n handleMove('DOWN');\n break;\n\n case 'ArrowUp':\n case 'ArrowLeft':\n handleMove('UP');\n break;\n\n default:\n }\n };\n\n return handleKeyDown;\n};\n","import * as React from 'react';\n\nimport {\n useDrag,\n useDrop,\n type HandlerManager,\n type ConnectDragSource,\n type ConnectDropTarget,\n type ConnectDragPreview,\n type DragSourceMonitor,\n} from 'react-dnd';\n\nimport {\n useKeyboardDragAndDrop,\n type UseKeyboardDragAndDropCallbacks,\n} from './useKeyboardDragAndDrop';\n\nimport type { Data } from '@strapi/types';\n\nconst DIRECTIONS = {\n UPWARD: 'upward',\n DOWNWARD: 'downward',\n} as const;\n\nconst DROP_SENSITIVITY = {\n REGULAR: 'regular',\n IMMEDIATE: 'immediate',\n} as const;\n\ninterface UseDragAndDropOptions<\n TIndex extends number | Array<number> = number,\n TItem extends { index: TIndex } = { index: TIndex },\n> extends UseKeyboardDragAndDropCallbacks<TIndex> {\n type?: string;\n index: TIndex;\n item?: TItem;\n onStart?: () => void;\n onEnd?: () => void;\n dropSensitivity?: (typeof DROP_SENSITIVITY)[keyof typeof DROP_SENSITIVITY];\n}\n\ntype Identifier = ReturnType<HandlerManager['getHandlerId']>;\n\ntype UseDragAndDropReturn<E extends Element = HTMLElement> = [\n props: {\n handlerId: Identifier;\n isDragging: boolean;\n handleKeyDown: <E extends Element>(event: React.KeyboardEvent<E>) => void;\n isOverDropTarget: boolean;\n direction: (typeof DIRECTIONS)[keyof typeof DIRECTIONS] | null;\n },\n objectRef: React.RefObject<E>,\n dropRef: ConnectDropTarget,\n dragRef: ConnectDragSource,\n dragPreviewRef: ConnectDragPreview,\n];\n\ntype DropCollectedProps = {\n handlerId: Identifier;\n isOver: boolean;\n};\n\n/**\n * A utility hook abstracting the general drag and drop hooks from react-dnd.\n * Centralising the same behaviours and by default offering keyboard support.\n */\nconst useDragAndDrop = <\n TIndex extends number | Array<number>,\n TItem extends { index: TIndex; id?: Data.ID; [key: string]: unknown } = {\n index: TIndex;\n [key: string]: unknown;\n },\n E extends Element = HTMLElement,\n>(\n active: boolean,\n {\n type = 'STRAPI_DND',\n index,\n item,\n onStart,\n onEnd,\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n dropSensitivity = DROP_SENSITIVITY.REGULAR,\n }: UseDragAndDropOptions<TIndex, TItem>\n): UseDragAndDropReturn<E> => {\n const objectRef = React.useRef<E>(null);\n\n const [{ handlerId, isOver }, dropRef] = useDrop<TItem, void, DropCollectedProps>({\n accept: type,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n isOver: monitor.isOver({ shallow: true }),\n };\n },\n drop(item) {\n const draggedIndex = item.index;\n const newIndex = index;\n\n if (isOver && onDropItem) {\n onDropItem(draggedIndex, newIndex);\n }\n },\n hover(item, monitor) {\n if (!objectRef.current || !onMoveItem) {\n return;\n }\n\n const dragIndex = item.index;\n const newIndex = index;\n\n const hoverBoundingRect = objectRef.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (!clientOffset) return;\n\n const hoverClientY = clientOffset && clientOffset.y - hoverBoundingRect.top;\n if (typeof dragIndex === 'number' && typeof newIndex === 'number') {\n if (dragIndex === newIndex) {\n // Don't replace items with themselves\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (dragIndex < newIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (dragIndex > newIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n\n // Time to actually perform the action\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n } else {\n // Using numbers as indices doesn't work for nested list items with path like [1, 1, 0]\n if (Array.isArray(dragIndex) && Array.isArray(newIndex)) {\n // Indices comparison to find item position in nested list\n const minLength = Math.min(dragIndex.length, newIndex.length);\n let areEqual = true;\n let isLessThan = false;\n let isGreaterThan = false;\n\n for (let i = 0; i < minLength; i++) {\n if (dragIndex[i] < newIndex[i]) {\n isLessThan = true;\n areEqual = false;\n break;\n } else if (dragIndex[i] > newIndex[i]) {\n isGreaterThan = true;\n areEqual = false;\n break;\n }\n }\n\n // Don't replace items with themselves\n if (areEqual && dragIndex.length === newIndex.length) {\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (isLessThan && !isGreaterThan && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (isGreaterThan && !isLessThan && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n }\n\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n }\n },\n });\n\n const getDragDirection = (monitor: DragSourceMonitor<TItem, void>) => {\n if (\n monitor &&\n monitor.isDragging() &&\n !monitor.didDrop() &&\n monitor.getInitialClientOffset() &&\n monitor.getClientOffset()\n ) {\n const deltaY = monitor.getInitialClientOffset()!.y - monitor.getClientOffset()!.y;\n\n if (deltaY > 0) return DIRECTIONS.UPWARD;\n\n if (deltaY < 0) return DIRECTIONS.DOWNWARD;\n\n return null;\n }\n\n return null;\n };\n\n const [{ isDragging, direction }, dragRef, dragPreviewRef] = useDrag({\n type,\n item() {\n if (onStart) {\n onStart();\n }\n\n /**\n * This will be attached and it helps define the preview sizes\n * when a component is flexy e.g. Relations\n */\n const { width } = objectRef.current?.getBoundingClientRect() ?? {};\n\n return { index, width, ...item };\n },\n end() {\n if (onEnd) {\n onEnd();\n }\n },\n canDrag: active,\n /**\n * This is useful when the item is in a virtualized list.\n * However, if we don't have an ID then we want the libraries\n * defaults to take care of this.\n */\n isDragging: item?.id\n ? (monitor) => {\n return item.id === monitor.getItem().id;\n }\n : undefined,\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n initialOffset: monitor.getInitialClientOffset(),\n currentOffset: monitor.getClientOffset(),\n direction: getDragDirection(monitor),\n }),\n });\n\n const handleKeyDown = useKeyboardDragAndDrop(active, index, {\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n });\n\n return [\n { handlerId, isDragging, handleKeyDown, isOverDropTarget: isOver, direction },\n objectRef,\n dropRef,\n dragRef,\n dragPreviewRef,\n ];\n};\n\nexport {\n useDragAndDrop,\n UseDragAndDropReturn,\n UseDragAndDropOptions,\n DIRECTIONS,\n DROP_SENSITIVITY,\n};\n","import { Box, BoxComponent, ButtonProps, Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nexport const AddStage = ({ children, ...props }: ButtonProps) => {\n return (\n <StyledButton\n tag=\"button\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n paddingBottom={3}\n paddingLeft={4}\n paddingRight={4}\n paddingTop={3}\n shadow=\"filterShadow\"\n {...props}\n >\n <Typography variant=\"pi\" fontWeight=\"bold\">\n <Flex tag=\"span\" gap={2}>\n <PlusCircle width=\"2.4rem\" height=\"2.4rem\" aria-hidden />\n {children}\n </Flex>\n </Typography>\n </StyledButton>\n );\n};\n\nconst StyledButton = styled<BoxComponent<'button'>>(Box)`\n border-radius: 26px;\n color: ${({ theme }) => theme.colors.neutral500};\n\n &:hover {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n &:active {\n color: ${({ theme }) => theme.colors.primary600};\n }\n`;\n","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 MenuItem,\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 extends Pick<IStage, 'id' | 'name' | 'permissions' | '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 permissions,\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, permissions });\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 <MenuItem onClick={handleCloneClick}>\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Duplicate stage',\n })}\n </MenuItem>\n )}\n\n {canDelete && (\n <DeleteMenuItem onClick={() => removeFieldRow('stages', index)}>\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Delete',\n })}\n </DeleteMenuItem>\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 this stage',\n }),\n name: `stages.${index}.permissions`,\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 ].map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\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\nconst DeleteMenuItem = styled(MenuItem)`\n color: ${({ theme }) => theme.colors.danger600};\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 = ({ disabled, name, placeholder, required }: 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 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>\n {formatMessage({\n id: 'Settings.review-workflows.stage.permissions.label',\n defaultMessage: 'Roles that can change this stage',\n })}\n </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>\n {formatMessage({\n id: 'Settings.review-workflows.stage.permissions.label',\n defaultMessage: 'Roles that can change this stage',\n })}\n </Field.Label>\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 permissions: 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","import { InputRenderer, useField, useForm } from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Grid,\n MultiSelect,\n MultiSelectGroup,\n MultiSelectOption,\n Typography,\n useCollator,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useGetContentTypesQuery } from '../../../services/content-manager';\nimport { useReviewWorkflows } from '../hooks/useReviewWorkflows';\n\nimport type { WorkflowStage } from './Stages';\n\n/* -------------------------------------------------------------------------------------------------\n * WorkflowAttributes\n * -----------------------------------------------------------------------------------------------*/\ninterface WorkflowAttributesProps {\n canUpdate?: boolean;\n}\n\nconst WorkflowAttributes = ({ canUpdate = true }: WorkflowAttributesProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Grid.Root background=\"neutral0\" hasRadius gap={4} padding={6} shadow=\"tableShadow\">\n <Grid.Item col={6} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer\n disabled={!canUpdate}\n label={formatMessage({\n id: 'Settings.review-workflows.workflow.name.label',\n defaultMessage: 'Workflow Name',\n })}\n name=\"name\"\n required\n type=\"string\"\n />\n </Grid.Item>\n <Grid.Item col={6} direction=\"column\" alignItems=\"stretch\">\n <ContentTypesSelector disabled={!canUpdate} />\n </Grid.Item>\n <Grid.Item col={6} direction=\"column\" alignItems=\"stretch\">\n <StageSelector disabled={!canUpdate} />\n </Grid.Item>\n </Grid.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ContentTypesSelector\n * -----------------------------------------------------------------------------------------------*/\ninterface ContentTypesSelectorProps {\n disabled?: boolean;\n}\n\nconst ContentTypesSelector = ({ disabled }: ContentTypesSelectorProps) => {\n const { formatMessage, locale } = useIntl();\n const { data: contentTypes, isLoading } = useGetContentTypesQuery();\n const { workflows } = useReviewWorkflows();\n const currentWorkflow = useForm('ContentTypesSelector', (state) => state.values);\n\n const { error, value, onChange } = useField('contentTypes');\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const isDisabled =\n disabled ||\n isLoading ||\n !contentTypes ||\n (contentTypes.collectionType.length === 0 && contentTypes.singleType.length === 0);\n\n const collectionTypes = (contentTypes?.collectionType ?? [])\n .toSorted((a, b) => formatter.compare(a.info.displayName, b.info.displayName))\n .map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n }));\n\n const singleTypes = (contentTypes?.singleType ?? []).map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n }));\n\n return (\n <Field.Root error={error} name={'contentTypes'}>\n <Field.Label>\n {formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.label',\n defaultMessage: 'Associated to',\n })}\n </Field.Label>\n <MultiSelect\n customizeContent={(value) =>\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.displayValue',\n defaultMessage:\n '{count} {count, plural, one {content type} other {content types}} selected',\n },\n { count: value?.length }\n )\n }\n disabled={isDisabled}\n onChange={(values) => {\n onChange('contentTypes', values);\n }}\n value={value}\n placeholder={formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.placeholder',\n defaultMessage: 'Select',\n })}\n >\n {[\n ...(collectionTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.collectionTypes.label',\n defaultMessage: 'Collection Types',\n }),\n children: collectionTypes,\n },\n ]\n : []),\n\n ...(singleTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.singleTypes.label',\n defaultMessage: 'Single Types',\n }),\n children: singleTypes,\n },\n ]\n : []),\n ].map((opt) => {\n return (\n <MultiSelectGroup\n key={opt.label}\n label={opt.label}\n values={opt.children.map((child) => child.value.toString())}\n >\n {opt.children.map((child) => {\n const { name: assignedWorkflowName } =\n workflows?.find(\n (workflow) =>\n ((currentWorkflow && workflow.id !== currentWorkflow.id) ||\n !currentWorkflow) &&\n workflow.contentTypes.includes(child.value)\n ) ?? {};\n\n return (\n <NestedOption key={child.value} value={child.value}>\n <Typography>\n {\n // @ts-expect-error - formatMessage options doesn't expect to be a React component but that's what we need actually for the <i> and <em> components\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.assigned.notice',\n defaultMessage:\n '{label} {name, select, undefined {} other {<i>(assigned to <em>{name}</em> workflow)</i>}}',\n },\n {\n label: child.label,\n name: assignedWorkflowName,\n em: (...children) => (\n <Typography tag=\"em\" fontWeight=\"bold\">\n {children}\n </Typography>\n ),\n i: (...children) => (\n <ContentTypeTakeNotice>{children}</ContentTypeTakeNotice>\n ),\n }\n )\n }\n </Typography>\n </NestedOption>\n );\n })}\n </MultiSelectGroup>\n );\n })}\n </MultiSelect>\n </Field.Root>\n );\n};\n\nconst NestedOption = styled(MultiSelectOption)`\n padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\nconst ContentTypeTakeNotice = styled(Typography)`\n font-style: italic;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * StageSelector\n * -----------------------------------------------------------------------------------------------*/\ninterface StageSelectorProps {\n disabled?: boolean;\n}\n\nconst StageSelector = ({ disabled }: StageSelectorProps) => {\n const { value: stages = [] } = useField<WorkflowStage[]>('stages');\n const { formatMessage } = useIntl();\n\n const { error, value, onChange } = useField('stageRequiredToPublish');\n\n // stages with empty names are not valid, so we avoid them from being used to avoid errors\n const validStages = stages.filter((stage) => stage.name);\n\n return (\n <Field.Root\n error={error}\n name=\"stageRequiredToPublish\"\n hint={formatMessage({\n id: 'settings.review-workflows.workflow.stageRequiredToPublish.hint',\n defaultMessage:\n 'Prevents entries from being published if they are not at the required stage.',\n })}\n >\n <Field.Label>\n {formatMessage({\n id: 'settings.review-workflows.workflow.stageRequiredToPublish.label',\n defaultMessage: 'Required stage for publishing',\n })}\n </Field.Label>\n <SingleSelect\n disabled={disabled}\n onChange={(value) => {\n onChange('stageRequiredToPublish', value);\n }}\n value={value}\n >\n <SingleSelectOption value={''}>\n {formatMessage({\n id: 'settings.review-workflows.workflow.stageRequiredToPublish.any',\n defaultMessage: 'Any stage',\n })}\n </SingleSelectOption>\n {validStages.map((stage, i) => (\n <SingleSelectOption\n key={`requiredToPublishStage-${stage.id || stage.__temp_key__}`}\n value={stage.id?.toString() || stage.__temp_key__}\n >\n {stage.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n <Field.Hint />\n </Field.Root>\n );\n};\n\nexport { WorkflowAttributes };\nexport type { WorkflowAttributesProps };\n","import * as React from 'react';\n\nimport {\n ConfirmDialog,\n BackButton,\n useNotification,\n useAPIErrorHandler,\n useRBAC,\n Form,\n Page,\n FormProps,\n FormHelpers,\n} from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Button, Dialog, Flex, Typography } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport {\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n} from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { isBaseQueryError } from '../../utils/api';\n\nimport * as Layout from './components/Layout';\nimport { Stages, WorkflowStage } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nimport type { Stage, Workflow } from '../../../../shared/contracts/review-workflows';\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst WORKFLOW_SCHEMA = yup.object({\n contentTypes: yup.array().of(yup.string()),\n name: yup\n .string()\n .max(255, {\n id: 'review-workflows.validation.name.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n .required()\n .nullable(),\n stages: yup\n .array()\n .of(\n yup.object().shape({\n name: yup\n .string()\n .nullable()\n .required({\n id: 'review-workflows.validation.stage.name',\n defaultMessage: 'Name is required',\n })\n .max(255, {\n id: 'review-workflows.validation.stage.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n .test(\n 'unique-name',\n {\n id: 'review-workflows.validation.stage.duplicate',\n defaultMessage: 'Stage name must be unique',\n },\n (stageName, context) => {\n // @ts-expect-error it does exist.\n const { stages } = context.from[1].value;\n\n return stages.filter((stage: Stage) => stage.name === stageName).length === 1;\n }\n ),\n color: yup\n .string()\n .nullable()\n .required({\n id: 'review-workflows.validation.stage.color',\n defaultMessage: 'Color is required',\n })\n .matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),\n\n permissions: yup\n .array(\n yup.object({\n role: yup\n .number()\n .strict()\n .typeError({\n id: 'review-workflows.validation.stage.permissions.role.number',\n defaultMessage: 'Role must be of type number',\n })\n .required(),\n action: yup.string().required({\n id: 'review-workflows.validation.stage.permissions.action.required',\n defaultMessage: 'Action is a required argument',\n }),\n })\n )\n .strict(),\n })\n )\n .min(1),\n stageRequiredToPublish: yup.string().nullable(),\n});\n\nconst EditPage = () => {\n const { id = '' } = useParams<{ id: string }>();\n const isCreatingWorkflow = id === 'create';\n const { formatMessage } = useIntl();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const {\n isLoading: isLoadingWorkflow,\n meta,\n workflows,\n error,\n update,\n create,\n } = useReviewWorkflows();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions['settings']?.['review-workflows']\n );\n const {\n allowedActions: { canDelete, canUpdate, canCreate },\n } = useRBAC(permissions);\n\n const [savePrompts, setSavePrompts] = React.useState<{\n hasDeletedServerStages?: boolean;\n hasReassignedContentTypes?: boolean;\n }>({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n\n const currentWorkflow = workflows?.find((workflow) => workflow.id === parseInt(id, 10));\n const contentTypesFromOtherWorkflows = workflows\n ?.filter((workflow) => workflow.id !== parseInt(id, 10))\n .flatMap((workflow) => workflow.contentTypes);\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n\n interface FormValues {\n name: string;\n stages: WorkflowStage[];\n contentTypes: string[];\n stageRequiredToPublish: string | null;\n }\n\n const submitForm = async (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => {\n try {\n const { stageRequiredToPublish, ...rest } = data;\n const stageRequiredToPublishName =\n stageRequiredToPublish === ''\n ? null\n : rest.stages.find(\n (stage) =>\n stage.id === Number(stageRequiredToPublish) ||\n stage.__temp_key__ === stageRequiredToPublish\n )?.name;\n\n if (!isCreatingWorkflow) {\n const res = await update(id, {\n ...rest,\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: rest.stages.map((stage) => {\n let hasUpdatedPermissions = true;\n const serverStage = currentWorkflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n if (serverStage) {\n hasUpdatedPermissions =\n serverStage.permissions?.length !== stage.permissions?.length ||\n !serverStage.permissions?.every(\n (serverPermission) =>\n !!stage.permissions?.find(\n (permission) => permission.role === serverPermission.role\n )\n );\n }\n return {\n ...stage,\n permissions: hasUpdatedPermissions ? stage.permissions : undefined,\n } satisfies Stage;\n }),\n stageRequiredToPublishName,\n });\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n }\n } else {\n const res = await create({\n ...rest,\n stageRequiredToPublishName,\n });\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else if ('data' in res) {\n navigate(`../${res.data.id}`, { replace: true });\n }\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n setSavePrompts({});\n };\n\n const handleConfirmDeleteDialog =\n (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => async () => {\n await submitForm(data, helpers);\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const handleSubmit: FormProps<FormValues>['onSubmit'] = async (data, helpers) => {\n const isContentTypeReassignment = data.contentTypes.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n const hasDeletedServerStages =\n !isCreatingWorkflow &&\n !currentWorkflow?.stages.every((stage) =>\n data.stages.some((newStage) => newStage.id === stage.id)\n );\n\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n data.stages &&\n stagesPerWorkflow &&\n data.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\n } else {\n await submitForm(data, helpers);\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n } else if (\n currentWorkflow &&\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta,\n numberOfWorkflows,\n stagesPerWorkflow,\n ]);\n\n const initialValues: FormValues = React.useMemo(() => {\n if (isCreatingWorkflow || !currentWorkflow) {\n return {\n name: '',\n stages: [],\n contentTypes: [],\n stageRequiredToPublish: '',\n };\n } else {\n return {\n name: currentWorkflow.name,\n stages: addTmpKeysToStages(currentWorkflow.stages),\n contentTypes: currentWorkflow.contentTypes,\n stageRequiredToPublish: currentWorkflow.stageRequiredToPublish?.id.toString() ?? '',\n };\n }\n }, [currentWorkflow, isCreatingWorkflow]);\n\n if (isLoadingWorkflow) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <Form\n method={isCreatingWorkflow ? 'POST' : 'PUT'}\n initialValues={initialValues}\n validationSchema={WORKFLOW_SCHEMA}\n onSubmit={handleSubmit}\n >\n {({ modified, isSubmitting, values, setErrors }) => (\n <>\n <Layout.Header\n navigationAction={<BackButton fallback=\"..\" />}\n primaryAction={\n canUpdate || canCreate ? (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n disabled={!modified || isSubmitting || values.stages.length === 0}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Boolean(Object.keys(savePrompts).length > 0) && isSubmitting}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: 'review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n title={\n currentWorkflow?.name ||\n formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })\n }\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate || canCreate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate || canCreate}\n isCreating={isCreatingWorkflow}\n />\n </Flex>\n </Layout.Root>\n <Dialog.Root\n open={Object.keys(savePrompts).length > 0}\n onOpenChange={handleConfirmClose}\n >\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog(values, { setErrors })}>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count:\n contentTypesFromOtherWorkflows?.filter((contentType) =>\n values.contentTypes.includes(contentType)\n ).length ?? 0,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n </>\n )}\n </Form>\n\n <LimitsModal.Root\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.edit.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'review-workflows.edit.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.edit.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'review-workflows.edit.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n\nconst addTmpKeysToStages = (data: Workflow['stages']) => {\n const keys = generateNKeysBetween(undefined, undefined, data.length);\n\n return data.map((datum, index) => ({\n ...datum,\n __temp_key__: keys[index],\n }));\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector((state) => {\n const {\n create = [],\n update = [],\n read = [],\n } = state.admin_app.permissions.settings?.['review-workflows'] ?? {};\n\n return [...create, ...update, ...read];\n });\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedEditPage };\n"],"names":["adminApi","reviewWorkflowsApi","injectEndpoints","endpoints","builder","getAdminRoles","query","url","method","transformResponse","res","data","useGetAdminRolesQuery","useKeyboardDragAndDrop","active","index","onCancel","onDropItem","onGrabItem","onMoveItem","isSelected","setIsSelected","React","useState","handleMove","movement","handleDragClick","handleCancel","handleKeyDown","e","key","preventDefault","DIRECTIONS","UPWARD","DOWNWARD","DROP_SENSITIVITY","REGULAR","IMMEDIATE","useDragAndDrop","type","item","onStart","onEnd","dropSensitivity","objectRef","useRef","handlerId","isOver","dropRef","useDrop","accept","collect","monitor","getHandlerId","shallow","drop","draggedIndex","newIndex","hover","current","dragIndex","hoverBoundingRect","getBoundingClientRect","hoverMiddleY","bottom","top","clientOffset","getClientOffset","hoverClientY","y","Array","isArray","minLength","Math","min","length","areEqual","isLessThan","isGreaterThan","i","getDragDirection","isDragging","didDrop","getInitialClientOffset","deltaY","direction","dragRef","dragPreviewRef","useDrag","width","end","canDrag","id","getItem","undefined","initialOffset","currentOffset","isOverDropTarget","AddStage","children","props","_jsx","StyledButton","tag","background","borderColor","paddingBottom","paddingLeft","paddingRight","paddingTop","shadow","Typography","variant","fontWeight","_jsxs","Flex","gap","PlusCircle","height","aria-hidden","styled","Box","theme","colors","neutral500","primary600","Stages","canDelete","canUpdate","isCreating","formatMessage","useIntl","trackUsage","useTracking","addFieldRow","useForm","state","value","stages","useField","position","Background","left","alignItems","map","stage","Stage","canReorder","stagesCount","defaultOpen","__temp_key__","onClick","name","defaultMessage","permissions","color","liveText","setLiveText","stageErrors","errors","error","moveFieldRow","removeFieldRow","getItemPos","handleGrabStage","handleDropStage","handleCancelDragStage","handleMoveStage","oldIndex","stageRef","DRAG_DROP_TYPES","STAGE","composedRef","useComposedRefs","useEffect","getEmptyImage","captureDraggingState","handleCloneClick","useId","ref","VisuallyHidden","aria-live","borderStyle","borderWidth","display","hasRadius","padding","AccordionRoot","onValueChange","defaultValue","$error","Object","values","Accordion","Item","Header","Trigger","Actions","_Fragment","Menu","Root","ContextMenuTrigger","size","endIcon","More","focusable","Content","popoverPlacement","zIndex","SubRoot","MenuItem","DeleteMenuItem","IconButton","data-handler-id","label","stopPropagation","onKeyDown","Drag","Grid","disabled","required","placeholder","field","col","InputRenderer","danger600","neutral200","neutral100","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","rolesErrorCount","roles","isLoading","getRolesError","filteredRoles","filter","role","code","status","blockTransition","message","hint","TextInput","startAction","EyeStriked","fill","Hint","PermissionWrapper","grow","MultiSelect","parseInt","action","permission","withTags","MultiSelectGroup","r","NestedOption","Dialog","open","onOpenChange","Duplicate","ConfirmDialog","onConfirm","MultiSelectOption","spaces","WorkflowAttributes","ContentTypesSelector","StageSelector","locale","contentTypes","useGetContentTypesQuery","workflows","useReviewWorkflows","currentWorkflow","formatter","useCollator","sensitivity","isDisabled","collectionType","singleType","collectionTypes","toSorted","a","b","compare","info","displayName","contentType","uid","singleTypes","customizeContent","count","opt","child","assignedWorkflowName","find","workflow","includes","em","ContentTypeTakeNotice","validStages","WORKFLOW_SCHEMA","yup","object","array","of","string","max","nullable","shape","test","stageName","context","from","matches","number","strict","typeError","stageRequiredToPublish","EditPage","useParams","isCreatingWorkflow","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","isLoadingWorkflow","meta","update","create","useTypedSelector","admin_app","allowedActions","canCreate","useRBAC","savePrompts","setSavePrompts","getFeature","isLicenseLoading","useLicenseLimits","showLimitModal","setShowLimitModal","contentTypesFromOtherWorkflows","flatMap","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","stagesPerWorkflow","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","submitForm","helpers","rest","stageRequiredToPublishName","Number","hasUpdatedPermissions","serverStage","every","serverPermission","isBaseQueryError","setErrors","replace","handleConfirmDeleteDialog","handleConfirmClose","handleSubmit","isContentTypeReassignment","some","hasDeletedServerStages","newStage","workflowCount","prev","hasReassignedContentTypes","initialValues","useMemo","addTmpKeysToStages","Page","Loading","Layout","Form","validationSchema","onSubmit","modified","isSubmitting","navigationAction","BackButton","fallback","primaryAction","Button","Check","loading","Boolean","keys","subtitle","title","textAlign","LimitsModal","Title","Body","generateNKeysBetween","datum","ProtectedEditPage","read","settings","Protect"],"mappings":"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"}
@@ -0,0 +1,271 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { useTracking, useRBAC, Page, Table, ConfirmDialog } from '@strapi/admin/strapi-admin';
4
+ import { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';
5
+ import { LinkButton, TFooter, Typography, Flex, IconButton, Dialog } from '@strapi/design-system';
6
+ import { Plus, Pencil, Trash } from '@strapi/icons';
7
+ import { useIntl } from 'react-intl';
8
+ import { useNavigate, NavLink, Link } from 'react-router-dom';
9
+ import { u as useGetContentTypesQuery, a as useTypedSelector, C as CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME, L as LimitsModal } from './index-CSYOmjZt.mjs';
10
+ import { u as useReviewWorkflows, H as Header, R as Root } from './Layout-27uslS7w.mjs';
11
+ import '@strapi/content-manager/strapi-admin';
12
+ import 'react-redux';
13
+ import 'styled-components';
14
+ import 'react-dnd';
15
+
16
+ const ReviewWorkflowsListView = ()=>{
17
+ const { formatMessage } = useIntl();
18
+ const navigate = useNavigate();
19
+ const { trackUsage } = useTracking();
20
+ const [workflowToDelete, setWorkflowToDelete] = React.useState(null);
21
+ const [showLimitModal, setShowLimitModal] = React.useState(false);
22
+ const { data, isLoading: isLoadingModels } = useGetContentTypesQuery();
23
+ const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows();
24
+ const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();
25
+ const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['review-workflows']);
26
+ const { allowedActions: { canCreate, canRead, canUpdate, canDelete } } = useRBAC(permissions);
27
+ const limits = getFeature('review-workflows');
28
+ const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];
29
+ const handleDeleteWorkflow = (workflowId)=>{
30
+ setWorkflowToDelete(workflowId);
31
+ };
32
+ const toggleConfirmDeleteDialog = ()=>{
33
+ setWorkflowToDelete(null);
34
+ };
35
+ const handleConfirmDeleteDialog = async ()=>{
36
+ if (!workflowToDelete) return;
37
+ await deleteAction(workflowToDelete);
38
+ setWorkflowToDelete(null);
39
+ };
40
+ const handleCreateClick = (event)=>{
41
+ event.preventDefault();
42
+ /**
43
+ * If the current license has a workflow limit:
44
+ * check if the total count of workflows exceeds that limit. If so,
45
+ * prevent the navigation and show the limits overlay.
46
+ *
47
+ * If the current license does not have a limit (e.g. offline license):
48
+ * allow the user to navigate to the create-view. In case they exceed the
49
+ * current hard-limit of 200 they will see an error thrown by the API.
50
+ */ if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {
51
+ event.preventDefault();
52
+ setShowLimitModal(true);
53
+ } else {
54
+ navigate('create');
55
+ trackUsage('willCreateWorkflow');
56
+ }
57
+ };
58
+ /**
59
+ * If the current license has a limit:
60
+ * check if the total count of workflows or stages exceeds that limit and display
61
+ * the limits modal on page load. It can be closed by the user, but the
62
+ * API will throw an error in case they try to create a new workflow or update the
63
+ * stages.
64
+ *
65
+ * If the current license does not have a limit (e.g. offline license):
66
+ * do nothing (for now). In case they are trying to create the 201st workflow/ stage
67
+ * the API will throw an error.
68
+ *
69
+ */ React.useEffect(()=>{
70
+ if (!isLoading && !isLicenseLoading) {
71
+ if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {
72
+ setShowLimitModal(true);
73
+ }
74
+ }
75
+ }, [
76
+ isLicenseLoading,
77
+ isLoading,
78
+ meta,
79
+ meta?.workflowCount,
80
+ numberOfWorkflows
81
+ ]);
82
+ const headers = [
83
+ {
84
+ label: formatMessage({
85
+ id: 'Settings.review-workflows.list.page.list.column.name.title',
86
+ defaultMessage: 'Name'
87
+ }),
88
+ name: 'name'
89
+ },
90
+ {
91
+ label: formatMessage({
92
+ id: 'Settings.review-workflows.list.page.list.column.stages.title',
93
+ defaultMessage: 'Stages'
94
+ }),
95
+ name: 'stages'
96
+ },
97
+ {
98
+ label: formatMessage({
99
+ id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',
100
+ defaultMessage: 'Content Types'
101
+ }),
102
+ name: 'content-types'
103
+ }
104
+ ];
105
+ if (isLoading || isLoadingModels) {
106
+ return /*#__PURE__*/ jsx(Page.Loading, {});
107
+ }
108
+ const contentTypes = Object.values(data ?? {}).reduce((acc, curr)=>{
109
+ acc.push(...curr);
110
+ return acc;
111
+ }, []);
112
+ return /*#__PURE__*/ jsxs(Fragment, {
113
+ children: [
114
+ /*#__PURE__*/ jsx(Header, {
115
+ primaryAction: canCreate ? /*#__PURE__*/ jsx(LinkButton, {
116
+ startIcon: /*#__PURE__*/ jsx(Plus, {}),
117
+ size: "S",
118
+ tag: NavLink,
119
+ to: "create",
120
+ onClick: handleCreateClick,
121
+ children: formatMessage({
122
+ id: 'Settings.review-workflows.list.page.create',
123
+ defaultMessage: 'Create new workflow'
124
+ })
125
+ }) : null,
126
+ subtitle: formatMessage({
127
+ id: 'Settings.review-workflows.list.page.subtitle',
128
+ defaultMessage: 'Manage your content review process'
129
+ }),
130
+ title: formatMessage({
131
+ id: 'Settings.review-workflows.list.page.title',
132
+ defaultMessage: 'Review Workflows'
133
+ })
134
+ }),
135
+ /*#__PURE__*/ jsxs(Root, {
136
+ children: [
137
+ /*#__PURE__*/ jsx(Table.Root, {
138
+ isLoading: isLoading,
139
+ rows: workflows,
140
+ footer: canCreate ? /*#__PURE__*/ jsx(TFooter, {
141
+ cursor: "pointer",
142
+ icon: /*#__PURE__*/ jsx(Plus, {}),
143
+ onClick: handleCreateClick,
144
+ children: formatMessage({
145
+ id: 'Settings.review-workflows.list.page.create',
146
+ defaultMessage: 'Create new workflow'
147
+ })
148
+ }) : null,
149
+ headers: headers,
150
+ children: /*#__PURE__*/ jsxs(Table.Content, {
151
+ children: [
152
+ /*#__PURE__*/ jsx(Table.Head, {
153
+ children: headers.map((head)=>/*#__PURE__*/ jsx(Table.HeaderCell, {
154
+ ...head
155
+ }, head.name))
156
+ }),
157
+ /*#__PURE__*/ jsx(Table.Body, {
158
+ children: workflows.map((workflow)=>/*#__PURE__*/ jsxs(Table.Row, {
159
+ onClick: ()=>{
160
+ navigate(`${workflow.id}`);
161
+ },
162
+ children: [
163
+ /*#__PURE__*/ jsx(Table.Cell, {
164
+ width: "25rem",
165
+ children: /*#__PURE__*/ jsx(Typography, {
166
+ textColor: "neutral800",
167
+ fontWeight: "bold",
168
+ ellipsis: true,
169
+ children: workflow.name
170
+ })
171
+ }),
172
+ /*#__PURE__*/ jsx(Table.Cell, {
173
+ children: /*#__PURE__*/ jsx(Typography, {
174
+ textColor: "neutral800",
175
+ children: workflow.stages.length
176
+ })
177
+ }),
178
+ /*#__PURE__*/ jsx(Table.Cell, {
179
+ children: /*#__PURE__*/ jsx(Typography, {
180
+ textColor: "neutral800",
181
+ children: workflow.contentTypes.map((uid)=>{
182
+ const contentType = contentTypes.find((contentType)=>contentType.uid === uid);
183
+ return contentType?.info.displayName ?? '';
184
+ }).join(', ')
185
+ })
186
+ }),
187
+ /*#__PURE__*/ jsx(Table.Cell, {
188
+ children: /*#__PURE__*/ jsxs(Flex, {
189
+ alignItems: "center",
190
+ justifyContent: "end",
191
+ children: [
192
+ canRead || canUpdate ? /*#__PURE__*/ jsx(IconButton, {
193
+ tag: Link,
194
+ to: workflow.id.toString(),
195
+ label: formatMessage({
196
+ id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',
197
+ defaultMessage: 'Edit {name}'
198
+ }, {
199
+ name: workflow.name
200
+ }),
201
+ variant: "ghost",
202
+ children: /*#__PURE__*/ jsx(Pencil, {})
203
+ }) : null,
204
+ workflows.length > 1 && canDelete ? /*#__PURE__*/ jsx(IconButton, {
205
+ withTooltip: false,
206
+ label: formatMessage({
207
+ id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',
208
+ defaultMessage: 'Delete {name}'
209
+ }, {
210
+ name: 'Default workflow'
211
+ }),
212
+ variant: "ghost",
213
+ onClick: (e)=>{
214
+ e.stopPropagation();
215
+ handleDeleteWorkflow(String(workflow.id));
216
+ },
217
+ children: /*#__PURE__*/ jsx(Trash, {})
218
+ }) : null
219
+ ]
220
+ })
221
+ })
222
+ ]
223
+ }, workflow.id))
224
+ })
225
+ ]
226
+ })
227
+ }),
228
+ /*#__PURE__*/ jsx(Dialog.Root, {
229
+ open: !!workflowToDelete,
230
+ onOpenChange: toggleConfirmDeleteDialog,
231
+ children: /*#__PURE__*/ jsx(ConfirmDialog, {
232
+ onConfirm: handleConfirmDeleteDialog,
233
+ children: formatMessage({
234
+ id: 'Settings.review-workflows.list.page.delete.confirm.body',
235
+ defaultMessage: 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?'
236
+ })
237
+ })
238
+ }),
239
+ /*#__PURE__*/ jsxs(LimitsModal.Root, {
240
+ open: showLimitModal,
241
+ onOpenChange: ()=>setShowLimitModal(false),
242
+ children: [
243
+ /*#__PURE__*/ jsx(LimitsModal.Title, {
244
+ children: formatMessage({
245
+ id: 'Settings.review-workflows.list.page.workflows.limit.title',
246
+ defaultMessage: 'You’ve reached the limit of workflows in your plan'
247
+ })
248
+ }),
249
+ /*#__PURE__*/ jsx(LimitsModal.Body, {
250
+ children: formatMessage({
251
+ id: 'Settings.review-workflows.list.page.workflows.limit.body',
252
+ defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.'
253
+ })
254
+ })
255
+ ]
256
+ })
257
+ ]
258
+ })
259
+ ]
260
+ });
261
+ };
262
+ const ProtectedListPage = ()=>{
263
+ const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['review-workflows']?.main);
264
+ return /*#__PURE__*/ jsx(Page.Protect, {
265
+ permissions: permissions,
266
+ children: /*#__PURE__*/ jsx(ReviewWorkflowsListView, {})
267
+ });
268
+ };
269
+
270
+ export { ProtectedListPage, ReviewWorkflowsListView };
271
+ //# sourceMappingURL=index-BiGArvbK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BiGArvbK.mjs","sources":["../../../admin/src/routes/settings/index.tsx"],"sourcesContent":["/* eslint-disable check-file/no-index */\n/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useTracking, ConfirmDialog, useRBAC, Table } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Flex, IconButton, TFooter, Typography, LinkButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Link, useNavigate } from 'react-router-dom';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport { CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME } from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { ContentType, useGetContentTypesQuery } from '../../services/content-manager';\n\nimport * as Layout from './components/Layout';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nexport const ReviewWorkflowsListView = () => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const [workflowToDelete, setWorkflowToDelete] = React.useState<string | null>(null);\n const [showLimitModal, setShowLimitModal] = React.useState<boolean>(false);\n const { data, isLoading: isLoadingModels } = useGetContentTypesQuery();\n const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows();\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']\n );\n const {\n allowedActions: { canCreate, canRead, canUpdate, canDelete },\n } = useRBAC(permissions);\n\n const limits = getFeature('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] as string;\n\n const handleDeleteWorkflow = (workflowId: string) => {\n setWorkflowToDelete(workflowId);\n };\n\n const toggleConfirmDeleteDialog = () => {\n setWorkflowToDelete(null);\n };\n\n const handleConfirmDeleteDialog = async () => {\n if (!workflowToDelete) return;\n\n await deleteAction(workflowToDelete);\n\n setWorkflowToDelete(null);\n };\n\n const handleCreateClick: React.MouseEventHandler<HTMLAnchorElement> &\n ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void) = (event) => {\n event.preventDefault();\n /**\n * If the current license has a workflow limit:\n * check if the total count of workflows exceeds that limit. If so,\n * prevent the navigation and show the limits overlay.\n *\n * If the current license does not have a limit (e.g. offline license):\n * allow the user to navigate to the create-view. In case they exceed the\n * current hard-limit of 200 they will see an error thrown by the API.\n */\n\n if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n event.preventDefault();\n setShowLimitModal(true);\n } else {\n navigate('create');\n trackUsage('willCreateWorkflow');\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoading && !isLicenseLoading) {\n if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal(true);\n }\n }\n }, [isLicenseLoading, isLoading, meta, meta?.workflowCount, numberOfWorkflows]);\n\n const headers = [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.name.title',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.stages.title',\n defaultMessage: 'Stages',\n }),\n name: 'stages',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',\n defaultMessage: 'Content Types',\n }),\n name: 'content-types',\n },\n ];\n\n if (isLoading || isLoadingModels) {\n return <Page.Loading />;\n }\n\n const contentTypes = Object.values(data ?? {}).reduce<ContentType[]>((acc, curr) => {\n acc.push(...curr);\n return acc;\n }, []);\n\n return (\n <>\n <Layout.Header\n primaryAction={\n canCreate ? (\n <LinkButton\n startIcon={<Plus />}\n size=\"S\"\n tag={NavLink}\n to=\"create\"\n onClick={handleCreateClick}\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n ) : null\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n <Table.Root\n isLoading={isLoading}\n rows={workflows}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" icon={<Plus />} onClick={handleCreateClick}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n ) : null\n }\n headers={headers}\n >\n <Table.Content>\n <Table.Head>\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n\n <Table.Body>\n {workflows.map((workflow) => (\n <Table.Row\n onClick={() => {\n navigate(`${workflow.id}`);\n }}\n key={workflow.id}\n >\n <Table.Cell width=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">\n {workflow.contentTypes\n .map((uid: string) => {\n const contentType = contentTypes.find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName ?? '';\n })\n .join(', ')}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n {canRead || canUpdate ? (\n <IconButton\n tag={Link}\n to={workflow.id.toString()}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {workflows.length > 1 && canDelete ? (\n <IconButton\n withTooltip={false}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteWorkflow(String(workflow.id));\n }}\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Dialog.Root open={!!workflowToDelete} onOpenChange={toggleConfirmDeleteDialog}>\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n\n <LimitsModal.Root open={showLimitModal} onOpenChange={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </Layout.Root>\n </>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ReviewWorkflowsListView />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage };\n"],"names":["ReviewWorkflowsListView","formatMessage","useIntl","navigate","useNavigate","trackUsage","useTracking","workflowToDelete","setWorkflowToDelete","React","useState","showLimitModal","setShowLimitModal","data","isLoading","isLoadingModels","useGetContentTypesQuery","meta","workflows","delete","deleteAction","useReviewWorkflows","getFeature","isLicenseLoading","useLicenseLimits","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canCreate","canRead","canUpdate","canDelete","useRBAC","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","handleDeleteWorkflow","workflowId","toggleConfirmDeleteDialog","handleConfirmDeleteDialog","handleCreateClick","event","preventDefault","workflowCount","parseInt","useEffect","headers","label","id","defaultMessage","name","_jsx","Page","Loading","contentTypes","Object","values","reduce","acc","curr","push","_jsxs","_Fragment","Layout","primaryAction","LinkButton","startIcon","Plus","size","tag","NavLink","to","onClick","subtitle","title","Table","Root","rows","footer","TFooter","cursor","icon","Content","Head","map","head","HeaderCell","Body","workflow","Row","Cell","width","Typography","textColor","fontWeight","ellipsis","stages","length","uid","contentType","find","info","displayName","join","Flex","alignItems","justifyContent","IconButton","Link","toString","variant","Pencil","withTooltip","e","stopPropagation","String","Trash","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","LimitsModal","Title","ProtectedListPage","main","Protect"],"mappings":"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"}