import React, { useState, useMemo } from 'react'; import { Search, Filter, ArrowUpDown, RotateCw } from 'lucide-react'; import { StockItem, MarketType, OrderType } from '../types'; import StockDetailModal from '../components/StockDetailModal'; import TradeModal from '../components/TradeModal'; import { StockRow } from '../components/StockRow'; interface StocksProps { marketMode: MarketType; stocks: StockItem[]; onTrade: (stock: StockItem, type: OrderType) => void; onAddToWatchlist: (stock: StockItem) => void; watchlistCodes: string[]; onSync: () => Promise; onAddReservedOrder?: (order: any) => Promise; } const Stocks: React.FC = ({ marketMode, stocks, onAddToWatchlist, watchlistCodes, onSync }) => { const [search, setSearch] = useState(''); const [sortField, setSortField] = useState('aiScoreBuy'); const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('desc'); const [detailStock, setDetailStock] = useState(null); const [tradeContext, setTradeContext] = useState<{ stock: StockItem, type: OrderType } | null>(null); const filteredStocks = useMemo(() => { let result = stocks.filter(s => s.market === marketMode && (s.name.includes(search) || s.code.toLowerCase().includes(search.toLowerCase())) ); result.sort((a, b) => { const valA = a[sortField] || 0; const valB = b[sortField] || 0; return sortOrder === 'asc' ? (valA > valB ? 1 : -1) : (valB > valA ? 1 : -1); }); return result; }, [stocks, search, marketMode, sortField, sortOrder]); const handleSort = (field: keyof StockItem) => { if (sortField === field) setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc'); else { setSortField(field); setSortOrder('desc'); } }; return (

종목 마스터

setSearch(e.target.value)} />
{filteredStocks.map(stock => { const isWatch = watchlistCodes.includes(stock.code); return ( setTradeContext({ stock, type })} onToggleWatchlist={() => onAddToWatchlist(stock)} onClick={() => setDetailStock(stock)} /> ); })}
handleSort('name')}>종목 handleSort('price')}>현재가 AI 등락률 예탁 액션
{detailStock && setDetailStock(null)} />} {tradeContext && setTradeContext(null)} onExecute={async (o) => alert("주문 예약됨")} />}
); }; export default Stocks;