-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathuseHardcoreAccess.tsx
More file actions
51 lines (43 loc) · 1.84 KB
/
useHardcoreAccess.tsx
File metadata and controls
51 lines (43 loc) · 1.84 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
import { HardcoreAccessStatus } from '@hotandcold/classic-shared';
import { createContext, useContext, useEffect, useState } from 'react';
import { useDevvitListener } from './useDevvitListener';
type HardcoreAccessContext = {
access: HardcoreAccessStatus;
setAccess: (a: HardcoreAccessStatus) => void;
};
const hardcoreAccessContext = createContext<HardcoreAccessContext | null>(null);
export const HardcoreAccessContextProvider = (props: { children: React.ReactNode }) => {
const [access, setAccess] = useState<HardcoreAccessStatus>({ status: 'inactive' });
const hardcoreAccessInitResponse = useDevvitListener('HARDCORE_ACCESS_INIT_RESPONSE');
const productPurchaseResponse = useDevvitListener('PURCHASE_PRODUCT_SUCCESS_RESPONSE');
const productPurchaseBroadcast = useDevvitListener('PURCHASE_PRODUCT_SUCCESS_BROADCAST');
useEffect(() => {
if (hardcoreAccessInitResponse?.hardcoreAccessStatus != null) {
setAccess(hardcoreAccessInitResponse.hardcoreAccessStatus);
}
}, [hardcoreAccessInitResponse, setAccess]);
// When a purchase is successful, update 'access' state
// `unlock hardcore` page and modal should react to this and act accordingly
useEffect(() => {
if (productPurchaseResponse != null) {
setAccess(productPurchaseResponse.access);
}
}, [productPurchaseResponse, setAccess]);
useEffect(() => {
if (productPurchaseBroadcast != null) {
setAccess(productPurchaseBroadcast.access);
}
}, [productPurchaseBroadcast, setAccess]);
return (
<hardcoreAccessContext.Provider value={{ access, setAccess }}>
{props.children}
</hardcoreAccessContext.Provider>
);
};
export const useHardcoreAccess = () => {
const ctx = useContext(hardcoreAccessContext);
if (ctx == null) {
throw new Error('useHardcoreAccess must be used within a HardcoreAccessContextProvider');
}
return ctx;
};