import s from './ProductSidebar.module.css' import { useAddItem } from '@framework/cart' import { FC, useEffect, useState } from 'react' import { ProductOptions } from '@components/product' import type { Product } from '@commerce/types/product' import { Button, Text, Rating, Collapse, useUI } from '@components/ui' import { getProductVariant, selectDefaultOptionFromProduct, SelectedOptions, } from '../helpers' import ErrorMessage from '@components/ui/ErrorMessage' import { ProductCustomFields } from '../ProductCustomFields' import { ProductMetafields } from '../ProductMetafields' interface ProductSidebarProps { product: Product className?: string } const ProductSidebar: FC = ({ product, className }) => { const addItem = useAddItem() const { openSidebar, setSidebarView } = useUI() const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const [selectedOptions, setSelectedOptions] = useState({}) useEffect(() => { selectDefaultOptionFromProduct(product, setSelectedOptions) }, [product]) const variant = getProductVariant(product, selectedOptions) const addToCart = async () => { setLoading(true) setError(null) try { await addItem({ productId: String(product.id), variantId: String(variant ? variant.id : product.variants[0]?.id), }) setSidebarView('CART_VIEW') openSidebar() setLoading(false) } catch (err) { setLoading(false) if (err instanceof Error) { console.error(err) setError({ ...err, message: 'Could not add item to cart. Please try again.', }) } } } return (
{product.metafields?.reviews?.rating && (
{product.metafields.reviews.count?.value ?? 0} reviews
)}
{error && } {process.env.COMMERCE_CART_ENABLED && ( )}
This is a limited edition production run. Printing starts when the drop ends. This is a limited edition production run. Printing starts when the drop ends. Reminder: Bad Boys For Life. Shipping may take 10+ days due to COVID-19. {product.customFields && product.customFields?.length > 0 && ( )} {product.metafields?.my_fields && ( )}
) } export default ProductSidebar