'use client'; import clsx from 'clsx'; import React, { useEffect, useState } from 'react'; import { PriceWrapper } from '@theme/views/product'; import { ProductPageProps } from './layout'; import MiscButtons from './misc-buttons'; import { pushProductViewed } from '@theme/utils/gtm'; import { useSession } from 'next-auth/react'; import { isVariantSelectionComplete } from '../../utils/variant-validation'; import { useProductCart } from '../../hooks/use-product-cart'; import { useStockAlert } from '../../hooks/use-stock-alert'; import { ProductVariants } from './product-variants'; import { ProductActions } from './product-actions'; import { ProductShare } from './product-share'; import PluginModule, { Component } from '@akinon/next/components/plugin-module'; export default function ProductInfo({ data }: ProductPageProps) { const { data: session } = useSession(); const [isVariantLoading, setIsVariantLoading] = useState(false); const inStock = data.selected_variant !== null || data.product.in_stock; const { addProductToCart, productError: cartError, clearProductError: clearCartError, isAddToCartLoading } = useProductCart({ product: data.product, variants: data.variants }); const { addProductToStockAlertList, isModalOpen, stockAlertResponseMessage, productError: stockError, isAddToStockAlertLoading, closeModal, clearError: clearStockError } = useStockAlert({ productPk: data.product.pk, userEmail: session?.user?.email }); const productError = cartError || stockError; const clearProductError = () => { clearCartError(); clearStockError(); }; useEffect(() => { isVariantSelectionComplete(data.variants) && setIsVariantLoading(false); !inStock && setIsVariantLoading(false); }, [data, inStock]); useEffect(() => { if (isVariantLoading) { clearProductError(); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [isVariantLoading]); useEffect(() => { pushProductViewed(data?.product); }, []); // eslint-disable-line react-hooks/exhaustive-deps const handleVariantChange = () => { clearProductError(); setIsVariantLoading(true); }; return ( <>
); }