/
useRedemptionStatus.js
39 lines (32 loc) · 1.05 KB
/
useRedemptionStatus.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { useState } from 'react';
import { useQueryClient } from '@tanstack/react-query';
/**
* Acts as a state machine for the redemption status, with side effects for
* invalidating query cache and redirecting to courseware upon successful redemption.
*
* @returns An object containing the redemption status, and functions to mutate the redemption status.
*/
const useRedemptionStatus = () => {
const queryClient = useQueryClient();
const [redemptionStatus, setRedemptionStatus] = useState();
const handleRedeemClick = () => {
setRedemptionStatus(undefined);
};
const handleRedeemSuccess = (transaction) => {
queryClient.invalidateQueries({ queryKey: ['policy'] });
setRedemptionStatus('success');
// redirect to courseware
const { coursewareUrl } = transaction;
global.location.assign(coursewareUrl);
};
const handleRedeemError = () => {
setRedemptionStatus('error');
};
return {
redemptionStatus,
handleRedeemClick,
handleRedeemSuccess,
handleRedeemError,
};
};
export default useRedemptionStatus;