import { useState, useCallback, useRef, useEffect } from 'react' import { createPortal } from 'react-dom' import { cn } from '@/lib' import { ItemImage } from '@/features/chat/components/ItemImage' import { useChatInitStore } from '@/features/chat/stores/useChatInitStore' export function ItemSection() { return (
) } interface TooltipState { text: string x: number y: number above?: boolean } function Tooltip({ text, x, y, above }: TooltipState) { return createPortal(
{text}
, document.body, ) } function ItemInfo() { const { item_code, item_price, item_vat_yn, item_model_name, item_maker_name, item_min_order_quantity, item_lead_time, item_spec, item_name, } = useChatInitStore() const [tooltip, setTooltip] = useState(null) const hideTimer = useRef | null>(null) const showTooltip = useCallback((e: React.MouseEvent, text: string, above = false) => { if (hideTimer.current) clearTimeout(hideTimer.current) if (above) { const rect = e.currentTarget.getBoundingClientRect() setTooltip({ text, x: rect.left, y: rect.top - 8, above }) } else { setTooltip({ text, x: e.clientX, y: e.clientY + 16, above }) } }, []) const hideTooltip = useCallback(() => { hideTimer.current = setTimeout(() => setTooltip(null), 100) }, []) useEffect(() => () => { if (hideTimer.current) clearTimeout(hideTimer.current) }, []) const formatPrice = (price: number) => price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') const isNewItem = !item_code && !item_price const priceText = isNewItem ? '신규' : `${formatPrice(item_price)}원` const formattedPrice = `${priceText}(${item_vat_yn || 'VAT별도'})` const renderRow = (title: string, data: string, important = false) => { const textClass = important ? 'title-3 text-neutral-90' : 'body-3 text-neutral-70' const displayData = data || '-' return (
{title}
displayData !== '-' && showTooltip(e, displayData)} onMouseLeave={hideTooltip} > {displayData}
) } return (
item_name && showTooltip(e, item_name)} onMouseLeave={hideTooltip} > {item_name}
{renderRow('상품코드', item_code, true)} {renderRow('단가', formattedPrice, true)} {renderRow('모델명', item_model_name, true)} {renderRow('제조사', item_maker_name)} {renderRow('최소주문수량', item_min_order_quantity)} {renderRow('리드타임', item_lead_time)}
규격
item_spec && showTooltip(e, item_spec, true)} onMouseLeave={hideTooltip} > {item_spec || '-'}
{tooltip && }
) }