import cn from 'classnames' import Image from 'next/image' import { NextSeo } from 'next-seo' import { FC, useEffect, useState } from 'react' import s from './ProductView.module.css' import { Swatch, ProductSlider } from '@components/product' import { Button, Container, Text, useUI } from '@components/ui' import type { Product } from '@commerce/types/product' import usePrice from '@framework/product/use-price' import { useAddItem } from '@framework/cart' import { getVariant, SelectedOptions } from '../helpers' import WishlistButton from '@components/wishlist/WishlistButton' interface Props { children?: any product: Product className?: string } const ProductView: FC = ({ product }) => { // TODO: fix this missing argument issue /* @ts-ignore */ const addItem = useAddItem() const { price } = usePrice({ amount: product.price.value, baseAmount: product.price.retailPrice, currencyCode: product.price.currencyCode!, }) const { openSidebar } = useUI() const [loading, setLoading] = useState(false) const [choices, setChoices] = useState({}) useEffect(() => { // Selects the default option product.variants[0].options?.forEach((v) => { setChoices((choices) => ({ ...choices, [v.displayName.toLowerCase()]: v.values[0].label.toLowerCase(), })) }) }, []) const variant = getVariant(product, choices) const addToCart = async () => { setLoading(true) try { await addItem({ productId: String(product.id), variantId: String(variant ? variant.id : product.variants[0].id), }) openSidebar() setLoading(false) } catch (err) { setLoading(false) } } return (

{product.name}

{price} {` `} {product.price?.currencyCode}
{product.images.map((image, i) => (
{image.alt
))}
{product.options?.map((opt) => (

{opt.displayName}

{opt.values.map((v, i: number) => { const active = (choices as any)[ opt.displayName.toLowerCase() ] return ( { setChoices((choices) => { return { ...choices, [opt.displayName.toLowerCase()]: v.label.toLowerCase(), } }) }} /> ) })}
))}
{process.env.COMMERCE_WISHLIST_ENABLED && ( )}
) } export default ProductView