Fix chart: lazy load lightweight-charts on client only
This commit is contained in:
@@ -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(() => {
|
||||
|
||||
Reference in New Issue
Block a user