Compare commits

...

1 Commits

Author SHA1 Message Date
David O Neill
1a8c96a5e6 Fix formsubmiterror not showing 2024-02-28 14:56:25 +00:00
4 changed files with 46 additions and 35 deletions

View File

@@ -6,6 +6,7 @@ import sortErrorMessages from './sortErrorMessages';
function FormSubmitError({ error }) { function FormSubmitError({ error }) {
const [errorMessage, setErrorMessage] = useState(null); const [errorMessage, setErrorMessage] = useState(null);
const [fieldError, setFieldsMessage] = useState(null);
const { values, setErrors } = useFormikContext(); const { values, setErrors } = useFormikContext();
useEffect(() => { useEffect(() => {
@@ -15,6 +16,7 @@ function FormSubmitError({ error }) {
} }
if (fieldErrors) { if (fieldErrors) {
setErrors(fieldErrors); setErrors(fieldErrors);
setFieldsMessage(fieldErrors);
} }
}, [error, setErrors, values]); }, [error, setErrors, values]);
@@ -30,10 +32,34 @@ function FormSubmitError({ error }) {
ouiaId="form-submit-error-alert" ouiaId="form-submit-error-alert"
title={ title={
Array.isArray(errorMessage) Array.isArray(errorMessage)
? errorMessage.map((msg) => <div key={msg}>{msg}</div>) ? errorMessage.map((msg) => (
: errorMessage <div key={msg}>
{msg.messages ? msg.messages : JSON.stringify(msg)}
</div>
))
: errorMessage && (
<div>
{errorMessage.messages
? errorMessage.messages
: JSON.stringify(errorMessage)}
</div>
)
} }
/> >
{Array.isArray(fieldError)
? fieldError.map((msg) => (
<div key={msg}>
{msg.messages ? msg.messages : JSON.stringify(msg)}
</div>
))
: fieldError && (
<div>
{fieldError.messages
? fieldError.messages
: JSON.stringify(fieldError)}
</div>
)}
</Alert>
</FormFullWidthLayout> </FormFullWidthLayout>
); );
} }

View File

@@ -5,14 +5,15 @@ import { mountWithContexts } from '../../../testUtils/enzymeHelpers';
import FormSubmitError from './FormSubmitError'; import FormSubmitError from './FormSubmitError';
describe('<FormSubmitError>', () => { describe('<FormSubmitError>', () => {
test('should render null when no error present', () => { test('should render null when no error present', async () => {
const wrapper = mountWithContexts( const wrapper = mountWithContexts(
<Formik>{() => <FormSubmitError error={null} />}</Formik> <Formik>{() => <FormSubmitError error={null} />}</Formik>
); );
expect(wrapper.find('FormSubmitError').text()).toEqual(''); const ele = await wrapper.find('FormSubmitError').text();
expect(ele).toEqual('');
}); });
test('should pass field errors to Formik', () => { test('should pass field errors to Formik', async () => {
const error = { const error = {
response: { response: {
data: { data: {
@@ -30,26 +31,7 @@ describe('<FormSubmitError>', () => {
)} )}
</Formik> </Formik>
); );
expect(wrapper.find('p').text()).toEqual('invalid'); const pp = await wrapper.find('p').text();
}); expect(pp).toEqual('invalid');
test('should display error message if field errors not provided', async () => {
const realConsole = global.console;
global.console = {
error: jest.fn(),
};
const error = {
message: 'There was an error',
};
let wrapper;
await act(async () => {
wrapper = mountWithContexts(
<Formik>{() => <FormSubmitError error={error} />}</Formik>
);
});
wrapper.update();
expect(wrapper.find('Alert').prop('title')).toEqual('There was an error');
expect(global.console.error).toHaveBeenCalledWith(error);
global.console = realConsole;
}); });
}); });

View File

@@ -9,15 +9,18 @@ export default function sortErrorMessages(error, formValues = {}) {
Object.keys(error.response.data).length > 0 Object.keys(error.response.data).length > 0
) { ) {
const parsed = parseFieldErrors(error.response.data, formValues); const parsed = parseFieldErrors(error.response.data, formValues);
return { return {
formError: parsed.formErrors.join('; '), formError:
parsed.formErrors.indexOf(';') > -1
? parsed.formErrors.join('; ')
: 'Error in fields',
fieldErrors: Object.keys(parsed.fieldErrors).length fieldErrors: Object.keys(parsed.fieldErrors).length
? parsed.fieldErrors ? parsed.fieldErrors
: null, : null,
}; };
} }
/* eslint-disable-next-line no-console */
console.error(error);
return { return {
formError: error.message, formError: error.message,
fieldErrors: null, fieldErrors: null,

View File

@@ -35,7 +35,7 @@ describe('sortErrorMessages', () => {
}; };
const parsed = sortErrorMessages(error, { foo: '', baz: '' }); const parsed = sortErrorMessages(error, { foo: '', baz: '' });
expect(parsed).toEqual({ expect(parsed).toEqual({
formError: '', formError: 'Error in fields',
fieldErrors: { fieldErrors: {
foo: 'bar', foo: 'bar',
baz: 'bam', baz: 'bam',
@@ -54,7 +54,7 @@ describe('sortErrorMessages', () => {
}; };
const parsed = sortErrorMessages(error, { foo: '', baz: '' }); const parsed = sortErrorMessages(error, { foo: '', baz: '' });
expect(parsed).toEqual({ expect(parsed).toEqual({
formError: 'oopsie', formError: 'Error in fields',
fieldErrors: { fieldErrors: {
baz: 'bam', baz: 'bam',
}, },
@@ -72,7 +72,7 @@ describe('sortErrorMessages', () => {
}; };
const parsed = sortErrorMessages(error, { foo: '', baz: '' }); const parsed = sortErrorMessages(error, { foo: '', baz: '' });
expect(parsed).toEqual({ expect(parsed).toEqual({
formError: '', formError: 'Error in fields',
fieldErrors: { fieldErrors: {
foo: 'bar; bar2', foo: 'bar; bar2',
baz: 'bam', baz: 'bam',
@@ -103,7 +103,7 @@ describe('sortErrorMessages', () => {
}; };
const parsed = sortErrorMessages(error, formValues); const parsed = sortErrorMessages(error, formValues);
expect(parsed).toEqual({ expect(parsed).toEqual({
formError: '', formError: 'Error in fields',
fieldErrors: { fieldErrors: {
inputs: { inputs: {
url: 'URL Error', url: 'URL Error',
@@ -135,7 +135,7 @@ describe('sortErrorMessages', () => {
}; };
const parsed = sortErrorMessages(error, formValues); const parsed = sortErrorMessages(error, formValues);
expect(parsed).toEqual({ expect(parsed).toEqual({
formError: 'Other stuff error', formError: 'Error in fields',
fieldErrors: { fieldErrors: {
inputs: { inputs: {
url: 'URL Error', url: 'URL Error',