This commit is contained in:
Eric Bailey
2024-11-26 09:41:14 -06:00
parent 011ef85230
commit 33181ab8ce
3 changed files with 53 additions and 8 deletions
+10 -1
View File
@@ -12,12 +12,21 @@ export type PurchasesState =
}
| {
status: 'ready'
refetching: boolean
email?: string
subscriptions: APISubscription[]
entitlements: APIEntitlement[]
config: {}
}
export const Context = React.createContext<PurchasesState>({
export type PurchasesApi = {
refetch: () => Promise<void>
}
export const StateContext = React.createContext<PurchasesState>({
status: 'loading',
})
export const ApiContext = React.createContext<PurchasesApi>({
refetch: async () => {},
})
+27 -4
View File
@@ -1,6 +1,11 @@
import React from 'react'
import {Context, PurchasesState} from '#/state/purchases/context'
import {
ApiContext,
PurchasesApi,
PurchasesState,
StateContext,
} from '#/state/purchases/context'
import {useNativeEventsListener} from '#/state/purchases/hooks/useNativeEventsListener'
import {usePurchasesState} from '#/state/purchases/hooks/usePurchasesState'
@@ -11,6 +16,7 @@ export function Provider({children}: {children: React.ReactNode}) {
data: purchases,
error: purchasesStateError,
refetch,
isRefetching,
} = usePurchasesState()
const ctx = React.useMemo<PurchasesState>(() => {
if (purchasesStateError) {
@@ -25,13 +31,22 @@ export function Provider({children}: {children: React.ReactNode}) {
} else {
return {
status: 'ready',
refetching: isRefetching,
email: purchases?.email,
subscriptions: purchases?.subscriptions ?? [],
entitlements: purchases?.entitlements ?? [],
config: {},
}
}
}, [purchases, purchasesStateError])
}, [purchases, purchasesStateError, isRefetching])
const apiCtx = React.useMemo<PurchasesApi>(() => {
return {
refetch: async () => {
await refetch()
},
}
}, [refetch])
useNativeEventsListener({
onCustomerInfoUpdated() {
@@ -39,9 +54,17 @@ export function Provider({children}: {children: React.ReactNode}) {
},
})
return <Context.Provider value={ctx}>{children}</Context.Provider>
return (
<ApiContext.Provider value={apiCtx}>
<StateContext.Provider value={ctx}>{children}</StateContext.Provider>
</ApiContext.Provider>
)
}
export function usePurchases() {
return React.useContext(Context)
return React.useContext(StateContext)
}
export function usePurchasesApi() {
return React.useContext(ApiContext)
}