{"version":3,"file":"id.mjs","sources":["../../../../admin/src/routes/settings/id.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n  ConfirmDialog,\n  BackButton,\n  useNotification,\n  useAPIErrorHandler,\n  useRBAC,\n  Form,\n  Page,\n  FormProps,\n  FormHelpers,\n} from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Box, Button, Dialog, Flex, Typography } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport {\n  CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n  CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n} from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { isBaseQueryError } from '../../utils/api';\n\nimport * as Layout from './components/Layout';\nimport { Stages, WorkflowStage } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nimport type {\n  Stage,\n  StagePermission,\n  Workflow,\n} from '../../../../shared/contracts/review-workflows';\n\nconst havePermissionsChanged = (before?: StagePermission[], after?: StagePermission[]): boolean => {\n  if (before?.length !== after?.length) {\n    return true;\n  }\n  return !before?.every((beforePermission) =>\n    after?.some((afterPermission) => afterPermission.role === beforePermission.role)\n  );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst WORKFLOW_SCHEMA = yup.object({\n  contentTypes: yup.array().of(yup.string()),\n  name: yup\n    .string()\n    .max(255, {\n      id: 'review-workflows.validation.name.max-length',\n      defaultMessage: 'Name can not be longer than 255 characters',\n    })\n    .required()\n    .nullable(),\n  stages: yup\n    .array()\n    .of(\n      yup.object().shape({\n        name: yup\n          .string()\n          .nullable()\n          .required({\n            id: 'review-workflows.validation.stage.name',\n            defaultMessage: 'Name is required',\n          })\n          .max(255, {\n            id: 'review-workflows.validation.stage.max-length',\n            defaultMessage: 'Name can not be longer than 255 characters',\n          })\n          .test(\n            'unique-name',\n            {\n              id: 'review-workflows.validation.stage.duplicate',\n              defaultMessage: 'Stage name must be unique',\n            },\n            (stageName, context) => {\n              // @ts-expect-error it does exist.\n              const { stages } = context.from[1].value;\n\n              return stages.filter((stage: Stage) => stage.name === stageName).length === 1;\n            }\n          ),\n        color: yup\n          .string()\n          .nullable()\n          .required({\n            id: 'review-workflows.validation.stage.color',\n            defaultMessage: 'Color is required',\n          })\n          .matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),\n\n        fromPermissions: yup\n          .array(\n            yup.object({\n              role: yup\n                .number()\n                .strict()\n                .typeError({\n                  id: 'review-workflows.validation.stage.permissions.role.number',\n                  defaultMessage: 'Role must be of type number',\n                })\n                .required(),\n              action: yup.string().required({\n                id: 'review-workflows.validation.stage.permissions.action.required',\n                defaultMessage: 'Action is a required argument',\n              }),\n            })\n          )\n          .strict(),\n\n        toPermissions: yup\n          .array(\n            yup.object({\n              role: yup\n                .number()\n                .strict()\n                .typeError({\n                  id: 'review-workflows.validation.stage.permissions.role.number',\n                  defaultMessage: 'Role must be of type number',\n                })\n                .required(),\n              action: yup.string().required({\n                id: 'review-workflows.validation.stage.permissions.action.required',\n                defaultMessage: 'Action is a required argument',\n              }),\n            })\n          )\n          .strict(),\n      })\n    )\n    .min(1),\n  stageRequiredToPublish: yup.string().nullable(),\n});\n\nconst EditPage = () => {\n  const { id = '' } = useParams<{ id: string }>();\n  const isCreatingWorkflow = id === 'create';\n  const { formatMessage } = useIntl();\n  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n  const navigate = useNavigate();\n  const { toggleNotification } = useNotification();\n  const {\n    isLoading: isLoadingWorkflow,\n    meta,\n    workflows,\n    error,\n    update,\n    create,\n  } = useReviewWorkflows();\n  const permissions = useTypedSelector(\n    (state) => state.admin_app.permissions['settings']?.['review-workflows']\n  );\n  const {\n    allowedActions: { canDelete, canUpdate, canCreate },\n  } = useRBAC(permissions);\n\n  const [savePrompts, setSavePrompts] = React.useState<{\n    hasDeletedServerStages?: boolean;\n    hasReassignedContentTypes?: boolean;\n  }>({});\n  const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n  const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n\n  const currentWorkflow = workflows?.find((workflow) => workflow.id === parseInt(id, 10));\n  const contentTypesFromOtherWorkflows = workflows\n    ?.filter((workflow) => workflow.id !== parseInt(id, 10))\n    .flatMap((workflow) => workflow.contentTypes);\n\n  const limits = getFeature<string>('review-workflows');\n  const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n  const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n\n  interface FormValues {\n    name: string;\n    stages: WorkflowStage[];\n    contentTypes: string[];\n    stageRequiredToPublish: string | null;\n  }\n\n  const submitForm = async (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => {\n    try {\n      const { stageRequiredToPublish, ...rest } = data;\n      const stageRequiredToPublishName =\n        stageRequiredToPublish === ''\n          ? null\n          : rest.stages.find(\n              (stage) =>\n                stage.id === Number(stageRequiredToPublish) ||\n                stage.__temp_key__ === stageRequiredToPublish\n            )?.name;\n\n      if (!isCreatingWorkflow) {\n        const res = await update(id, {\n          ...rest,\n          // compare permissions of stages and only submit them if at least one has\n          // changed; this enables partial updates e.g. for users who don't have\n          // permissions to see roles\n          stages: rest.stages.map((stage) => {\n            const serverStage = currentWorkflow?.stages?.find(\n              (serverStage) => serverStage.id === stage?.id\n            );\n\n            const hasUpdatedPermissions =\n              !serverStage ||\n              havePermissionsChanged(serverStage.fromPermissions, stage.fromPermissions);\n            const hasUpdatedToPermissions =\n              !serverStage ||\n              havePermissionsChanged(serverStage.toPermissions, stage.toPermissions);\n\n            return {\n              ...stage,\n              fromPermissions: hasUpdatedPermissions ? stage.fromPermissions : undefined,\n              toPermissions: hasUpdatedToPermissions ? stage.toPermissions : undefined,\n            } satisfies Stage;\n          }),\n          stageRequiredToPublishName,\n        });\n\n        if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n          helpers.setErrors(formatValidationErrors(res.error));\n        }\n      } else {\n        const res = await create({\n          ...rest,\n          stageRequiredToPublishName,\n        });\n\n        if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n          helpers.setErrors(formatValidationErrors(res.error));\n        } else if ('data' in res) {\n          navigate(`../${res.data.id}`, { replace: true });\n        }\n      }\n    } catch (error) {\n      toggleNotification({\n        type: 'danger',\n        message: formatMessage({\n          id: 'notification.error',\n          defaultMessage: 'An error occurred',\n        }),\n      });\n    }\n    setSavePrompts({});\n  };\n\n  const handleConfirmDeleteDialog =\n    (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => async () => {\n      await submitForm(data, helpers);\n    };\n\n  const handleConfirmClose = () => {\n    setSavePrompts({});\n  };\n\n  const handleSubmit: FormProps<FormValues>['onSubmit'] = async (data, helpers) => {\n    const isContentTypeReassignment = data.contentTypes.some((contentType) =>\n      contentTypesFromOtherWorkflows?.includes(contentType)\n    );\n    const hasDeletedServerStages =\n      !isCreatingWorkflow &&\n      !currentWorkflow?.stages.every((stage) =>\n        data.stages.some((newStage) => newStage.id === stage.id)\n      );\n\n    if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n      /**\n       * If the current license has a limit, check if the total count of workflows\n       * exceeds that limit and display the limits modal instead of sending the\n       * update, because it would throw an API error.\n       */\n      setShowLimitModal('workflow');\n\n      /**\n       * If the current license has a limit, check if the total count of stages\n       * exceeds that limit and display the limits modal instead of sending the\n       * update, because it would throw an API error.\n       */\n    } else if (\n      data.stages &&\n      stagesPerWorkflow &&\n      data.stages.length > parseInt(stagesPerWorkflow, 10)\n    ) {\n      setShowLimitModal('stage');\n    } else if (hasDeletedServerStages || isContentTypeReassignment) {\n      if (hasDeletedServerStages) {\n        setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n      }\n\n      if (isContentTypeReassignment) {\n        setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n      }\n    } else {\n      await submitForm(data, helpers);\n    }\n  };\n\n  /**\n   * If the current license has a limit:\n   * check if the total count of workflows or stages exceeds that limit and display\n   * the limits modal on page load. It can be closed by the user, but the\n   * API will throw an error in case they try to create a new workflow or update the\n   * stages.\n   *\n   * If the current license does not have a limit (e.g. offline license):\n   * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n   * the API will throw an error.\n   *\n   */\n  React.useEffect(() => {\n    if (!isLoadingWorkflow && !isLicenseLoading) {\n      if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n        setShowLimitModal('workflow');\n      } else if (\n        currentWorkflow &&\n        currentWorkflow.stages &&\n        stagesPerWorkflow &&\n        currentWorkflow.stages.length > parseInt(stagesPerWorkflow, 10)\n      ) {\n        setShowLimitModal('stage');\n      }\n    }\n  }, [\n    currentWorkflow,\n    isLicenseLoading,\n    isLoadingWorkflow,\n    limits,\n    meta,\n    numberOfWorkflows,\n    stagesPerWorkflow,\n  ]);\n\n  const initialValues: FormValues = React.useMemo(() => {\n    if (isCreatingWorkflow || !currentWorkflow) {\n      return {\n        name: '',\n        stages: [],\n        contentTypes: [],\n        stageRequiredToPublish: '',\n      };\n    } else {\n      return {\n        name: currentWorkflow.name,\n        stages: addTmpKeysToStages(currentWorkflow.stages),\n        contentTypes: currentWorkflow.contentTypes,\n        stageRequiredToPublish: currentWorkflow.stageRequiredToPublish?.id.toString() ?? '',\n      };\n    }\n  }, [currentWorkflow, isCreatingWorkflow]);\n\n  if (isLoadingWorkflow) {\n    return <Page.Loading />;\n  }\n\n  if (error) {\n    return <Page.Error />;\n  }\n\n  return (\n    <>\n      <Layout.DragLayerRendered />\n\n      <Form\n        method={isCreatingWorkflow ? 'POST' : 'PUT'}\n        initialValues={initialValues}\n        validationSchema={WORKFLOW_SCHEMA}\n        onSubmit={handleSubmit}\n      >\n        {({ modified, isSubmitting, values, setErrors }) => (\n          <>\n            <Layout.Header\n              navigationAction={\n                // The back link for mobile works differently; it is placed higher up in the DOM.\n                <Box display={{ initial: 'none', medium: 'block' }}>\n                  <BackButton fallback=\"..\" />\n                </Box>\n              }\n              primaryAction={\n                canUpdate || canCreate ? (\n                  <Button\n                    startIcon={<Check />}\n                    type=\"submit\"\n                    disabled={!modified || isSubmitting || values.stages.length === 0}\n                    // if the confirm dialog is open the loading state is on\n                    // the confirm button already\n                    loading={!Boolean(Object.keys(savePrompts).length > 0) && isSubmitting}\n                    fullWidth\n                  >\n                    {formatMessage({\n                      id: 'global.save',\n                      defaultMessage: 'Save',\n                    })}\n                  </Button>\n                ) : null\n              }\n              subtitle={formatMessage(\n                {\n                  id: 'review-workflows.page.subtitle',\n                  defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n                },\n                { count: currentWorkflow?.stages?.length ?? 0 }\n              )}\n              title={\n                currentWorkflow?.name ||\n                formatMessage({\n                  id: 'Settings.review-workflows.create.page.title',\n                  defaultMessage: 'Create Review Workflow',\n                })\n              }\n            />\n            <Layout.Root>\n              <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n                <WorkflowAttributes canUpdate={canUpdate || canCreate} />\n                <Stages\n                  canDelete={canDelete}\n                  canUpdate={canUpdate || canCreate}\n                  isCreating={isCreatingWorkflow}\n                />\n              </Flex>\n            </Layout.Root>\n            <Dialog.Root\n              open={Object.keys(savePrompts).length > 0}\n              onOpenChange={handleConfirmClose}\n            >\n              <ConfirmDialog onConfirm={handleConfirmDeleteDialog(values, { setErrors })}>\n                <Flex direction=\"column\" gap={5}>\n                  {savePrompts.hasDeletedServerStages && (\n                    <Typography textAlign=\"center\" variant=\"omega\">\n                      {formatMessage({\n                        id: 'review-workflows.page.delete.confirm.stages.body',\n                        defaultMessage:\n                          'All entries assigned to deleted stages will be moved to the previous stage.',\n                      })}\n                    </Typography>\n                  )}\n\n                  {savePrompts.hasReassignedContentTypes && (\n                    <Typography textAlign=\"center\" variant=\"omega\">\n                      {formatMessage(\n                        {\n                          id: 'review-workflows.page.delete.confirm.contentType.body',\n                          defaultMessage:\n                            '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n                        },\n                        {\n                          count:\n                            contentTypesFromOtherWorkflows?.filter((contentType) =>\n                              values.contentTypes.includes(contentType)\n                            ).length ?? 0,\n                        }\n                      )}\n                    </Typography>\n                  )}\n\n                  <Typography textAlign=\"center\" variant=\"omega\">\n                    {formatMessage({\n                      id: 'review-workflows.page.delete.confirm.confirm',\n                      defaultMessage: 'Are you sure you want to save?',\n                    })}\n                  </Typography>\n                </Flex>\n              </ConfirmDialog>\n            </Dialog.Root>\n          </>\n        )}\n      </Form>\n\n      <LimitsModal.Root\n        open={showLimitModal === 'workflow'}\n        onOpenChange={() => setShowLimitModal(null)}\n      >\n        <LimitsModal.Title>\n          {formatMessage({\n            id: 'review-workflows.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":["havePermissionsChanged","before","after","length","every","beforePermission","some","afterPermission","role","WORKFLOW_SCHEMA","yup","object","contentTypes","array","of","string","name","max","id","defaultMessage","required","nullable","stages","shape","test","stageName","context","from","value","filter","stage","color","matches","fromPermissions","number","strict","typeError","action","toPermissions","min","stageRequiredToPublish","EditPage","useParams","isCreatingWorkflow","formatMessage","useIntl","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","toggleNotification","useNotification","isLoading","isLoadingWorkflow","meta","workflows","error","update","create","useReviewWorkflows","permissions","useTypedSelector","state","admin_app","allowedActions","canDelete","canUpdate","canCreate","useRBAC","savePrompts","setSavePrompts","React","useState","getFeature","isLicenseLoading","useLicenseLimits","showLimitModal","setShowLimitModal","currentWorkflow","find","workflow","parseInt","contentTypesFromOtherWorkflows","flatMap","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","stagesPerWorkflow","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","submitForm","data","helpers","rest","stageRequiredToPublishName","Number","__temp_key__","res","map","serverStage","hasUpdatedPermissions","hasUpdatedToPermissions","undefined","isBaseQueryError","setErrors","replace","type","message","handleConfirmDeleteDialog","handleConfirmClose","handleSubmit","isContentTypeReassignment","contentType","includes","hasDeletedServerStages","newStage","workflowCount","prev","hasReassignedContentTypes","useEffect","initialValues","useMemo","addTmpKeysToStages","toString","_jsx","Page","Loading","Error","_jsxs","_Fragment","Layout","Form","method","validationSchema","onSubmit","modified","isSubmitting","values","navigationAction","Box","display","initial","medium","BackButton","fallback","primaryAction","Button","startIcon","Check","disabled","loading","Boolean","Object","keys","fullWidth","subtitle","count","title","Flex","alignItems","direction","gap","WorkflowAttributes","Stages","isCreating","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","Typography","textAlign","variant","LimitsModal","Title","Body","generateNKeysBetween","datum","index","ProtectedEditPage","read","settings","Protect"],"mappings":"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"}