unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at angular21 76 lines 2.5 kB view raw
1import { Component, computed, input, viewChildren, inject } from '@angular/core' 2import { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox' 3import { MatInputModule } from '@angular/material/input' 4import { MatSelectChange, MatSelectModule } from '@angular/material/select' 5import { TranslateModule } from '@ngx-translate/core' 6import { KeyValueTypedPipe } from 'src/app/pipes/keyvaluetyped.pipe' 7import { SettingData, SettingDataEntry, SettingKey, SettingsService } from 'src/app/services/settings.service' 8import { UserSelectorComponent } from '../user-selector/user-selector.component' 9 10@Component({ 11 selector: 'app-setting-entry', 12 imports: [ 13 TranslateModule, 14 MatCheckboxModule, 15 MatSelectModule, 16 MatInputModule, 17 KeyValueTypedPipe, 18 UserSelectorComponent 19 ], 20 templateUrl: './setting-entry.component.html', 21 styleUrl: './setting-entry.component.scss' 22}) 23export class SettingEntryComponent { 24 private settingsService = inject(SettingsService); 25 26 data: SettingData 27 values 28 setting = input.required<SettingDataEntry>() 29 30 matFormFieldElements = viewChildren('formSelect') 31 32 hasDependency = computed(() => this.setting().enableIfSetting !== undefined) 33 isDisabled = computed(() => { 34 this.settingsService.settingsModified() 35 const enablefunc = this.setting().enableIfSetting 36 if (enablefunc) { 37 return !enablefunc(this.values()) 38 } else { 39 return false 40 } 41 }) 42 43 constructor() { 44 const settingsService = this.settingsService; 45 46 this.data = settingsService.data 47 this.values = settingsService.values 48 } 49 50 updateCheckbox(key: SettingKey, event: MatCheckboxChange) { 51 this.values()[key] = event.checked 52 this.values.update((v) => v) 53 this.settingsService.settingsModified.set(true) 54 } 55 56 updateSelect(key: SettingKey, event: MatSelectChange) { 57 this.values()[key] = event.value 58 this.values.update((v) => v) 59 this.settingsService.settingsModified.set(true) 60 } 61 62 updateInput(key: SettingKey, event: Event) { 63 const target = event.target 64 if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) { 65 this.values()[key] = target.value 66 this.values.update((v) => v) 67 this.settingsService.settingsModified.set(true) 68 } 69 } 70 71 updateUserInput(event: { remoteId: string; url: string }) { 72 this.values()[this.setting().key] = event.remoteId 73 this.values.update((v) => v) 74 this.settingsService.settingsModified.set(true) 75 } 76}