Add tab system to right sidebar with Indicators and Strategies

- Add two-tab navigation (Indicators, Strategies) in right sidebar
- Move all strategy-related content to Strategies tab
- Implement sidebar collapse/expand functionality
- Add indicator visibility toggle (eye button)
- Fix bug where wrong interval data was deleted on TF switch
- Add localStorage persistence for sidebar state and active tab
- Ensure indicators recalculate when TF changes
This commit is contained in:
DiTus
2026-02-26 14:56:03 +01:00
parent 6e21be6523
commit 5f84215acd
6 changed files with 319 additions and 143 deletions

View File

@ -303,7 +303,7 @@ async loadInitialData() {
const response = await fetch(`/api/v1/candles?symbol=BTC&interval=${this.currentInterval}&limit=${limit}`);
const data = await response.json();
if (data.candles && data.candles.length > 0) {
if (data.candles && data.candles.length > 0) {
const chartData = data.candles.reverse().map(c => ({
time: Math.floor(new Date(c.time).getTime() / 1000),
open: parseFloat(c.open),
@ -328,6 +328,11 @@ async loadInitialData() {
const latest = mergedData[mergedData.length - 1];
this.updateStats(latest);
}
// Always try to redraw indicators after candles are set
if (window.drawIndicatorsOnChart) {
window.drawIndicatorsOnChart();
}
} catch (error) {
console.error('Error loading data:', error);
} finally {
@ -342,7 +347,7 @@ async loadInitialData() {
const response = await fetch(`/api/v1/candles?symbol=BTC&interval=${this.currentInterval}&limit=50`);
const data = await response.json();
if (data.candles && data.candles.length > 0) {
if (data.candles && data.candles.length > 0) {
const atEdge = this.isAtRightEdge();
const currentSeriesData = this.candleSeries.data();
@ -374,6 +379,11 @@ async loadInitialData() {
const latest = chartData[chartData.length - 1];
this.updateStats(latest);
// Redraw indicators when new data loads
if (window.drawIndicatorsOnChart) {
window.drawIndicatorsOnChart();
}
}
} catch (error) {
console.error('Error loading new data:', error);
@ -586,6 +596,7 @@ async loadTA() {
switchTimeframe(interval) {
if (!this.intervals.includes(interval) || interval === this.currentInterval) return;
const oldInterval = this.currentInterval;
this.currentInterval = interval;
this.hasInitialLoad = false;
@ -593,9 +604,9 @@ async loadTA() {
btn.classList.toggle('active', btn.dataset.interval === interval);
});
this.allData.delete(interval);
// Clear old interval data, not new interval
this.allData.delete(oldInterval);
this.loadInitialData();
// Don't reload TA on timeframe switch - let user refresh manually
window.clearSimulationResults?.();
window.updateTimeframeDisplay?.();