This commit is contained in:
Tomasi - Developing 2026-02-09 13:49:42 +01:00
parent 1a4550cdc1
commit 463f526fe7
3 changed files with 80 additions and 11 deletions

View File

@ -25,6 +25,17 @@ All beta versions (0.x.x) can be found here →
--- ---
### **[1.1.0]** *2026-02-09* 🚀
#### ✨ Added
- **Desert Storm Player Sorting in Info Dialog**
Players can now be **sorted directly** in the **Desert Storm info dialog**:
- Participated
- Start Player Did not participate
- Substitute Player Did not participate
This makes it easier to **track participation** and quickly see who was active and who missed Desert Storm.
### **[1.0.1]** *2026-02-02* 🎉 ### **[1.0.1]** *2026-02-02* 🎉
#### ✨ Added #### ✨ Added
- **Zombie Siege Perfect Checkbox** - **Zombie Siege Perfect Checkbox**

View File

@ -16,29 +16,61 @@
</h5> </h5>
<div class="card-body"> <div class="card-body">
<h5 class="card-title">Opponent: <span class="text-primary">{{desertStormDetail.opponentName}}</span></h5> <h5 class="card-title">Opponent: <span class="text-primary">{{desertStormDetail.opponentName}}</span></h5>
<p class="card-text">Team: <span class="text-primary">{{desertStormDetail.team}}</span></p> <p class="card-text mb-1">Team: <span class="text-primary">{{desertStormDetail.team}}</span></p>
<p class="card-text">Server: <span class="text-primary">{{desertStormDetail.opponentServer}}</span></p> <p class="card-text mb-1">Server: <span class="text-primary">{{desertStormDetail.opponentServer}}</span></p>
<p class="card-text">Opponent participants: <span class="text-primary">{{desertStormDetail.opposingParticipants}}</span></p> <p class="card-text mb-1">Opponent participants: <span class="text-primary">{{desertStormDetail.opposingParticipants}}</span></p>
<p class="card-text">Allianz participants: <span class="text-primary">{{desertStormDetail.participants | number}}</span></p> <p class="card-text mb-1">Allianz participants: <span class="text-primary">{{desertStormDetail.participants | number}}</span></p>
<hr> <hr>
<div> <div>
<p class="card-text">Creator: <span class="text-primary">{{desertStormDetail.createdBy}}</span></p> <p class="card-text mb-1">Creator: <span class="text-primary">{{desertStormDetail.createdBy}}</span></p>
@if (desertStormDetail.modifiedOn) { @if (desertStormDetail.modifiedOn) {
<p class="card-text">Modified: <span class="text-primary">{{desertStormDetail.modifiedOn | date: 'dd.MM.yyyy HH:mm'}}</span> <p class="card-text mb-1">Modified: <span class="text-primary">{{desertStormDetail.modifiedOn | date: 'dd.MM.yyyy HH:mm'}}</span>
by <span class="text-primary">{{desertStormDetail.modifiedBy}}</span></p> by <span class="text-primary">{{desertStormDetail.modifiedBy}}</span></p>
} }
</div> </div>
<hr> <hr>
<div class="d-flex justify-content-between"> <div class="d-flex justify-content-between">
<p>Registered: <span class="text-primary">{{registeredPlayers}}</span></p> <p class="mb-1">Registered: <span class="text-primary">{{registeredPlayers}}</span></p>
<p>Start player: <span class="text-primary">{{startedPlayers}}</span></p> <p class="mb-1">Start player: <span class="text-primary">{{startedPlayers}}</span></p>
<p>Participated: <span class="text-primary">{{participatedPlayers}}</span></p> <p class="mb-1">Participated: <span class="text-primary">{{participatedPlayers}}</span></p>
</div> </div>
<hr> <hr>
<p class="card-text text-center">Players</p> <p class="card-text text-center mb-1">Players</p>
<div class="d-flex justify-content-center gap-2 mb-3 flex-wrap">
<button type="button"
class="btn btn-sm rounded-pill px-3"
[ngClass]="filterType === 'ALL' ? 'btn-dark' : 'btn-outline-dark'"
(click)="filterType='ALL'">
All
</button>
<button type="button"
class="btn btn-sm rounded-pill px-3"
[ngClass]="filterType === 'PARTICIPATED' ? 'btn-success' : 'btn-outline-success'"
(click)="filterType='PARTICIPATED'">
Participated
</button>
<button type="button"
class="btn btn-sm rounded-pill px-3"
[ngClass]="filterType === 'START_NOT_PARTICIPATED' ? 'btn-danger' : 'btn-outline-danger'"
(click)="filterType='START_NOT_PARTICIPATED'">
Starter · Not participated
</button>
<button type="button"
class="btn btn-sm rounded-pill px-3"
[ngClass]="filterType === 'SUB_NOT_PARTICIPATED' ? 'btn-warning' : 'btn-outline-warning'"
(click)="filterType='SUB_NOT_PARTICIPATED'">
Substitute · Not participated
</button>
</div>
<div ngbScrollSpy class="bg-light p-3 rounded-2 mb-3" style="height: 200px"> <div ngbScrollSpy class="bg-light p-3 rounded-2 mb-3" style="height: 200px">
<div class="row"> <div class="row">
@for (player of desertStormDetail.desertStormParticipants; track player.id; let i = $index) { @for (player of filteredPlayers; track player.id; let i = $index) {
@if (player.registered) { @if (player.registered) {
<div class="col-12 col-md-6 mb-4"> <div class="col-12 col-md-6 mb-4">
<div class="d-flex flex-column align-items-center border p-3" <div class="d-flex flex-column align-items-center border p-3"

View File

@ -18,6 +18,32 @@ export class DesertStormDetailComponent implements OnInit {
public registeredPlayers: number = 0; public registeredPlayers: number = 0;
public participatedPlayers: number = 0; public participatedPlayers: number = 0;
public startedPlayers: number = 0; public startedPlayers: number = 0;
filterType: 'ALL' | 'PARTICIPATED' | 'START_NOT_PARTICIPATED' | 'SUB_NOT_PARTICIPATED' = 'ALL';
get filteredPlayers() {
if (this.desertStormDetail?.desertStormParticipants) {
return this.desertStormDetail.desertStormParticipants.filter(player => {
if (!player.registered) return false;
switch (this.filterType) {
case 'PARTICIPATED':
return player.participated;
case 'START_NOT_PARTICIPATED':
return player.startPlayer && !player.participated;
case 'SUB_NOT_PARTICIPATED':
return !player.startPlayer && !player.participated;
default:
return true;
}
});
}
return [];
}
ngOnInit() { ngOnInit() {