70 lines
1.5 KiB
TypeScript
70 lines
1.5 KiB
TypeScript
import { Injectable, signal } from '@angular/core';
|
|
import {Sitzplatz} from '@infinimotion/model-frontend';
|
|
|
|
@Injectable({
|
|
providedIn: 'root',
|
|
})
|
|
export class SelectedSeatsService {
|
|
private selectedSeatsSignal = signal<Sitzplatz[]>([]);
|
|
private seatIsSelectable: boolean = true;
|
|
private commited = false;
|
|
private debug = false;
|
|
|
|
get selectedSeats() {
|
|
return this.selectedSeatsSignal;
|
|
}
|
|
|
|
pushSelectedSeat(selectedSeat: Sitzplatz): void {
|
|
this.selectedSeatsSignal.update(seats => [...seats, selectedSeat]);
|
|
}
|
|
|
|
removeSelectedSeat(selectedSeat: Sitzplatz): void {
|
|
this.selectedSeatsSignal.update(seats =>
|
|
seats.filter(seat => seat.id !== selectedSeat.id)
|
|
);
|
|
}
|
|
|
|
getSelectedSeatsList(): Sitzplatz[] {
|
|
return this.selectedSeatsSignal();
|
|
}
|
|
|
|
getSelectedSeatsByCategory(categoryId: number): Sitzplatz[] {
|
|
return this.selectedSeatsSignal().filter(seat => seat.row.category.id === categoryId);
|
|
}
|
|
|
|
clearSelectedSeatsList(): void {
|
|
this.selectedSeatsSignal.set([]);
|
|
this.commited = false;
|
|
}
|
|
|
|
getSeatIsSelectable(): boolean{
|
|
return this.seatIsSelectable;
|
|
}
|
|
|
|
setSeatIsSelectableTrue(): void {
|
|
this.seatIsSelectable = true;
|
|
this.commited = false;
|
|
}
|
|
|
|
setSeatIsSelectableFalse(): void {
|
|
this.seatIsSelectable = false;
|
|
}
|
|
|
|
getCommited(): boolean {
|
|
return this.commited;
|
|
}
|
|
|
|
setCommitedTrue(): void {
|
|
this.commited = true;
|
|
}
|
|
|
|
getDebug(): boolean {
|
|
return this.debug;
|
|
}
|
|
|
|
toggleDebug(): void {
|
|
this.debug = !this.debug;
|
|
}
|
|
|
|
}
|