Fix chart: lazy load lightweight-charts on client only

This commit is contained in:
root
2026-02-22 22:12:28 +00:00
parent 7b2b102c32
commit 82fd91851e
+28 -5
View File
@@ -1,7 +1,10 @@
'use client'
import { useState, useEffect, useRef } from 'react'
import { createChart, IChartApi, ISeriesApi, CandlestickData, Time } from 'lightweight-charts'
// Lazy load lightweight-charts only on client
let createChart: any = null
let lightweightCharts: any = null
interface Trade {
id: string
@@ -87,10 +90,30 @@ export default function TradingChart() {
const [indicators, setIndicators] = useState<IndicatorState>({
ema20: false, ema50: false, ema200: false, bb: false, rsi: false, macd: false, thoth: true, volume: true, srZones: true, news: false, patterns: false, fib: false, countdown: false, calendar: false, correlation: false, funding: false
})
const [chartReady, setChartReady] = useState(false)
// Initialize chart
// Initialize chart - run only on client
useEffect(() => {
if (!chartContainerRef.current) return
let mounted = true
const initChart = async () => {
try {
const charts = await import('lightweight-charts')
if (!mounted) return
createChart = charts.createChart
setChartReady(true)
} catch (e) {
console.error('Failed to load charts:', e)
}
}
initChart()
return () => { mounted = false }
}, [])
// Setup chart after library loads
useEffect(() => {
if (!chartReady || !chartContainerRef.current || !createChart) return
const chart = createChart(chartContainerRef.current, {
layout: {
@@ -145,9 +168,9 @@ export default function TradingChart() {
return () => {
window.removeEventListener('resize', handleResize)
chart.remove()
if (chartRef.current) chartRef.current.remove()
}
}, [])
}, [chartReady])
// Fetch data when asset/timeframe changes
useEffect(() => {