import React, { memo } from 'react'; import { useUpbitOrderbook } from '../../hooks/useUpbitOrderbook'; interface Props { market: string; onPick?: (price: number, rowType: 'ask' | 'bid') => void; fillHeight?: boolean; hideHeader?: boolean; depth?: number; } function fmtPrice(p: number): string { if (!Number.isFinite(p)) return '-'; return p >= 1000 ? p.toLocaleString('ko-KR', { maximumFractionDigits: 0 }) : p.toFixed(4); } function fmtSize(s: number): string { if (!Number.isFinite(s)) return '-'; if (s >= 1000) return s.toLocaleString('ko-KR', { maximumFractionDigits: 2 }); return s.toFixed(4); } const PaperCompactOrderbook: React.FC = memo(({ market, onPick, fillHeight = false, hideHeader = false, depth = 8, }) => { const { orderbook } = useUpbitOrderbook(market); const rowCount = fillHeight ? Math.max(depth, 12) : depth; const asks = orderbook.asks.slice(0, rowCount).reverse(); const bids = orderbook.bids.slice(0, rowCount); const maxSize = Math.max( ...asks.map(a => a.size), ...bids.map(b => b.size), 1, ); const mid = bids[0]?.price ?? asks[asks.length - 1]?.price ?? 0; return (
{!hideHeader &&
호가 (Depth)
}
{asks.map(a => ( ))}
{mid ? fmtPrice(mid) : '—'}
{bids.map(b => ( ))}
); }); PaperCompactOrderbook.displayName = 'PaperCompactOrderbook'; export default PaperCompactOrderbook;