import { AutoComplete, AutoCompleteInput, AutoCompleteItem, AutoCompleteList, } from '@choc-ui/chakra-autocomplete'; import style from '../styles/information.module.css'; import dynamic from 'next/dynamic'; import Link from 'next/link'; import { useEffect, useRef, useState } from 'react'; import axios from 'axios'; import currencyFormat from '@/core/utils/currencyFormat'; import { InputGroup, InputRightElement, SimpleGrid, Flex, Text, Box, Center, Icon } from '@chakra-ui/react'; import { ChevronDownIcon } from '@heroicons/react/24/outline'; import ImageNext from 'next/image'; import { formatToShortText } from '~/libs/formatNumber'; import { createSlug } from '~/libs/slug'; import { IProductDetail } from '~/types/product'; import { useProductDetail } from '../stores/useProductDetail'; import useVariant from '../hook/useVariant'; // Import View Components import MobileView from '@/core/components/views/MobileView'; // Pastikan path import benar // Import Modal Compare import ProductComparisonModal from './ProductComparisonModal'; const Skeleton = dynamic(() => import('@chakra-ui/react').then((mod) => mod.Skeleton) ); type Props = { product: IProductDetail; }; const Information = ({ product }: Props) => { const { selectedVariant, setSelectedVariant, setSla, sla } = useProductDetail(); const [inputValue, setInputValue] = useState( selectedVariant?.code + ' - ' + selectedVariant?.attributes[0] ); const [disableFilter, setDisableFilter] = useState(false); const inputRef = useRef(null); const [variantOptions, setVariantOptions] = useState( product?.variants ); const variantId = selectedVariant?.id; const { slaVariant, isLoading } = useVariant({ variantId }); const [warranties, setWarranties] = useState>({}); const [loadingWarranty, setLoadingWarranty] = useState(false); // State untuk Modal Compare const [isCompareOpen, setIsCompareOpen] = useState(false); useEffect(() => { const fetchWarrantyDirectly = async () => { if (!product?.variants || product.variants.length === 0) return; setLoadingWarranty(true); try { const skus = product.variants.map((v) => v.id).join(','); const mainSku = product.variants[0].id; const res = await axios.get('/api/magento-product', { params: { skus, main_sku: mainSku } }); if (res.data && res.data.warranties) { setWarranties(res.data.warranties); } } catch (error) { console.error("Gagal ambil garansi:", error); } finally { setLoadingWarranty(false); } }; fetchWarrantyDirectly(); }, [product]); useEffect(() => { if (selectedVariant) { setInputValue( selectedVariant?.code + (selectedVariant?.attributes[0] ? ' - ' + selectedVariant?.attributes[0] : '') ); } }, [selectedVariant]); useEffect(() => { if (isLoading) { setSla(null); } if (slaVariant) { setSla(slaVariant); } }, [slaVariant, isLoading, setSla]); const handleOnChange = (vals: any) => { setDisableFilter(true); let code = vals.replace(/\s-\s.*$/, '').trim(); let variant = product?.variants.find((item) => item.code === code); if (variant) { setSelectedVariant(variant); setInputValue( variant?.code + (variant?.attributes[0] ? ' - ' + variant?.attributes[0] : '') ); setVariantOptions(product?.variants); } }; const handleOnKeyUp = (e: any) => { setDisableFilter(false); setInputValue(e.target.value); }; const rowStyle = { backgroundColor: '#ffffff', fontSize: '13px', borderBottom: '1px dashed #e2e8f0', padding: '8px 0', marginBottom: '0px' }; return (
handleOnChange(vals)} > handleOnKeyUp(e)} onFocus={() => setDisableFilter(true)} /> inputRef?.current?.focus()} /> {variantOptions .sort((a: any, b: any) => { return a.code.localeCompare(b.code, undefined, { numeric: true, sensitivity: 'base' }); }) .map((option, cid) => (
{option.code + (option?.attributes[0] ? ' - ' + option?.attributes[0] : '')}
{option?.price?.discount_percentage > 0 && ( <>
{Math.floor(option?.price?.discount_percentage)}%
{currencyFormat(option?.price?.price)}
)}
{currencyFormat(option?.price?.price_discount)}
))}
{/* === TOMBOL BANDINGKAN PRODUK (HANYA MOBILE) === */}
setIsCompareOpen(true)} >
Bandingkan Produk Coba bandingkan dengan produk lainnya
Baru
{/* Render Modal (Logic open/close ada di dalam component) */} {isCompareOpen && ( setIsCompareOpen(false)} mainProduct={product} selectedVariant={selectedVariant} /> )}
{/* ITEM CODE */}
Item Code
{selectedVariant?.code}
{/* MANUFACTURE */}
Manufacture
{!!product.manufacture.name ? ( {product?.manufacture.logo ? ( ) : (

{product.manufacture.name}

)} ) : ( '-' )}
{/* BERAT BARANG */}
Berat Barang
{selectedVariant?.weight > 0 ? `${selectedVariant?.weight} Kg` : '-'}
{/* TERJUAL */}
Terjual
{product.qty_sold > 0 ? formatToShortText(product.qty_sold) : '-'}
{/* === DETAIL INFORMASI PRODUK === */}

Detail Informasi Produk

Distributor Resmi Distributor Resmi Jaminan Produk Asli Estimasi Penyiapan Estimasi Penyiapan {isLoading ? (
) : ( {sla?.sla_date || '-'} )}
Garansi Produk Garansi Produk {loadingWarranty ? (
) : ( {selectedVariant && warranties[selectedVariant.id] ? warranties[selectedVariant.id] : '-'} )}
); }; export default Information;