mirror of
https://github.com/vercel/commerce.git
synced 2025-07-04 20:21:21 +00:00
Updated core types for commerce provider
This commit is contained in:
parent
0e7e7b7d5f
commit
ba889ff2b1
@ -47,46 +47,42 @@ export type Provider = CommerceConfig & {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type CommerceProps<P extends Provider> = {
|
export type CommerceConfig = {
|
||||||
children?: ReactNode
|
|
||||||
provider: P
|
|
||||||
config: CommerceConfig
|
|
||||||
}
|
|
||||||
|
|
||||||
export type CommerceConfig = Omit<
|
|
||||||
CommerceContextValue<any>,
|
|
||||||
'providerRef' | 'fetcherRef'
|
|
||||||
>
|
|
||||||
|
|
||||||
export type CommerceContextValue<P extends Provider> = {
|
|
||||||
providerRef: MutableRefObject<P>
|
|
||||||
fetcherRef: MutableRefObject<Fetcher>
|
|
||||||
locale: string
|
locale: string
|
||||||
cartCookie: string
|
cartCookie: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type CommerceContextValue<P extends Provider> = {
|
||||||
|
providerRef: MutableRefObject<P>
|
||||||
|
fetcherRef: MutableRefObject<Fetcher>
|
||||||
|
} & CommerceConfig
|
||||||
|
|
||||||
|
export type CommerceProps<P extends Provider> = {
|
||||||
|
children?: ReactNode
|
||||||
|
provider: P
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These are the properties every provider should allow when implementing
|
||||||
|
* the core commerce provider
|
||||||
|
*/
|
||||||
|
export type CommerceProviderProps = {
|
||||||
|
children?: ReactNode
|
||||||
|
} & Partial<CommerceConfig>
|
||||||
|
|
||||||
export function CommerceProvider<P extends Provider>({
|
export function CommerceProvider<P extends Provider>({
|
||||||
provider,
|
provider,
|
||||||
children,
|
children,
|
||||||
config,
|
|
||||||
}: CommerceProps<P>) {
|
}: CommerceProps<P>) {
|
||||||
if (!config) {
|
|
||||||
throw new Error('CommerceProvider requires a valid config object')
|
|
||||||
}
|
|
||||||
|
|
||||||
const providerRef = useRef(provider)
|
const providerRef = useRef(provider)
|
||||||
// TODO: Remove the fetcherRef
|
// TODO: Remove the fetcherRef
|
||||||
const fetcherRef = useRef(provider.fetcher)
|
const fetcherRef = useRef(provider.fetcher)
|
||||||
// Because the config is an object, if the parent re-renders this provider
|
// If the parent re-renders this provider will re-render every
|
||||||
// will re-render every consumer unless we memoize the config
|
// consumer unless we memoize the config
|
||||||
|
const { locale, cartCookie } = providerRef.current
|
||||||
const cfg = useMemo(
|
const cfg = useMemo(
|
||||||
() => ({
|
() => ({ providerRef, fetcherRef, locale, cartCookie }),
|
||||||
providerRef,
|
[locale, cartCookie]
|
||||||
fetcherRef,
|
|
||||||
locale: config.locale,
|
|
||||||
cartCookie: config.cartCookie,
|
|
||||||
}),
|
|
||||||
[config.locale, config.cartCookie]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return <Commerce.Provider value={cfg}>{children}</Commerce.Provider>
|
return <Commerce.Provider value={cfg}>{children}</Commerce.Provider>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user