From 07f69196172436f8809394bf35efefef2947c6bd Mon Sep 17 00:00:00 2001 From: Richard Toth Date: Tue, 18 Aug 2026 11:51:42 +0200 Subject: [PATCH] feat: handle service judge setting on the UI --- src/app/tab1/tab1.page.html | 22 +++++++++---- src/app/tab1/tab1.page.ts | 66 ++++++++++++++++++++++++++++++++----- src/app/tab3/tab3.page.ts | 14 ++++++++ 3 files changed, 87 insertions(+), 15 deletions(-) diff --git a/src/app/tab1/tab1.page.html b/src/app/tab1/tab1.page.html index eabd2ca..771df59 100644 --- a/src/app/tab1/tab1.page.html +++ b/src/app/tab1/tab1.page.html @@ -24,11 +24,13 @@ Játékvezető + @if (serviceJudgeEnabled()) { Adogatásbíró + } @for (item of [].constructor(settings()?.numberOfCourts); track $index) { @@ -58,6 +60,7 @@ } + @if (serviceJudgeEnabled()) { + } - @if (umpireByCourt().get($index + 1) && - serviceJudgeByCourt().get($index + 1)) { + @if ( (umpireByCourt().get($index + 1) && + serviceJudgeByCourt().get($index + 1)) || + (umpireByCourt().get($index + 1) && !serviceJudgeEnabled()) ) { @@ -90,9 +95,10 @@ size="large" name="exit-outline"> - } @else if (!umpireByCourt().get($index + 1) && + } @else if ((!umpireByCourt().get($index + 1) && !serviceJudgeByCourt().get($index + 1) && waitingUmpires().length && - waitingServiceJudges().length) { + waitingServiceJudges().length) || (!umpireByCourt().get($index + 1) + && waitingUmpires().length && !serviceJudgeEnabled())) { - + Játékvezetők + @if (serviceJudgeEnabled()) { Adogatásbírók - + } + Pihenők @@ -145,6 +153,7 @@ } + @if (serviceJudgeEnabled()) { + } i + 1); }); + /** + * Is service judge functionality enabled in settings. + */ + readonly serviceJudgeEnabled = computed(() => { + return this.settings()?.withServiceJudge ?? false; + }); + dropToRest(event: CdkDragDrop) { if (event.previousContainer === event.container) { return; @@ -378,7 +385,10 @@ export class Tab1Page { const umpire = this.umpireByCourt().get(courtNo); const serviceJudge = this.serviceJudgeByCourt().get(courtNo); - if (typeof umpire === 'undefined' || typeof serviceJudge === 'undefined') { + if ( + typeof umpire === 'undefined' || + (typeof serviceJudge === 'undefined' && this.serviceJudgeEnabled()) + ) { return; } @@ -389,9 +399,9 @@ export class Tab1Page { const alert = await this.alertController.create({ header: `Pálya ${courtNo}`, - subHeader: 'Biztos leveszed őket pályáról?', + subHeader: `Biztos leveszed ${serviceJudge ? 'őket' : 'őt'} a pályáról?`, cssClass: 'wide', - message: `${this.fullnamePipe.transform(umpire)} - ${this.fullnamePipe.transform(serviceJudge)}`, + message: `${this.fullnamePipe.transform(umpire)} ${serviceJudge ? '- ' : ''} ${this.fullnamePipe.transform(serviceJudge)}`, buttons: [ { text: 'Nem', @@ -401,7 +411,12 @@ export class Tab1Page { text: 'Igen', role: 'confirm', handler: () => { - this.removeUmpiresFromCourt(courtNo); + if (this.serviceJudgeEnabled()) { + this.removeUmpiresFromCourt(courtNo); + return; + } + + this.removeUmpireFromCourt(courtNo); } } ] @@ -410,6 +425,9 @@ export class Tab1Page { await alert.present(); } + /** + * This is for removing both umpire and service judge from the court (when service judge is enabled). + */ private async removeUmpiresFromCourt(courtNo: number) { const umpire = this.umpireByCourt().get(courtNo); const serviceJudge = this.serviceJudgeByCourt().get(courtNo); @@ -424,25 +442,46 @@ export class Tab1Page { await this.waitingServiceJudgeService.add(umpire.id); } + /** + * This is for removing 1 umpire only (when service judge is not enabled). + */ + private async removeUmpireFromCourt(courtNo: number) { + const umpire = this.umpireByCourt().get(courtNo); + + if (typeof umpire === 'undefined') { + return; + } + + await this.courtUmpireService.removeByUmpireId(umpire.id); + await this.waitingUmpireService.add(umpire.id); + } + public async showAddConfirmation(courtNo: number) { const umpire = await this.waitingUmpireService.getCurrentUmpire(); const serviceJudge = await this.waitingServiceJudgeService.getCurrentUmpire(); - if (typeof umpire === 'undefined' || typeof serviceJudge === 'undefined') { + if ( + typeof umpire === 'undefined' || + (typeof serviceJudge === 'undefined' && this.serviceJudgeEnabled()) + ) { return; } if (!this.settings()?.showAlert) { - this.addUmpiresToCourt(courtNo, umpire, serviceJudge); + if (this.serviceJudgeEnabled() && serviceJudge) { + this.addUmpiresToCourt(courtNo, umpire, serviceJudge); + return; + } + this.addUmpireToCourt(courtNo, umpire); return; } const alert = await this.alertController.create({ header: `Pálya ${courtNo}`, cssClass: 'wide', - subHeader: 'Biztos pályára küldöd őket?', - message: `${this.fullnamePipe.transform(umpire)} - ${this.fullnamePipe.transform(serviceJudge)}`, + subHeader: `Biztos pályára küldöd ${serviceJudge ? 'őket' : 'őt'}?`, + message: `${this.fullnamePipe.transform(umpire)} ${serviceJudge ? ' - ' : ''} ${this.fullnamePipe.transform(serviceJudge)}`, buttons: [ { text: 'Nem', @@ -452,7 +491,11 @@ export class Tab1Page { text: 'Igen', role: 'confirm', handler: () => { - this.addUmpiresToCourt(courtNo, umpire, serviceJudge); + if (this.serviceJudgeEnabled() && serviceJudge) { + this.addUmpiresToCourt(courtNo, umpire, serviceJudge); + } else { + this.addUmpireToCourt(courtNo, umpire); + } } } ] @@ -475,4 +518,9 @@ export class Tab1Page { await this.waitingUmpireService.removeByUmpireId(umpire.id); await this.waitingServiceJudgeService.removeByUmpireId(serviceJudge.id); } + + private async addUmpireToCourt(courtNo: number, umpire: Umpire) { + await this.courtUmpireService.save({ courtNo, umpireId: umpire.id }); + await this.waitingUmpireService.removeByUmpireId(umpire.id); + } } diff --git a/src/app/tab3/tab3.page.ts b/src/app/tab3/tab3.page.ts index 9192720..0fa797f 100644 --- a/src/app/tab3/tab3.page.ts +++ b/src/app/tab3/tab3.page.ts @@ -15,6 +15,8 @@ import { import { SettingsService } from '../services/settings-service'; import { CourtUmpireService } from '../services/court.umpire.service'; import { CourtServiceJudgeService } from '../services/court.service.judge.service'; +import { CourtServiceJudge } from 'db'; +import { WaitingServiceJudgesService } from '../services/waiting-service-judges.service'; @Component({ selector: 'app-tab3', @@ -38,6 +40,7 @@ export class Tab3Page { readonly settingsService = inject(SettingsService); readonly courtUmpireService = inject(CourtUmpireService); readonly courtServiceJudgeService = inject(CourtServiceJudgeService); + readonly waitingServiceJudgeService = inject(WaitingServiceJudgesService); readonly settings = this.settingsService.settings; @@ -69,6 +72,17 @@ export class Tab3Page { await this.settingsService.update({ withServiceJudge: event.detail.checked }); + + if (!event.detail.checked) { + this.courtServiceJudgeService.umpires().map((csj: CourtServiceJudge) => { + this.courtServiceJudgeService.delete(csj.id); + }); + + + this.waitingServiceJudgeService.waitingServiceJudges().map((wsj) => { + this.waitingServiceJudgeService.remove(wsj.id); + }); + } } async updateShowAlert(event: CustomEvent): Promise {