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'; import { StockMasterRow } from '../components/StockMasterRow'; 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] as number) || 0; const valB = (b[sortField] as number) || 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, idx) => { const isWatch = watchlistCodes.includes(stock.code); return ( setTradeContext({ stock, type })} onToggleWatchlist={() => onAddToWatchlist(stock)} onClick={() => setDetailStock(stock)} /> ); })}
No handleSort('name')}> 종목정보 handleSort('price')}> 현재가 시가/고/저 handleSort('volume')}> 거래량 기업건강 (P/R/E) handleSort('aiScoreBuy')}> AI SCORE 트레이딩 액션
{detailStock && setDetailStock(null)} />} {tradeContext && ( setTradeContext(null)} onExecute={async (o) => alert("주문 예약됨")} /> )}
); }; export default Stocks;