Added util method for provider creation

This commit is contained in:
Luis Alvarez 2021-08-26 23:04:45 -05:00
parent 760e26c35c
commit f07b29c0f0
2 changed files with 16 additions and 16 deletions

View File

@ -1,23 +1,10 @@
import { import { getCommerceProvider, useCommerce as useCoreCommerce } from '@commerce'
CommerceProvider as CoreCommerceProvider,
CommerceProviderProps,
useCommerce as useCoreCommerce,
} from '@commerce'
import { bigcommerceProvider } from './provider' import { bigcommerceProvider } from './provider'
import type { BigcommerceProvider } from './provider' import type { BigcommerceProvider } from './provider'
export { bigcommerceProvider } export { bigcommerceProvider }
export type { BigcommerceProvider } export type { BigcommerceProvider }
export function CommerceProvider({ export const CommerceProvider = getCommerceProvider(bigcommerceProvider)
children,
...props
}: CommerceProviderProps) {
return (
<CoreCommerceProvider provider={{ ...bigcommerceProvider, ...props }}>
{children}
</CoreCommerceProvider>
)
}
export const useCommerce = () => useCoreCommerce<BigcommerceProvider>() export const useCommerce = () => useCoreCommerce<BigcommerceProvider>()

View File

@ -70,7 +70,7 @@ export type CommerceProviderProps = {
children?: ReactNode children?: ReactNode
} & Partial<CommerceConfig> } & Partial<CommerceConfig>
export function CommerceProvider<P extends Provider>({ export function CoreCommerceProvider<P extends Provider>({
provider, provider,
children, children,
}: CommerceProps<P>) { }: CommerceProps<P>) {
@ -88,6 +88,19 @@ export function CommerceProvider<P extends Provider>({
return <Commerce.Provider value={cfg}>{children}</Commerce.Provider> return <Commerce.Provider value={cfg}>{children}</Commerce.Provider>
} }
export function getCommerceProvider<P extends Provider>(provider: P) {
return function CommerceProvider({
children,
...props
}: CommerceProviderProps) {
return (
<CoreCommerceProvider provider={{ ...provider, ...props }}>
{children}
</CoreCommerceProvider>
)
}
}
export function useCommerce<P extends Provider>() { export function useCommerce<P extends Provider>() {
return useContext(Commerce) as CommerceContextValue<P> return useContext(Commerce) as CommerceContextValue<P>
} }