Really-amin's picture
Upload 389 files
452f691 verified
class SettingsView {
constructor(section) {
this.section = section;
this.themeToggle = section.querySelector('[data-theme-toggle]');
this.marketIntervalInput = section.querySelector('[data-market-interval]');
this.newsIntervalInput = section.querySelector('[data-news-interval]');
this.layoutToggle = section.querySelector('[data-layout-toggle]');
}
init() {
this.loadPreferences();
this.bindEvents();
}
loadPreferences() {
const theme = localStorage.getItem('dashboard-theme') || 'dark';
document.body.dataset.theme = theme;
if (this.themeToggle) {
this.themeToggle.checked = theme === 'light';
}
const marketInterval = localStorage.getItem('market-interval') || 60;
const newsInterval = localStorage.getItem('news-interval') || 120;
if (this.marketIntervalInput) this.marketIntervalInput.value = marketInterval;
if (this.newsIntervalInput) this.newsIntervalInput.value = newsInterval;
const layout = localStorage.getItem('layout-density') || 'spacious';
document.body.dataset.layout = layout;
if (this.layoutToggle) {
this.layoutToggle.checked = layout === 'compact';
}
}
bindEvents() {
if (this.themeToggle) {
this.themeToggle.addEventListener('change', () => {
const theme = this.themeToggle.checked ? 'light' : 'dark';
document.body.dataset.theme = theme;
localStorage.setItem('dashboard-theme', theme);
});
}
if (this.marketIntervalInput) {
this.marketIntervalInput.addEventListener('change', () => {
localStorage.setItem('market-interval', this.marketIntervalInput.value);
});
}
if (this.newsIntervalInput) {
this.newsIntervalInput.addEventListener('change', () => {
localStorage.setItem('news-interval', this.newsIntervalInput.value);
});
}
if (this.layoutToggle) {
this.layoutToggle.addEventListener('change', () => {
const layout = this.layoutToggle.checked ? 'compact' : 'spacious';
document.body.dataset.layout = layout;
localStorage.setItem('layout-density', layout);
});
}
}
}
export default SettingsView;