From 9c9e9becfb04561b857ec7e3d0355f4fa6268151 Mon Sep 17 00:00:00 2001 From: Piet Ostendorp Date: Thu, 13 Nov 2025 02:10:30 +0100 Subject: [PATCH] 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. --- src/app/selected-seats.service.ts | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/app/selected-seats.service.ts b/src/app/selected-seats.service.ts index 38fdf1d..5a30cc1 100644 --- a/src/app/selected-seats.service.ts +++ b/src/app/selected-seats.service.ts @@ -1,30 +1,31 @@ -import {Injectable} from '@angular/core'; +import { Injectable, signal } from '@angular/core'; import {Sitzplatz} from '@infinimotion/model-frontend'; @Injectable({ providedIn: 'root', }) export class SelectedSeatsService { - private selectedSeatsList: Sitzplatz[] = []; + private selectedSeatsSignal = signal([]); + + get selectedSeats() { + return this.selectedSeatsSignal; + } pushSelectedSeat(selectedSeat: Sitzplatz): void { - this.selectedSeatsList.push(selectedSeat); - //console.log("Added" + selectedSeat); - //console.log(this.selectedSeatsList); + this.selectedSeatsSignal.update(seats => [...seats, selectedSeat]); } removeSelectedSeat(selectedSeat: Sitzplatz): void { - let removeId = this.selectedSeatsList.indexOf(selectedSeat); - - if(removeId !== -1) { - this.selectedSeatsList.splice(removeId, 1) - } - //console.log("Removed" + selectedSeat) - //console.log(this.selectedSeatsList); + this.selectedSeatsSignal.update(seats => + seats.filter(seat => seat.id !== selectedSeat.id) + ); } getSelectedSeatsList(): Sitzplatz[] { - return this.selectedSeatsList; + return this.selectedSeatsSignal(); } + getSelectedSeatsByCategory(categoryId: number): Sitzplatz[] { + return this.selectedSeatsSignal().filter(seat => seat.row.category.id === categoryId); + } }