From c353ca06932309d5fda692a3a86c8f642b70a895 Mon Sep 17 00:00:00 2001 From: Marte Fossum <marte.fossum@usit.uio.no> Date: Mon, 16 Jan 2023 11:36:22 +0100 Subject: [PATCH] Show confimation box or error box for 'end role' --- frontend/public/locales/en/common.json | 4 ++- frontend/public/locales/nb/common.json | 4 ++- frontend/public/locales/nn/common.json | 4 ++- .../routes/sponsor/guest/guestInfo/index.tsx | 17 ++++++++++- .../sponsor/guest/guestRoleInfo/index.tsx | 28 +++++++++++++++---- 5 files changed, 48 insertions(+), 9 deletions(-) diff --git a/frontend/public/locales/en/common.json b/frontend/public/locales/en/common.json index fec1141f..83befb50 100644 --- a/frontend/public/locales/en/common.json +++ b/frontend/public/locales/en/common.json @@ -41,7 +41,8 @@ }, "endRoleDialog": { "title": "End role", - "text": "Ending the role will cause the guest to lose access if there are no other active roles registered. Are you sure you want to end the role?" + "text": "Ending the role will cause the guest to lose access if there are no other active roles registered. Are you sure you want to end the role?", + "endRole": "Ended role {{role}}" }, "guestInfo": { "contactInfo": "Contact information", @@ -210,6 +211,7 @@ "guestRegistrationFailed": "Failed to register your data", "partialSubmitSuccess": "Invite creation partial successful", "emailUpdateFailed": "E-mail update failed", + "badEndDate": "Cannot end a role before it has started", "codes": { "invalid_invite": "Invalid invite", "invite_expired": "Invite has expired", diff --git a/frontend/public/locales/nb/common.json b/frontend/public/locales/nb/common.json index bba31d68..540be666 100644 --- a/frontend/public/locales/nb/common.json +++ b/frontend/public/locales/nb/common.json @@ -41,7 +41,8 @@ }, "endRoleDialog": { "title": "Avslutt rolle", - "text": "Dersom du avslutter rollen vil gjesten miste tilgang om det ikke eksisterer andre aktive roller. Vil du avslutte rollen?" + "text": "Dersom du avslutter rollen vil gjesten miste tilgang om det ikke eksisterer andre aktive roller. Vil du avslutte rollen?", + "endRole": "Avsluttet rolle {{role}}" }, "guestInfo": { "contactInfo": "Kontaktinformasjon", @@ -210,6 +211,7 @@ "guestRegistrationFailed": "Klarte ikke å registrere dataene dine", "partialSubmitSuccess": "Opprettelse av invitasjon delvis vellykket", "emailUpdateFailed": "Oppdatering av e-post feilet", + "badEndDate": "Kan ikke avslutte en rolle før den har startet", "codes": { "invalid_invite": "Ugyldig invitasjon", "invite_expired": "Invitasjonen har utløpt", diff --git a/frontend/public/locales/nn/common.json b/frontend/public/locales/nn/common.json index cff78a45..b7c4e6e8 100644 --- a/frontend/public/locales/nn/common.json +++ b/frontend/public/locales/nn/common.json @@ -41,7 +41,8 @@ }, "endRoleDialog": { "title": "Avslutt rolle", - "text": "Dersom du avsluttar rolla vil gjesten miste tilgang om det ikkje eksisterer andre aktive roller. Vil du avslutte rolla?" + "text": "Dersom du avsluttar rolla vil gjesten miste tilgang om det ikkje eksisterer andre aktive roller. Vil du avslutte rolla?", + "endRole": "Avslutta rolle {{role}}" }, "guestInfo": { "contactInfo": "Kontaktinformasjon", @@ -210,6 +211,7 @@ "guestRegistrationFailed": "Klarte ikkje å registrere informasjonen din", "partialSubmitSuccess": "Oppretting av invitasjon delvis vellukka", "emailUpdateFailed": "Oppdatering av e-post feila", + "badEndDate": "Kan ikkje avslutte ei rolle før ho har starta", "codes": { "invalid_invite": "Ugyldig invitasjon", "invite_expired": "Invitasjonen har gått ut", diff --git a/frontend/src/routes/sponsor/guest/guestInfo/index.tsx b/frontend/src/routes/sponsor/guest/guestInfo/index.tsx index 18d304c1..f62f6848 100644 --- a/frontend/src/routes/sponsor/guest/guestInfo/index.tsx +++ b/frontend/src/routes/sponsor/guest/guestInfo/index.tsx @@ -14,7 +14,7 @@ import { } from '@mui/material' import { Controller, SubmitHandler, useForm } from 'react-hook-form' import { useTranslation } from 'react-i18next' -import { Link, useNavigate, useParams } from 'react-router-dom' +import { Link, useNavigate, useParams, useLocation } from 'react-router-dom' import ServerErrorReport, { ServerErrorReportData, @@ -87,6 +87,10 @@ type Email = { email: string } +interface LocationState { + cancelledRoleName: string +} + export default function GuestInfo({ guest, updateEmail, @@ -97,6 +101,9 @@ export default function GuestInfo({ const { pid } = useParams<GuestInfoParams>() const [t] = useTranslation(['common']) const navigate = useNavigate() + const location = useLocation() + const state = location.state as LocationState + const cancelledRoleName = state?.cancelledRoleName || '' const [confirmCancelDialogOpen, setConfirmCancelDialogOpen] = useState(false) const [showEmailSent, setShowEmailSent] = useState<Boolean>(false) const [emailUpdateError, setEmailUpdateError] = @@ -379,6 +386,14 @@ export default function GuestInfo({ <Typography sx={{ marginBottom: '1rem' }} variant="body1"> {t('guestInfo.roleInfoBody')} </Typography> + {cancelledRoleName && ( + <Alert + sx={{ fontSize: '1rem', marginTop: '1rem', marginBottom: '1rem' }} + severity="success" + > + {t('endRoleDialog.endRole', { role: cancelledRoleName })} + </Alert> + )} <TableContainer> <Table sx={{ minWidth: 650 }} aria-label="simple table"> <TableHead> diff --git a/frontend/src/routes/sponsor/guest/guestRoleInfo/index.tsx b/frontend/src/routes/sponsor/guest/guestRoleInfo/index.tsx index acc8ed30..8d5fe0bc 100644 --- a/frontend/src/routes/sponsor/guest/guestRoleInfo/index.tsx +++ b/frontend/src/routes/sponsor/guest/guestRoleInfo/index.tsx @@ -110,12 +110,13 @@ export default function GuestRoleInfo({ }: GuestRoleInfoProps) { const { pid, id } = useParams<GuestRoleInfoParams>() const { ous } = useOus() - const [t] = useTranslation('common') + const [t, i18n] = useTranslation('common') const { displayContactAtUnit, displayComment } = useFeatureContext() const navigate = useNavigate() const [showPeriodChange, setShowPeriodChange] = useState<Boolean>(false) const [showPeriodChangeFailed, setShowPeriodChangeFailed] = useState<Boolean>(false) + const [badEndDate, setBadEndDate] = useState<Boolean>(false) const [role, setRole] = useState<Role>({ id: '', name_nb: '', @@ -140,10 +141,19 @@ export default function GuestRoleInfo({ // If the role was set to end today, the change will not be active // until the next date since the end date is inclusive const newEndDate = addDays(-1)(today) - role.end_date = newEndDate - endPeriodPost(role_id, { end_date: newEndDate }) - // Go back to guest overview page - navigate(`/sponsor/guest/${guest.pid}`) + if (role.start_date !== undefined && role.start_date > newEndDate) { + setBadEndDate(true) + } else { + role.end_date = newEndDate + endPeriodPost(role_id, { end_date: newEndDate }) + // Go back to guest overview page + navigate(`/sponsor/guest/${guest.pid}`, { + state: { + cancelledRoleName: + i18n.language === 'en' ? role.name_en : role.name_nb, + }, + }) + } } const { @@ -240,6 +250,14 @@ export default function GuestRoleInfo({ {t('error.changePeriodFailed')} </Alert> )} + {badEndDate && ( + <Alert + sx={{ fontSize: '1rem', marginTop: '1rem', marginBottom: '1rem' }} + severity="error" + > + {t('error.badEndDate')} + </Alert> + )} <form onSubmit={onSubmit}> <TableContainer> <Table sx={{ minWidth: 650 }} aria-label="simple table"> -- GitLab