4
0
forked from crowetic/commerce

Simplify configs

This commit is contained in:
Luis Alvarez 2020-09-29 18:07:21 -05:00
parent 9c3cb31b49
commit 40cdb2f6d7
4 changed files with 21 additions and 73 deletions

View File

@ -2,7 +2,8 @@ import {
CartProvider as CommerceCartProvider, CartProvider as CommerceCartProvider,
useCart as useCommerceCart, useCart as useCommerceCart,
} from '../commerce/cart'; } from '../commerce/cart';
import { Cart } from './index';
export type Cart = any;
export function CartProvider({ children }) { export function CartProvider({ children }) {
return <CommerceCartProvider>{children}</CommerceCartProvider>; return <CommerceCartProvider>{children}</CommerceCartProvider>;

View File

@ -1,12 +1,9 @@
import { import {
CommerceProvider, CommerceProvider as CoreCommerceProvider,
Connector, Connector,
HookResolver, useCommerce as useCoreCommerce,
useCommerce as useComm,
} from '../commerce'; } from '../commerce';
export type Cart = any;
async function getText(res: Response) { async function getText(res: Response) {
try { try {
return (await res.text()) || res.statusText; return (await res.text()) || res.statusText;
@ -23,11 +20,7 @@ async function getError(res: Response) {
return { message: await getText(res) }; return { message: await getText(res) };
} }
async function fetcher( async function fetcher(url: string, query: string) {
url: string,
query: string,
resolver: HookResolver<Cart>
) {
const res = await fetch(url); const res = await fetch(url);
if (res.ok) { if (res.ok) {
@ -37,42 +30,18 @@ async function fetcher(
throw await getError(res); throw await getError(res);
} }
export const bigcommerce: Connector<Cart> = { export const bigcommerce: Connector = {
hooks: {
useCart: {
query: '',
resolver() {
return;
},
},
useAddItem: {
query: '',
resolver() {
return;
},
},
useUpdateItem: {
query: '',
resolver() {
return;
},
},
useRemoveItem: {
query: '',
resolver() {
return;
},
},
},
locale: 'en-us', locale: 'en-us',
fetcher, fetcher,
}; };
// TODO: The connector should be extendable when a developer is using it // TODO: The connector should be extendable when a developer is using it
export function BigcommerceProvider({ children }) { export function CommerceProvider({ children }) {
return ( return (
<CommerceProvider connector={bigcommerce}>{children}</CommerceProvider> <CoreCommerceProvider connector={bigcommerce}>
{children}
</CoreCommerceProvider>
); );
} }
export const useCommerce = () => useComm<Cart>(); export const useCommerce = () => useCoreCommerce();

View File

@ -1,6 +1,8 @@
import { createContext, useContext } from 'react'; import { createContext, useContext } from 'react';
import useSWR, { responseInterface } from 'swr'; 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> & { export type CartResponse<C extends Cart> = responseInterface<C, Error> & {
isEmpty: boolean; isEmpty: boolean;

View File

@ -1,44 +1,20 @@
import { createContext, ReactNode, useContext } from 'react'; import { createContext, ReactNode, useContext } from 'react';
const Commerce = createContext<Connector<any>>(null); const Commerce = createContext<Connector>(null);
export type Cart = any; export type CommerceProps = {
export type CommerceProps<C extends Cart> = {
children?: ReactNode; children?: ReactNode;
connector: Connector<C>; connector: Connector;
}; };
export type Connector<C extends Cart> = { export type Connector = {
hooks: {
useCart: Hook<C>;
useAddItem: Hook<C>;
useUpdateItem: Hook<C>;
useRemoveItem: Hook<C>;
};
fetcher: Fetcher<any>; fetcher: Fetcher<any>;
locale: string; 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 Fetcher<T> = (...args: any) => T | Promise<T>;
export type ResolverContext = { export function CommerceProvider({ children, connector }: CommerceProps) {
query?: string;
locale: string;
};
export function CommerceProvider({ children, connector }: CommerceProps<Cart>) {
if (!connector) { if (!connector) {
throw new Error( throw new Error(
'CommerceProvider requires a valid headless commerce connector' '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>; return <Commerce.Provider value={connector}>{children}</Commerce.Provider>;
} }
export function useCommerce<C extends Cart>() { export function useCommerce<T extends Connector>() {
return useContext(Commerce) as Connector<C>; return useContext(Commerce) as T;
} }