From 752d9ebf75406b3616a6dfba791aa73f54cdf311 Mon Sep 17 00:00:00 2001 From: Sampo Tawast <5328394+sirtawast@users.noreply.github.com> Date: Wed, 24 Apr 2024 12:41:26 +0300 Subject: [PATCH] feat(handler): add error validation logic and toast for de minimis aid form (HL-1202) (#2933) * fix(handler): de minimis validation as in applicant form * chore: remove commented line * feat: add error validation for de minimis form * chore: add translation for de minimis error --- .../deMinimisAid/list/useDeminimisAidsList.ts | 1 - .../handler/public/locales/en/common.json | 4 ++ .../handler/public/locales/fi/common.json | 4 ++ .../handler/public/locales/sv/common.json | 4 ++ .../deMinimisAid/DeMinimisAidForm.tsx | 43 ++++++++++++++----- .../applicationForm/useApplicationForm.ts | 31 +++++++++++++ .../handler/src/context/DeMinimisContext.tsx | 4 ++ .../handler/src/context/DeMinimisProvider.tsx | 5 ++- 8 files changed, 84 insertions(+), 12 deletions(-) diff --git a/frontend/benefit/applicant/src/components/applications/forms/application/deMinimisAid/list/useDeminimisAidsList.ts b/frontend/benefit/applicant/src/components/applications/forms/application/deMinimisAid/list/useDeminimisAidsList.ts index 1bc521dd0e..c7b1c919b4 100644 --- a/frontend/benefit/applicant/src/components/applications/forms/application/deMinimisAid/list/useDeminimisAidsList.ts +++ b/frontend/benefit/applicant/src/components/applications/forms/application/deMinimisAid/list/useDeminimisAidsList.ts @@ -6,7 +6,6 @@ import sumBy from 'lodash/sumBy'; import { TFunction } from 'next-i18next'; import React from 'react'; import { Language } from 'shared/i18n/i18n'; -// import * as Yup from 'yup'; type ExtendedComponentProps = { t: TFunction; diff --git a/frontend/benefit/handler/public/locales/en/common.json b/frontend/benefit/handler/public/locales/en/common.json index 2d7eec0526..f023952405 100644 --- a/frontend/benefit/handler/public/locales/en/common.json +++ b/frontend/benefit/handler/public/locales/en/common.json @@ -337,6 +337,10 @@ "label": "Enimmäismäärä ylitetty", "content": "De minimis-tuen enimmäismäärä on ylitetty. Tuki voi olla enintään {{amount}} euroa, joka myönnetään yritykselle kuluvan vuoden ja kahden edellisen verovuoden kuluessa. Enimmäismäärässä huomioidaan kaikkien eri viranomaisten kyseisenä ajanjaksona de minimis -tukena myöntämä rahoitus." }, + "deMinimisUnfinished": { + "label": "Puuttuvia de minimis -tuen tietoja", + "content": "Täytä puuttuvat minimis -kentät ja paina 'Lisää' painiketta." + }, "salaryBenefit": { "label": "Palkkatuettu oppisopimus", "content": "Palkkatuettuun oppisopimukseen voi hakea joko työllistämisen tai palkan Helsinki-lisää" diff --git a/frontend/benefit/handler/public/locales/fi/common.json b/frontend/benefit/handler/public/locales/fi/common.json index 95432956a6..6ad8f5ff8b 100644 --- a/frontend/benefit/handler/public/locales/fi/common.json +++ b/frontend/benefit/handler/public/locales/fi/common.json @@ -337,6 +337,10 @@ "label": "Enimmäismäärä ylitetty", "content": "De minimis-tuen enimmäismäärä on ylitetty. Tuki voi olla enintään {{amount}} euroa, joka myönnetään yritykselle kuluvan vuoden ja kahden edellisen verovuoden kuluessa. Enimmäismäärässä huomioidaan kaikkien eri viranomaisten kyseisenä ajanjaksona de minimis -tukena myöntämä rahoitus." }, + "deMinimisUnfinished": { + "label": "Puuttuvia de minimis -tuen tietoja", + "content": "Täytä puuttuvat minimis -kentät ja paina 'Lisää' painiketta." + }, "salaryBenefit": { "label": "Palkkatuettu oppisopimus", "content": "Palkkatuettuun oppisopimukseen voi hakea joko työllistämisen tai palkan Helsinki-lisää" diff --git a/frontend/benefit/handler/public/locales/sv/common.json b/frontend/benefit/handler/public/locales/sv/common.json index 2d7eec0526..f023952405 100644 --- a/frontend/benefit/handler/public/locales/sv/common.json +++ b/frontend/benefit/handler/public/locales/sv/common.json @@ -337,6 +337,10 @@ "label": "Enimmäismäärä ylitetty", "content": "De minimis-tuen enimmäismäärä on ylitetty. Tuki voi olla enintään {{amount}} euroa, joka myönnetään yritykselle kuluvan vuoden ja kahden edellisen verovuoden kuluessa. Enimmäismäärässä huomioidaan kaikkien eri viranomaisten kyseisenä ajanjaksona de minimis -tukena myöntämä rahoitus." }, + "deMinimisUnfinished": { + "label": "Puuttuvia de minimis -tuen tietoja", + "content": "Täytä puuttuvat minimis -kentät ja paina 'Lisää' painiketta." + }, "salaryBenefit": { "label": "Palkkatuettu oppisopimus", "content": "Palkkatuettuun oppisopimukseen voi hakea joko työllistämisen tai palkan Helsinki-lisää" diff --git a/frontend/benefit/handler/src/components/applicationForm/formContent/companySection/deMinimisAid/DeMinimisAidForm.tsx b/frontend/benefit/handler/src/components/applicationForm/formContent/companySection/deMinimisAid/DeMinimisAidForm.tsx index a6379987d4..d07f8ea000 100644 --- a/frontend/benefit/handler/src/components/applicationForm/formContent/companySection/deMinimisAid/DeMinimisAidForm.tsx +++ b/frontend/benefit/handler/src/components/applicationForm/formContent/companySection/deMinimisAid/DeMinimisAidForm.tsx @@ -2,11 +2,12 @@ import { DE_MINIMIS_AID_GRANTED_AT_MAX_DATE, MAX_DEMINIMIS_AID_TOTAL_AMOUNT, } from 'benefit/handler/constants'; +import DeMinimisContext from 'benefit/handler/context/DeMinimisContext'; import { DE_MINIMIS_AID_KEYS } from 'benefit-shared/constants'; import { DeMinimisAid } from 'benefit-shared/types/application'; import { Button, DateInput, IconPlusCircle, TextInput } from 'hds-react'; import sumBy from 'lodash/sumBy'; -import React from 'react'; +import React, { useCallback, useEffect } from 'react'; import { $Grid, $GridCell, @@ -36,6 +37,36 @@ const DeMinimisAidForm: React.FC = ({ data }) => { } = useDeminimisAid(data); const theme = useTheme(); + const { setUnfinishedDeMinimisAidRow } = React.useContext(DeMinimisContext); + + const validateDeMinimisRow = (): boolean => + !( + formik.values.granter && + formik.values.amount && + formik.values.grantedAt + ) || + !formik.isValid || + sumBy(grants, 'amount') > MAX_DEMINIMIS_AID_TOTAL_AMOUNT; + + /** + * Only empty inputs are consired complete because row addition clears them. + */ + const isFormInputIncomplete: () => boolean = useCallback( + (): boolean => + formik.values.granter?.length > 0 || + formik.values.amount?.length > 0 || + formik.values.grantedAt?.length > 0, + [formik.values] + ); + + useEffect(() => { + if (isFormInputIncomplete()) { + setUnfinishedDeMinimisAidRow(true); + } else { + setUnfinishedDeMinimisAidRow(false); + } + }, [setUnfinishedDeMinimisAidRow, isFormInputIncomplete]); + return ( <$GridCell $colStart={1} @@ -120,15 +151,7 @@ const DeMinimisAidForm: React.FC = ({ data }) => { >