From 1d1c277e3a8e685fdcc8f3a7bf948698f256f031 Mon Sep 17 00:00:00 2001 From: Macbook Date: Mon, 8 Jun 2026 13:21:30 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=8C=EB=A6=BC=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EB=B0=B1=ED=85=8C=EC=8A=A4=ED=8C=85=20=EC=B0=A8=ED=8A=B8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=9D=B4=EB=8F=99=ED=8F=89=EA=B7=A0?= =?UTF-8?q?=EC=84=A0,=20=EC=9D=BC=EB=AA=A9=EA=B7=A0=ED=98=95=ED=91=9C,=20?= =?UTF-8?q?=EB=B3=BC=EB=A6=B0=EC=A0=80=20=EA=B7=B8=EB=9E=98=ED=94=84=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/ChartRightToolbar.tsx | 22 +++++--- frontend/src/components/TradingChart.tsx | 24 +++++++- .../backtest/BacktestAnalysisChart.tsx | 43 +++++++------- .../TradeSignalMiniChart.tsx | 32 +++++++++-- .../hooks/useSessionCandleOverlayControls.ts | 56 +++++++++++++++++++ frontend/src/styles/tradeNotificationList.css | 17 ++++++ .../src/utils/paperChartOverlayVisibility.ts | 11 +++- .../src/utils/strategyToChartIndicators.ts | 13 ++++- 8 files changed, 182 insertions(+), 36 deletions(-) create mode 100644 frontend/src/hooks/useSessionCandleOverlayControls.ts diff --git a/frontend/src/components/ChartRightToolbar.tsx b/frontend/src/components/ChartRightToolbar.tsx index 94287db..3c88244 100644 --- a/frontend/src/components/ChartRightToolbar.tsx +++ b/frontend/src/components/ChartRightToolbar.tsx @@ -43,6 +43,8 @@ export interface ChartRightToolbarProps { custom1OverlayActive?: boolean; onCustom1OverlayActiveChange?: (active: boolean) => void; onOpenCustom1OverlaySettings?: () => void; + /** true — 캔들 pane 상단 오버레이 토글만 (미니 차트 등) */ + overlayControlsOnly?: boolean; } const BTN_SIZE = 32; @@ -357,6 +359,7 @@ const ChartRightToolbar: React.FC = ({ onSplit, onRemove, onDuplicate, onExpand, onRestore, focusedId, onDragStart, onToggleHidden, onSettings, + overlayControlsOnly = false, }) => { const [paneLayouts, setPaneLayouts] = useState>([]); const [paneItems, setPaneItems] = useState>([]); @@ -413,7 +416,11 @@ const ChartRightToolbar: React.FC = ({ if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; } }, []); + const candlePane = paneLayouts.find(l => l.paneIndex === 0); + const showOverlayIcons = !!(candleOverlayToggles?.length && candlePane && onToggleCandleOverlay); + if (paused || chartHeight <= 0) return null; + if (overlayControlsOnly && !showOverlayIcons) return null; const innerHeight = paneLayouts.reduce( (max, l) => Math.max(max, l.topY + l.height), @@ -427,10 +434,8 @@ const ChartRightToolbar: React.FC = ({ ? paneItems.find(p => p.id === openMenuId) : null; - const candlePane = paneLayouts.find(l => l.paneIndex === 0); - const showOverlayIcons = !!(candleOverlayToggles?.length && candlePane && onToggleCandleOverlay); - const showCustomBtn = !!(showOverlayIcons && onCustomOverlayActiveChange && onOpenCustomOverlaySettings); - const showCustom1Btn = !!(showOverlayIcons && onCustom1OverlayActiveChange && onOpenCustom1OverlaySettings); + const showCustomBtn = !!(showOverlayIcons && !overlayControlsOnly && onCustomOverlayActiveChange && onOpenCustomOverlaySettings); + const showCustom1Btn = !!(showOverlayIcons && !overlayControlsOnly && onCustom1OverlayActiveChange && onOpenCustom1OverlaySettings); const customMenuOpen = openMenuId === CUSTOM_MENU_ID; const custom1MenuOpen = openMenuId === CUSTOM1_MENU_ID; @@ -446,7 +451,10 @@ const ChartRightToolbar: React.FC = ({ : null; return ( -