"use client"; import clsx from "clsx"; import { useDisclosure } from "@heroui/use-disclosure"; import { AnimatePresence, motion } from "framer-motion"; import { ShoppingCartIcon } from "@heroicons/react/24/outline"; import { DEFAULT_OPTION } from "@/utils/constants"; import OpenCart from "./OpenCart"; import { Price } from "../theme/ui/Price"; import CloseCart from "../common/icons/cart/CloseCart"; import { DeleteItemButton } from "../common/icons/cart/DeleteItemButton"; import { EditItemQuantityButton } from "../common/icons/cart/EditItemQuantityButton"; import { useCartDetail } from "@utils/hooks/useCartDetail"; import Image from "next/image"; import { NOT_IMAGE } from "@utils/constants"; import LoadingDots from "@components/common/icons/LoadingDots"; import { useFormStatus } from "react-dom"; import { redirectToCheckout } from "@/utils/actions"; import Link from "next/link"; import { createUrl, safeParse } from "@utils/helper"; import { useBodyScrollLock } from "@utils/hooks/useBodyScrollLock"; type MerchandiseSearchParams = { [key: string]: string; }; export default function CartModal({ children, className, onOpen, onClose, isOpen, }: { children?: React.ReactNode; className?: string; onOpen?: () => void; onClose?: () => void; isOpen?: boolean; }) { const { isOpen: internalIsOpen, onOpen: internalOnOpen, onClose: internalOnClose, } = useDisclosure(); const isControlled = isOpen !== undefined; const finalIsOpen = isControlled ? isOpen : internalIsOpen; const finalOnOpen = isControlled ? onOpen : internalOnOpen; const finalOnClose = isControlled ? onClose : internalOnClose; const { isLoading, cartData: cartDetail } = useCartDetail(); // const cartDetail = useAppSelector((state) => state.cartDetail); const cart = Array.isArray(cartDetail?.items?.edges) ? cartDetail?.items?.edges : []; useBodyScrollLock(finalIsOpen); // const handleOpenChange = (open: boolean) => { // if (!open) { // finalOnClose?.(); // } // }; return ( <> {finalIsOpen && ( <>

My Cart

{cart?.length === 0 ? (

Your cart is empty.

) : (
    {Array.isArray(cart) && cart?.map((item: any, i: number) => { const merchandiseSearchParams = {} as MerchandiseSearchParams; const merchandiseUrl = createUrl( `/product/${item?.node.productUrlKey}`, new URLSearchParams(merchandiseSearchParams), ); const baseImage: any = safeParse( item?.node?.baseImage, ); return (
  • { (e.currentTarget.src = NOT_IMAGE) } />
    {item?.node?.name} {item.name !== DEFAULT_OPTION && (

    {item?.node?.sku}

    )}

    {item?.node?.quantity}

  • ); })}
{(cartDetail as any)?.taxAmount > 0 && (

Taxes

)}

Total

)}
)} ); } function CheckoutButton() { const { pending } = useFormStatus(); return ( <> ); }