unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
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}