diff --git a/frontend/src/components/DetailView/Context/DetailContext.tsx b/frontend/src/components/DetailView/Context/DetailContext.tsx index cce85dc0..dff7c68e 100644 --- a/frontend/src/components/DetailView/Context/DetailContext.tsx +++ b/frontend/src/components/DetailView/Context/DetailContext.tsx @@ -79,7 +79,7 @@ export type DetailContextType = { name: string, optionalRadioSelectionProps?: OptionalRadioSelectionProps ) => JSX.Element - validator: (editData: EditDataType, field: keyof EditDataType) => ValidationObject[] + validator: (editData: EditDataType, field?: keyof EditDataType) => ValidationObject[] fieldsWithErrors: FieldsWithErrorsType setFieldsWithErrors: SetFieldsWithErrorsType } @@ -111,7 +111,7 @@ export const DetailContextProvider = ({ setEditData: (data: unknown) => { setEditData(data as EditDataType) }, - validator: (editData: unknown, fieldName: keyof EditDataType) => + validator: (editData: unknown, fieldName?: keyof EditDataType) => contextState.validator(editData as EditDataType, fieldName), }} > diff --git a/frontend/src/components/DetailView/components.tsx b/frontend/src/components/DetailView/components.tsx index 115d1692..03eb4e90 100644 --- a/frontend/src/components/DetailView/components.tsx +++ b/frontend/src/components/DetailView/components.tsx @@ -8,6 +8,7 @@ import { useDetailContext } from './Context/DetailContext' import { EditDataType, Editable, Reference } from '@/shared/types' import { useState, useEffect, Fragment } from 'react' import { referenceValidator } from '@/shared/validators/validator' +import { FieldsWithErrorsType } from './DetailView' export const WriteButton = ({ onWrite, @@ -29,23 +30,8 @@ export const WriteButton = ({ validation errors (e.g. missing required fields) */ useEffect(() => { if (mode.option === 'edit' || mode.option === 'new') { - for (const field in editData) { - const fieldAsString = String(field) - const errors = validator(editData, field) - if (errors.length === 0 && fieldAsString in fieldsWithErrors) { - setFieldsWithErrors(prevFieldsWithErrors => { - const newFieldsWithErrors = { ...prevFieldsWithErrors } - delete newFieldsWithErrors[fieldAsString] - return newFieldsWithErrors - }) - } else if (errors.length > 0) { - if (!(fieldAsString in fieldsWithErrors)) { - setFieldsWithErrors(prevFieldsWithErrors => { - return { ...prevFieldsWithErrors, [fieldAsString]: errors[0] } - }) - } - } - } + const errors = validator(editData) + setFieldsWithErrors(() => errors.reduce((obj, cur) => ({ ...obj, [cur.name]: cur }), {})) } if (mode.staging == true) { const error =