From 909ce7469f5e4a28deb49dddc4ef4b3a093c068a Mon Sep 17 00:00:00 2001
From: Lasse Fredheim <lass@uio.no>
Date: Thu, 23 Feb 2023 10:49:23 +0100
Subject: [PATCH] Add front end validation

---
 frontend/public/locales/en/common.json              |  1 +
 frontend/public/locales/nb/common.json              |  1 +
 frontend/public/locales/nn/common.json              |  1 +
 .../src/routes/sponsor/guest/newGuestRole/index.tsx |  6 ++++++
 .../src/routes/sponsor/register/stepPersonForm.tsx  | 13 +++++++++++--
 5 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/frontend/public/locales/en/common.json b/frontend/public/locales/en/common.json
index 65bb63ea..40684e8e 100644
--- a/frontend/public/locales/en/common.json
+++ b/frontend/public/locales/en/common.json
@@ -131,6 +131,7 @@
     "nationalIdNumberRequired": "Norwegian national ID number required",
     "roleTypeRequired": "Role type is required",
     "roleEndRequired": "Role end date is required",
+    "invalidEndDate": "Chosen role must have an earlier end date",
     "emailRequired": "E-mail is required",
     "consentRequired": "This consent is required",
     "invalidMobilePhoneNumber": "Invalid phone number",
diff --git a/frontend/public/locales/nb/common.json b/frontend/public/locales/nb/common.json
index 908dd470..38363b4a 100644
--- a/frontend/public/locales/nb/common.json
+++ b/frontend/public/locales/nb/common.json
@@ -131,6 +131,7 @@
     "nationalIdNumberRequired": "Fødselsnummer/D-nummer er obligatorisk",
     "roleTypeRequired": "Rolletype er obligatorisk",
     "roleEndRequired": "Sluttdato for rolle er obligatorisk",
+    "invalidEndDate": "Valgt rolle må ha en tidligere sluttdato",
     "emailRequired": "E-post er obligatorisk",
     "consentRequired": "Dette samtykket er obligatorisk",
     "invalidMobilePhoneNumber": "Ugyldig telefonnummer",
diff --git a/frontend/public/locales/nn/common.json b/frontend/public/locales/nn/common.json
index 2119651f..e1669b95 100644
--- a/frontend/public/locales/nn/common.json
+++ b/frontend/public/locales/nn/common.json
@@ -131,6 +131,7 @@
     "nationalIdNumberRequired": "Fødselsnummer/D-nummer er påkrevd",
     "roleTypeRequired": "Rolletype er påkrevd",
     "roleEndRequired": "Sluttdato for rolle er påkrevd",
+    "invalidEndDate": "Vald rolle må ha ein tidlegare sluttdato",
     "emailRequired": "E-post er påkrevd",
     "consentRequired": "Dette samtykket er påkrevd",
     "invalidMobilePhoneNumber": "Ugyldig telefonnummer",
diff --git a/frontend/src/routes/sponsor/guest/newGuestRole/index.tsx b/frontend/src/routes/sponsor/guest/newGuestRole/index.tsx
index 7b158bd0..f9671a69 100644
--- a/frontend/src/routes/sponsor/guest/newGuestRole/index.tsx
+++ b/frontend/src/routes/sponsor/guest/newGuestRole/index.tsx
@@ -305,6 +305,7 @@ function NewGuestRole({ guest, reloadGuestInfo }: NewGuestRoleProps) {
             control={control}
             rules={{
               required: true,
+              validate: () => Number(getValues('end_date')) <= Number(maxDate),
             }}
             render={({ field }) => (
               <DatePicker
@@ -328,6 +329,11 @@ function NewGuestRole({ guest, reloadGuestInfo }: NewGuestRoleProps) {
               {t('validation.roleEndRequired')}
             </Box>
           )}
+          {errors.end_date && errors.end_date.type === 'validate' && (
+            <Box sx={{ typography: 'caption', color: 'error.main' }}>
+              {t('validation.invalidEndDate')}
+            </Box>
+          )}
           {displayContactAtUnit && (
             <TextField
               id="contact"
diff --git a/frontend/src/routes/sponsor/register/stepPersonForm.tsx b/frontend/src/routes/sponsor/register/stepPersonForm.tsx
index 49fc572c..e9c8f5a1 100644
--- a/frontend/src/routes/sponsor/register/stepPersonForm.tsx
+++ b/frontend/src/routes/sponsor/register/stepPersonForm.tsx
@@ -315,7 +315,11 @@ const StepPersonForm = forwardRef(
               <Controller
                 name="role_end"
                 control={control}
-                rules={{ required: true }}
+                rules={{
+                  required: true,
+                  validate: () =>
+                    Number(getValues('role_end')) <= Number(todayPlusMaxDays),
+                }}
                 render={({ field }) => (
                   <DatePicker
                     mask="____-__-__"
@@ -331,11 +335,16 @@ const StepPersonForm = forwardRef(
                   />
                 )}
               />
-              {!!errors.role_end && (
+              {!!errors.role_end && errors.role_end.type === 'required' && (
                 <Box sx={{ typography: 'caption', color: 'red' }}>
                   {t('validation.roleEndRequired')}
                 </Box>
               )}
+              {!!errors.role_end && errors.role_end.type === 'validate' && (
+                <Box sx={{ typography: 'caption', color: 'red' }}>
+                  {t('validation.invalidEndDate')}
+                </Box>
+              )}
 
               {displayContactAtUnit && (
                 <TextField
-- 
GitLab