Files
frontend/src/app/app-module.ts
Piet Ostendorp ade5479a74 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.
2025-11-21 15:53:42 +01:00

163 lines
7.2 KiB
TypeScript

import { CommonModule } from '@angular/common';
import { NgModule, provideBrowserGlobalErrorListeners } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { provideHttpClient, withFetch } from '@angular/common/http';
import { AppRoutingModule } from './app-routing-module';
import { App } from './app';
import { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';
import { QRCodeComponent } from 'angularx-qrcode';
import { MatIconModule } from '@angular/material/icon';
import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatProgressBarModule } from '@angular/material/progress-bar';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatButtonModule, MatIconButton } from '@angular/material/button';
import { MatDividerModule } from '@angular/material/divider';
import { MatDialogClose, MatDialogTitle, MatDialogContent, MatDialogActions } from "@angular/material/dialog";
import { MatStepperModule } from '@angular/material/stepper';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatBadgeModule } from '@angular/material/badge';
import { MatTooltipModule } from '@angular/material/tooltip';
import { HeaderComponent } from './header/header.component';
import { HomeComponent } from './home/home.component';
import { MainComponent } from './main/main.component';
import { MainLayoutComponent } from './layouts/main-layout/main-layout.component';
import { NavbarComponent } from './navbar/navbar.component';
import { PocModelComponent } from './poc-model-component/poc-model-component';
import { ScheduleComponent } from './schedule/schedule.component';
import { MovieDurationComponent } from './movie-duration/movie-duration.component';
import { MoviePerformanceComponent } from './movie-performance/movie-performance.component';
import { MoviePosterComponent } from './movie-poster/movie-poster.component';
import { MovieRatingComponent } from './movie-rating/movie-rating.component';
import { MovieScheduleInfoComponent } from './movie-schedule-info/movie-schedule-info.component';
import { MovieScheduleTimesComponent } from './movie-schedule-times/movie-schedule-times.component';
import { MovieCategoryComponent } from './movie-category/movie-category.component';
import { MovieScheduleEmptyComponent } from './movie-schedule-empty/movie-schedule-empty.component';
import { Header2Component } from './header-2/header-2.component';
import { TheaterOverlayComponent } from './theater-overlay/theater-overlay.component';
import { SeatComponent } from './seat/seat.component';
import { SeatRowComponent } from './seat-row/seat-row.component';
import { TheaterLayoutComponent } from './theater-layout/theater-layout.component';
import { MovieSearchComponent } from './movie-search/movie-search.component';
import { MenuHeaderComponent } from './menu-header/menu-header.component';
import { MovieScheduleNoSearchResultComponent } from './movie-schedule-no-search-result/movie-schedule-no-search-result.component';
import { MovieImporterComponent } from './movie-importer/movie-importer.component';
import { MovieImportNoSearchResultComponent } from './movie-import-no-search-result/movie-import-no-search-result.component';
import { MovieImportSearchInfoComponent } from './movie-import-search-info/movie-import-search-info.component';
import { LoginDialog } from './login/login.dialog';
import { PerformanceInfoComponent } from './performance-info/performance-info.component';
import { OrderComponent } from './order/order.component';
import { SeatSelectionComponent } from './seat-selection/seat-selection.component';
import { NoSeatsInHallComponent } from './no-seats-in-hall/no-seats-in-hall.component';
import { ReservationSuccessComponent } from './reservation-success/reservation-success.component';
import { ReservationFailedComponent } from './reservation-failed/reservation-failed.component';
import { PurchaseSuccessComponent } from './purchase-success/purchase-success.component';
import { PurchaseFailedComponent } from './purchase-failed/purchase-failed.component';
import { TicketSmallComponent } from './ticket-small/ticket-small.component';
import { TicketListComponent } from './ticket-list/ticket-list.component';
import { ZoomWarningComponent } from './zoom-warning/zoom-warning.component';
import { SelectionConflictInfoComponent } from './selection-conflict-info/selection-conflict-info.component';
import { CancellationSuccessComponent } from './cancellation-success/cancellation-success.component';
import { CancellationFailedComponent } from './cancellation-failed/cancellation-failed.component';
import { ConversionFailedComponent } from './conversion-failed/conversion-failed.component';
import { PayForOrderComponent } from './pay-for-order/pay-for-order.component';
import { CancelOrderDialog } from './cancel-order/cancel-order.dialog';
@NgModule({
declarations: [
App,
PocModelComponent,
HomeComponent,
MainLayoutComponent,
HeaderComponent,
NavbarComponent,
ScheduleComponent,
MainComponent,
MovieScheduleInfoComponent,
MoviePosterComponent,
MovieScheduleTimesComponent,
MoviePerformanceComponent,
MovieRatingComponent,
MovieDurationComponent,
MovieCategoryComponent,
MovieScheduleEmptyComponent,
Header2Component,
TheaterOverlayComponent,
SeatComponent,
SeatRowComponent,
TheaterLayoutComponent,
MovieSearchComponent,
MenuHeaderComponent,
MovieScheduleNoSearchResultComponent,
MovieImporterComponent,
MovieImportNoSearchResultComponent,
MovieImportSearchInfoComponent,
LoginDialog,
PerformanceInfoComponent,
OrderComponent,
SeatSelectionComponent,
NoSeatsInHallComponent,
ReservationSuccessComponent,
ReservationFailedComponent,
PurchaseSuccessComponent,
PurchaseFailedComponent,
TicketSmallComponent,
TicketListComponent,
ZoomWarningComponent,
SelectionConflictInfoComponent,
CancellationSuccessComponent,
CancellationFailedComponent,
ConversionFailedComponent,
PayForOrderComponent,
CancelOrderDialog,
],
imports: [
AppRoutingModule,
BrowserModule,
ReactiveFormsModule,
CommonModule,
FormsModule,
MatIconModule,
MatTabsModule,
MatToolbarModule,
MatProgressBarModule,
MatProgressSpinnerModule,
MatSnackBarModule,
MatAutocompleteModule,
MatInputModule,
MatFormFieldModule,
MatIconButton,
MatDividerModule,
MatButtonModule,
MatDialogClose,
MatDialogTitle,
MatDialogContent,
MatDialogActions,
MatCheckboxModule,
MatStepperModule,
NgxMaskDirective,
NgxMaskPipe,
QRCodeComponent,
MatBadgeModule,
MatTooltipModule,
],
providers: [
provideBrowserGlobalErrorListeners(),
provideHttpClient(
withFetch(),
),
provideNgxMask(),
],
bootstrap: [App]
})
export class AppModule { }