Files
trading_bot_v3/app/chart-debug/page.tsx
mindesbunister 4ff35b8e04 🔒 Implement concurrency protection and remove marketing text
- Add analysisInProgress useRef to prevent multiple simultaneous analyses
- Protect all analysis entry points (performAnalysis, quickAnalyze, etc.)
- Update button disabled state to include concurrency check
- Remove marketing text from analysis page and AIAnalysisPanel
- Fix remaining TypeScript compilation errors in chart components
- Ensure clean UI without promotional content

Fixes sync issues caused by overlapping analysis sessions
2025-07-17 14:00:24 +02:00

130 lines
4.3 KiB
TypeScript

'use client'
import React, { useEffect, useRef, useState } from 'react'
export default function ChartDebug() {
const chartContainerRef = useRef<HTMLDivElement>(null)
const [logs, setLogs] = useState<string[]>([])
const [chartCreated, setChartCreated] = useState(false)
const addLog = (message: string) => {
console.log(message)
setLogs(prev => [...prev, `${new Date().toLocaleTimeString()}: ${message}`])
}
useEffect(() => {
if (!chartContainerRef.current) {
addLog('Chart container ref not available')
return
}
const initChart = async () => {
try {
addLog('Starting chart initialization...')
// Dynamic import to avoid SSR issues
addLog('Importing lightweight-charts...')
const LightweightChartsModule = await import('lightweight-charts')
addLog('Import successful')
addLog('Available exports: ' + Object.keys(LightweightChartsModule).join(', '))
const { createChart } = LightweightChartsModule
addLog('Extracted createChart')
// Create chart with minimal options
const chart = createChart(chartContainerRef.current!, {
width: 600,
height: 300,
})
addLog('Chart created successfully')
setChartCreated(true)
// Check what methods are available on the chart
const chartMethods = Object.getOwnPropertyNames(Object.getPrototypeOf(chart))
addLog('Chart methods: ' + chartMethods.slice(0, 10).join(', ') + '...')
// Try to add a candlestick series using the modern API
let candlestickSeries;
if ('addCandlestickSeries' in chart) {
addLog('Using addCandlestickSeries method')
candlestickSeries = (chart as any).addCandlestickSeries({
upColor: '#26a69a',
downColor: '#ef5350',
borderDownColor: '#ef5350',
borderUpColor: '#26a69a',
wickDownColor: '#ef5350',
wickUpColor: '#26a69a',
})
} else {
addLog('Trying alternative API')
candlestickSeries = (chart as any).addAreaSeries({
lineColor: '#26a69a',
topColor: 'rgba(38, 166, 154, 0.4)',
bottomColor: 'rgba(38, 166, 154, 0.0)',
})
}
addLog('Candlestick series added')
// Very simple test data
const testData = [
{ time: '2023-01-01', open: 100, high: 110, low: 95, close: 105 },
{ time: '2023-01-02', open: 105, high: 115, low: 100, close: 110 },
{ time: '2023-01-03', open: 110, high: 120, low: 105, close: 115 },
{ time: '2023-01-04', open: 115, high: 125, low: 110, close: 120 },
{ time: '2023-01-05', open: 120, high: 130, low: 115, close: 125 },
]
addLog(`Setting data with ${testData.length} points`)
candlestickSeries.setData(testData)
addLog('Data set successfully - chart should be visible now')
// Cleanup function
return () => {
addLog('Cleaning up chart')
chart.remove()
}
} catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error)
addLog(`Error: ${errorMessage}`)
console.error('Chart error:', error)
}
}
initChart()
}, [])
return (
<div className="min-h-screen bg-gray-900 p-8">
<h1 className="text-white text-2xl mb-4">Chart Debug Test</h1>
<div className="mb-4">
<h2 className="text-white text-lg mb-2">Status</h2>
<div className="text-gray-400">
Chart Created: {chartCreated ? '✅ Yes' : '❌ No'}
</div>
</div>
<div className="mb-4">
<h2 className="text-white text-lg mb-2">Chart Container</h2>
<div
ref={chartContainerRef}
className="bg-gray-800 border border-gray-600 rounded"
style={{ width: '600px', height: '300px' }}
/>
</div>
<div>
<h2 className="text-white text-lg mb-2">Debug Logs</h2>
<div className="bg-gray-800 p-4 rounded max-h-60 overflow-y-auto">
{logs.map((log, index) => (
<div key={index} className="text-gray-300 text-sm font-mono">
{log}
</div>
))}
</div>
</div>
</div>
)
}