diff --git a/components/product/ProductGrid/ProductGrid.tsx b/components/product/ProductGrid/ProductGrid.tsx index fa8aaedb5..48f410a79 100644 --- a/components/product/ProductGrid/ProductGrid.tsx +++ b/components/product/ProductGrid/ProductGrid.tsx @@ -5,15 +5,15 @@ import ProductCard from '@components/product/ProductCard' interface Props { className?: string children?: any - products: [any] + products: [any] | any } const ProductView: FC = ({ products, className }) => { const rootClassName = cn(s.root, className) return (
- {products.slice(0, 6).map(({ node }) => ( - + {products.map((data: any) => ( + ))}
) diff --git a/components/product/ProductView/ProductView.tsx b/components/product/ProductView/ProductView.tsx index c9f26ebe9..d8e59fba1 100644 --- a/components/product/ProductView/ProductView.tsx +++ b/components/product/ProductView/ProductView.tsx @@ -3,7 +3,15 @@ import { FC } from 'react' import s from './ProductView.module.css' import { Button } from '@components/ui' import { Swatch } from '@components/product' - +import { Colors } from '@components/ui/types' +interface ProductData { + name: string + images: any + prices: any + description: string + colors?: any[] + sizes?: any[] +} interface Props { className?: string children?: any @@ -12,15 +20,15 @@ interface Props { const ProductView: FC = ({ productData, className }) => { const rootClassName = cn(s.root, className) - console.log(productData) + const colors: Colors[] = ['pink', 'black', 'white'] return (

- {productData.title} + {productData.name}

- {productData.price} + {productData.prices}
@@ -30,7 +38,7 @@ const ProductView: FC = ({ productData, className }) => {

Color

- {productData.colors.map((c) => ( + {colors.map((c) => ( ))}
diff --git a/components/product/types.ts b/components/product/types.ts index 8ef292685..ee5187f56 100644 --- a/components/product/types.ts +++ b/components/product/types.ts @@ -1,10 +1 @@ import { Colors } from '@components/ui/types' -export { Product } from '@lib/bigcommerce' - -// export type ProductData = { -// title: string; -// price: string; -// description: string; -// colors: [Colors]; -// sizes: [string]; -// }; diff --git a/components/ui/ClickOutside/ClickOutside.tsx b/components/ui/ClickOutside/ClickOutside.tsx deleted file mode 100644 index e3dd782e7..000000000 --- a/components/ui/ClickOutside/ClickOutside.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React, { FC, MutableRefObject, useEffect, useRef } from 'react' - -import { Component } from 'react' -import PropTypes from 'prop-types' - -export interface ClickOutsideProps { - onClickOutside: (e?: MouseEvent) => void - children: React.ReactNode | any - render: () => void -} - -export default class ClickOutside extends Component { - public domNode: Element | null = null - - handleRef = (element) => { - this.domNode = element - } - - public componentDidMount() { - document.addEventListener('click', this.handleClick, true) - } - - public componentWillUnmount() { - document.removeEventListener('mousedown', this.handleClick, true) - document.removeEventListener('touchstart', this.handleClick, true) - } - - public handleClick = (event) => { - function hasParent(element, root) { - return root && root.contains(element) - } - - if (!hasParent(event.target, this.domNode)) { - if (typeof this.props.onClickOutside === 'function') { - this.props.onClickOutside(event) - } - } - } - - render() { - return null - // return this.props.render({ - // innerRef: this.handleRef, - // }); - } -} diff --git a/components/ui/ClickOutside/index.ts b/components/ui/ClickOutside/index.ts deleted file mode 100644 index cfdac4296..000000000 --- a/components/ui/ClickOutside/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './ClickOutside' diff --git a/components/ui/context.tsx b/components/ui/context.tsx index 9d34eb2b0..f9014c194 100644 --- a/components/ui/context.tsx +++ b/components/ui/context.tsx @@ -1,25 +1,29 @@ import React, { FC } from 'react' -export interface UIState { +export interface State { displaySidebar: boolean - openSidebar: () => {} - closeSidebar: () => {} } const initialState = { displaySidebar: false, - openSidebar: null, - closeSidebar: null, } -export const UIContext = React.createContext(initialState) +type Action = + | { + type: 'OPEN_SIDEBAR' + } + | { + type: 'CLOSE_SIDEBAR' + } + +export const UIContext = React.createContext(initialState) UIContext.displayName = 'UIContext' export const UIProvider: FC = (props) => { const [state, dispatch] = React.useReducer(uiReducer, initialState) - const openSidebar = () => dispatch('OPEN_SIDEBAR') - const closeSidebar = () => dispatch('CLOSE_SIDEBAR') + const openSidebar = () => dispatch({ type: 'OPEN_SIDEBAR' }) + const closeSidebar = () => dispatch({ type: 'CLOSE_SIDEBAR' }) const value = { ...state, @@ -38,8 +42,8 @@ export const useUI = () => { return context } -function uiReducer(state, action) { - switch (action) { +function uiReducer(state: State, action: Action) { + switch (action.type) { case 'OPEN_SIDEBAR': { return { ...state, diff --git a/lib/bigcommerce/cart.tsx b/lib/bigcommerce/cart.tsx index 18c072bc8..bc3563807 100644 --- a/lib/bigcommerce/cart.tsx +++ b/lib/bigcommerce/cart.tsx @@ -2,13 +2,20 @@ import { CartProvider as CommerceCartProvider, useCart as useCommerceCart, } from 'lib/commerce/cart' +import { FunctionComponent } from 'react' export type Cart = any -export function CartProvider({ children }) { +interface Props { + children?: any +} + +function useCart() { + return useCommerceCart() +} + +const CartProvider: FunctionComponent = ({ children }) => { return {children} } -export function useCart() { - return useCommerceCart() -} +export { CartProvider, useCart } diff --git a/lib/bigcommerce/index.tsx b/lib/bigcommerce/index.tsx index 0289f15d3..4170deb87 100644 --- a/lib/bigcommerce/index.tsx +++ b/lib/bigcommerce/index.tsx @@ -3,6 +3,7 @@ import { Connector, useCommerce as useCoreCommerce, } from 'lib/commerce' +import { ReactNode } from 'react' async function getText(res: Response) { try { @@ -35,8 +36,12 @@ export const bigcommerce: Connector = { fetcher, } +interface Props { + children?: ReactNode | any +} + // TODO: The connector should be extendable when a developer is using it -export function CommerceProvider({ children }) { +export function CommerceProvider({ children }: Props) { return ( {children} diff --git a/lib/commerce/cart.tsx b/lib/commerce/cart.tsx index 3577e1ae5..ab9d6f70a 100644 --- a/lib/commerce/cart.tsx +++ b/lib/commerce/cart.tsx @@ -1,6 +1,9 @@ -import { createContext, useContext } from 'react' +import { createContext, useContext, FunctionComponent } from 'react' import useSWR, { responseInterface } from 'swr' import { useCommerce } from '.' +interface Props { + children?: any +} export type Cart = any @@ -8,14 +11,14 @@ export type CartResponse = responseInterface & { isEmpty: boolean } -const CartContext = createContext>(null) +const CartContext = createContext | any>(null) function getCartCookie() { // TODO: Figure how the cart should be persisted return null } -export function CartProvider({ children }) { +const CartProvider: FunctionComponent = ({ children }) => { const { hooks, fetcher } = useCommerce() const { useCart } = hooks const cartId = getCartCookie() @@ -32,6 +35,8 @@ export function CartProvider({ children }) { ) } -export function useCart() { +function useCart() { return useContext(CartContext) as CartResponse } + +export { CartProvider, useCart } diff --git a/lib/commerce/index.tsx b/lib/commerce/index.tsx index 2552286a8..6849ed0b3 100644 --- a/lib/commerce/index.tsx +++ b/lib/commerce/index.tsx @@ -1,9 +1,9 @@ import { createContext, ReactNode, useContext } from 'react' -const Commerce = createContext(null) +const Commerce = createContext(null) export type CommerceProps = { - children?: ReactNode + children?: ReactNode | any connector: Connector } diff --git a/pages/index.tsx b/pages/index.tsx index 597943825..cf117da5b 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -6,14 +6,13 @@ import { ProductGrid } from '@components/product' export async function getStaticProps({ preview }: GetStaticPropsContext) { const { products } = await getAllProducts() return { - props: { products }, + props: { products: products.slice(0, 6) }, } } export default function Home({ products, }: InferGetStaticPropsType) { - console.log('PRODUCTS', products) return } diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index ed06a97fa..f8fd880eb 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -10,7 +10,7 @@ export async function getStaticProps({ }: GetStaticPropsContext<{ slug: string }>) { const { product } = await getProduct({ variables: { slug: params!.slug } }) const productData = { - title: 'T-Shirt', + name: 'T-Shirt', description: ` Nothing undercover about this tee. Nope. This is the official Bad Boys tee. Printed in white or black ink on Black, Brown, or Oatmeal. @@ -19,7 +19,8 @@ export async function getStaticProps({ run. Printing starts when the drop ends. Reminder: Bad Boys For Life. Shipping may take 10+ days due to COVID-19. `, - price: '$50', + images: null, + prices: '$50', colors: ['black', 'white', 'pink'], sizes: ['s', 'm', 'l', 'xl', 'xxl'], } @@ -47,8 +48,6 @@ export default function Slug({ product, productData, }: InferGetStaticPropsType) { - console.log('PRODUCT', product) - const router = useRouter() return router.isFallback ? ( diff --git a/postcss.config.js b/postcss.config.js index 645ca2c3f..9e0f0b2ca 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,13 +1,8 @@ module.exports = { plugins: [ -<<<<<<< HEAD - "tailwindcss", - "postcss-nesting", - "postcss-flexbugs-fixes", -======= 'tailwindcss', + 'postcss-nesting', 'postcss-flexbugs-fixes', ->>>>>>> f2108ca97faf54a18680b608356012700971c450 [ 'postcss-preset-env', {