unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at angular21 70 lines 2.4 kB view raw
1import { Component, WritableSignal, inject } from '@angular/core' 2import { MatFormFieldModule } from '@angular/material/form-field' 3import { MatSelectChange, MatSelectModule } from '@angular/material/select' 4import { TranslatePipe } from '@ngx-translate/core' 5import { KeyValueTypedPipe } from 'src/app/pipes/keyvaluetyped.pipe' 6import { 7 AdditionalStyleMode, 8 additionalStyleModesData, 9 Theme, 10 themeData, 11 themeGroupList, 12 LightDarkMode, 13 lightDarkModeData, 14 ThemeService 15} from 'src/app/services/theme.service' 16 17@Component({ 18 selector: 'app-setting-theme-switcher', 19 imports: [MatFormFieldModule, MatSelectModule, TranslatePipe, KeyValueTypedPipe], 20 templateUrl: './setting-theme-switcher.component.html', 21 styleUrl: './setting-theme-switcher.component.scss' 22}) 23export class SettingThemeSwitcherComponent { 24 private themeService = inject(ThemeService); 25 26 // light/dark 27 lightDarkMode: WritableSignal<LightDarkMode> 28 colorThemeData = lightDarkModeData 29 30 // colors 31 colorScheme: WritableSignal<Theme> 32 colorSchemeData = themeData 33 colorSchemeGroupList = themeGroupList 34 35 // style modes 36 additionalStyleModes 37 additionalStyleModesSelect 38 additionalStyleModesData = additionalStyleModesData 39 40 constructor() { 41 const themeService = this.themeService; 42 43 this.lightDarkMode = themeService.lightDarkMode 44 45 this.colorScheme = themeService.theme 46 47 this.additionalStyleModes = themeService.additionalStyleModes 48 this.additionalStyleModesSelect = Object.entries(this.additionalStyleModes) 49 .filter(([_, enabled]) => enabled()) 50 .map(([val, _]) => val) as AdditionalStyleMode[] 51 } 52 53 setLightDarkMode(event: MatSelectChange) { 54 this.themeService.setLightDarkMode(event.value) 55 } 56 setTheme(event: MatSelectChange) { 57 console.log('setting theme to', event.value) 58 this.themeService.setTheme(event.value) 59 } 60 setAdditionalStyleModes(event: MatSelectChange) { 61 this.additionalStyleModesSelect = event.value as AdditionalStyleMode[] 62 63 const allModes = Object.keys(this.additionalStyleModesData) as AdditionalStyleMode[] 64 const enabledModes = this.additionalStyleModesSelect 65 const disabledModes = allModes.filter((mode) => !this.additionalStyleModesSelect.includes(mode)) 66 enabledModes.forEach((mode) => this.additionalStyleModes[mode].set(true)) 67 disabledModes.forEach((mode) => this.additionalStyleModes[mode].set(false)) 68 this.themeService.syncAdditionalStyleMode() 69 } 70}