import { Component, computed, inject, signal } from '@angular/core'; import { form, FormField } from '@angular/forms/signals'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatSnackBar } from '@angular/material/snack-bar'; import { MatTabsModule } from '@angular/material/tabs'; import { DateTime } from 'luxon'; import { environment } from '../app.environment'; import { AuthService } from '../auth/auth.service'; import { ErrorStateComponent } from '../shared/error-state/error-state.component'; import { SkeletonLoaderComponent } from '../shared/skeleton-loader/skeleton-loader.component'; import { SettingsService } from './settings.service'; @Component({ selector: 'app-settings', templateUrl: './settings.component.html', styleUrls: ['./settings.component.css'], imports: [ MatButtonModule, MatCardModule, MatDatepickerModule, MatFormFieldModule, MatInputModule, MatSlideToggleModule, MatTabsModule, MatCardModule, FormField, ErrorStateComponent, SkeletonLoaderComponent, ], }) export class SettingsComponent { private snackBar = inject(MatSnackBar); auth = inject(AuthService); private ser = inject(SettingsService); prefillCustomerDiscountResource = this.ser.getPrefillCustomerDiscount(); prefillCustomerDiscount = computed(() => this.prefillCustomerDiscountResource.value()?.value ?? false); version = environment.version; formModel = signal({ startDate: new Date(), finishDate: new Date(), }); maintenanceForm = form(this.formModel); beerFile: File | null = null; saleFile: File | null = null; togglePrefill() { this.ser.setPrefillCustomerDiscount(!this.prefillCustomerDiscount()).subscribe((x) => { this.prefillCustomerDiscountResource.value.set(x); }); } detectBeer(event: Event) { this.beerFile = ((event.target as HTMLInputElement).files as FileList)[0]; } detectSale(event: Event) { this.saleFile = ((event.target as HTMLInputElement).files as FileList)[0]; } runMaintenance() { const formModel = this.formModel(); const startDate = DateTime.fromJSDate(formModel.startDate).toFormat('dd-MMM-yyyy'); const finishDate = DateTime.fromJSDate(formModel.finishDate).toFormat('dd-MMM-yyyy'); if (!this.beerFile || !this.saleFile) { this.snackBar.open('Please choose both files first!', 'Danger'); return; } this.ser.runMaintenance(startDate, finishDate, this.beerFile, this.saleFile).subscribe({ next: () => { this.snackBar.open('Maintenance done', 'Success'); }, error: (error: unknown) => { this.snackBar.open(error as string, 'Danger'); }, }); } }