Skip to content
Snippets Groups Projects
Commit 3aa9c778 authored by Marte Fossum's avatar Marte Fossum
Browse files

GREG-309: Show confirmation or error box when cancel invitation

parent 8cf755cb
No related branches found
No related tags found
1 merge request!371GREG-309: Show confirmation or error box when cancel invitation
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
"choiceDate": "Choice date", "choiceDate": "Choice date",
"consentName": "Consent type", "consentName": "Consent type",
"periodChanged": "Period changed", "periodChanged": "Period changed",
"invitationCancelled": "The invitation to {{name}} cancelled",
"registeredInfo": "Registererd information on you", "registeredInfo": "Registererd information on you",
"registeredInfoExplanation": "Here is the contact information, roles and consent information that is registered on you.", "registeredInfoExplanation": "Here is the contact information, roles and consent information that is registered on you.",
"roleInfoHead": "Roles and periods", "roleInfoHead": "Roles and periods",
...@@ -199,6 +200,7 @@ ...@@ -199,6 +200,7 @@
"error": { "error": {
"error": "Error", "error": "Error",
"changePeriodFailed": "Failed to change period", "changePeriodFailed": "Failed to change period",
"invitationCancelFailed": "Failed to cancel invite",
"invitationCreationFailedHeader": "Failed to create invite", "invitationCreationFailedHeader": "Failed to create invite",
"errorStatusCode": "Status code: {{statusCode}} (<3>{{statusText}}</3>)", "errorStatusCode": "Status code: {{statusCode}} (<3>{{statusText}}</3>)",
"genericServerErrorBody": "Message:<1>{{errorBodyText}}</1>", "genericServerErrorBody": "Message:<1>{{errorBodyText}}</1>",
......
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
"choiceDate": "Valgdato", "choiceDate": "Valgdato",
"consentName": "Samtykketype", "consentName": "Samtykketype",
"periodChanged": "Rolleperiode endret", "periodChanged": "Rolleperiode endret",
"invitationCancelled": "Invitasjonen til {{name}} kansellert",
"registeredInfo": "Registrert informasjon om deg", "registeredInfo": "Registrert informasjon om deg",
"registeredInfoExplanation": "Her er en oversikt over kontaktinformasjon, roller og samtykker som er registrert om deg.", "registeredInfoExplanation": "Her er en oversikt over kontaktinformasjon, roller og samtykker som er registrert om deg.",
"roleInfoHead": "Roller og perioder", "roleInfoHead": "Roller og perioder",
...@@ -199,6 +200,7 @@ ...@@ -199,6 +200,7 @@
"error": { "error": {
"error": "Feil", "error": "Feil",
"changePeriodFailed": "Kunne ikke endre periode", "changePeriodFailed": "Kunne ikke endre periode",
"invitationCancelFailed": "Kunne ikke kansellere invitasjon",
"invitationCreationFailedHeader": "Kunne ikke opprette invitasjon", "invitationCreationFailedHeader": "Kunne ikke opprette invitasjon",
"errorStatusCode": "Statuskode: {{statusCode}} (<3>{{statusText}}</3>)", "errorStatusCode": "Statuskode: {{statusCode}} (<3>{{statusText}}</3>)",
"genericServerErrorBody": "Melding:<1>{{errorBodyText}}</1>", "genericServerErrorBody": "Melding:<1>{{errorBodyText}}</1>",
......
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
"choiceDate": "Valdato", "choiceDate": "Valdato",
"consentName": "Samtykketype", "consentName": "Samtykketype",
"periodChanged": "Rolleperiode endra", "periodChanged": "Rolleperiode endra",
"invitationCancelled": "Invitasjonen til {{name}} kansellert",
"registeredInfo": "Registrert informasjon om deg", "registeredInfo": "Registrert informasjon om deg",
"registeredInfoExplanation": "Her er ei oversikt over kontaktinformasjon, roller og samtykke som er registrert om deg.", "registeredInfoExplanation": "Her er ei oversikt over kontaktinformasjon, roller og samtykke som er registrert om deg.",
"roleInfoTableText": "Gjesteroller", "roleInfoTableText": "Gjesteroller",
...@@ -199,6 +200,7 @@ ...@@ -199,6 +200,7 @@
"error": { "error": {
"error": "Feil", "error": "Feil",
"changePeriodFailed": "Kunne ikkje endre periode", "changePeriodFailed": "Kunne ikkje endre periode",
"invitationCancelFailed": "Kunne ikkje kansellere invitasjon",
"invitationCreationFailedHeader": "Kunne ikkje opprette invitasjon", "invitationCreationFailedHeader": "Kunne ikkje opprette invitasjon",
"errorStatusCode": "Statuskode: {{statusCode}} (<3>{{statusText}}</3>)", "errorStatusCode": "Statuskode: {{statusCode}} (<3>{{statusText}}</3>)",
"genericServerErrorBody": "Melding:<1>{{errorBodyText}}</1>", "genericServerErrorBody": "Melding:<1>{{errorBodyText}}</1>",
......
import PersonIcon from '@mui/icons-material/Person' import PersonIcon from '@mui/icons-material/Person'
import { Box, IconButton, styled, Theme } from '@mui/material' import { Alert, Box, IconButton, styled, Theme } from '@mui/material'
import PersonAddIcon from '@mui/icons-material/PersonAdd' import PersonAddIcon from '@mui/icons-material/PersonAdd'
import React from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useNavigate } from 'react-router-dom' import { useLocation, useNavigate } from 'react-router-dom'
interface SponsorGuestButtonsProps { interface SponsorGuestButtonsProps {
yourGuestsActive?: boolean yourGuestsActive?: boolean
...@@ -17,11 +16,19 @@ const StyledIconButton = styled(IconButton)({ ...@@ -17,11 +16,19 @@ const StyledIconButton = styled(IconButton)({
fontSize: '1.375rem', fontSize: '1.375rem',
}) })
interface LocationState {
cancelledInvitationFor: string
}
export default function SponsorGuestButtons(props: SponsorGuestButtonsProps) { export default function SponsorGuestButtons(props: SponsorGuestButtonsProps) {
const { yourGuestsActive, registerNewGuestActive } = props const { yourGuestsActive, registerNewGuestActive } = props
const { t } = useTranslation(['common']) const { t } = useTranslation(['common'])
const navigate = useNavigate() const navigate = useNavigate()
const location = useLocation()
const state = location.state as LocationState
const cancelledInvitationFor = state?.cancelledInvitationFor || ''
const goToOverview = () => { const goToOverview = () => {
navigate('/sponsor') navigate('/sponsor')
} }
...@@ -31,66 +38,79 @@ export default function SponsorGuestButtons(props: SponsorGuestButtonsProps) { ...@@ -31,66 +38,79 @@ export default function SponsorGuestButtons(props: SponsorGuestButtonsProps) {
} }
return ( return (
<Box <Box sx={{ display: 'flex', flexDirection: 'column' }}>
sx={{ <Box
display: 'flex',
flexDirection: 'row',
justifyContent: 'space-evenly',
marginBottom: '2rem',
fontSize: '1.375rem',
}}
>
<StyledIconButton
onClick={goToOverview}
sx={{ sx={{
color: () => (yourGuestsActive ? 'black' : undefined), display: 'flex',
textDecorationLine: () => (yourGuestsActive ? 'underline' : ''), flexDirection: 'row',
justifyContent: 'space-evenly',
marginBottom: '2rem',
fontSize: '1.375rem',
}} }}
> >
<PersonIcon <StyledIconButton
onClick={goToOverview}
sx={{ sx={{
fontSize: '5rem', color: () => (yourGuestsActive ? 'black' : undefined),
borderRadius: '4rem', textDecorationLine: () => (yourGuestsActive ? 'underline' : ''),
borderStyle: 'solid',
borderColor: (theme: Theme) =>
yourGuestsActive
? theme.palette.secondary.main
: theme.greg.deactivatedColor,
fill: 'white',
backgroundColor: (theme: Theme) =>
yourGuestsActive
? theme.palette.secondary.main
: theme.greg.deactivatedColor,
}} }}
/> >
{t('yourGuests')} <PersonIcon
</StyledIconButton> sx={{
fontSize: '5rem',
borderRadius: '4rem',
borderStyle: 'solid',
borderColor: (theme: Theme) =>
yourGuestsActive
? theme.palette.secondary.main
: theme.greg.deactivatedColor,
fill: 'white',
backgroundColor: (theme: Theme) =>
yourGuestsActive
? theme.palette.secondary.main
: theme.greg.deactivatedColor,
}}
/>
{t('yourGuests')}
</StyledIconButton>
<StyledIconButton <StyledIconButton
onClick={goToRegister} onClick={goToRegister}
sx={{
color: () => (registerNewGuestActive ? 'black' : undefined),
textDecorationLine: () => (registerNewGuestActive ? 'underline' : ''),
}}
>
<PersonAddIcon
sx={{ sx={{
fontSize: '5rem', color: () => (registerNewGuestActive ? 'black' : undefined),
borderRadius: '4rem', textDecorationLine: () =>
borderStyle: 'solid', registerNewGuestActive ? 'underline' : '',
borderColor: (theme: Theme) =>
registerNewGuestActive
? theme.palette.secondary.main
: theme.greg.deactivatedColor,
fill: 'white',
backgroundColor: (theme: Theme) =>
registerNewGuestActive
? theme.palette.secondary.main
: theme.greg.deactivatedColor,
}} }}
/> >
{t('registerNewGuest')} <PersonAddIcon
</StyledIconButton> sx={{
fontSize: '5rem',
borderRadius: '4rem',
borderStyle: 'solid',
borderColor: (theme: Theme) =>
registerNewGuestActive
? theme.palette.secondary.main
: theme.greg.deactivatedColor,
fill: 'white',
backgroundColor: (theme: Theme) =>
registerNewGuestActive
? theme.palette.secondary.main
: theme.greg.deactivatedColor,
}}
/>
{t('registerNewGuest')}
</StyledIconButton>
</Box>
{cancelledInvitationFor && (
<Alert
sx={{ fontSize: '1.375rem', marginTop: '1rem', marginBottom: '1rem' }}
severity="info"
>
{t('guestInfo.invitationCancelled', {
name: cancelledInvitationFor,
})}
</Alert>
)}
</Box> </Box>
) )
} }
......
...@@ -102,6 +102,7 @@ export default function GuestInfo({ ...@@ -102,6 +102,7 @@ export default function GuestInfo({
const [emailUpdateError, setEmailUpdateError] = const [emailUpdateError, setEmailUpdateError] =
useState<ServerErrorReportData>() useState<ServerErrorReportData>()
const [updateOKMsg, setUpdateOKMsg] = useState<string>('') const [updateOKMsg, setUpdateOKMsg] = useState<string>('')
const [showErrorMessage, setShowErrorMessage] = useState<Boolean>(false)
// Using useForm even though only the e-mail is allow to change at present, since useForm makes setup and validation easier // Using useForm even though only the e-mail is allow to change at present, since useForm makes setup and validation easier
const { const {
...@@ -206,11 +207,14 @@ export default function GuestInfo({ ...@@ -206,11 +207,14 @@ export default function GuestInfo({
if (result !== null) { if (result !== null) {
// The invite for the guest has been cancelled, send the user back to the sponsor front page // The invite for the guest has been cancelled, send the user back to the sponsor front page
reloadGuests() reloadGuests()
navigate('/sponsor') navigate('/sponsor', {
state: { cancelledInvitationFor: `${guest.first} ${guest.last}` },
})
} }
}) })
.catch((error) => { .catch((error) => {
// TODO User should get some feedback telling him something failed setConfirmCancelDialogOpen(false)
setShowErrorMessage(true)
console.log('error', error) console.log('error', error)
}) })
} }
...@@ -262,6 +266,11 @@ export default function GuestInfo({ ...@@ -262,6 +266,11 @@ export default function GuestInfo({
{t(updateOKMsg)} {t(updateOKMsg)}
</Alert> </Alert>
)} )}
{showErrorMessage && (
<Alert severity="error" sx={{ marginBottom: '1rem' }}>
{t('error.invitationCancelFailed')}
</Alert>
)}
{showEmailSent && ( {showEmailSent && (
<Alert <Alert
severity="success" severity="success"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment