Add functionality to cancel tickets

Introduces a cancel order confirmation dialog and integrates it into the order flow. Refactors error and success components to support singular/plural seat messaging and retry actions. Updates navigation and button behaviors for better user experience. Fixes minor UI and logic issues in reservation, purchase, and conversion flows.
This commit is contained in:
2025-11-21 15:53:42 +01:00
parent 3db3876a8b
commit ade5479a74
29 changed files with 266 additions and 58 deletions

View File

@@ -3,9 +3,9 @@
warning
</mat-icon>
<h1 class="text-xl font-bold">Kauf fehlgeschlagen!</h1>
<p class="text-center">Leider konnten Ihre Sitzplätze nicht gekauft werden. Dies kann passieren, wenn andere Nutzer zeitgleich versucht haben, dieselben Sitzplätze zu kaufen.</p>
<p class="text-center">{{ infoText }}</p>
<button mat-button matButton="filled" class="error-button mt-4 w-80">Erneut versuchen</button>
<button routerLink="/schedule" mat-button matButton="outlined" color="accent" class="error-button w-80 mt-1">Zurück zur Programmauswahl</button>
<button mat-button type="button" matButton="filled" class="error-button mt-4 w-80" (click)="retry.emit()">Erneut versuchen</button>
<button mat-button type="button" matButton="outlined" color="accent" class="error-button w-80 mt-1" (click)="navigate()">Zurück zur Sitzplatzauswahl</button>
</div>

View File

@@ -1,4 +1,5 @@
import { Component } from '@angular/core';
import { Component, inject, input, output } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-purchase-failed',
@@ -7,5 +8,22 @@ import { Component } from '@angular/core';
styleUrl: './purchase-failed.component.css',
})
export class PurchaseFailedComponent {
performanceId = input.required<number>();
moreThanOne = input<boolean>(false);
retry = output<void>();
private router = inject(Router);
infoText!: string;
ngOnInit(): void {
this.infoText = this.moreThanOne()?
'Leider konnten Ihre Sitzplätze nicht gekauft werden. Dies kann passieren, wenn andere Nutzer zeitgleich versucht haben, dieselben Sitzplätze zu kaufen.' :
'Leider konnte Ihr Sitzplatz nicht gekauft werden. Dies kann passieren, wenn andere Nutzer zeitgleich versucht haben, denselben Sitzplatz zu kaufen.';
}
navigate() {
window.location.href = `/checkout/performance/${this.performanceId()}`;
}
}