import { ChangeEvent, FocusEventHandler, useEffect, useState } from 'react' import cn from 'classnames' import Image from 'next/image' import Link from 'next/link' import s from './CartItem.module.css' import { Trash, Plus, Minus, Cross } from '@components/icons' import { useUI } from '@components/ui/context' import type { LineItem } from '@commerce/types/cart' // import usePrice from '@framework/product/use-price' // import useUpdateItem from '@framework/cart/use-update-item' // import useRemoveItem from '@framework/cart/use-remove-item' import Quantity from '@components/ui/Quantity' type ItemOption = { name: string nameId: number value: string valueId: number } const CartItem = ({ item, variant = 'default', currencyCode, ...rest }: { variant?: 'default' | 'display' item: LineItem currencyCode: string }) => { const { closeSidebarIfPresent } = useUI() const [removing, setRemoving] = useState(false) const [quantity, setQuantity] = useState(item.quantity) // const removeItem = useRemoveItem() // const updateItem = useUpdateItem({ item }) // const { price } = usePrice({ // amount: item.variant.price * item.quantity, // baseAmount: item.variant.listPrice * item.quantity, // currencyCode, // }) // const handleChange = async ({ // target: { value }, // }: ChangeEvent) => { // setQuantity(Number(value)) // await updateItem({ quantity: Number(value) }) // } // const increaseQuantity = async (n = 1) => { // const val = Number(quantity) + n // setQuantity(val) // await updateItem({ quantity: val }) // } // const handleRemove = async () => { // setRemoving(true) // try { // await removeItem(item) // } catch (error) { // setRemoving(false) // } // } // TODO: Add a type for this const options = (item as any).options useEffect(() => { // Reset the quantity state if the item quantity changes if (item.quantity !== Number(quantity)) { setQuantity(item.quantity) } // TODO: currently not including quantity in deps is intended, but we should // do this differently as it could break easily // eslint-disable-next-line react-hooks/exhaustive-deps }, [item.quantity]) return (
  • closeSidebarIfPresent()} className={s.productImage} width={150} height={150} src={item.variant.image!.url} alt={item.variant.image!.altText} unoptimized />
    closeSidebarIfPresent()} > {item.name} {options && options.length > 0 && (
    {options.map((option: ItemOption, i: number) => (
    {option.name} {option.name === 'Color' ? ( ) : ( {option.value} )} {i === options.length - 1 ? '' : }
    ))}
    )} {variant === 'display' && (
    {quantity}x
    )}
    {/* {price} */}
    {/* {variant === 'default' && ( increaseQuantity(1)} decrease={() => increaseQuantity(-1)} /> )} */}
  • ) } export default CartItem