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 currencyFormat from '@/core/utils/currencyFormat'; import { InputGroup, InputRightElement } from '@chakra-ui/react'; import { ChevronDownIcon } from '@heroicons/react/24/outline'; import Image 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'; 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(''); const [disableFilter, setDisableFilter] = useState(false); const inputRef = useRef(null); // source of truth const variantOptions = product.variants; const variantId = selectedVariant?.id; const { slaVariant, isLoading } = useVariant({ variantId }); /* ====================== * Sync input text * ====================== */ useEffect(() => { if (!selectedVariant) return; setInputValue( selectedVariant.code + (selectedVariant.attributes?.[0] ? ` - ${selectedVariant.attributes[0]}` : '') ); }, [selectedVariant]); /* ====================== * Sync SLA * ====================== */ useEffect(() => { if (isLoading) { setSla(null); return; } if (slaVariant) { setSla(slaVariant); } }, [slaVariant, isLoading, setSla]); /* ====================== * Handlers * ====================== */ const handleOnChange = (value: string) => { setDisableFilter(true); const variant = variantOptions.find((item) => String(item.id) === value); if (!variant) return; setSelectedVariant(variant); }; const handleOnKeyUp = (e: any) => { setDisableFilter(false); setInputValue(e.target.value); }; return (
{/* ===== Variant Selector ===== */}
setDisableFilter(true)} /> inputRef.current?.focus()} /> {variantOptions.map((option) => (
{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)}
))}
{/* ===== Info Rows ===== */}
Item Code
{selectedVariant?.code}
Manufacture
{!!product.manufacture.name ? ( {product.manufacture.logo ? ( {product.manufacture.name} ) : (

{product.manufacture.name}

)} ) : ( '-' )}
Berat Barang
{selectedVariant?.weight > 0 ? `${selectedVariant.weight} Kg` : '-'}
Terjual
{product.qty_sold > 0 ? formatToShortText(product.qty_sold) : '-'}
Persiapan Barang
{isLoading ? (
) : (
{sla?.sla_date}
)}
); }; export default Information;