Make total ticket price dynamic

Refactored price display logic to use computed total price and formatted output in order and seat selection components. Disabled reservation and booking buttons when no seats are selected. Improved clarity by renaming totalPrice to totalCategoryPrice in seat selection.
This commit is contained in:
2025-11-13 09:03:32 +01:00
parent 31108859da
commit cb065c8e39
4 changed files with 17 additions and 7 deletions

View File

@@ -41,13 +41,13 @@
Tickets gesamt:
</p>
<p class="font-semibold text-2xl bg-gradient-to-r from-indigo-500 to-pink-600 bg-clip-text text-transparent">
75,00 €
{{ getPriceDisplay(totalPrice()) }}
</p>
</div>
<div class="flex space-x-5 mt-10">
<button mat-button matButton="outlined" matStepperNext class="w-1/2">Reservieren</button>
<button mat-button matButton="filled" matStepperNext class="w-1/2">Buchen</button>
<button mat-button matButton="outlined" matStepperNext [disabled]="totalPrice()==0" class="w-1/2">Reservieren</button>
<button mat-button matButton="filled" matStepperNext class="w-1/2" [disabled]="totalPrice()==0">Buchen</button>
</div>
</form>
</mat-step>

View File

@@ -1,6 +1,7 @@
import { SelectedSeatsService } from './../selected-seats.service';
import { LoadingService } from './../loading.service';
import { Sitzkategorie, Vorstellung } from '@infinimotion/model-frontend';
import { Component, inject, input } from '@angular/core';
import { Component, computed, inject, input } from '@angular/core';
import { FormBuilder, Validators } from '@angular/forms';
@Component({
@@ -15,6 +16,7 @@ export class OrderComponent {
private _formBuilder = inject(FormBuilder);
loadingService = inject(LoadingService);
private selectedSeatsService = inject(SelectedSeatsService);
firstFormGroup = this._formBuilder.group({
firstCtrl: ['', Validators.required],
@@ -22,4 +24,12 @@ export class OrderComponent {
secondFormGroup = this._formBuilder.group({
secondCtrl: ['', Validators.required],
});
totalPrice = computed(() =>
this.selectedSeatsService.getSelectedSeatsList().reduce((sum, seat) => sum + seat.row.category.price, 0)
);
getPriceDisplay(price: number): string {
return `${(price / 100).toFixed(2)}`;
}
}