diff --git a/src/Vegasco-Web/src/app/modules/entries/edit-entry/edit-entry.component.html b/src/Vegasco-Web/src/app/modules/entries/edit-entry/edit-entry.component.html index d5ba414..b24fe21 100644 --- a/src/Vegasco-Web/src/app/modules/entries/edit-entry/edit-entry.component.html +++ b/src/Vegasco-Web/src/app/modules/entries/edit-entry/edit-entry.component.html @@ -1,83 +1,59 @@ -@if (!loaded) { +@if (isLoading()) { } @else {
-
-
- - -
- -
- - -
-
-
- - @if (rabbits$ | async; as rabbits) { + + @if (cars(); as cars) { }
- - @if (medicines$ | async; as medicines) { - - - {{ medicine.name }} ({{ medicine.abbreviation }}) - - - } + +
- + - - g + + km
- - + + + + l +
diff --git a/src/Vegasco-Web/src/app/modules/entries/edit-entry/edit-entry.component.ts b/src/Vegasco-Web/src/app/modules/entries/edit-entry/edit-entry.component.ts index 1b0d5ba..874326d 100644 --- a/src/Vegasco-Web/src/app/modules/entries/edit-entry/edit-entry.component.ts +++ b/src/Vegasco-Web/src/app/modules/entries/edit-entry/edit-entry.component.ts @@ -1,6 +1,8 @@ -import { AsyncPipe } from '@angular/common'; -import { Component, inject } from '@angular/core'; +import { Component, computed, inject, Signal } from '@angular/core'; +import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop'; import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; +import { Router } from '@angular/router'; +import { CarClient } from '@vegasco-web/api/cars/car-client'; import { ButtonModule } from 'primeng/button'; import { ChipModule } from 'primeng/chip'; import { DatePickerModule } from 'primeng/datepicker'; @@ -12,11 +14,11 @@ import { InputTextModule } from 'primeng/inputtext'; import { MultiSelectModule } from 'primeng/multiselect'; import { SelectModule } from 'primeng/select'; import { SkeletonModule } from 'primeng/skeleton'; +import { map } from 'rxjs'; @Component({ selector: 'app-edit-entry', imports: [ - AsyncPipe, ButtonModule, ChipModule, DatePickerModule, @@ -35,16 +37,133 @@ import { SkeletonModule } from 'primeng/skeleton'; }) export class EditEntryComponent { private readonly formBuilder = inject(FormBuilder); + private readonly carClient = inject(CarClient); + private readonly router = inject(Router); + + protected readonly formFieldNames = { + car: 'car', + date: 'date', + mileage: 'mileage', + amount: 'amount', + } protected readonly formGroup = this.formBuilder.group({ - date: [null], - time: [null], - rabbit: [null, Validators.required], - weight: [ + [this.formFieldNames.car]: [null, Validators.required], + [this.formFieldNames.date]: [null], + [this.formFieldNames.mileage]: [ null, - Validators.min(1), + [Validators.required, Validators.min(1)], + ], + [this.formFieldNames.amount]: [ + null, + [Validators.required, Validators.min(1)], ], - medicines: [[]], - comment: [null], }); + + protected readonly cars: Signal; + + protected readonly isLoading = computed(() => { + return this.cars() === undefined; + }) + + constructor() { + this.cars = toSignal( + this.carClient + .getAll() + .pipe( + takeUntilDestroyed(), + map(response => response.cars) + ), + ); + } + + async navigateToOverviewPage(): Promise { + await this.router.navigateByUrl(`/entries`); + } + + onSubmit(): void { + // if (!this.entryId) { + // this.createEntry(); + // return; + // } + + // this.updateEntry(); + } + + createEntry() { + // this.api + // .createWeightEntry( + // this.getWeighedAt(), + // this.formGroup.controls['weight'].value, + // this.formGroup.controls['comment'].value, + // this.formGroup.controls['rabbit'].value!.id, + // this.formGroup.controls['medicines'].value?.map((x) => x.id) ?? [], + // ) + // .subscribe({ + // next: (_) => { + // this.router.navigateByUrl('/weight-entries'); + // }, + // error: (error: HttpErrorResponse) => { + // switch (true) { + // case error.status >= 500 && error.status <= 599: + // this.messageService.add({ + // severity: 'error', + // summary: 'Serverfehler', + // detail: + // 'Beim Erstellen des Eintrags ist ein Fehler aufgetreten. Bitte versuche es erneut.', + // }); + // break; + // case error.status == 400: + // this.messageService.add({ + // severity: 'error', + // summary: 'Clientfehler', + // detail: + // 'Die Anwendung scheint falsche Daten an den Server zu senden.', + // }); + // break; + // default: + // break; + // } + // }, + // }); + } + + updateEntry() { + // this.api + // .updateWeightEntry( + // this.entryId!, + // this.getWeighedAt(), + // this.formGroup.controls['weight'].value, + // this.formGroup.controls['comment'].value, + // this.formGroup.controls['rabbit'].value!.id, + // this.formGroup.controls['medicines'].value?.map((x) => x.id) ?? [], + // ) + // .subscribe({ + // next: (_) => { + // this.router.navigateByUrl('/weight-entries'); + // }, + // error: (error: HttpErrorResponse) => { + // switch (true) { + // case error.status >= 500 && error.status <= 599: + // this.messageService.add({ + // severity: 'error', + // summary: 'Serverfehler', + // detail: + // 'Beim Aktualisieren des Eintrags ist ein Fehler aufgetreten. Bitte versuche es erneut.', + // }); + // break; + // case error.status == 400: + // this.messageService.add({ + // severity: 'error', + // summary: 'Clientfehler', + // detail: + // 'Die Anwendung scheint falsche Daten an den Server zu senden.', + // }); + // break; + // default: + // break; + // } + // }, + // }); + } }