import { FC, useState } from 'react' import cn from 'clsx' import Link from 'next/link' import Image from 'next/image' import s from './WishlistCard.module.css' import { Trash } from '@components/icons' import { Button, Text } from '@components/ui' import { useUI } from '@components/ui/context' import type { Product, ProductOption, ProductVariant, } from '@commerce/types/product' import usePrice from '@framework/product/use-price' import useAddItem from '@framework/cart/use-add-item' import useRemoveItem from '@framework/wishlist/use-remove-item' import type { Wishlist } from '@commerce/types/wishlist' const placeholderImg = '/product-img-placeholder.svg' const WishlistCard: React.FC<{ item: Wishlist }> = ({ item }) => { const product: Product = item.product const { price } = usePrice({ amount: product.price?.value, baseAmount: product.price?.retailPrice, currencyCode: product.price?.currencyCode!, }) // @ts-ignore Wishlist is not always enabled const removeItem = useRemoveItem({ wishlist: { includeProducts: true } }) const [loading, setLoading] = useState(false) const [removing, setRemoving] = useState(false) const { options } = item.product.variants.find( (variant: ProductVariant) => item.variantId === variant.id ) // TODO: fix this missing argument issue /* @ts-ignore */ const addItem = useAddItem() const { openSidebar } = useUI() const handleRemove = async () => { setRemoving(true) try { // If this action succeeds then there's no need to do `setRemoving(true)` // because the component will be removed from the view await removeItem({ id: item.productId, //TODO: enable itemVariantId when using shopify provider // itemVariantId: item.variantId, }) } catch (error) { setRemoving(false) } } const addToCart = async () => { setLoading(true) try { await addItem({ //for shopify provider, use the productId and variantId stored in wishlist productId: item.productId, variantId: item.variantId, // productId: String(product.id), // variantId: String(product.variants[0].id), }) openSidebar() setLoading(false) } catch (err) { setLoading(false) } } return (