From b55349062f91a2f3e450655a0b371fc0182d2109 Mon Sep 17 00:00:00 2001 From: Macbook Date: Fri, 12 Jun 2026 22:31:02 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EC=B0=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=9C=EB=94=A9=EC=A4=91=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/chart/useChartWorkspace.ts | 5 ++--- frontend/src/components/TradingChart.tsx | 8 ++------ frontend/src/hooks/useStompChartData.ts | 5 ++++- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/frontend/src/chart/useChartWorkspace.ts b/frontend/src/chart/useChartWorkspace.ts index afff8c8..dba8a8a 100644 --- a/frontend/src/chart/useChartWorkspace.ts +++ b/frontend/src/chart/useChartWorkspace.ts @@ -1959,10 +1959,9 @@ export function useChartWorkspace({ const chartDataFetched = !useUpbit || (!isLoading && bars.length >= 2 && barsMarket === symbol); const chartPaintComplete = layoutDef.count > 1 ? allSlotsPaintReady : singleChartPaintReady; const chartDataLoading = useUpbit && chartVisible && (!chartConfigReady || !chartDataFetched); + /** paint 완료 = reloadAll setData까지 끝남 — chartDataFetched 와 이중 게이트 시 영구 로딩 가능 */ const chartAreaLoading = useUpbit && chartVisible && ( - !chartConfigReady - || !chartPaintComplete - || (layoutDef.count === 1 && !chartDataFetched) + !chartConfigReady || !chartPaintComplete ); const viewProps: ChartWorkspaceViewProps = { diff --git a/frontend/src/components/TradingChart.tsx b/frontend/src/components/TradingChart.tsx index fb1c71d..4ec0760 100644 --- a/frontend/src/components/TradingChart.tsx +++ b/frontend/src/components/TradingChart.tsx @@ -994,13 +994,9 @@ const TradingChart: React.FC = ({ } const m = managerRef.current; if (m?.hasMainSeries()) { - // 지표 일부만 로드된 경우에도 메인 캔들은 준비됨 — 실시간 틱 허용 + // 메인 캔들만 준비되어도 paint·실시간 틱 허용 (지표는 백그라운드 복구) + setChartPaintReady(true); onCandlesReady?.(); - const expected = countExpectedVisibleIndicators(indicatorsRef.current); - const loaded = m.getLoadedIndicatorCount(); - if (expected === 0 || loaded >= expected) { - setChartPaintReady(true); - } } } }, [normalizeChartViewport, onCandlesReady, onDataLoaded, displayTimezone, timeframe, market, queueFullReload, queueIndicatorRecovery]); diff --git a/frontend/src/hooks/useStompChartData.ts b/frontend/src/hooks/useStompChartData.ts index 578a1c9..9f95a69 100644 --- a/frontend/src/hooks/useStompChartData.ts +++ b/frontend/src/hooks/useStompChartData.ts @@ -145,7 +145,10 @@ export function useStompChartData( /** 백엔드 history 비어 있을 때 STOMP 누적 → React bars 동기화 */ const bootstrapFromStompRef = useRef(false); useEffect(() => { - if (opts.enabled === false) return; + if (opts.enabled === false) { + setIsLoading(false); + return; + } let cancelled = false; historyReadyRef.current = false; bootstrapFromStompRef.current = false;