1- import { DOCUMENT } from '@angular/common' ;
21import { Component , Inject , OnInit } from '@angular/core' ;
2+ import { DOCUMENT } from '@angular/common' ;
3+ import { MediaMatcher } from '@angular/cdk/layout' ;
34
45@Component ( {
56 selector : 'app-dark-mode-toggle' ,
@@ -9,32 +10,36 @@ import { Component, Inject, OnInit } from '@angular/core';
910export class DarkModeToggleComponent implements OnInit {
1011 isDarkMode : boolean ;
1112
12- private getUserSettingsIsDarkMode ( ) : boolean {
13- return localStorage . getItem ( 'DARK_MODE' ) === 'true' ;
14- }
15-
16- private setDarkMode ( isDarkMode : boolean ) {
17- this . isDarkMode = isDarkMode ;
18- this . document . documentElement . setAttribute (
19- 'mode' ,
20- isDarkMode ? 'dark' : 'light' ,
21- ) ;
22- }
23-
24- constructor ( @Inject ( DOCUMENT ) private readonly document : Document ) { }
13+ constructor (
14+ @Inject ( DOCUMENT )
15+ private readonly document : Document ,
16+ private readonly mediaMatcher : MediaMatcher ,
17+ ) { }
2518
2619 ngOnInit ( ) {
2720 const userPrefersDark =
28- window . matchMedia &&
29- window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ;
21+ this . mediaMatcher . matchMedia &&
22+ this . mediaMatcher . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ;
3023 // In case the user has used the toggle button, we prioritize it over the
3124 // system settings
3225 this . setDarkMode ( this . getUserSettingsIsDarkMode ( ) || userPrefersDark ) ;
3326 }
3427
3528 toggleDarkMode ( ) {
3629 const isDarkMode = ! this . isDarkMode ;
37- localStorage . setItem ( 'DARK_MODE ' , isDarkMode . toString ( ) ) ;
30+ localStorage . setItem ( 'theme-mode ' , isDarkMode . toString ( ) ) ;
3831 this . setDarkMode ( isDarkMode ) ;
3932 }
33+
34+ private getUserSettingsIsDarkMode ( ) : boolean {
35+ return localStorage . getItem ( 'theme-mode' ) === 'true' ;
36+ }
37+
38+ private setDarkMode ( isDarkMode : boolean ) {
39+ this . isDarkMode = isDarkMode ;
40+ this . document . documentElement . setAttribute (
41+ 'mode' ,
42+ isDarkMode ? 'dark' : 'light' ,
43+ ) ;
44+ }
4045}
0 commit comments