Refactor SelectedSeatsService to use signals

Replaces internal array state with Angular signals for selected seats. Updates methods to use signal API and adds a new method to filter selected seats by category.
This commit is contained in:
2025-11-13 02:10:30 +01:00
parent 1d72c3e617
commit 9c9e9becfb

View File

@@ -1,30 +1,31 @@
import {Injectable} from '@angular/core'; import { Injectable, signal } from '@angular/core';
import {Sitzplatz} from '@infinimotion/model-frontend'; import {Sitzplatz} from '@infinimotion/model-frontend';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class SelectedSeatsService { export class SelectedSeatsService {
private selectedSeatsList: Sitzplatz[] = []; private selectedSeatsSignal = signal<Sitzplatz[]>([]);
get selectedSeats() {
return this.selectedSeatsSignal;
}
pushSelectedSeat(selectedSeat: Sitzplatz): void { pushSelectedSeat(selectedSeat: Sitzplatz): void {
this.selectedSeatsList.push(selectedSeat); this.selectedSeatsSignal.update(seats => [...seats, selectedSeat]);
//console.log("Added" + selectedSeat);
//console.log(this.selectedSeatsList);
} }
removeSelectedSeat(selectedSeat: Sitzplatz): void { removeSelectedSeat(selectedSeat: Sitzplatz): void {
let removeId = this.selectedSeatsList.indexOf(selectedSeat); this.selectedSeatsSignal.update(seats =>
seats.filter(seat => seat.id !== selectedSeat.id)
if(removeId !== -1) { );
this.selectedSeatsList.splice(removeId, 1)
}
//console.log("Removed" + selectedSeat)
//console.log(this.selectedSeatsList);
} }
getSelectedSeatsList(): Sitzplatz[] { getSelectedSeatsList(): Sitzplatz[] {
return this.selectedSeatsList; return this.selectedSeatsSignal();
} }
getSelectedSeatsByCategory(categoryId: number): Sitzplatz[] {
return this.selectedSeatsSignal().filter(seat => seat.row.category.id === categoryId);
}
} }