@strapi/review-workflows 5.46.0 → 5.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/index.js +6 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +7 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/routes/content-manager/model/components/AssigneeFilter.js +83 -0
- package/dist/admin/routes/content-manager/model/components/AssigneeFilter.js.map +1 -0
- package/dist/admin/routes/content-manager/model/components/AssigneeFilter.mjs +62 -0
- package/dist/admin/routes/content-manager/model/components/AssigneeFilter.mjs.map +1 -0
- package/dist/admin/routes/content-manager/model/components/StageFilter.js +70 -0
- package/dist/admin/routes/content-manager/model/components/StageFilter.js.map +1 -0
- package/dist/admin/routes/content-manager/model/components/StageFilter.mjs +68 -0
- package/dist/admin/routes/content-manager/model/components/StageFilter.mjs.map +1 -0
- package/dist/admin/routes/content-manager/model/constants.js +63 -9
- package/dist/admin/routes/content-manager/model/constants.js.map +1 -1
- package/dist/admin/routes/content-manager/model/constants.mjs +63 -10
- package/dist/admin/routes/content-manager/model/constants.mjs.map +1 -1
- package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js +5 -5
- package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js.map +1 -1
- package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs +5 -5
- package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs.map +1 -1
- package/dist/admin/routes/content-manager/model/id/components/StageSelect.js +45 -18
- package/dist/admin/routes/content-manager/model/id/components/StageSelect.js.map +1 -1
- package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs +45 -18
- package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs.map +1 -1
- package/dist/admin/routes/settings/components/Stages.js +1 -1
- package/dist/admin/routes/settings/components/Stages.js.map +1 -1
- package/dist/admin/routes/settings/components/Stages.mjs +1 -1
- package/dist/admin/routes/settings/components/Stages.mjs.map +1 -1
- package/dist/admin/routes/settings/id.js +4 -4
- package/dist/admin/routes/settings/id.js.map +1 -1
- package/dist/admin/routes/settings/id.mjs +4 -4
- package/dist/admin/routes/settings/id.mjs.map +1 -1
- package/dist/admin/routes/settings/index.js +2 -2
- package/dist/admin/routes/settings/index.js.map +1 -1
- package/dist/admin/routes/settings/index.mjs +2 -2
- package/dist/admin/routes/settings/index.mjs.map +1 -1
- package/dist/admin/src/utils/cm-hooks.d.ts +42 -2
- package/dist/admin/translations/cs.json.js +2 -1
- package/dist/admin/translations/cs.json.js.map +1 -1
- package/dist/admin/translations/cs.json.mjs +2 -1
- package/dist/admin/translations/cs.json.mjs.map +1 -1
- package/dist/admin/translations/de.json.js +8 -0
- package/dist/admin/translations/de.json.js.map +1 -0
- package/dist/admin/translations/de.json.mjs +6 -0
- package/dist/admin/translations/de.json.mjs.map +1 -0
- package/dist/admin/translations/en.json.js +20 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +20 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +2 -1
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +2 -1
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +8 -0
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/translations/fr.json.mjs +6 -0
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/translations/nl.json.js +2 -1
- package/dist/admin/translations/nl.json.js.map +1 -1
- package/dist/admin/translations/nl.json.mjs +2 -1
- package/dist/admin/translations/nl.json.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +8 -0
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/translations/pl.json.mjs +6 -0
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/translations/ru.json.js +8 -0
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/translations/ru.json.mjs +6 -0
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/translations/uk.json.js +2 -1
- package/dist/admin/translations/uk.json.js.map +1 -1
- package/dist/admin/translations/uk.json.mjs +2 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -1
- package/dist/admin/translations/zh-Hans.json.js +8 -0
- package/dist/admin/translations/zh-Hans.json.js.map +1 -0
- package/dist/admin/translations/zh-Hans.json.mjs +6 -0
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/utils/cm-hooks.js +16 -0
- package/dist/admin/utils/cm-hooks.js.map +1 -1
- package/dist/admin/utils/cm-hooks.mjs +17 -2
- package/dist/admin/utils/cm-hooks.mjs.map +1 -1
- package/dist/server/controllers/stages.js +24 -14
- package/dist/server/controllers/stages.js.map +1 -1
- package/dist/server/controllers/stages.mjs +24 -14
- package/dist/server/controllers/stages.mjs.map +1 -1
- package/dist/server/src/controllers/stages.d.ts.map +1 -1
- package/dist/shared/contracts/review-workflows.d.ts +2 -0
- package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.mjs","sources":["../../../../admin/src/routes/settings/id.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n BackButton,\n useNotification,\n useAPIErrorHandler,\n useRBAC,\n Form,\n Page,\n FormProps,\n FormHelpers,\n} from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Box, Button, Dialog, Flex, Typography } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport {\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n} from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { isBaseQueryError } from '../../utils/api';\n\nimport * as Layout from './components/Layout';\nimport { Stages, WorkflowStage } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nimport type {\n Stage,\n StagePermission,\n Workflow,\n} from '../../../../shared/contracts/review-workflows';\n\nconst havePermissionsChanged = (before?: StagePermission[], after?: StagePermission[]): boolean => {\n if (before?.length !== after?.length) {\n return true;\n }\n return !before?.every((beforePermission) =>\n after?.some((afterPermission) => afterPermission.role === beforePermission.role)\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst WORKFLOW_SCHEMA = yup.object({\n contentTypes: yup.array().of(yup.string()),\n name: yup\n .string()\n .max(255, {\n id: 'review-workflows.validation.name.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n .required()\n .nullable(),\n stages: yup\n .array()\n .of(\n yup.object().shape({\n name: yup\n .string()\n .nullable()\n .required({\n id: 'review-workflows.validation.stage.name',\n defaultMessage: 'Name is required',\n })\n .max(255, {\n id: 'review-workflows.validation.stage.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n .test(\n 'unique-name',\n {\n id: 'review-workflows.validation.stage.duplicate',\n defaultMessage: 'Stage name must be unique',\n },\n (stageName, context) => {\n // @ts-expect-error it does exist.\n const { stages } = context.from[1].value;\n\n return stages.filter((stage: Stage) => stage.name === stageName).length === 1;\n }\n ),\n color: yup\n .string()\n .nullable()\n .required({\n id: 'review-workflows.validation.stage.color',\n defaultMessage: 'Color is required',\n })\n .matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),\n\n fromPermissions: yup\n .array(\n yup.object({\n role: yup\n .number()\n .strict()\n .typeError({\n id: 'review-workflows.validation.stage.permissions.role.number',\n defaultMessage: 'Role must be of type number',\n })\n .required(),\n action: yup.string().required({\n id: 'review-workflows.validation.stage.permissions.action.required',\n defaultMessage: 'Action is a required argument',\n }),\n })\n )\n .strict(),\n\n toPermissions: yup\n .array(\n yup.object({\n role: yup\n .number()\n .strict()\n .typeError({\n id: 'review-workflows.validation.stage.permissions.role.number',\n defaultMessage: 'Role must be of type number',\n })\n .required(),\n action: yup.string().required({\n id: 'review-workflows.validation.stage.permissions.action.required',\n defaultMessage: 'Action is a required argument',\n }),\n })\n )\n .strict(),\n })\n )\n .min(1),\n stageRequiredToPublish: yup.string().nullable(),\n});\n\nconst EditPage = () => {\n const { id = '' } = useParams<{ id: string }>();\n const isCreatingWorkflow = id === 'create';\n const { formatMessage } = useIntl();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const {\n isLoading: isLoadingWorkflow,\n meta,\n workflows,\n error,\n update,\n create,\n } = useReviewWorkflows();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions['settings']?.['review-workflows']\n );\n const {\n allowedActions: { canDelete, canUpdate, canCreate },\n } = useRBAC(permissions);\n\n const [savePrompts, setSavePrompts] = React.useState<{\n hasDeletedServerStages?: boolean;\n hasReassignedContentTypes?: boolean;\n }>({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n\n const currentWorkflow = workflows?.find((workflow) => workflow.id === parseInt(id, 10));\n const contentTypesFromOtherWorkflows = workflows\n ?.filter((workflow) => workflow.id !== parseInt(id, 10))\n .flatMap((workflow) => workflow.contentTypes);\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n\n interface FormValues {\n name: string;\n stages: WorkflowStage[];\n contentTypes: string[];\n stageRequiredToPublish: string | null;\n }\n\n const submitForm = async (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => {\n try {\n const { stageRequiredToPublish, ...rest } = data;\n const stageRequiredToPublishName =\n stageRequiredToPublish === ''\n ? null\n : rest.stages.find(\n (stage) =>\n stage.id === Number(stageRequiredToPublish) ||\n stage.__temp_key__ === stageRequiredToPublish\n )?.name;\n\n if (!isCreatingWorkflow) {\n const res = await update(id, {\n ...rest,\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: rest.stages.map((stage) => {\n const serverStage = currentWorkflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n const hasUpdatedPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.fromPermissions, stage.fromPermissions);\n const hasUpdatedToPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.toPermissions, stage.toPermissions);\n\n return {\n ...stage,\n fromPermissions: hasUpdatedPermissions ? stage.fromPermissions : undefined,\n toPermissions: hasUpdatedToPermissions ? stage.toPermissions : undefined,\n } satisfies Stage;\n }),\n stageRequiredToPublishName,\n });\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n }\n } else {\n const res = await create({\n ...rest,\n stageRequiredToPublishName,\n });\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else if ('data' in res) {\n navigate(`../${res.data.id}`, { replace: true });\n }\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n setSavePrompts({});\n };\n\n const handleConfirmDeleteDialog =\n (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => async () => {\n await submitForm(data, helpers);\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const handleSubmit: FormProps<FormValues>['onSubmit'] = async (data, helpers) => {\n const isContentTypeReassignment = data.contentTypes.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n const hasDeletedServerStages =\n !isCreatingWorkflow &&\n !currentWorkflow?.stages.every((stage) =>\n data.stages.some((newStage) => newStage.id === stage.id)\n );\n\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n data.stages &&\n stagesPerWorkflow &&\n data.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\n } else {\n await submitForm(data, helpers);\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n } else if (\n currentWorkflow &&\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta,\n numberOfWorkflows,\n stagesPerWorkflow,\n ]);\n\n const initialValues: FormValues = React.useMemo(() => {\n if (isCreatingWorkflow || !currentWorkflow) {\n return {\n name: '',\n stages: [],\n contentTypes: [],\n stageRequiredToPublish: '',\n };\n } else {\n return {\n name: currentWorkflow.name,\n stages: addTmpKeysToStages(currentWorkflow.stages),\n contentTypes: currentWorkflow.contentTypes,\n stageRequiredToPublish: currentWorkflow.stageRequiredToPublish?.id.toString() ?? '',\n };\n }\n }, [currentWorkflow, isCreatingWorkflow]);\n\n if (isLoadingWorkflow) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <Form\n method={isCreatingWorkflow ? 'POST' : 'PUT'}\n initialValues={initialValues}\n validationSchema={WORKFLOW_SCHEMA}\n onSubmit={handleSubmit}\n >\n {({ modified, isSubmitting, values, setErrors }) => (\n <>\n <Layout.Header\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"..\" />\n </Box>\n }\n primaryAction={\n canUpdate || canCreate ? (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n disabled={!modified || isSubmitting || values.stages.length === 0}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Boolean(Object.keys(savePrompts).length > 0) && isSubmitting}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: 'review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n title={\n currentWorkflow?.name ||\n formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })\n }\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate || canCreate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate || canCreate}\n isCreating={isCreatingWorkflow}\n />\n </Flex>\n </Layout.Root>\n <Dialog.Root\n open={Object.keys(savePrompts).length > 0}\n onOpenChange={handleConfirmClose}\n >\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog(values, { setErrors })}>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count:\n contentTypesFromOtherWorkflows?.filter((contentType) =>\n values.contentTypes.includes(contentType)\n ).length ?? 0,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n </>\n )}\n </Form>\n\n <LimitsModal.Root\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.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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"}
|
|
1
|
+
{"version":3,"file":"id.mjs","sources":["../../../../admin/src/routes/settings/id.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n BackButton,\n useNotification,\n useAPIErrorHandler,\n useRBAC,\n Form,\n Page,\n FormProps,\n FormHelpers,\n} from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Box, Button, Dialog, Flex, Typography } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport {\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n} from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { isBaseQueryError } from '../../utils/api';\n\nimport * as Layout from './components/Layout';\nimport { Stages, WorkflowStage } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nimport type {\n Stage,\n StagePermission,\n Workflow,\n} from '../../../../shared/contracts/review-workflows';\n\nconst havePermissionsChanged = (before?: StagePermission[], after?: StagePermission[]): boolean => {\n if (before?.length !== after?.length) {\n return true;\n }\n return !before?.every((beforePermission) =>\n after?.some((afterPermission) => afterPermission.role === beforePermission.role)\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst WORKFLOW_SCHEMA = yup.object({\n contentTypes: yup.array().of(yup.string()),\n name: yup\n .string()\n .max(255, {\n id: 'review-workflows.validation.name.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n .required()\n .nullable(),\n stages: yup\n .array()\n .of(\n yup.object().shape({\n name: yup\n .string()\n .nullable()\n .required({\n id: 'review-workflows.validation.stage.name',\n defaultMessage: 'Name is required',\n })\n .max(255, {\n id: 'review-workflows.validation.stage.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n .test(\n 'unique-name',\n {\n id: 'review-workflows.validation.stage.duplicate',\n defaultMessage: 'Stage name must be unique',\n },\n (stageName, context) => {\n // @ts-expect-error it does exist.\n const { stages } = context.from[1].value;\n\n return stages.filter((stage: Stage) => stage.name === stageName).length === 1;\n }\n ),\n color: yup\n .string()\n .nullable()\n .required({\n id: 'review-workflows.validation.stage.color',\n defaultMessage: 'Color is required',\n })\n .matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),\n\n fromPermissions: yup\n .array(\n yup.object({\n role: yup\n .number()\n .strict()\n .typeError({\n id: 'review-workflows.validation.stage.permissions.role.number',\n defaultMessage: 'Role must be of type number',\n })\n .required(),\n action: yup.string().required({\n id: 'review-workflows.validation.stage.permissions.action.required',\n defaultMessage: 'Action is a required argument',\n }),\n })\n )\n .strict(),\n\n toPermissions: yup\n .array(\n yup.object({\n role: yup\n .number()\n .strict()\n .typeError({\n id: 'review-workflows.validation.stage.permissions.role.number',\n defaultMessage: 'Role must be of type number',\n })\n .required(),\n action: yup.string().required({\n id: 'review-workflows.validation.stage.permissions.action.required',\n defaultMessage: 'Action is a required argument',\n }),\n })\n )\n .strict(),\n })\n )\n .min(1),\n stageRequiredToPublish: yup.string().nullable(),\n});\n\nconst EditPage = () => {\n const { id = '' } = useParams<{ id: string }>();\n const isCreatingWorkflow = id === 'create';\n const { formatMessage } = useIntl();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const {\n isLoading: isLoadingWorkflow,\n meta,\n workflows,\n error,\n update,\n create,\n } = useReviewWorkflows();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions['settings']?.['review-workflows']\n );\n const {\n allowedActions: { canDelete, canUpdate, canCreate },\n } = useRBAC(permissions);\n\n const [savePrompts, setSavePrompts] = React.useState<{\n hasDeletedServerStages?: boolean;\n hasReassignedContentTypes?: boolean;\n }>({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n\n const currentWorkflow = workflows?.find((workflow) => workflow.id === parseInt(id, 10));\n const contentTypesFromOtherWorkflows = workflows\n ?.filter((workflow) => workflow.id !== parseInt(id, 10))\n .flatMap((workflow) => workflow.contentTypes);\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n\n interface FormValues {\n name: string;\n stages: WorkflowStage[];\n contentTypes: string[];\n stageRequiredToPublish: string | null;\n }\n\n const submitForm = async (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => {\n try {\n const { stageRequiredToPublish, ...rest } = data;\n const stageRequiredToPublishName =\n stageRequiredToPublish === ''\n ? null\n : rest.stages.find(\n (stage) =>\n stage.id === Number(stageRequiredToPublish) ||\n stage.__temp_key__ === stageRequiredToPublish\n )?.name;\n\n if (!isCreatingWorkflow) {\n const res = await update(id, {\n ...rest,\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: rest.stages.map((stage) => {\n const serverStage = currentWorkflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n const hasUpdatedPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.fromPermissions, stage.fromPermissions);\n const hasUpdatedToPermissions =\n !serverStage ||\n havePermissionsChanged(serverStage.toPermissions, stage.toPermissions);\n\n return {\n ...stage,\n fromPermissions: hasUpdatedPermissions ? stage.fromPermissions : undefined,\n toPermissions: hasUpdatedToPermissions ? stage.toPermissions : undefined,\n } satisfies Stage;\n }),\n stageRequiredToPublishName,\n });\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n }\n } else {\n const res = await create({\n ...rest,\n stageRequiredToPublishName,\n });\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else if ('data' in res) {\n navigate(`../${res.data.id}`, { replace: true });\n }\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n setSavePrompts({});\n };\n\n const handleConfirmDeleteDialog =\n (data: FormValues, helpers: Pick<FormHelpers, 'setErrors'>) => async () => {\n await submitForm(data, helpers);\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const handleSubmit: FormProps<FormValues>['onSubmit'] = async (data, helpers) => {\n const isContentTypeReassignment = data.contentTypes.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n const hasDeletedServerStages =\n !isCreatingWorkflow &&\n !currentWorkflow?.stages.every((stage) =>\n data.stages.some((newStage) => newStage.id === stage.id)\n );\n\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n data.stages &&\n stagesPerWorkflow &&\n data.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\n } else {\n await submitForm(data, helpers);\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n } else if (\n currentWorkflow &&\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta,\n numberOfWorkflows,\n stagesPerWorkflow,\n ]);\n\n const initialValues: FormValues = React.useMemo(() => {\n if (isCreatingWorkflow || !currentWorkflow) {\n return {\n name: '',\n stages: [],\n contentTypes: [],\n stageRequiredToPublish: '',\n };\n } else {\n return {\n name: currentWorkflow.name,\n stages: addTmpKeysToStages(currentWorkflow.stages),\n contentTypes: currentWorkflow.contentTypes,\n stageRequiredToPublish: currentWorkflow.stageRequiredToPublish?.id.toString() ?? '',\n };\n }\n }, [currentWorkflow, isCreatingWorkflow]);\n\n if (isLoadingWorkflow) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <Form\n method={isCreatingWorkflow ? 'POST' : 'PUT'}\n initialValues={initialValues}\n validationSchema={WORKFLOW_SCHEMA}\n onSubmit={handleSubmit}\n >\n {({ modified, isSubmitting, values, setErrors }) => (\n <>\n <Layout.Header\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"..\" />\n </Box>\n }\n primaryAction={\n canUpdate || canCreate ? (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n disabled={!modified || isSubmitting || values.stages.length === 0}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Boolean(Object.keys(savePrompts).length > 0) && isSubmitting}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: 'review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n title={\n currentWorkflow?.name ||\n formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })\n }\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate || canCreate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate || canCreate}\n isCreating={isCreatingWorkflow}\n />\n </Flex>\n </Layout.Root>\n <Dialog.Root\n open={Object.keys(savePrompts).length > 0}\n onOpenChange={handleConfirmClose}\n >\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog(values, { setErrors })}>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count:\n contentTypesFromOtherWorkflows?.filter((contentType) =>\n values.contentTypes.includes(contentType)\n ).length ?? 0,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n </>\n )}\n </Form>\n\n <LimitsModal.Root\n open={showLimitModal === 'workflow'}\n onOpenChange={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'review-workflows.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root\n open={showLimitModal === 'stage'}\n onOpenChange={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'review-workflows.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n\nconst addTmpKeysToStages = (data: Workflow['stages']) => {\n const keys = generateNKeysBetween(undefined, undefined, data.length);\n\n return data.map((datum, index) => ({\n ...datum,\n __temp_key__: keys[index],\n }));\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector((state) => {\n const {\n create = [],\n update = [],\n read = [],\n } = state.admin_app.permissions.settings?.['review-workflows'] ?? {};\n\n return [...create, ...update, ...read];\n });\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedEditPage };\n"],"names":["havePermissionsChanged","before","after","length","every","beforePermission","some","afterPermission","role","WORKFLOW_SCHEMA","yup","object","contentTypes","array","of","string","name","max","id","defaultMessage","required","nullable","stages","shape","test","stageName","context","from","value","filter","stage","color","matches","fromPermissions","number","strict","typeError","action","toPermissions","min","stageRequiredToPublish","EditPage","useParams","isCreatingWorkflow","formatMessage","useIntl","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","toggleNotification","useNotification","isLoading","isLoadingWorkflow","meta","workflows","error","update","create","useReviewWorkflows","permissions","useTypedSelector","state","admin_app","allowedActions","canDelete","canUpdate","canCreate","useRBAC","savePrompts","setSavePrompts","React","useState","getFeature","isLicenseLoading","useLicenseLimits","showLimitModal","setShowLimitModal","currentWorkflow","find","workflow","parseInt","contentTypesFromOtherWorkflows","flatMap","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","stagesPerWorkflow","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","submitForm","data","helpers","rest","stageRequiredToPublishName","Number","__temp_key__","res","map","serverStage","hasUpdatedPermissions","hasUpdatedToPermissions","undefined","isBaseQueryError","setErrors","replace","type","message","handleConfirmDeleteDialog","handleConfirmClose","handleSubmit","isContentTypeReassignment","contentType","includes","hasDeletedServerStages","newStage","workflowCount","prev","hasReassignedContentTypes","useEffect","initialValues","useMemo","addTmpKeysToStages","toString","_jsx","Page","Loading","Error","_jsxs","_Fragment","Layout","Form","method","validationSchema","onSubmit","modified","isSubmitting","values","navigationAction","Box","display","initial","medium","BackButton","fallback","primaryAction","Button","startIcon","Check","disabled","loading","Boolean","Object","keys","fullWidth","subtitle","count","title","Flex","alignItems","direction","gap","WorkflowAttributes","Stages","isCreating","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","Typography","textAlign","variant","LimitsModal","Title","Body","generateNKeysBetween","datum","index","ProtectedEditPage","read","settings","Protect"],"mappings":"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"}
|
|
@@ -265,13 +265,13 @@ const ReviewWorkflowsListView = ()=>{
|
|
|
265
265
|
children: [
|
|
266
266
|
/*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Title, {
|
|
267
267
|
children: formatMessage({
|
|
268
|
-
id: '
|
|
268
|
+
id: 'review-workflows.workflows.limit.title',
|
|
269
269
|
defaultMessage: 'You’ve reached the limit of workflows in your plan'
|
|
270
270
|
})
|
|
271
271
|
}),
|
|
272
272
|
/*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Body, {
|
|
273
273
|
children: formatMessage({
|
|
274
|
-
id: '
|
|
274
|
+
id: 'review-workflows.workflows.limit.body',
|
|
275
275
|
defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.'
|
|
276
276
|
})
|
|
277
277
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../admin/src/routes/settings/index.tsx"],"sourcesContent":["/* eslint-disable check-file/no-index */\n/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useTracking, ConfirmDialog, useRBAC, Table } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Flex, IconButton, TFooter, Typography, LinkButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Link, useNavigate } from 'react-router-dom';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport { CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME } from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { ContentType, useGetContentTypesQuery } from '../../services/content-manager';\n\nimport * as Layout from './components/Layout';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nexport const ReviewWorkflowsListView = () => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const [workflowToDelete, setWorkflowToDelete] = React.useState<string | null>(null);\n const [showLimitModal, setShowLimitModal] = React.useState<boolean>(false);\n const { data, isLoading: isLoadingModels } = useGetContentTypesQuery();\n const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows();\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']\n );\n const {\n allowedActions: { canCreate, canRead, canUpdate, canDelete },\n } = useRBAC(permissions);\n\n const limits = getFeature('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] as string;\n\n const handleDeleteWorkflow = (workflowId: string) => {\n setWorkflowToDelete(workflowId);\n };\n\n const toggleConfirmDeleteDialog = () => {\n setWorkflowToDelete(null);\n };\n\n const handleConfirmDeleteDialog = async () => {\n if (!workflowToDelete) return;\n\n await deleteAction(workflowToDelete);\n\n setWorkflowToDelete(null);\n };\n\n const handleCreateClick: React.MouseEventHandler<HTMLAnchorElement> &\n ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void) = (event) => {\n event.preventDefault();\n /**\n * If the current license has a workflow limit:\n * check if the total count of workflows exceeds that limit. If so,\n * prevent the navigation and show the limits overlay.\n *\n * If the current license does not have a limit (e.g. offline license):\n * allow the user to navigate to the create-view. In case they exceed the\n * current hard-limit of 200 they will see an error thrown by the API.\n */\n\n if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n event.preventDefault();\n setShowLimitModal(true);\n } else {\n navigate('create');\n trackUsage('willCreateWorkflow');\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoading && !isLicenseLoading) {\n if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal(true);\n }\n }\n }, [isLicenseLoading, isLoading, meta, meta?.workflowCount, numberOfWorkflows]);\n\n const headers = [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.name.title',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.stages.title',\n defaultMessage: 'Stages',\n }),\n name: 'stages',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',\n defaultMessage: 'Content Types',\n }),\n name: 'content-types',\n },\n ];\n\n if (isLoading || isLoadingModels) {\n return <Page.Loading />;\n }\n\n const contentTypes = Object.values(data ?? {}).reduce<ContentType[]>((acc, curr) => {\n acc.push(...curr);\n return acc;\n }, []);\n\n return (\n <>\n <Layout.Header\n primaryAction={\n canCreate ? (\n <LinkButton\n startIcon={<Plus />}\n size=\"S\"\n tag={NavLink}\n to=\"create\"\n onClick={handleCreateClick}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n ) : null\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n <Table.Root\n isLoading={isLoading}\n rows={workflows}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" icon={<Plus />} onClick={handleCreateClick}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n ) : null\n }\n headers={headers}\n >\n <Table.Content>\n <Table.Head>\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n\n <Table.Body>\n {workflows.map((workflow) => (\n <Table.Row\n onClick={() => {\n navigate(`${workflow.id}`);\n }}\n key={workflow.id}\n >\n <Table.Cell width=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">\n {workflow.contentTypes\n .map((uid: string) => {\n const contentType = contentTypes.find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName ?? '';\n })\n .join(', ')}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n {canRead || canUpdate ? (\n <IconButton\n tag={Link}\n onClick={(e) => e.stopPropagation()}\n to={workflow.id.toString()}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {workflows.length > 1 && canDelete ? (\n <IconButton\n withTooltip={false}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteWorkflow(String(workflow.id));\n }}\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Dialog.Root open={!!workflowToDelete} onOpenChange={toggleConfirmDeleteDialog}>\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n\n <LimitsModal.Root open={showLimitModal} onOpenChange={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </Layout.Root>\n </>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ReviewWorkflowsListView />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage };\n"],"names":["ReviewWorkflowsListView","formatMessage","useIntl","navigate","useNavigate","trackUsage","useTracking","workflowToDelete","setWorkflowToDelete","React","useState","showLimitModal","setShowLimitModal","data","isLoading","isLoadingModels","useGetContentTypesQuery","meta","workflows","delete","deleteAction","useReviewWorkflows","getFeature","isLicenseLoading","useLicenseLimits","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canCreate","canRead","canUpdate","canDelete","useRBAC","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","handleDeleteWorkflow","workflowId","toggleConfirmDeleteDialog","handleConfirmDeleteDialog","handleCreateClick","event","preventDefault","workflowCount","parseInt","useEffect","headers","label","id","defaultMessage","name","_jsx","Page","Loading","contentTypes","Object","values","reduce","acc","curr","push","_jsxs","_Fragment","Layout","primaryAction","LinkButton","startIcon","Plus","size","tag","NavLink","to","onClick","fullWidth","subtitle","title","Table","Root","rows","footer","TFooter","cursor","icon","Content","Head","map","head","HeaderCell","Body","workflow","Row","Cell","width","Typography","textColor","fontWeight","ellipsis","stages","length","uid","contentType","find","info","displayName","join","Flex","alignItems","justifyContent","IconButton","Link","e","stopPropagation","toString","variant","Pencil","withTooltip","String","Trash","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","LimitsModal","Title","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../admin/src/routes/settings/index.tsx"],"sourcesContent":["/* eslint-disable check-file/no-index */\n/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useTracking, ConfirmDialog, useRBAC, Table } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Flex, IconButton, TFooter, Typography, LinkButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Link, useNavigate } from 'react-router-dom';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport { CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME } from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { ContentType, useGetContentTypesQuery } from '../../services/content-manager';\n\nimport * as Layout from './components/Layout';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nexport const ReviewWorkflowsListView = () => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const [workflowToDelete, setWorkflowToDelete] = React.useState<string | null>(null);\n const [showLimitModal, setShowLimitModal] = React.useState<boolean>(false);\n const { data, isLoading: isLoadingModels } = useGetContentTypesQuery();\n const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows();\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']\n );\n const {\n allowedActions: { canCreate, canRead, canUpdate, canDelete },\n } = useRBAC(permissions);\n\n const limits = getFeature('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] as string;\n\n const handleDeleteWorkflow = (workflowId: string) => {\n setWorkflowToDelete(workflowId);\n };\n\n const toggleConfirmDeleteDialog = () => {\n setWorkflowToDelete(null);\n };\n\n const handleConfirmDeleteDialog = async () => {\n if (!workflowToDelete) return;\n\n await deleteAction(workflowToDelete);\n\n setWorkflowToDelete(null);\n };\n\n const handleCreateClick: React.MouseEventHandler<HTMLAnchorElement> &\n ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void) = (event) => {\n event.preventDefault();\n /**\n * If the current license has a workflow limit:\n * check if the total count of workflows exceeds that limit. If so,\n * prevent the navigation and show the limits overlay.\n *\n * If the current license does not have a limit (e.g. offline license):\n * allow the user to navigate to the create-view. In case they exceed the\n * current hard-limit of 200 they will see an error thrown by the API.\n */\n\n if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n event.preventDefault();\n setShowLimitModal(true);\n } else {\n navigate('create');\n trackUsage('willCreateWorkflow');\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoading && !isLicenseLoading) {\n if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal(true);\n }\n }\n }, [isLicenseLoading, isLoading, meta, meta?.workflowCount, numberOfWorkflows]);\n\n const headers = [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.name.title',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.stages.title',\n defaultMessage: 'Stages',\n }),\n name: 'stages',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',\n defaultMessage: 'Content Types',\n }),\n name: 'content-types',\n },\n ];\n\n if (isLoading || isLoadingModels) {\n return <Page.Loading />;\n }\n\n const contentTypes = Object.values(data ?? {}).reduce<ContentType[]>((acc, curr) => {\n acc.push(...curr);\n return acc;\n }, []);\n\n return (\n <>\n <Layout.Header\n primaryAction={\n canCreate ? (\n <LinkButton\n startIcon={<Plus />}\n size=\"S\"\n tag={NavLink}\n to=\"create\"\n onClick={handleCreateClick}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n ) : null\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n <Table.Root\n isLoading={isLoading}\n rows={workflows}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" icon={<Plus />} onClick={handleCreateClick}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n ) : null\n }\n headers={headers}\n >\n <Table.Content>\n <Table.Head>\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n\n <Table.Body>\n {workflows.map((workflow) => (\n <Table.Row\n onClick={() => {\n navigate(`${workflow.id}`);\n }}\n key={workflow.id}\n >\n <Table.Cell width=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">\n {workflow.contentTypes\n .map((uid: string) => {\n const contentType = contentTypes.find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName ?? '';\n })\n .join(', ')}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n {canRead || canUpdate ? (\n <IconButton\n tag={Link}\n onClick={(e) => e.stopPropagation()}\n to={workflow.id.toString()}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {workflows.length > 1 && canDelete ? (\n <IconButton\n withTooltip={false}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteWorkflow(String(workflow.id));\n }}\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Dialog.Root open={!!workflowToDelete} onOpenChange={toggleConfirmDeleteDialog}>\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n\n <LimitsModal.Root open={showLimitModal} onOpenChange={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'review-workflows.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </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","fullWidth","subtitle","title","Table","Root","rows","footer","TFooter","cursor","icon","Content","Head","map","head","HeaderCell","Body","workflow","Row","Cell","width","Typography","textColor","fontWeight","ellipsis","stages","length","uid","contentType","find","info","displayName","join","Flex","alignItems","justifyContent","IconButton","Link","e","stopPropagation","toString","variant","Pencil","withTooltip","String","Trash","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","LimitsModal","Title","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
@@ -244,13 +244,13 @@ const ReviewWorkflowsListView = ()=>{
|
|
|
244
244
|
children: [
|
|
245
245
|
/*#__PURE__*/ jsx(LimitsModal.Title, {
|
|
246
246
|
children: formatMessage({
|
|
247
|
-
id: '
|
|
247
|
+
id: 'review-workflows.workflows.limit.title',
|
|
248
248
|
defaultMessage: 'You’ve reached the limit of workflows in your plan'
|
|
249
249
|
})
|
|
250
250
|
}),
|
|
251
251
|
/*#__PURE__*/ jsx(LimitsModal.Body, {
|
|
252
252
|
children: formatMessage({
|
|
253
|
-
id: '
|
|
253
|
+
id: 'review-workflows.workflows.limit.body',
|
|
254
254
|
defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.'
|
|
255
255
|
})
|
|
256
256
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.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 fullWidth\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n ) : null\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n <Table.Root\n isLoading={isLoading}\n rows={workflows}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" icon={<Plus />} onClick={handleCreateClick}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n ) : null\n }\n headers={headers}\n >\n <Table.Content>\n <Table.Head>\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n\n <Table.Body>\n {workflows.map((workflow) => (\n <Table.Row\n onClick={() => {\n navigate(`${workflow.id}`);\n }}\n key={workflow.id}\n >\n <Table.Cell width=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">\n {workflow.contentTypes\n .map((uid: string) => {\n const contentType = contentTypes.find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName ?? '';\n })\n .join(', ')}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n {canRead || canUpdate ? (\n <IconButton\n tag={Link}\n onClick={(e) => e.stopPropagation()}\n to={workflow.id.toString()}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {workflows.length > 1 && canDelete ? (\n <IconButton\n withTooltip={false}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteWorkflow(String(workflow.id));\n }}\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Dialog.Root open={!!workflowToDelete} onOpenChange={toggleConfirmDeleteDialog}>\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n\n <LimitsModal.Root open={showLimitModal} onOpenChange={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </Layout.Root>\n </>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ReviewWorkflowsListView />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage };\n"],"names":["ReviewWorkflowsListView","formatMessage","useIntl","navigate","useNavigate","trackUsage","useTracking","workflowToDelete","setWorkflowToDelete","React","useState","showLimitModal","setShowLimitModal","data","isLoading","isLoadingModels","useGetContentTypesQuery","meta","workflows","delete","deleteAction","useReviewWorkflows","getFeature","isLicenseLoading","useLicenseLimits","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canCreate","canRead","canUpdate","canDelete","useRBAC","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","handleDeleteWorkflow","workflowId","toggleConfirmDeleteDialog","handleConfirmDeleteDialog","handleCreateClick","event","preventDefault","workflowCount","parseInt","useEffect","headers","label","id","defaultMessage","name","_jsx","Page","Loading","contentTypes","Object","values","reduce","acc","curr","push","_jsxs","_Fragment","Layout","primaryAction","LinkButton","startIcon","Plus","size","tag","NavLink","to","onClick","fullWidth","subtitle","title","Table","Root","rows","footer","TFooter","cursor","icon","Content","Head","map","head","HeaderCell","Body","workflow","Row","Cell","width","Typography","textColor","fontWeight","ellipsis","stages","length","uid","contentType","find","info","displayName","join","Flex","alignItems","justifyContent","IconButton","Link","e","stopPropagation","toString","variant","Pencil","withTooltip","String","Trash","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","LimitsModal","Title","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.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 fullWidth\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n ) : null\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n <Table.Root\n isLoading={isLoading}\n rows={workflows}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" icon={<Plus />} onClick={handleCreateClick}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n ) : null\n }\n headers={headers}\n >\n <Table.Content>\n <Table.Head>\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n\n <Table.Body>\n {workflows.map((workflow) => (\n <Table.Row\n onClick={() => {\n navigate(`${workflow.id}`);\n }}\n key={workflow.id}\n >\n <Table.Cell width=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">\n {workflow.contentTypes\n .map((uid: string) => {\n const contentType = contentTypes.find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName ?? '';\n })\n .join(', ')}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n {canRead || canUpdate ? (\n <IconButton\n tag={Link}\n onClick={(e) => e.stopPropagation()}\n to={workflow.id.toString()}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {workflows.length > 1 && canDelete ? (\n <IconButton\n withTooltip={false}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteWorkflow(String(workflow.id));\n }}\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Dialog.Root open={!!workflowToDelete} onOpenChange={toggleConfirmDeleteDialog}>\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n\n <LimitsModal.Root open={showLimitModal} onOpenChange={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'review-workflows.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'review-workflows.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </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","fullWidth","subtitle","title","Table","Root","rows","footer","TFooter","cursor","icon","Content","Head","map","head","HeaderCell","Body","workflow","Row","Cell","width","Typography","textColor","fontWeight","ellipsis","stages","length","uid","contentType","find","info","displayName","join","Flex","alignItems","justifyContent","IconButton","Link","e","stopPropagation","toString","variant","Pencil","withTooltip","String","Trash","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","LimitsModal","Title","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ListFieldLayout, ListLayout } from '@strapi/content-manager/strapi-admin';
|
|
1
|
+
import type { InjectableListViewFilter, ListFieldLayout, ListLayout } from '@strapi/content-manager/strapi-admin';
|
|
2
2
|
interface AddColumnToTableHookArgs {
|
|
3
3
|
layout: ListLayout;
|
|
4
4
|
displayedHeaders: ListFieldLayout[];
|
|
@@ -43,4 +43,44 @@ declare const addColumnToTableHook: ({ displayedHeaders, layout }: AddColumnToTa
|
|
|
43
43
|
})[];
|
|
44
44
|
layout: ListLayout;
|
|
45
45
|
};
|
|
46
|
-
|
|
46
|
+
interface AddFilterToListViewHookArgs {
|
|
47
|
+
displayedFilters: InjectableListViewFilter[];
|
|
48
|
+
layout: ListLayout;
|
|
49
|
+
}
|
|
50
|
+
declare const addFilterToListViewHook: ({ displayedFilters, layout }: AddFilterToListViewHookArgs) => {
|
|
51
|
+
displayedFilters: ({
|
|
52
|
+
mainField: {
|
|
53
|
+
name: string;
|
|
54
|
+
type: "string";
|
|
55
|
+
};
|
|
56
|
+
input: (props: import("@strapi/admin/strapi-admin").Filters.ValueInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
label: {
|
|
58
|
+
id: string;
|
|
59
|
+
defaultMessage: string;
|
|
60
|
+
};
|
|
61
|
+
name: string;
|
|
62
|
+
type: "relation";
|
|
63
|
+
operators?: undefined;
|
|
64
|
+
} | {
|
|
65
|
+
type: "relation";
|
|
66
|
+
mainField: {
|
|
67
|
+
name: string;
|
|
68
|
+
type: "integer";
|
|
69
|
+
};
|
|
70
|
+
input: ({ name }: import("@strapi/admin/strapi-admin").Filters.ValueInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
71
|
+
operators: {
|
|
72
|
+
label: {
|
|
73
|
+
id: string;
|
|
74
|
+
defaultMessage: string;
|
|
75
|
+
};
|
|
76
|
+
value: string;
|
|
77
|
+
}[];
|
|
78
|
+
label: {
|
|
79
|
+
id: string;
|
|
80
|
+
defaultMessage: string;
|
|
81
|
+
};
|
|
82
|
+
name: string;
|
|
83
|
+
} | InjectableListViewFilter)[];
|
|
84
|
+
layout: ListLayout;
|
|
85
|
+
};
|
|
86
|
+
export { addColumnToTableHook, addFilterToListViewHook };
|
|
@@ -15,7 +15,8 @@ var cs = {
|
|
|
15
15
|
"settings.page.purchase.perks2": "Správa uživatelských oprávnění",
|
|
16
16
|
"settings.page.purchase.perks3": "Podpora webhooků",
|
|
17
17
|
"widget.assigned.title": "Přiřazeno mně",
|
|
18
|
-
"widget.assigned.no-data": "Žádné záznamy"
|
|
18
|
+
"widget.assigned.no-data": "Žádné záznamy",
|
|
19
|
+
"stage.label": "Fáze schvalování"
|
|
19
20
|
};
|
|
20
21
|
|
|
21
22
|
module.exports = cs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cs.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cs.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -13,7 +13,8 @@ var cs = {
|
|
|
13
13
|
"settings.page.purchase.perks2": "Správa uživatelských oprávnění",
|
|
14
14
|
"settings.page.purchase.perks3": "Podpora webhooků",
|
|
15
15
|
"widget.assigned.title": "Přiřazeno mně",
|
|
16
|
-
"widget.assigned.no-data": "Žádné záznamy"
|
|
16
|
+
"widget.assigned.no-data": "Žádné záznamy",
|
|
17
|
+
"stage.label": "Fáze schvalování"
|
|
17
18
|
};
|
|
18
19
|
|
|
19
20
|
export { cs as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cs.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cs.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"de.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"de.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -15,7 +15,26 @@ var en = {
|
|
|
15
15
|
"settings.page.purchase.perks2": "Manage user permissions",
|
|
16
16
|
"settings.page.purchase.perks3": "Support for webhooks",
|
|
17
17
|
"widget.assigned.title": "Assigned to me",
|
|
18
|
-
"widget.assigned.no-data": "No entries"
|
|
18
|
+
"widget.assigned.no-data": "No entries",
|
|
19
|
+
"containers.list.table-headers.reviewWorkflows.stage": "review stage",
|
|
20
|
+
"containers.list.table-headers.reviewWorkflows.assignee": "assignee",
|
|
21
|
+
"containers.list.table-headers.reviewWorkflows.assignee.label": "Assignee",
|
|
22
|
+
"assignee.label": "Assignee",
|
|
23
|
+
"assignee.clear": "Clear assignee",
|
|
24
|
+
"assignee.placeholder": "Select…",
|
|
25
|
+
"assignee.notification.saved": "Assignee updated",
|
|
26
|
+
"assignee.error": "An error occurred while fetching users",
|
|
27
|
+
"stage.label": "Review stage",
|
|
28
|
+
"stage.color": "Color",
|
|
29
|
+
"stage.notification.saved": "Review stage updated",
|
|
30
|
+
"stage.notification.error": "An error occurred while updating the review stage",
|
|
31
|
+
"stages.no-transition": "You don’t have the permission to update this stage.",
|
|
32
|
+
"stages.save-first": "Save this entry to assign a workflow stage.",
|
|
33
|
+
"stages.single-stage": "This workflow only has one stage. Add more stages to be able to transition between them.",
|
|
34
|
+
"stages.limit.title": "You have reached the limit of stages for this workflow in your plan",
|
|
35
|
+
"stages.limit.body": "Try deleting some stages or contact Sales to enable more stages.",
|
|
36
|
+
"workflows.limit.title": "You’ve reached the limit of workflows in your plan",
|
|
37
|
+
"workflows.limit.body": "Delete a workflow or contact Sales to enable more workflows."
|
|
19
38
|
};
|
|
20
39
|
|
|
21
40
|
module.exports = en;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -13,7 +13,26 @@ var en = {
|
|
|
13
13
|
"settings.page.purchase.perks2": "Manage user permissions",
|
|
14
14
|
"settings.page.purchase.perks3": "Support for webhooks",
|
|
15
15
|
"widget.assigned.title": "Assigned to me",
|
|
16
|
-
"widget.assigned.no-data": "No entries"
|
|
16
|
+
"widget.assigned.no-data": "No entries",
|
|
17
|
+
"containers.list.table-headers.reviewWorkflows.stage": "review stage",
|
|
18
|
+
"containers.list.table-headers.reviewWorkflows.assignee": "assignee",
|
|
19
|
+
"containers.list.table-headers.reviewWorkflows.assignee.label": "Assignee",
|
|
20
|
+
"assignee.label": "Assignee",
|
|
21
|
+
"assignee.clear": "Clear assignee",
|
|
22
|
+
"assignee.placeholder": "Select…",
|
|
23
|
+
"assignee.notification.saved": "Assignee updated",
|
|
24
|
+
"assignee.error": "An error occurred while fetching users",
|
|
25
|
+
"stage.label": "Review stage",
|
|
26
|
+
"stage.color": "Color",
|
|
27
|
+
"stage.notification.saved": "Review stage updated",
|
|
28
|
+
"stage.notification.error": "An error occurred while updating the review stage",
|
|
29
|
+
"stages.no-transition": "You don’t have the permission to update this stage.",
|
|
30
|
+
"stages.save-first": "Save this entry to assign a workflow stage.",
|
|
31
|
+
"stages.single-stage": "This workflow only has one stage. Add more stages to be able to transition between them.",
|
|
32
|
+
"stages.limit.title": "You have reached the limit of stages for this workflow in your plan",
|
|
33
|
+
"stages.limit.body": "Try deleting some stages or contact Sales to enable more stages.",
|
|
34
|
+
"workflows.limit.title": "You’ve reached the limit of workflows in your plan",
|
|
35
|
+
"workflows.limit.body": "Delete a workflow or contact Sales to enable more workflows."
|
|
17
36
|
};
|
|
18
37
|
|
|
19
38
|
export { en as default };
|