From 8a2d8054ad9215c57180bc0f528a08671acfb0cd Mon Sep 17 00:00:00 2001 From: Macbook Date: Tue, 9 Jun 2026 00:55:37 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=8C=EB=A6=BC=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=BA=94=EB=93=A4=EC=B0=A8=ED=8A=B8=20=EB=A7=A4=EB=A7=A4=20?= =?UTF-8?q?=EC=8B=9C=EA=B7=B8=EB=84=90=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FullscreenChartModal.tsx | 5 ++ .../TradeNotificationListRow.tsx | 11 ++++ .../TradeSignalChartCard.tsx | 4 ++ .../TradeSignalMiniChart.tsx | 48 +++++++++++--- frontend/src/utils/tradeSignalChartMarkers.ts | 65 +++++++++++++++++++ 5 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 frontend/src/utils/tradeSignalChartMarkers.ts diff --git a/frontend/src/components/tradeNotification/FullscreenChartModal.tsx b/frontend/src/components/tradeNotification/FullscreenChartModal.tsx index 7fb0768..cf8365e 100644 --- a/frontend/src/components/tradeNotification/FullscreenChartModal.tsx +++ b/frontend/src/components/tradeNotification/FullscreenChartModal.tsx @@ -120,6 +120,11 @@ const FullscreenChartModal: React.FC = ({ item, theme, onClose }) => { indicators={allIndicatorConfigs} enabled fillHeight + signalMarker={{ + candleTime: item.candleTime, + signalType: item.signalType, + price: item.price, + }} /> diff --git a/frontend/src/components/tradeNotification/TradeNotificationListRow.tsx b/frontend/src/components/tradeNotification/TradeNotificationListRow.tsx index 0d95ce6..d7cd8de 100644 --- a/frontend/src/components/tradeNotification/TradeNotificationListRow.tsx +++ b/frontend/src/components/tradeNotification/TradeNotificationListRow.tsx @@ -232,6 +232,15 @@ const TradeNotificationListRow: React.FC = ({ const indicatorScrollNeeded = indicatorChartCount >= 2; const indicatorPlaceholder = item.strategyId != null && indicatorChartCount === 0 && chartActive; + const signalMarker = useMemo( + () => ({ + candleTime: item.candleTime, + signalType: item.signalType, + price: item.price, + }), + [item.candleTime, item.signalType, item.price], + ); + const handleRowClick = useCallback((e: React.MouseEvent) => { const t = e.target as HTMLElement; if (t.closest( @@ -432,6 +441,7 @@ const TradeNotificationListRow: React.FC = ({ onExpand={() => setExpandedChartKey('candle')} onRestore={() => setExpandedChartKey(null)} onRealtimeActivity={chartActive ? bumpChartActivity : undefined} + signalMarker={signalMarker} /> ) : ( @@ -476,6 +486,7 @@ const TradeNotificationListRow: React.FC = ({ onExpand={() => setExpandedChartKey('candle')} onRestore={() => setExpandedChartKey(null)} onRealtimeActivity={chartActive ? bumpChartActivity : undefined} + signalMarker={signalMarker} /> {indicatorPlaceholder && (
전략 지표 로딩 중…
diff --git a/frontend/src/components/tradeNotification/TradeSignalChartCard.tsx b/frontend/src/components/tradeNotification/TradeSignalChartCard.tsx index 27b2987..c4cbbd0 100644 --- a/frontend/src/components/tradeNotification/TradeSignalChartCard.tsx +++ b/frontend/src/components/tradeNotification/TradeSignalChartCard.tsx @@ -5,6 +5,7 @@ import React from 'react'; import type { IndicatorConfig } from '../../types'; import type { Theme, Timeframe } from '../../types'; import TradeSignalMiniChart from './TradeSignalMiniChart'; +import type { TradeSignalChartMarker } from '../../utils/tradeSignalChartMarkers'; const IcExpand = () => ( @@ -36,6 +37,7 @@ export interface TradeSignalChartCardProps { onExpand: () => void; onRestore: () => void; onRealtimeActivity?: () => void; + signalMarker?: TradeSignalChartMarker; } const TradeSignalChartCard: React.FC = ({ @@ -50,6 +52,7 @@ const TradeSignalChartCard: React.FC = ({ onExpand, onRestore, onRealtimeActivity, + signalMarker, }) => (
= ({ enabled={enabled} fillHeight={expanded} onRealtimeActivity={onRealtimeActivity} + signalMarker={signalMarker} /> {expanded ? (