ff75c8ce2f
User Profile info, no game before login/register, menu bar --------- Co-authored-by: Lala, Shahd <Shahd.Lala@sybit.de> Co-authored-by: shahdlala66 <shahd.lala66@gmail.com> Reviewed-on: #2
34 lines
1012 B
TypeScript
34 lines
1012 B
TypeScript
import { Injectable } from '@angular/core';
|
|
import { BehaviorSubject } from 'rxjs';
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
export class ThemeService {
|
|
private readonly darkModeSubject = new BehaviorSubject<boolean>(false);
|
|
|
|
readonly darkMode$ = this.darkModeSubject.asObservable();
|
|
|
|
initTheme(): void {
|
|
const savedTheme = localStorage.getItem('theme');
|
|
this.applyDarkMode(savedTheme === 'dark');
|
|
}
|
|
|
|
toggleTheme(): void {
|
|
this.applyDarkMode(!this.darkModeSubject.value);
|
|
}
|
|
|
|
setDarkMode(isDarkMode: boolean): void {
|
|
this.applyDarkMode(isDarkMode);
|
|
}
|
|
|
|
private applyDarkMode(isDarkMode: boolean): void {
|
|
if (isDarkMode) {
|
|
document.documentElement.setAttribute('data-theme', 'dark');
|
|
localStorage.setItem('theme', 'dark');
|
|
} else {
|
|
document.documentElement.removeAttribute('data-theme');
|
|
localStorage.removeItem('theme');
|
|
}
|
|
|
|
this.darkModeSubject.next(isDarkMode);
|
|
}
|
|
} |