Skip to content

Commit a7d1daa

Browse files
ray-oxdfatbird
authored andcommitted
DBC22-1735: basic error handling
1 parent 8f5af21 commit a7d1daa

File tree

2 files changed

+32
-14
lines changed

2 files changed

+32
-14
lines changed

src/backend/apps/shared/views.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,26 @@ class FeedbackSerializer(Serializer):
4141
class FeedbackView(APIView):
4242
def post(self, request):
4343
serializer = FeedbackSerializer(data=request.data, context={"request": request})
44-
serializer.is_valid()
45-
# score = serializer.fields['recToken'].score
46-
# serializer.data['subject']
47-
48-
send_mail(
49-
"DriveBC Feedback message",
50-
serializer.data['message'],
51-
serializer.data['email'],
52-
[env("DRIVEBC_FEEDBACK_EMAIL_DEFAULT")],
53-
fail_silently=False,
54-
)
5544

56-
return Response(data={}, status=status.HTTP_200_OK)
45+
try:
46+
serializer.is_valid()
47+
48+
# Currently unused but potentially important data
49+
# score = serializer.fields['recToken'].score
50+
# subject = serializer.data['subject']
51+
52+
send_mail(
53+
"DriveBC Feedback message",
54+
serializer.data['message'],
55+
serializer.data['email'],
56+
[env("DRIVEBC_FEEDBACK_EMAIL_DEFAULT")],
57+
fail_silently=False,
58+
)
59+
60+
return Response(data={}, status=status.HTTP_200_OK)
61+
62+
except Exception:
63+
return Response(data={}, status=status.HTTP_400_BAD_REQUEST)
5764

5865

5966
class CachedListModelMixin:

src/frontend/src/pages/FeedbackPage.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,22 @@ export default function FeedbackPage() {
2121
const [ email, setEmail ] = useState();
2222
const [ subject, setSubject ] = useState(0);
2323
const [ message, setMessage ] = useState();
24+
const [ error, setError ] = useState(false);
2425
const [ success, setSuccess ] = useState(false);
2526

2627
// Recaptcha
2728
const [ recToken, setRecToken ] = useState();
29+
const refreshRecToken = async () => {
30+
setRecToken(await executeRecaptcha('feedbackForm'));
31+
}
2832

2933
const { executeRecaptcha } = useGoogleReCaptcha();
3034
const handleReCaptchaVerify = useCallback(async () => {
3135
if (!executeRecaptcha) { // function not ready yet
3236
return;
3337
}
3438

35-
setRecToken(await executeRecaptcha('feedbackForm'));
36-
39+
refreshRecToken();
3740
}, [executeRecaptcha]);
3841

3942
useEffect(() => {
@@ -62,6 +65,10 @@ export default function FeedbackPage() {
6265
})
6366
.catch((error) => {
6467
console.log(error);
68+
setError(true);
69+
70+
// Refresh captcha token on error
71+
refreshRecToken();
6572
});
6673
};
6774

@@ -96,6 +103,10 @@ export default function FeedbackPage() {
96103
<Button variant="primary" type="submit">
97104
Send
98105
</Button>
106+
107+
{error &&
108+
<span>Error on submission. Please try again.</span>
109+
}
99110
</Form>
100111
</Container>
101112
}

0 commit comments

Comments
 (0)