mirror of
https://github.com/TomasiDeveloping/PlayerManagement.git
synced 2026-04-16 09:12:20 +00:00
v1.001
This commit is contained in:
parent
3a2dd8ccf8
commit
2bde6c110a
152
CHANGELOG-BETA.md
Normal file
152
CHANGELOG-BETA.md
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
# Changelog – Beta Phase
|
||||||
|
|
||||||
|
All notable changes during the beta phase of PlayerManagement
|
||||||
|
from **0.3.0-beta** to **0.11.0** are documented here.
|
||||||
|
|
||||||
|
⚠️ These versions are no longer actively maintained.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.11.0] – 2025-06-19
|
||||||
|
### ✨ Added
|
||||||
|
- **Squad Management per Player:** You can now add up to **four squads per player**, each with:
|
||||||
|
- Power (in millions)
|
||||||
|
- Position
|
||||||
|
- Type: Tank, Aircraft, Missile, or Mixed
|
||||||
|
- **Visual Enhancements:** Squad types are displayed with custom icons and total power is summarized at the top of the squad card.
|
||||||
|
|
||||||
|
### 🛠️ Fixed
|
||||||
|
- (N/A)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.10.0] – 2025-06-02
|
||||||
|
### ✨ Added
|
||||||
|
- **Team Selection for Desert Storm:** Team A / Team B selectable when creating an entry.
|
||||||
|
- **Team Display in Table:** Selected team is shown in the Desert Storm overview table.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.9.1] – 2025-04-24
|
||||||
|
### ✨ Added
|
||||||
|
- **Number Formatting Input Mask:** Automatic formatting (e.g. `250000` → `250.000`).
|
||||||
|
|
||||||
|
### 🛠️ Fixed
|
||||||
|
- Selected category was not saved correctly when updating a custom event.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.9.0] – 2025-04-23
|
||||||
|
### ✨ Added
|
||||||
|
- Event categories for custom events.
|
||||||
|
- Category-based leaderboards depending on event type.
|
||||||
|
|
||||||
|
### 🛠️ Fixed
|
||||||
|
- Minor display issues in events and leaderboards.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.8.3] – 2025-04-10
|
||||||
|
### ♻️ Changed
|
||||||
|
- Updated all NuGet packages.
|
||||||
|
- Cleaned up Serilog and Seq configuration.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.8.0] – 2025-03-11
|
||||||
|
### ✨ Added
|
||||||
|
- Feedback page with GitHub issue creation.
|
||||||
|
- Screenshot upload support.
|
||||||
|
- Success message with GitHub issue link.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.7.0] – 2025-02-06
|
||||||
|
### ✨ Added
|
||||||
|
- MVP page with calculation formula.
|
||||||
|
- Filters for R4/R5 members.
|
||||||
|
- API key generation.
|
||||||
|
- MVP list API endpoint.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.6.1] – 2025-01-28
|
||||||
|
### 🛠️ Fixed
|
||||||
|
- VS table data display bug.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.6.0-beta] – 2025-01-28
|
||||||
|
### ✨ Added
|
||||||
|
- Pagination for all tables.
|
||||||
|
- Alliance-wide Zombie Siege wave overview.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.5.1-beta] – 2025-01-27
|
||||||
|
### 🛠️ Fixed
|
||||||
|
- Zombie Siege: custom smile for exactly 20 waves.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.5.0-beta] – 2025-01-21
|
||||||
|
### ✨ Added
|
||||||
|
- VS Duel bar chart for player detail view.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.4.1-beta] – 2025-01-21
|
||||||
|
### ✨ Added
|
||||||
|
- Excel import for players.
|
||||||
|
|
||||||
|
### 🛠️ Fixed
|
||||||
|
- Week pipe calculation logic.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.4.0-beta] – 2025-01-20
|
||||||
|
### ✨ Added
|
||||||
|
- Player dismissal page (GUI).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.3.6-beta] – 2025-01-16
|
||||||
|
### ✨ Added
|
||||||
|
- Core player dismissal functionality.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.3.5-beta] – 2025-01-09
|
||||||
|
### 🛠️ Fixed
|
||||||
|
- MVP calculation formula.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.3.4-beta] – 2025-01-07
|
||||||
|
### ✨ Added
|
||||||
|
- Alliance MVP calculation with API support.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.3.3-beta] – 2024-12-17
|
||||||
|
### ✨ Added
|
||||||
|
- Custom event functionality.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.3.2-beta] – 2024-12-03
|
||||||
|
### ✨ Added
|
||||||
|
- Event progress status.
|
||||||
|
- League tiers in VS Duel.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.3.1-beta] – 2024-11-28
|
||||||
|
### ✨ Added
|
||||||
|
- Zombie Siege event.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.3.0-beta] – 2024-11-26
|
||||||
|
### ✨ Added
|
||||||
|
- Initial beta release.
|
||||||
@ -15,6 +15,7 @@ Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "Ui", "Ui\Ui.esproj", "{7716
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{E8BE2EF5-0D8D-4D68-9979-0680938F26DF}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{E8BE2EF5-0D8D-4D68-9979-0680938F26DF}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
CHANGELOG-BETA.md = CHANGELOG-BETA.md
|
||||||
README.md = README.md
|
README.md = README.md
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
|||||||
203
README.md
203
README.md
@ -16,201 +16,22 @@
|
|||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
All notable changes to this project are documented here.
|
All notable changes to PlayerManagement are documented here.
|
||||||
This project is currently in the **Beta Phase**.
|
This section contains **stable (non-beta) releases only**.
|
||||||
|
|
||||||
|
📜 **Beta history:**
|
||||||
|
All beta versions (0.x.x) can be found here →
|
||||||
|
➡️ [`CHANGELOG-BETA.md`](CHANGELOG-BETA.md)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### **[0.11.0]** - *2025-06-19*
|
### **[1.0.1]** – *2025-02-02* 🎉
|
||||||
#### ✨ Added
|
#### ✨ Added
|
||||||
- **Squad Management per Player:** You can now add up to **four squads per player**, each with:
|
- **Zombie Siege – Perfect Checkbox**
|
||||||
- **Power** (in millions)
|
A new **“Perfect” checkbox** is available for each player.
|
||||||
- **Position**
|
When enabled, the survived wave is **automatically set to 20**.
|
||||||
- **Type**: Tank, Aircraft, Missile, or Mixed
|
|
||||||
- **Visual Enhancements:** Squad types are displayed with custom icons and total power is summarized at the top of the squad card.
|
|
||||||
|
|
||||||
🛠️ **Fixed**
|
- **Player Search in Add & Edit Dialogs**
|
||||||
- (N/A)
|
In **Zombie Siege** and **Desert Storm**, players can now be **searched by player name** when **adding or editing** entries.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### **[0.10.0]** - *2025-06-02*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Team Selection for Desert Storm:** You can now assign **Team A** or **Team B** when creating a Desert Storm entry.
|
|
||||||
- **Team Display in Table:** The selected team is now also shown in the Desert Storm overview table.
|
|
||||||
|
|
||||||
🛠️ **Fixed**
|
|
||||||
- (N/A)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.9.1]** - *2025-04-24*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Number Formatting Input Mask:** Numbers are now automatically formatted for better readability (e.g., `250000` → `250.000`).
|
|
||||||
|
|
||||||
🛠️ **Fixed**
|
|
||||||
- Fixed an issue where the selected category was not saved correctly when updating a custom event.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.9.0]** - *2025-04-23*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Event Categories:** Custom events can now be assigned to specific categories.
|
|
||||||
- **Category-Based Leaderboards:** Each category can have its own leaderboard, depending on the event type (e.g., participation-only, points-only, or a combination).
|
|
||||||
|
|
||||||
🛠️ **Fixed**
|
|
||||||
- Minor display issues in the event and leaderboard sections have been resolved.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.8.3]** - *2025-04-10*
|
|
||||||
#### ♻️ Changed
|
|
||||||
- **NuGet Packages:** Updated all dependencies, including Serilog and Seq, to their latest stable versions.
|
|
||||||
- **Logging Setup:** Cleaned up and reorganized the Serilog configuration for improved clarity and maintainability.
|
|
||||||
|
|
||||||
🛠️ **Fixed**
|
|
||||||
- (N/A)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
### **[0.8.0]** - *2025-03-11*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Feedback Page:** Users can now submit feedback, including bug reports and feature requests.
|
|
||||||
- **GitHub Integration:** Feedback is automatically created as a GitHub issue, providing a direct link to track progress.
|
|
||||||
- **Screenshot Upload:** Users can attach a screenshot to better illustrate issues.
|
|
||||||
- **Success Message:** After submission, the form hides, and a success message with the GitHub issue link is displayed.
|
|
||||||
|
|
||||||
🛠️ **Fixed**
|
|
||||||
- (N/A)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.7.0]** - *2025-02-06*
|
|
||||||
#### ✨ Added
|
|
||||||
- **MVP Page**: A new page has been introduced where players can be loaded and a list of MVPs is displayed based on a calculation formula.
|
|
||||||
- **Filter Options**: You can now display the entire alliance, only R4/R5 members, or just players without R5/R4.
|
|
||||||
- **API Key**: A new tab has been added under the alliance section, allowing users to generate an API key to access endpoints and integrate them into their own systems.
|
|
||||||
- **MVP List Endpoint**: The API endpoint for fetching the MVP list is now available.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.6.1]** - *2025-01-28*
|
|
||||||
#### ✨ Added
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- **VS Table**: Resolved a bug that caused incorrect data display.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.6.0-beta]** - *2025-01-28*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Pagination**: Implemented and adjusted for all tables.
|
|
||||||
- **Zombie Siege**: Expanded the table to display all waves survived by the entire alliance.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.5.1-beta]** - *2025-01-27*
|
|
||||||
#### ✨ Added
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *Zombie siege**: Smile customised for exactly 20 waves
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.5.0-beta]** - *2025-01-21*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Player VS Duel**: In the player detail view, the VS points can now be viewed as a bar chart.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.4.1-beta]** - *2025-01-21*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Excel Import**: Players can now be imported via Excel.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- **Week Pipe Logic**: Corrected calculation logic for weekly processing.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.4.0-beta]** - *2025-01-20*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Player Dismissal Page**: A new GUI page was added for dismissing players.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.3.6-beta]** - *2025-01-16*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Player Dismissal Function**: Core dismissal functionality implemented.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.3.5-beta]** - *2025-01-09*
|
|
||||||
#### ✨ Added
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- **MVP Formula**: Corrected MVP calculation formula.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.3.4-beta]** - *2025-01-07*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Alliance MVP Calculation**: Implemented MVP calculation for alliances with API endpoint support.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.3.3-beta]** - *2024-12-17*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Custom Event**: Introduced custom event functionality.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.3.2-beta]** - *2024-12-03*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Event Progress**: "In Progress" status added to events.
|
|
||||||
- **League Details in VS Duel**: Added league tiers (e.g., Silver, Gold, Diamond).
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.3.1-beta]** - *2024-11-28*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Zombie Siege Event**: Introduced a new Zombie Siege event.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **[0.3.0-beta]** - *2024-11-26*
|
|
||||||
#### ✨ Added
|
|
||||||
- **Initial Beta Release**: Core features introduced in the first beta release.
|
|
||||||
|
|
||||||
#### 🛠️ Fixed
|
|
||||||
- *(N/A in the initial release)*
|
|
||||||
|
|||||||
@ -6,8 +6,19 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
<!-- 🔍 Suche oben, volle Breite -->
|
||||||
|
<div class="mb-3 w-75 m-auto">
|
||||||
|
<div class="input-group">
|
||||||
|
<input
|
||||||
|
type="search"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="Search player..."
|
||||||
|
[(ngModel)]="playerSearch"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@for (player of playerParticipated; track player.playerId; let i = $index) {
|
@for (player of filteredPlayers; track player.playerId; let i = $index) {
|
||||||
<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">
|
||||||
<h6 class="mb-4 text-color">{{player.playerName}}</h6>
|
<h6 class="mb-4 text-color">{{player.playerName}}</h6>
|
||||||
|
|||||||
@ -18,6 +18,7 @@ export class DesertStormParticipantsModalComponent implements OnInit {
|
|||||||
|
|
||||||
@Input({required: true}) allianceId!: string;
|
@Input({required: true}) allianceId!: string;
|
||||||
@Input() players: {playerId: string, playerName: string, participated: boolean, registered: boolean, startPlayer: boolean}[] | undefined;
|
@Input() players: {playerId: string, playerName: string, participated: boolean, registered: boolean, startPlayer: boolean}[] | undefined;
|
||||||
|
playerSearch: string = '';
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
if (this.players) {
|
if (this.players) {
|
||||||
@ -27,6 +28,15 @@ export class DesertStormParticipantsModalComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get filteredPlayers() {
|
||||||
|
const q = this.playerSearch.trim().toLowerCase();
|
||||||
|
if (!q) return this.playerParticipated;
|
||||||
|
|
||||||
|
return this.playerParticipated.filter(p =>
|
||||||
|
(p.playerName ?? '').toLowerCase().includes(q)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
getPlayers() {
|
getPlayers() {
|
||||||
this._playerService.getAlliancePlayer(this.allianceId).subscribe({
|
this._playerService.getAlliancePlayer(this.allianceId).subscribe({
|
||||||
next: ((response) => {
|
next: ((response) => {
|
||||||
|
|||||||
@ -6,15 +6,37 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
<!-- 🔍 Suche oben, volle Breite -->
|
||||||
|
<div class="mb-3 w-75 m-auto">
|
||||||
|
<div class="input-group">
|
||||||
|
<input
|
||||||
|
type="search"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="Search player..."
|
||||||
|
[(ngModel)]="playerSearch"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="check-box-container d-flex flex-wrap">
|
<div class="check-box-container d-flex flex-wrap">
|
||||||
@for (player of playerParticipated; track player.playerId) {
|
@for (player of filteredPlayers; track player.playerId) {
|
||||||
<div class="form-check flex-item">
|
<div class="form-check flex-item">
|
||||||
<label class="form-check-label" for="{{player.playerId}}">
|
<div class="d-flex align-items-center justify-content-between">
|
||||||
<span class="text-color">{{player.playerName}}</span>
|
<span class="text-color">{{ player.playerName }}</span>
|
||||||
</label>
|
|
||||||
<select class="form-select" [(ngModel)]="player.survivedWaves">
|
<div class="d-flex align-items-center gap-2">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
class="form-check-input m-0"
|
||||||
|
[checked]="player.survivedWaves === 20"
|
||||||
|
(change)="onPerfectToggle($event, player)"
|
||||||
|
/>
|
||||||
|
<span class="small text-warning">Perfect</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<select class="form-select mt-1" [(ngModel)]="player.survivedWaves">
|
||||||
@for (wave of waves; track wave) {
|
@for (wave of waves; track wave) {
|
||||||
<option [ngValue]="wave">{{wave}}</option>
|
<option [ngValue]="wave">{{ wave }}</option>
|
||||||
}
|
}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -19,6 +19,17 @@ export class ZombieSiegeParticipantsModalComponent implements OnInit {
|
|||||||
|
|
||||||
@Input() players: { playerId: string, playerName: string, survivedWaves: number; }[] | undefined;
|
@Input() players: { playerId: string, playerName: string, survivedWaves: number; }[] | undefined;
|
||||||
@Input({required: true}) allianceId!: string;
|
@Input({required: true}) allianceId!: string;
|
||||||
|
playerSearch: string = '';
|
||||||
|
|
||||||
|
get filteredPlayers() {
|
||||||
|
const q = this.playerSearch.trim().toLowerCase();
|
||||||
|
if (!q) return this.playerParticipated;
|
||||||
|
|
||||||
|
return this.playerParticipated.filter(p =>
|
||||||
|
(p.playerName ?? '').toLowerCase().includes(q)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
if (this.players) {
|
if (this.players) {
|
||||||
@ -42,4 +53,14 @@ export class ZombieSiegeParticipantsModalComponent implements OnInit {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onPerfectToggle(event: Event, player: any) {
|
||||||
|
const checked = (event.target as HTMLInputElement).checked;
|
||||||
|
|
||||||
|
if (checked) {
|
||||||
|
player.survivedWaves = 20;
|
||||||
|
} else {
|
||||||
|
player.survivedWaves = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -65,7 +65,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
<!-- No Squads -->
|
<!-- No Squads -->
|
||||||
@if (!squads?.length) {
|
@if (!squads.length) {
|
||||||
<div class="text-muted text-center">
|
<div class="text-muted text-center">
|
||||||
No squads available.
|
No squads available.
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user