import React, { useMemo } from 'react'; import { getKoreanName } from '../../utils/marketNameCache'; import type { StrategyDto } from '../../utils/backendApi'; import type { VirtualIndicatorSnapshot } from '../../hooks/useVirtualIndicatorSnapshots'; import { useLiveReceiveFlash } from '../../hooks/useLiveReceiveFlash'; import type { ChartRealtimeSource } from '../../hooks/useChartRealtimeData'; import type { VirtualLiveStatus } from '../../hooks/useVirtualTargetLiveStatus'; import type { VirtualCardViewMode } from '../../utils/virtualTradingStorage'; import type { Theme } from '../../types'; import type { TickerData } from '../../hooks/useMarketTicker'; import VirtualLiveBadge from './VirtualLiveBadge'; import VirtualTargetQuote from './VirtualTargetQuote'; import VirtualTargetCardChart from './VirtualTargetCardChart'; import VirtualTargetSignalPanel from './VirtualTargetSignalPanel'; interface Props { market: string; strategy: StrategyDto | undefined; strategies: StrategyDto[]; strategyId: number | null; globalStrategyId: number | null; onStrategyChange?: (strategyId: number | null) => void; snapshot: VirtualIndicatorSnapshot | undefined; running: boolean; liveStatus?: VirtualLiveStatus; lastTickAt?: number; viewMode?: VirtualCardViewMode; onExit: () => void; theme?: Theme; chartRealtimeSource?: ChartRealtimeSource; chartSeriesPriceLabels?: boolean; chartLiveReceiveHighlight?: boolean; ticker?: TickerData; } /** 전체보기 — 좌 차트 · 우 신호 */ const VirtualTargetFocusView: React.FC = ({ market, strategy, strategies, strategyId, globalStrategyId, onStrategyChange, snapshot, running, liveStatus = 'idle', lastTickAt, viewMode = 'summary', onExit, theme = 'dark', chartRealtimeSource = 'BACKEND_STOMP', chartSeriesPriceLabels = true, chartLiveReceiveHighlight = true, ticker, }) => { const ko = getKoreanName(market); const sym = market.replace(/^KRW-/, ''); const tf = snapshot?.timeframe ?? '—'; const receiveSignal = useMemo(() => { if (!running) return null; return `${lastTickAt ?? 0}|${snapshot?.updatedAt ?? 0}`; }, [running, lastTickAt, snapshot?.updatedAt]); const receiving = useLiveReceiveFlash(receiveSignal, running); const highlightReceiving = chartLiveReceiveHighlight && receiving; return (
{ko} {sym}
시간봉 {tf} {running && }
차트
신호
); }; export default VirtualTargetFocusView;