forked from crowetic/commerce
Simplify configs
This commit is contained in:
parent
9c3cb31b49
commit
40cdb2f6d7
@ -2,7 +2,8 @@ import {
|
||||
CartProvider as CommerceCartProvider,
|
||||
useCart as useCommerceCart,
|
||||
} from '../commerce/cart';
|
||||
import { Cart } from './index';
|
||||
|
||||
export type Cart = any;
|
||||
|
||||
export function CartProvider({ children }) {
|
||||
return <CommerceCartProvider>{children}</CommerceCartProvider>;
|
||||
|
@ -1,12 +1,9 @@
|
||||
import {
|
||||
CommerceProvider,
|
||||
CommerceProvider as CoreCommerceProvider,
|
||||
Connector,
|
||||
HookResolver,
|
||||
useCommerce as useComm,
|
||||
useCommerce as useCoreCommerce,
|
||||
} from '../commerce';
|
||||
|
||||
export type Cart = any;
|
||||
|
||||
async function getText(res: Response) {
|
||||
try {
|
||||
return (await res.text()) || res.statusText;
|
||||
@ -23,11 +20,7 @@ async function getError(res: Response) {
|
||||
return { message: await getText(res) };
|
||||
}
|
||||
|
||||
async function fetcher(
|
||||
url: string,
|
||||
query: string,
|
||||
resolver: HookResolver<Cart>
|
||||
) {
|
||||
async function fetcher(url: string, query: string) {
|
||||
const res = await fetch(url);
|
||||
|
||||
if (res.ok) {
|
||||
@ -37,42 +30,18 @@ async function fetcher(
|
||||
throw await getError(res);
|
||||
}
|
||||
|
||||
export const bigcommerce: Connector<Cart> = {
|
||||
hooks: {
|
||||
useCart: {
|
||||
query: '',
|
||||
resolver() {
|
||||
return;
|
||||
},
|
||||
},
|
||||
useAddItem: {
|
||||
query: '',
|
||||
resolver() {
|
||||
return;
|
||||
},
|
||||
},
|
||||
useUpdateItem: {
|
||||
query: '',
|
||||
resolver() {
|
||||
return;
|
||||
},
|
||||
},
|
||||
useRemoveItem: {
|
||||
query: '',
|
||||
resolver() {
|
||||
return;
|
||||
},
|
||||
},
|
||||
},
|
||||
export const bigcommerce: Connector = {
|
||||
locale: 'en-us',
|
||||
fetcher,
|
||||
};
|
||||
|
||||
// TODO: The connector should be extendable when a developer is using it
|
||||
export function BigcommerceProvider({ children }) {
|
||||
export function CommerceProvider({ children }) {
|
||||
return (
|
||||
<CommerceProvider connector={bigcommerce}>{children}</CommerceProvider>
|
||||
<CoreCommerceProvider connector={bigcommerce}>
|
||||
{children}
|
||||
</CoreCommerceProvider>
|
||||
);
|
||||
}
|
||||
|
||||
export const useCommerce = () => useComm<Cart>();
|
||||
export const useCommerce = () => useCoreCommerce();
|
||||
|
@ -1,6 +1,8 @@
|
||||
import { createContext, useContext } from 'react';
|
||||
import useSWR, { responseInterface } from 'swr';
|
||||
import { Cart, useCommerce } from '.';
|
||||
import { useCommerce } from '.';
|
||||
|
||||
export type Cart = any;
|
||||
|
||||
export type CartResponse<C extends Cart> = responseInterface<C, Error> & {
|
||||
isEmpty: boolean;
|
||||
|
@ -1,44 +1,20 @@
|
||||
import { createContext, ReactNode, useContext } from 'react';
|
||||
|
||||
const Commerce = createContext<Connector<any>>(null);
|
||||
const Commerce = createContext<Connector>(null);
|
||||
|
||||
export type Cart = any;
|
||||
|
||||
export type CommerceProps<C extends Cart> = {
|
||||
export type CommerceProps = {
|
||||
children?: ReactNode;
|
||||
connector: Connector<C>;
|
||||
connector: Connector;
|
||||
};
|
||||
|
||||
export type Connector<C extends Cart> = {
|
||||
hooks: {
|
||||
useCart: Hook<C>;
|
||||
useAddItem: Hook<C>;
|
||||
useUpdateItem: Hook<C>;
|
||||
useRemoveItem: Hook<C>;
|
||||
};
|
||||
export type Connector = {
|
||||
fetcher: Fetcher<any>;
|
||||
locale: string;
|
||||
};
|
||||
|
||||
export type Hook<T extends any> = {
|
||||
query?: string;
|
||||
url?: string;
|
||||
resolver: HookResolver<T>;
|
||||
};
|
||||
|
||||
export type HookResolver<T> = (
|
||||
fetcher: Fetcher<T>,
|
||||
context: ResolverContext
|
||||
) => T | Promise<T>;
|
||||
|
||||
export type Fetcher<T> = (...args: any) => T | Promise<T>;
|
||||
|
||||
export type ResolverContext = {
|
||||
query?: string;
|
||||
locale: string;
|
||||
};
|
||||
|
||||
export function CommerceProvider({ children, connector }: CommerceProps<Cart>) {
|
||||
export function CommerceProvider({ children, connector }: CommerceProps) {
|
||||
if (!connector) {
|
||||
throw new Error(
|
||||
'CommerceProvider requires a valid headless commerce connector'
|
||||
@ -48,6 +24,6 @@ export function CommerceProvider({ children, connector }: CommerceProps<Cart>) {
|
||||
return <Commerce.Provider value={connector}>{children}</Commerce.Provider>;
|
||||
}
|
||||
|
||||
export function useCommerce<C extends Cart>() {
|
||||
return useContext(Commerce) as Connector<C>;
|
||||
export function useCommerce<T extends Connector>() {
|
||||
return useContext(Commerce) as T;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user