Files
court-pilot/src/app/tab2/tab2.page.ts
T
tothbt 6319f2c270
Build and Release Court Pilot / draft (push) Canceled after 0s
Build and Release Court Pilot / build (ubuntu-22.04) (push) Canceled after 0s
Build and Release Court Pilot / build (windows-latest) (push) Canceled after 0s
Build and Release Court Pilot / publish (push) Canceled after 0s
fix: small bugfixes
* Typo in the Hungarian vocab
* Translate language labels
* Start app on full screen
* Clear TOs data in the add-modal
* Change version number to 1.1.1
2026-09-05 11:13:43 +02:00

154 lines
3.5 KiB
TypeScript

import { Component, inject, ViewChild } from '@angular/core';
import {
IonHeader,
IonToolbar,
IonTitle,
IonContent,
IonButtons,
IonButton,
IonIcon,
IonModal,
IonItem,
IonInput,
IonSelect,
IonSelectOption,
IonList,
IonGrid,
IonRow,
IonCol,
IonLabel,
AlertController
} from '@ionic/angular/standalone';
import { UmpireService } from '../services/umpire.service';
import { Umpire } from 'db';
import { addIcons } from 'ionicons';
import { add, trash } from 'ionicons/icons';
import { OverlayEventDetail } from '@ionic/core/components';
import { FormsModule } from '@angular/forms';
import { FullnamePipe } from '../fullname-pipe';
import { TranslatePipe } from '../i18n/translation.pipe';
import { TranslationKey } from '../i18n/translations';
import { TranslationService } from '../i18n/translation.service';
@Component({
selector: 'app-tab2',
templateUrl: 'tab2.page.html',
styleUrls: ['tab2.page.scss'],
providers: [FullnamePipe],
imports: [
IonLabel,
IonCol,
IonRow,
IonGrid,
IonInput,
IonItem,
IonModal,
IonIcon,
IonButton,
IonButtons,
IonHeader,
IonToolbar,
IonTitle,
IonContent,
FormsModule,
IonSelect,
IonSelectOption,
IonList,
FullnamePipe,
TranslatePipe
]
})
export class Tab2Page {
readonly translationService = inject(TranslationService);
@ViewChild(IonModal) modal!: IonModal;
public readonly umpireService = inject(UmpireService);
public readonly fullnamePipe = inject(FullnamePipe);
public readonly alertController = inject(AlertController);
public readonly umpires = this.umpireService.umpires;
public lastName: string = '';
public firstName: string = '';
public country: string = '';
public gender: string = '';
public genders: { label: TranslationKey; code: string }[] = [
{ label: 'male', code: 'M' },
{ label: 'female', code: 'W' }
];
constructor() {
addIcons({ add, trash });
}
public async onWillDismiss(event: CustomEvent<OverlayEventDetail>) {
if (event.detail.role !== 'confirm') {
return;
}
const newUmpire: Umpire = event.detail.data;
await this.umpireService.create({
firstName: newUmpire.firstName,
lastName: newUmpire.lastName,
country: newUmpire.country,
gender: newUmpire.gender
});
}
cancel() {
this.modal.dismiss(null, 'cancel');
}
async confirm() {
await this.modal.dismiss(
{
lastName: this.lastName,
firstName: this.firstName,
country: this.country,
gender: this.gender
},
'confirm'
);
this.lastName = '';
this.firstName = '';
this.country = '';
this.gender = '';
}
isValidUmpire(): boolean {
return this.lastName !== '' && this.firstName !== '';
}
public async showDeleteConfirmation(umpire: Umpire): Promise<void> {
const alert = await this.alertController.create({
header: this.translationService.translate('confirmation'),
subHeader: this.translationService.translate('confirmDeleteUmpire'),
message: this.fullnamePipe.transform(umpire),
buttons: [
{
text: this.translationService.translate('no'),
role: 'cancel'
},
{
text: this.translationService.translate('yes'),
role: 'confirm',
handler: () => {
// TODO: also remove from first tab
this.removeUmpire(umpire);
}
}
]
});
await alert.present();
}
private removeUmpire(umpire: Umpire): void {
this.umpireService.delete(umpire.id);
}
}