feat(umpires): move umpires between any lists

This commit is contained in:
2026-05-31 09:52:11 +02:00
parent d317ce6179
commit 12871ef7d2
3 changed files with 58 additions and 31 deletions
@@ -45,4 +45,17 @@ export class CourtServiceJudgeService {
async delete(id: number): Promise<void> { async delete(id: number): Promise<void> {
await db.courtServiceJudges.delete(id); await db.courtServiceJudges.delete(id);
} }
async removeByUmpireId(umpireId: number): Promise<void> {
const item = await db.courtServiceJudges
.where('umpireId')
.equals(umpireId)
.first();
if (!item?.id) {
return;
}
await db.courtServiceJudges.delete(item.id);
}
} }
+17 -4
View File
@@ -35,9 +35,8 @@
cdkDropList cdkDropList
[id]="`court-umpire-${$index + 1}`" [id]="`court-umpire-${$index + 1}`"
cdkDropListSortingDisabled cdkDropListSortingDisabled
[cdkDropListData]="waitingServiceJudges()" [cdkDropListData]="courtUmpires()"
(cdkDropListDropped)="dropToUmpire($event, $index + 1)" (cdkDropListDropped)="dropToUmpire($event, $index + 1)">
[cdkDropListConnectedTo]="['list-on-rest', 'list-waiting-umpires']">
@if (umpireByCourt().get($index + 1); as umpire) { @if (umpireByCourt().get($index + 1); as umpire) {
<ion-item cdkDrag [cdkDragData]="umpire"> <ion-item cdkDrag [cdkDragData]="umpire">
@@ -48,7 +47,21 @@
</ion-list> </ion-list>
</ion-col> </ion-col>
<ion-col> <ion-col>
<ion-item [lines]="'none'"> aaa </ion-item> <ion-list
[lines]="'none'"
cdkDropList
[id]="`court-service-judge-${$index + 1}`"
cdkDropListSortingDisabled
[cdkDropListData]="courtServiceJudges()"
(cdkDropListDropped)="dropToServiceJudge($event, $index + 1)">
@if (serviceJudgeByCourt().get($index + 1); as umpire) {
<ion-item cdkDrag [cdkDragData]="umpire">
<ion-label>{{ umpire | fullname }}</ion-label>
</ion-item>
}
</ion-list>
</ion-col> </ion-col>
</ion-row> </ion-row>
} }
+28 -27
View File
@@ -261,18 +261,7 @@ export class Tab1Page {
} else { } else {
const comingFrom = event.previousContainer.id; const comingFrom = event.previousContainer.id;
const umpireToMove = event.item.data; const umpireToMove = event.item.data;
if ('list-waiting-service-judges' === comingFrom) { this.removeFromOriginalPlace(umpireToMove, comingFrom);
// Remove from waiting service judges
this.waitingServiceJudgeService.removeByUmpireId(umpireToMove.id);
}
if ('list-waiting-umpires' === comingFrom) {
this.waitingUmpireService.removeByUmpireId(umpireToMove.id);
}
if (comingFrom.startsWith('court-umpire')) {
this.courtUmpireService.removeByUmpireId(umpireToMove.id);
}
} }
} }
@@ -284,13 +273,7 @@ export class Tab1Page {
const umpireToMove = event.item.data; const umpireToMove = event.item.data;
this.waitingServiceJudgeService.add(umpireToMove.id); this.waitingServiceJudgeService.add(umpireToMove.id);
if ('list-waiting-umpires' === comingFrom) { this.removeFromOriginalPlace(umpireToMove, comingFrom);
this.waitingUmpireService.removeByUmpireId(umpireToMove.id);
}
if (comingFrom.startsWith('court-umpire')) {
this.courtUmpireService.removeByUmpireId(umpireToMove.id);
}
} }
} }
@@ -308,14 +291,7 @@ export class Tab1Page {
const umpireToMove = event.item.data; const umpireToMove = event.item.data;
this.waitingUmpireService.add(umpireToMove.id); this.waitingUmpireService.add(umpireToMove.id);
if ('list-waiting-service-judges' === comingFrom) { this.removeFromOriginalPlace(umpireToMove, comingFrom);
// Remove from waiting service judges
this.waitingServiceJudgeService.removeByUmpireId(umpireToMove.id);
}
if (comingFrom.startsWith('court-umpire')) {
this.courtUmpireService.removeByUmpireId(umpireToMove.id);
}
} }
} }
@@ -326,6 +302,23 @@ export class Tab1Page {
const umpireToMove = event.item.data; const umpireToMove = event.item.data;
this.courtUmpireService.save({ umpireId: umpireToMove.id, courtNo }); this.courtUmpireService.save({ umpireId: umpireToMove.id, courtNo });
this.removeFromOriginalPlace(umpireToMove, comingFrom);
}
dropToServiceJudge(event: CdkDragDrop<Umpire[]>, courtNo: number) {
// TODO: stop dropping if there is already another umpire
const comingFrom = event.previousContainer.id;
const umpireToMove = event.item.data;
this.courtServiceJudgeService.save({ umpireId: umpireToMove.id, courtNo });
this.removeFromOriginalPlace(umpireToMove, comingFrom);
}
private removeFromOriginalPlace(
umpireToMove: Umpire,
comingFrom: string
): void {
if ('list-waiting-service-judges' === comingFrom) { if ('list-waiting-service-judges' === comingFrom) {
this.waitingServiceJudgeService.removeByUmpireId(umpireToMove.id); this.waitingServiceJudgeService.removeByUmpireId(umpireToMove.id);
} }
@@ -333,5 +326,13 @@ export class Tab1Page {
if ('list-waiting-umpires' === comingFrom) { if ('list-waiting-umpires' === comingFrom) {
this.waitingUmpireService.removeByUmpireId(umpireToMove.id); this.waitingUmpireService.removeByUmpireId(umpireToMove.id);
} }
if (comingFrom.startsWith('court-umpire')) {
this.courtUmpireService.removeByUmpireId(umpireToMove.id);
}
if (comingFrom.startsWith('court-service-judge')) {
this.courtServiceJudgeService.removeByUmpireId(umpireToMove.id);
}
} }
} }