From 4501998f6167ece045c8317a530cb5ee422f91e7 Mon Sep 17 00:00:00 2001 From: Luca Pezzolla Date: Tue, 6 Feb 2024 15:21:46 +0100 Subject: [PATCH] fix(exams): add confirmation dialog when accepting or rejecting a provisional grade --- assets/translations/en.json | 2 ++ assets/translations/it.json | 2 ++ .../screens/ProvisionalGradeScreen.tsx | 27 ++++++++++++++----- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index b699065d..c99ca960 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -614,9 +614,11 @@ "trainingOffer": "Training offer" }, "provisionalGradeScreen": { + "acceptGradeConfirmMessage": "By accepting this evaluation you will no longer be able to change your decision", "acceptGradeCta": "Request immediate registration", "acceptGradeFeedback": "The evaluation has been recorded, it will appear in the transcript", "contactProfessorCta": "Contact the teacher", + "rejectGradeConfirmMessage": "By rejecting this evaluation you will no longer be able to change your decision", "rejectGradeCta": "Reject the evaluation", "rejectGradeFeedback": "Evaluation rejected, it will be recorded in the next few hours", "title": "Evaluation" diff --git a/assets/translations/it.json b/assets/translations/it.json index 49e5f950..cd990fd3 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -614,9 +614,11 @@ "trainingOffer": "Offerta formativa" }, "provisionalGradeScreen": { + "acceptGradeConfirmMessage": "Accettando il voto non potrai più cambiare la tua decisione", "acceptGradeCta": "Richiedi la registrazione immediata", "acceptGradeFeedback": "Valutazione registrata, verrà visualizzata nel libretto", "contactProfessorCta": "Contatta il docente", + "rejectGradeConfirmMessage": "Rifiutando il voto non potrai più cambiare la tua decisione", "rejectGradeCta": "Rifiuta la valutazione", "rejectGradeFeedback": "Valutazione rifiutata, verrà registrata nelle prossime ore", "title": "Valutazione" diff --git a/src/features/transcript/screens/ProvisionalGradeScreen.tsx b/src/features/transcript/screens/ProvisionalGradeScreen.tsx index 35be399c..82bfe182 100644 --- a/src/features/transcript/screens/ProvisionalGradeScreen.tsx +++ b/src/features/transcript/screens/ProvisionalGradeScreen.tsx @@ -17,6 +17,7 @@ import { NativeStackScreenProps } from '@react-navigation/native-stack'; import { BottomBarSpacer } from '../../../core/components/BottomBarSpacer'; import { useFeedbackContext } from '../../../core/contexts/FeedbackContext'; +import { useConfirmationDialog } from '../../../core/hooks/useConfirmationDialog'; import { useOfflineDisabled } from '../../../core/hooks/useOfflineDisabled'; import { useAcceptProvisionalGrade, @@ -35,6 +36,16 @@ export const ProvisionalGradeScreen = ({ navigation, route }: Props) => { const styles = useStylesheet(createStyles); const { setFeedback } = useFeedbackContext(); + const confirmAcceptance = useConfirmationDialog({ + title: t('common.areYouSure?'), + message: t('provisionalGradeScreen.acceptGradeConfirmMessage'), + }); + + const confirmRejection = useConfirmationDialog({ + title: t('common.areYouSure?'), + message: t('provisionalGradeScreen.rejectGradeConfirmMessage'), + }); + const { id } = route.params; const gradesQuery = useGetProvisionalGrades(); @@ -119,9 +130,11 @@ export const ProvisionalGradeScreen = ({ navigation, route }: Props) => { - acceptGradeQuery - .mutateAsync(grade.id) - .then(() => provideFeedback(true)) + confirmAcceptance().then(() => + acceptGradeQuery + .mutateAsync(grade.id) + .then(() => provideFeedback(true)), + ) } variant="outlined" absolute={false} @@ -136,9 +149,11 @@ export const ProvisionalGradeScreen = ({ navigation, route }: Props) => { - rejectGradeQuery - .mutateAsync(grade.id) - .then(() => provideFeedback(false)) + confirmRejection().then(() => + rejectGradeQuery + .mutateAsync(grade.id) + .then(() => provideFeedback(false)), + ) } absolute={false} loading={rejectGradeQuery.isLoading}