Skip to content

Commit

Permalink
fix: use same process to validate unfinished deminimis row on save
Browse files Browse the repository at this point in the history
  • Loading branch information
sirtawast committed Aug 29, 2023
1 parent 221c072 commit bc21c9b
Showing 1 changed file with 56 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
ORGANIZATION_TYPES,
} from 'benefit-shared/constants';
import { Application, DeMinimisAid } from 'benefit-shared/types/application';
import { FormikProps, useFormik } from 'formik';
import { FormikErrors, FormikProps, useFormik } from 'formik';
import fromPairs from 'lodash/fromPairs';
import { TFunction } from 'next-i18next';
import React, { useState } from 'react';
Expand Down Expand Up @@ -39,6 +39,10 @@ type ExtendedComponentProps = {
getDefaultSelectValue: (fieldName: keyof Application) => OptionType;
};

type DeMinimisFormikPromises = Promise<
[void | FormikErrors<Application>, void | FormikErrors<Application>]
>;

const useApplicationFormStep1 = (
application: Partial<Application>,
isUnfinishedDeminimisAid: boolean
Expand Down Expand Up @@ -66,6 +70,31 @@ const useApplicationFormStep1 = (

const { values, touched, errors, setFieldValue } = formik;

const isDeMinimisAidRowUnfinished = (): boolean => {
if (isUnfinishedDeminimisAid) {
showErrorToast(
t(`${translationsBase}.notifications.deMinimisUnfinished.label`),
t(`${translationsBase}.notifications.deMinimisUnfinished.content`)
);
return true;
}

return false;
};

const handleDeMinimisRadioButtonChange = (
formikFields: ExtendedComponentProps['fields']
): Promise<void> | DeMinimisFormikPromises => {
if (deMinimisAids.length === 0) {
setDeMinimisAids([]);
return Promise.all([
formik.setFieldValue(formikFields.deMinimisAidSet.name, []),
formik.setFieldValue(formikFields.deMinimisAid.name, false),
]);
}
return Promise.resolve();
};

const fields: ExtendedComponentProps['fields'] = React.useMemo(() => {
const fieldMasks: Partial<Record<Field['name'], Field['mask']>> = {
[APPLICATION_FIELDS_STEP1_KEYS.COMPANY_BANK_ACCOUNT_NUMBER]: {
Expand Down Expand Up @@ -99,33 +128,34 @@ const useApplicationFormStep1 = (

const handleSubmit = (): void => {
setIsSubmitted(true);
void formik.validateForm().then((errs) => {
const errorFieldKey = Object.keys(errs)[0];

if (errorFieldKey) {
return focusAndScroll(errorFieldKey);
}

if (isUnfinishedDeminimisAid) {
showErrorToast(
t(`${translationsBase}.deMinimisUnfinished.label`),
t(`${translationsBase}.deMinimisUnfinished.content`)
);
return false;
}

// de minimis fields are empty, set radio to false
if (deMinimisAids.length === 0) {
void formik.setFieldValue(fields.deMinimisAidSet.name, []);
void formik.setFieldValue(fields.deMinimisAid.name, false);
}

return formik.submitForm();
});
void formik
.validateForm()
.then((errs) => {
const errorFieldKey = Object.keys(errs)[0];

if (errorFieldKey) {
return focusAndScroll(errorFieldKey);
}

if (isDeMinimisAidRowUnfinished()) {
void formik.validateForm();
return focusAndScroll('deMinimisAid');
}
return true;
})
.then(() => {
void handleDeMinimisRadioButtonChange(fields);
return void formik.submitForm();
});
};

const handleSave = (): void => {
void onSave(values);
const handleSave = (): void | boolean => {
if (isDeMinimisAidRowUnfinished()) {
return false;
}
return void handleDeMinimisRadioButtonChange(fields)
.then(() => onSave(values))
.catch(() => false);
};

const applicationId = values?.id;
Expand Down

0 comments on commit bc21c9b

Please sign in to comment.