diff --git a/frontend/src/components/TradingChart.tsx b/frontend/src/components/TradingChart.tsx index 43d74df..707b2fa 100644 --- a/frontend/src/components/TradingChart.tsx +++ b/frontend/src/components/TradingChart.tsx @@ -96,6 +96,12 @@ interface TradingChartProps { onTradeOrderRequest?: (req: { market: string; price: number; side: 'buy' | 'sell' }) => void; /** 표시 시간대 (IANA) */ displayTimezone?: string; + /** 거래량 pane 표시 (기본 true) */ + volumeVisible?: boolean; + /** 하단 호버 줌·스크롤 툴바 (기본 true) */ + showHoverToolbar?: boolean; + /** 보조지표 우측 가격축 라벨·설명 (차트 설정, 기본 true) */ + seriesPriceLabelsEnabled?: boolean; } const TradingChart: React.FC = ({ @@ -122,6 +128,9 @@ const TradingChart: React.FC = ({ onRestoreIndicators, onTradeOrderRequest, displayTimezone = DEFAULT_DISPLAY_TIMEZONE, + volumeVisible = true, + showHoverToolbar = true, + seriesPriceLabelsEnabled = true, }) => { const containerRef = useRef(null); const wrapperRef = useRef(null); // 스크롤 래퍼 @@ -225,6 +234,20 @@ const TradingChart: React.FC = ({ } }, [mode, drawingTool]); + const volumeVisibleRef = useRef(volumeVisible); + useEffect(() => { volumeVisibleRef.current = volumeVisible; }, [volumeVisible]); + + useEffect(() => { + const mgr = managerRef.current; + if (!mgr) return; + const wrapperH = wrapperRef.current?.clientHeight ?? 0; + mgr.setVolumeVisible(volumeVisible, wrapperH > 0 ? wrapperH : undefined); + }, [volumeVisible]); + + useEffect(() => { + managerRef.current?.setSeriesPriceLabelsEnabled(seriesPriceLabelsEnabled); + }, [seriesPriceLabelsEnabled]); + /** * pane 높이 재배분 + 스크롤 컨테이너 확장 * @@ -509,6 +532,11 @@ const TradingChart: React.FC = ({ const mgr = new ChartManager(containerRef.current, theme); managerRef.current = mgr; setChartMgr(mgr); + if (!volumeVisibleRef.current) { + const wrapperH = wrapperRef.current?.clientHeight ?? 0; + mgr.setVolumeVisible(false, wrapperH > 0 ? wrapperH : undefined); + } + mgr.setSeriesPriceLabelsEnabled(seriesPriceLabelsEnabled); onManagerReady(mgr); const unsub = mgr.subscribeCrosshair((p: MouseEventParams