From bc943683ca61348e554f8f1e4b2ec02afb4257ab Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Fri, 19 May 2023 12:39:00 +0200 Subject: [PATCH 01/10] Settings: Make workflow.contentTypes a non-required field --- .../WorkflowAttributes/WorkflowAttributes.js | 1 - .../utils/getWorkflowValidationSchema.js | 61 ++++++++++--------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/WorkflowAttributes.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/WorkflowAttributes.js index a526845fc8..8574b55d48 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/WorkflowAttributes.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/WorkflowAttributes.js @@ -82,7 +82,6 @@ export function WorkflowAttributes({ contentTypes: { collectionTypes, singleType id: 'Settings.review-workflows.workflow.contentTypes.placeholder', defaultMessage: 'Select', })} - required /> diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/getWorkflowValidationSchema.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/getWorkflowValidationSchema.js index 31f80daf33..887207b24d 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/getWorkflowValidationSchema.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/getWorkflowValidationSchema.js @@ -2,36 +2,39 @@ import * as yup from 'yup'; export function getWorkflowValidationSchema({ formatMessage }) { return yup.object({ - contentTypes: yup.array().of(yup.string()).required(), + contentTypes: yup.array().of(yup.string()), name: yup.string().required(), - stages: yup.array().of( - yup.object().shape({ - name: yup - .string() - .required( - formatMessage({ - id: 'Settings.review-workflows.validation.stage.name', - defaultMessage: 'Name is required', - }) - ) - .max( - 255, - formatMessage({ - id: 'Settings.review-workflows.validation.stage.max-length', - defaultMessage: 'Name can not be longer than 255 characters', - }) - ), - color: yup - .string() - .required( - formatMessage({ - id: 'Settings.review-workflows.validation.stage.color', - defaultMessage: 'Color is required', - }) - ) - .matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i), - }) - ), + stages: yup + .array() + .of( + yup.object().shape({ + name: yup + .string() + .required( + formatMessage({ + id: 'Settings.review-workflows.validation.stage.name', + defaultMessage: 'Name is required', + }) + ) + .max( + 255, + formatMessage({ + id: 'Settings.review-workflows.validation.stage.max-length', + defaultMessage: 'Name can not be longer than 255 characters', + }) + ), + color: yup + .string() + .required( + formatMessage({ + id: 'Settings.review-workflows.validation.stage.color', + defaultMessage: 'Color is required', + }) + ) + .matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i), + }) + ) + .min(1), }); } From a5758274ca41c51c17247fa52b9a89e961b6e36a Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Fri, 19 May 2023 12:39:49 +0200 Subject: [PATCH 02/10] Settings: Reverse isDirty for workflows in creation --- .../SettingsPage/pages/ReviewWorkflows/reducer/index.js | 6 ++++-- .../pages/ReviewWorkflows/reducer/tests/index.test.js | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js index 5b7de0e94e..ce7e16b7f7 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js @@ -20,6 +20,8 @@ export const initialState = { clientState: { currentWorkflow: { data: { + name: '', + contentTypes: [], stages: [ { color: STAGE_COLOR_DEFAULT, @@ -159,8 +161,8 @@ export function reducer(state = initialState, action) { draft.serverState.workflow ); } else { - // if there is no workflow on the server, the workflow can never be dirty - draft.clientState.currentWorkflow.isDirty = false; + // if there is no workflow on the server, the workflow is awalys considered dirty + draft.clientState.currentWorkflow.isDirty = true; } }); } diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js index d47bbac275..6d6cfe5b8e 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js @@ -561,7 +561,7 @@ describe('Admin | Settings | Review Workflows | reducer', () => { }, ], }, - isDirty: false, + isDirty: true, }), }), }) From fa3d2175ed9271a897c35446443d948f8df0a6e7 Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Fri, 19 May 2023 12:40:42 +0200 Subject: [PATCH 03/10] Settings: Swap edit and delete, Fix row click --- .../pages/ListView/ListView.js | 57 ++++++++++++------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js index 90e6db51cb..571498d9c7 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js @@ -8,6 +8,7 @@ import { ConfirmDialog, Link, LinkButton, + onRowClick, pxToRem, useAPIErrorHandler, useFetchClient, @@ -34,7 +35,17 @@ import adminPermissions from '../../../../../../../../admin/src/permissions'; import * as Layout from '../../components/Layout'; const ActionLink = styled(Link)` + align-items: center; + height: ${pxToRem(32)}; + display: flex; + justify-content: center; + padding: ${({ theme }) => `${theme.spaces[2]}}`}; + width: ${pxToRem(32)}; + svg { + height: ${pxToRem(12)}; + width: ${pxToRem(12)}; + path { fill: ${({ theme }) => theme.colors.neutral500}; } @@ -168,7 +179,16 @@ export function ReviewWorkflowsListView() { {workflowsData.data.map((workflow) => ( push(`/settings/review-workflows/${workflow.id}`)} + {...onRowClick({ + fn(event) { + // Abort row onClick event when the user click on the delete button + if (event.target.nodeName === 'BUTTON') { + return; + } + + push(`/settings/review-workflows/${workflow.id}`); + }, + })} key={`workflow-${workflow.id}`} > @@ -180,24 +200,7 @@ export function ReviewWorkflowsListView() { {workflow.stages.length} - - {workflowsData.data.length > 1 && ( - } - noBorder - onClick={() => { - handleDeleteWorkflow(workflow.id); - }} - /> - )} - + + + } + noBorder + onClick={() => { + handleDeleteWorkflow(workflow.id); + }} + /> From 8ef9ac959fbf75a6f09e962bdf6c9ff4f18b22b1 Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Fri, 19 May 2023 12:41:14 +0200 Subject: [PATCH 04/10] Settings: Fix workflow POST endpoint --- .../pages/CreateView/CreateView.js | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js index 1b2dc60a7e..fa5212cffb 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js @@ -3,6 +3,7 @@ import { useFormik, Form, FormikProvider } from 'formik'; import { useIntl } from 'react-intl'; import { useDispatch, useSelector } from 'react-redux'; import { useMutation } from 'react-query'; +import { useHistory } from 'react-router-dom'; import { CheckPagePermissions, @@ -28,6 +29,7 @@ import * as Layout from '../../components/Layout'; export function ReviewWorkflowsCreateView() { const { formatMessage } = useIntl(); const { post } = useFetchClient(); + const { push } = useHistory(); const { formatAPIError } = useAPIErrorHandler(); const dispatch = useDispatch(); const toggleNotification = useNotification(); @@ -42,7 +44,7 @@ export function ReviewWorkflowsCreateView() { async ({ workflow }) => { const { data: { data }, - } = await post(`/admin/review-workflows/workflow`, { + } = await post(`/admin/review-workflows/workflows`, { data: workflow, }); @@ -52,7 +54,10 @@ export function ReviewWorkflowsCreateView() { onSuccess() { toggleNotification({ type: 'success', - message: { id: 'notification.success.saved', defaultMessage: 'Saved' }, + message: { + id: 'Settings.review-workflows.create.page.notification.success', + defaultMessage: 'Workflow successfully created', + }, }); }, } @@ -60,9 +65,11 @@ export function ReviewWorkflowsCreateView() { const submitForm = async () => { try { - const res = await mutateAsync({ workflow: currentWorkflow }); + const workflow = await mutateAsync({ workflow: currentWorkflow }); - return res; + push(`/settings/review-workflows/${workflow.id}`); + + return workflow; } catch (error) { toggleNotification({ type: 'warning', @@ -71,8 +78,6 @@ export function ReviewWorkflowsCreateView() { return null; } - - // TODO: redirect to edit view }; const formik = useFormik({ @@ -82,14 +87,13 @@ export function ReviewWorkflowsCreateView() { submitForm(); }, validationSchema: getWorkflowValidationSchema({ formatMessage }), - validateOnChange: false, }); useInjectReducer(REDUX_NAMESPACE, reducer); React.useEffect(() => { dispatch(resetWorkflow()); - }, [dispatch, collectionTypes, singleTypes]); + }, [dispatch]); return ( From 18131c49760913914f2db648e8d65a139e28576f Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Fri, 19 May 2023 13:15:19 +0200 Subject: [PATCH 05/10] Settings: Improve formik setValue usage --- .../ReviewWorkflows/components/Stages/Stage/Stage.js | 8 ++++---- .../components/WorkflowAttributes/WorkflowAttributes.js | 8 ++++---- .../pages/ReviewWorkflows/pages/EditView/EditView.js | 1 - 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js index c0f8366272..9a96661b05 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js @@ -143,8 +143,8 @@ export function Stage({ const { trackUsage } = useTracking(); const dispatch = useDispatch(); const [isOpen, setIsOpen] = React.useState(isOpenDefault); - const [nameField, nameMeta] = useField(`stages.${index}.name`); - const [colorField, colorMeta] = useField(`stages.${index}.color`); + const [nameField, nameMeta, nameHelper] = useField(`stages.${index}.name`); + const [colorField, colorMeta, colorHelper] = useField(`stages.${index}.color`); const [{ handlerId, isDragging, handleKeyDown }, stageRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop(canReorder, { index, @@ -249,7 +249,7 @@ export function Stage({ })} error={nameMeta.error ?? false} onChange={(event) => { - nameField.onChange(event); + nameHelper.setValue(event.target.value); dispatch(updateStage(id, { name: event.target.value })); }} required @@ -278,7 +278,7 @@ export function Stage({ name={colorField.name} options={colorOptions} onChange={({ value }) => { - colorField.onChange({ target: { value } }); + colorHelper.setValue(value); dispatch(updateStage(id, { color: value })); }} // If no color was found in all the valid theme colors it means a user diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/WorkflowAttributes.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/WorkflowAttributes.js index 8574b55d48..e3268d60f2 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/WorkflowAttributes.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/WorkflowAttributes.js @@ -10,8 +10,8 @@ import { updateWorkflow } from '../../actions'; export function WorkflowAttributes({ contentTypes: { collectionTypes, singleTypes } }) { const { formatMessage } = useIntl(); const dispatch = useDispatch(); - const [nameField, nameMeta] = useField('name'); - const [contentTypesField, contentTypesMeta] = useField('contentTypes'); + const [nameField, nameMeta, nameHelper] = useField('name'); + const [contentTypesField, contentTypesMeta, contentTypesHelper] = useField('contentTypes'); return ( @@ -26,7 +26,7 @@ export function WorkflowAttributes({ contentTypes: { collectionTypes, singleType error={nameMeta.error ?? false} onChange={(event) => { dispatch(updateWorkflow({ name: event.target.value })); - nameField.onChange(event); + nameHelper.setValue(event.target.value); }} required /> @@ -53,7 +53,7 @@ export function WorkflowAttributes({ contentTypes: { collectionTypes, singleType })} onChange={(values) => { dispatch(updateWorkflow({ contentTypes: values })); - contentTypesField.onChange({ target: { value: values } }); + contentTypesHelper.setValue(values); }} options={[ { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js index 6733b1f03b..b473a9498f 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js @@ -112,7 +112,6 @@ export function ReviewWorkflowsEditView() { } }, validationSchema: getWorkflowValidationSchema({ formatMessage }), - validateOnChange: true, }); useInjectReducer(REDUX_NAMESPACE, reducer); From 147f6ad9d824985d9c4f68302c64e99344cb0d0e Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Fri, 19 May 2023 13:15:59 +0200 Subject: [PATCH 06/10] Settings: Prepare list-view to render content-types --- .../ReviewWorkflows/pages/ListView/ListView.js | 13 +++++++++++++ .../admin/ee/server/controllers/workflows/index.js | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js index 571498d9c7..8ccd9e227d 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js @@ -165,6 +165,14 @@ export function ReviewWorkflowsListView() { })} + + + {formatMessage({ + id: 'Settings.review-workflows.list.page.list.column.contentTypes.title', + defaultMessage: 'Content Types', + })} + + {formatMessage({ @@ -199,6 +207,11 @@ export function ReviewWorkflowsListView() { {workflow.stages.length} + + + {(workflow?.contentTypes ?? []).join(', ')} + + Date: Fri, 19 May 2023 13:30:40 +0200 Subject: [PATCH 07/10] Settings: Add __tmp_key__ to initial stage state --- .../pages/ReviewWorkflows/reducer/index.js | 1 + .../ReviewWorkflows/reducer/tests/index.test.js | 12 ++++-------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js index ce7e16b7f7..2b7f891bda 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js @@ -26,6 +26,7 @@ export const initialState = { { color: STAGE_COLOR_DEFAULT, name: '', + __temp_key__: 1, }, ], }, diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js index 6d6cfe5b8e..ebbf477499 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js @@ -553,14 +553,10 @@ describe('Admin | Settings | Review Workflows | reducer', () => { expect.objectContaining({ clientState: expect.objectContaining({ currentWorkflow: expect.objectContaining({ - data: { - stages: [ - { - color: '#4945ff', - name: '', - }, - ], - }, + data: expect.objectContaining({ + name: '', + stages: [expect.objectContaining({ name: '', __temp_key__: 1 })], + }), isDirty: true, }), }), From 5f126020b3744ed3126823252d0b5f3bc884f332 Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Fri, 19 May 2023 13:36:22 +0200 Subject: [PATCH 08/10] Settings: Sort workflows by name --- .../ReviewWorkflows/hooks/tests/useReviewWorkflows.test.js | 2 +- .../pages/ReviewWorkflows/hooks/useReviewWorkflows.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/tests/useReviewWorkflows.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/tests/useReviewWorkflows.test.js index d770c51647..ad1f30f0c5 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/tests/useReviewWorkflows.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/tests/useReviewWorkflows.test.js @@ -65,7 +65,7 @@ describe('useReviewWorkflows', () => { expect(result.current.workflows.isLoading).toBe(true); expect(get).toBeCalledWith('/admin/review-workflows/workflows/', { - params: { populate: 'stages' }, + params: { sort: 'name:asc', populate: 'stages' }, }); await waitFor(() => expect(result.current.workflows.isLoading).toBe(false)); diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js index 6a2a15ec38..9338507e5f 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js @@ -9,7 +9,7 @@ export function useReviewWorkflows(workflowId) { const client = useQueryClient(); const workflowQueryKey = [QUERY_BASE_KEY, workflowId ?? 'default']; - async function fetchWorkflows({ params = { populate: 'stages' } }) { + async function fetchWorkflows({ params = { sort: 'name:asc', populate: 'stages' } }) { try { const { data: { data }, From 0373086a8ad2bfb3a0877ec46d1fa186ac35b23c Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Fri, 19 May 2023 13:43:49 +0200 Subject: [PATCH 09/10] Chore: Revert accidental commit --- packages/core/admin/ee/server/controllers/workflows/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/admin/ee/server/controllers/workflows/index.js b/packages/core/admin/ee/server/controllers/workflows/index.js index 2ac9cda4e2..48eff9dfe9 100644 --- a/packages/core/admin/ee/server/controllers/workflows/index.js +++ b/packages/core/admin/ee/server/controllers/workflows/index.js @@ -16,7 +16,7 @@ module.exports = { const { body } = ctx.request; const { populate } = ctx.query; - const workflowBody = await validateWorkflowCreate(body.data); + const workflowBody = await validateWorkflowCreate(body); const workflowService = getService('workflows'); const data = await workflowService.create({ data: workflowBody, populate }); @@ -36,7 +36,7 @@ module.exports = { const { populate } = ctx.query; const workflowService = getService('workflows'); - const workflowBody = await validateWorkflowUpdate(body.data); + const workflowBody = await validateWorkflowUpdate(body); const workflow = await workflowService.findById(id, { populate: ['stages'] }); if (!workflow) { From d6e38a2ad9d614acbbe368904705f77c4fd42ae7 Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Fri, 19 May 2023 14:20:55 +0200 Subject: [PATCH 10/10] Settings: Add client-side name max-length validation --- .../utils/getWorkflowValidationSchema.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/getWorkflowValidationSchema.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/getWorkflowValidationSchema.js index 887207b24d..e7b2368b61 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/getWorkflowValidationSchema.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/getWorkflowValidationSchema.js @@ -3,7 +3,16 @@ import * as yup from 'yup'; export function getWorkflowValidationSchema({ formatMessage }) { return yup.object({ contentTypes: yup.array().of(yup.string()), - name: yup.string().required(), + name: yup + .string() + .max( + 255, + formatMessage({ + id: 'Settings.review-workflows.validation.name.max-length', + defaultMessage: 'Name can not be longer than 255 characters', + }) + ) + .required(), stages: yup .array()