mirror of
https://github.com/TomasiDeveloping/PlayerManagement.git
synced 2026-04-16 17:22:21 +00:00
Compare commits
No commits in common. "674ed9e8e8e64b73c8682901aea3173a83c101ae" and "463f526fe74bc37185ce053f2435b8ecae3aee06" have entirely different histories.
674ed9e8e8
...
463f526fe7
@ -1,12 +1,17 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Asp.Versioning.Mvc" />
|
||||
<PackageReference Include="AspNetCore.HealthChecks.SqlServer" />
|
||||
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" />
|
||||
<PackageReference Include="Azure.Identity" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
using Api.Helpers;
|
||||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||
using Microsoft.OpenApi;
|
||||
using Microsoft.OpenApi.Models;
|
||||
|
||||
namespace Api.Configurations;
|
||||
|
||||
@ -30,19 +30,34 @@ public static class SwaggerExtension
|
||||
});
|
||||
|
||||
// Configures Bearer token authentication for Swagger
|
||||
options.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, new OpenApiSecurityScheme
|
||||
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
|
||||
{
|
||||
Description = "JWT Authorization header using the Bearer scheme.",
|
||||
Description = @"JWT Authorization header using the Bearer scheme.
|
||||
Enter 'Bearer' [space] and then your token in the text input below.
|
||||
Example: 'Bearer 12345abcdef'",
|
||||
Name = "Authorization",
|
||||
BearerFormat = "JWT",
|
||||
In = ParameterLocation.Header,
|
||||
Type = SecuritySchemeType.Http,
|
||||
Type = SecuritySchemeType.ApiKey,
|
||||
Scheme = JwtBearerDefaults.AuthenticationScheme
|
||||
});
|
||||
|
||||
// Adds security requirements for Bearer token authentication
|
||||
options.AddSecurityRequirement(document => new OpenApiSecurityRequirement
|
||||
options.AddSecurityRequirement(new OpenApiSecurityRequirement
|
||||
{
|
||||
[new OpenApiSecuritySchemeReference(JwtBearerDefaults.AuthenticationScheme, document)] = []
|
||||
{
|
||||
new OpenApiSecurityScheme
|
||||
{
|
||||
Reference = new OpenApiReference
|
||||
{
|
||||
Type = ReferenceType.SecurityScheme,
|
||||
Id = JwtBearerDefaults.AuthenticationScheme
|
||||
},
|
||||
Scheme = "Oauth2",
|
||||
Name = JwtBearerDefaults.AuthenticationScheme,
|
||||
In = ParameterLocation.Header
|
||||
},
|
||||
new List<string>()
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
using Microsoft.OpenApi;
|
||||
using Microsoft.OpenApi.Models;
|
||||
using Swashbuckle.AspNetCore.SwaggerGen;
|
||||
|
||||
namespace Api.Helpers;
|
||||
|
||||
@ -3,7 +3,6 @@ using Api.Middleware;
|
||||
using Application;
|
||||
using Database;
|
||||
using HealthChecks.UI.Client;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
||||
using Serilog;
|
||||
using Utilities.Classes;
|
||||
@ -25,6 +24,7 @@ try
|
||||
.WriteTo.File(logPath, rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true);
|
||||
});
|
||||
|
||||
|
||||
builder.Services.AddDatabase(builder.Configuration);
|
||||
builder.Services.AddApplication();
|
||||
|
||||
@ -54,8 +54,6 @@ try
|
||||
app.UseStaticFiles();
|
||||
app.UseDefaultFiles();
|
||||
|
||||
app.MapOpenApi();
|
||||
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI();
|
||||
|
||||
|
||||
@ -1,5 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="DataTransferObjects\Alliance\" />
|
||||
<Folder Include="Classes\" />
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
using Application.Helpers;
|
||||
using System.Reflection;
|
||||
using Application.Helpers;
|
||||
using Application.Interfaces;
|
||||
using Application.Profiles;
|
||||
using Application.Repositories;
|
||||
using Application.Services;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
@ -13,7 +13,7 @@ public static class ApplicationDependencyInjection
|
||||
{
|
||||
public static IServiceCollection AddApplication(this IServiceCollection services)
|
||||
{
|
||||
services.AddAutoMapper(_ => {}, typeof(AllianceProfile));
|
||||
services.AddAutoMapper(Assembly.GetExecutingAssembly());
|
||||
|
||||
services.AddScoped<IAllianceRepository, AllianceRepository>();
|
||||
services.AddScoped<IAdmonitionRepository, AdmonitionRepository>();
|
||||
|
||||
@ -1,5 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.DataProtection" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity" />
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
@ -3,33 +3,37 @@
|
||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageVersion Include="MailKit" Version="4.15.0" />
|
||||
<PackageVersion Include="MailKit" Version="4.11.0" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Http.Features" Version="5.0.17" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.3" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.3" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.3" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.4" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.4" />
|
||||
<PackageVersion Include="Octokit" Version="14.0.0" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.DataProtection" Version="10.0.3" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity" Version="2.3.9" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="10.0.3" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.3" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.3" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.3" />
|
||||
<PackageVersion Include="AutoMapper" Version="16.0.0" />
|
||||
<PackageVersion Include="ExcelDataReader" Version="3.8.0" />
|
||||
<PackageVersion Include="ExcelDataReader.DataSet" Version="3.8.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.3" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="10.1.3" />
|
||||
<PackageVersion Include="Asp.Versioning.Mvc" Version="8.1.1" />
|
||||
|
||||
<PackageVersion Include="Microsoft.AspNetCore.DataProtection" Version="9.0.4" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity" Version="2.3.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="9.0.4" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.4" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.4" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.4" />
|
||||
|
||||
<PackageVersion Include="AutoMapper" Version="14.0.0" />
|
||||
<PackageVersion Include="ExcelDataReader" Version="3.7.0" />
|
||||
<PackageVersion Include="ExcelDataReader.DataSet" Version="3.7.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.4" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="8.1.1" />
|
||||
|
||||
<PackageVersion Include="Asp.Versioning.Mvc" Version="8.1.0" />
|
||||
<PackageVersion Include="AspNetCore.HealthChecks.SqlServer" Version="9.0.0" />
|
||||
<PackageVersion Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
|
||||
<PackageVersion Include="Azure.Identity" Version="1.17.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.3" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.3" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="10.0.3" />
|
||||
<PackageVersion Include="Serilog" Version="4.3.1" />
|
||||
<PackageVersion Include="Serilog.AspNetCore" Version="10.0.0" />
|
||||
<PackageVersion Include="Azure.Identity" Version="1.13.2" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.4" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.4" />
|
||||
|
||||
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="9.0.4" />
|
||||
<PackageVersion Include="Serilog" Version="4.2.0" />
|
||||
<PackageVersion Include="Serilog.AspNetCore" Version="9.0.0" />
|
||||
<PackageVersion Include="Serilog.Sinks.Seq" Version="9.0.0" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="10.1.3" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="8.1.1" />
|
||||
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
10
README.md
10
README.md
@ -25,16 +25,6 @@ All beta versions (0.x.x) can be found here →
|
||||
|
||||
---
|
||||
|
||||
### **[1.2.0]** – *2026-02-17* 🚀
|
||||
#### 🛠 Changed
|
||||
- **Platform Upgrade**
|
||||
The application has been upgraded to the latest platform versions:
|
||||
- Backend: **.NET 10**
|
||||
- Frontend: **Angular 21**
|
||||
|
||||
These upgrades improve performance, security, and future compatibility with upcoming features.
|
||||
|
||||
|
||||
### **[1.1.0]** – *2026-02-09* 🚀
|
||||
#### ✨ Added
|
||||
- **Desert Storm – Player Sorting in Info Dialog**
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
"prefix": "app",
|
||||
"architect": {
|
||||
"build": {
|
||||
"builder": "@angular/build:application",
|
||||
"builder": "@angular-devkit/build-angular:application",
|
||||
"options": {
|
||||
"outputPath": "dist/ui",
|
||||
"index": "src/index.html",
|
||||
@ -75,7 +75,7 @@
|
||||
"defaultConfiguration": "production"
|
||||
},
|
||||
"serve": {
|
||||
"builder": "@angular/build:dev-server",
|
||||
"builder": "@angular-devkit/build-angular:dev-server",
|
||||
"configurations": {
|
||||
"production": {
|
||||
"buildTarget": "Ui:build:production"
|
||||
@ -87,13 +87,13 @@
|
||||
"defaultConfiguration": "development"
|
||||
},
|
||||
"extract-i18n": {
|
||||
"builder": "@angular/build:extract-i18n",
|
||||
"builder": "@angular-devkit/build-angular:extract-i18n",
|
||||
"options": {
|
||||
"buildTarget": "Ui:build"
|
||||
}
|
||||
},
|
||||
"test": {
|
||||
"builder": "@angular/build:karma",
|
||||
"builder": "@angular-devkit/build-angular:karma",
|
||||
"options": {
|
||||
"polyfills": [
|
||||
"zone.js",
|
||||
@ -114,31 +114,5 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"schematics": {
|
||||
"@schematics/angular:component": {
|
||||
"type": "component"
|
||||
},
|
||||
"@schematics/angular:directive": {
|
||||
"type": "directive"
|
||||
},
|
||||
"@schematics/angular:service": {
|
||||
"type": "service"
|
||||
},
|
||||
"@schematics/angular:guard": {
|
||||
"typeSeparator": "."
|
||||
},
|
||||
"@schematics/angular:interceptor": {
|
||||
"typeSeparator": "."
|
||||
},
|
||||
"@schematics/angular:module": {
|
||||
"typeSeparator": "."
|
||||
},
|
||||
"@schematics/angular:pipe": {
|
||||
"typeSeparator": "."
|
||||
},
|
||||
"@schematics/angular:resolver": {
|
||||
"typeSeparator": "."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
module.exports = function (config) {
|
||||
module.exports = function (config) {
|
||||
config.set({
|
||||
basePath: '',
|
||||
frameworks: ['jasmine', '@angular-devkit/build-angular'],
|
||||
@ -7,7 +7,7 @@ module.exports = function (config) {
|
||||
require('karma-chrome-launcher'),
|
||||
require('karma-jasmine-html-reporter'),
|
||||
require('karma-coverage'),
|
||||
|
||||
require('@angular-devkit/build-angular/plugins/karma')
|
||||
],
|
||||
client: {
|
||||
jasmine: {
|
||||
|
||||
13913
Ui/package-lock.json
generated
13913
Ui/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ui",
|
||||
"version": "1.2.0",
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "ng serve --host=127.0.0.1",
|
||||
@ -10,46 +10,46 @@
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "^21.1.4",
|
||||
"@angular/common": "^21.1.4",
|
||||
"@angular/compiler": "^21.1.4",
|
||||
"@angular/core": "^21.1.4",
|
||||
"@angular/forms": "^21.1.4",
|
||||
"@angular/platform-browser": "^21.1.4",
|
||||
"@angular/platform-browser-dynamic": "^21.1.4",
|
||||
"@angular/router": "^21.1.4",
|
||||
"@angular/animations": "^18.2.7",
|
||||
"@angular/common": "^18.2.7",
|
||||
"@angular/compiler": "^18.2.7",
|
||||
"@angular/core": "^18.2.7",
|
||||
"@angular/forms": "^18.2.7",
|
||||
"@angular/platform-browser": "^18.2.7",
|
||||
"@angular/platform-browser-dynamic": "^18.2.7",
|
||||
"@angular/router": "^18.2.7",
|
||||
"@auth0/angular-jwt": "^5.2.0",
|
||||
"@ng-bootstrap/ng-bootstrap": "^20.0.0",
|
||||
"@ng-bootstrap/ng-bootstrap": "^17.0.1",
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"@sweetalert2/theme-dark": "^5.0.27",
|
||||
"ag-charts-angular": "^13.1.0",
|
||||
"bootstrap": "^5.3.8",
|
||||
"bootstrap-icons": "^1.13.1",
|
||||
"bootswatch": "^5.3.8",
|
||||
"@sweetalert2/theme-dark": "^5.0.18",
|
||||
"ag-charts-angular": "^11.0.4",
|
||||
"bootstrap": "^5.3.2",
|
||||
"bootstrap-icons": "^1.11.3",
|
||||
"bootswatch": "^5.3.3",
|
||||
"jest-editor-support": "*",
|
||||
"moment": "^2.30.1",
|
||||
"ngx-countup": "^21.0.0",
|
||||
"ngx-mask": "^21.0.1",
|
||||
"ngx-countup": "^13.2.0",
|
||||
"ngx-mask": "^19.0.6",
|
||||
"ngx-pagination": "^6.0.3",
|
||||
"ngx-spinner": "^21.0.0",
|
||||
"ngx-toastr": "^20.0.5",
|
||||
"ngx-spinner": "^17.0.0",
|
||||
"ngx-toastr": "^19.0.0",
|
||||
"rxjs": "~7.8.0",
|
||||
"sweetalert2": "^11.26.18",
|
||||
"sweetalert2": "^11.22.4",
|
||||
"tslib": "^2.3.0",
|
||||
"zone.js": "~0.16.0"
|
||||
"zone.js": "~0.14.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular/build": "^21.1.4",
|
||||
"@angular/cli": "^21.1.4",
|
||||
"@angular/compiler-cli": "^21.1.4",
|
||||
"@angular/localize": "^21.1.4",
|
||||
"@types/jasmine": "~6.0.0",
|
||||
"jasmine-core": "~6.0.1",
|
||||
"@angular-devkit/build-angular": "^18.2.8",
|
||||
"@angular/cli": "^18.2.8",
|
||||
"@angular/compiler-cli": "^18.2.7",
|
||||
"@angular/localize": "^18.2.7",
|
||||
"@types/jasmine": "~5.1.0",
|
||||
"jasmine-core": "~5.3.0",
|
||||
"karma": "~6.4.0",
|
||||
"karma-chrome-launcher": "~3.2.0",
|
||||
"karma-coverage": "~2.2.0",
|
||||
"karma-jasmine": "~5.1.0",
|
||||
"karma-jasmine-html-reporter": "~2.2.0",
|
||||
"typescript": "~5.9.3"
|
||||
"karma-jasmine-html-reporter": "~2.1.0",
|
||||
"typescript": "~5.5.4"
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,8 +9,7 @@ import {environment} from "../../../environments/environment";
|
||||
@Component({
|
||||
selector: 'app-email-confirmation',
|
||||
templateUrl: './email-confirmation.component.html',
|
||||
styleUrl: './email-confirmation.component.css',
|
||||
standalone: false
|
||||
styleUrl: './email-confirmation.component.css'
|
||||
})
|
||||
export class EmailConfirmationComponent implements OnInit {
|
||||
|
||||
|
||||
@ -9,8 +9,7 @@ import {environment} from "../../../environments/environment";
|
||||
@Component({
|
||||
selector: 'app-forgot-password',
|
||||
templateUrl: './forgot-password.component.html',
|
||||
styleUrl: './forgot-password.component.css',
|
||||
standalone: false
|
||||
styleUrl: './forgot-password.component.css'
|
||||
})
|
||||
export class ForgotPasswordComponent {
|
||||
|
||||
|
||||
@ -80,15 +80,13 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@if (allianceCount !== null) {
|
||||
<div class="alliance-counter">
|
||||
<div class="alliance-counter" *ngIf="allianceCount !== null">
|
||||
<span>Currently </span>
|
||||
<span class="count">
|
||||
<span [countUp]="allianceCount"></span>
|
||||
</span>
|
||||
<span> alliances use the tool</span>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<footer class="footer d-flex flex-wrap justify-content-center justify-content-md-between align-items-center px-3 py-3 mt-auto shadow-sm gap-2 small text-center">
|
||||
@ -96,4 +94,4 @@
|
||||
<span>Version: <span (click)="onVersion()" class="text-info" style="cursor: pointer">{{version}}</span></span>
|
||||
<span><a routerLink="/imprint" class="text-info text-decoration-none">Legal Notice / Privacy</a></span>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -12,8 +12,7 @@ import {StatService} from "../../services/stat.service";
|
||||
@Component({
|
||||
selector: 'app-login',
|
||||
templateUrl: './login.component.html',
|
||||
styleUrl: './login.component.css',
|
||||
standalone: false
|
||||
styleUrl: './login.component.css'
|
||||
})
|
||||
export class LoginComponent implements OnInit {
|
||||
|
||||
|
||||
@ -91,14 +91,10 @@
|
||||
class="input-group-text eye-icon bi"></i>
|
||||
</span>
|
||||
<!-- Password Invalid Feedback -->
|
||||
@if (f['password'].invalid && (f['password'].dirty || !f['password'].untouched )) {
|
||||
<div
|
||||
<div *ngIf="f['password'].invalid && (f['password'].dirty || !f['password'].untouched )"
|
||||
class="invalid-feedback">
|
||||
@if (f['password'].hasError('required')) {
|
||||
<p>Password is required</p>
|
||||
}
|
||||
@if (!f['password'].hasError('required')) {
|
||||
<div>
|
||||
<p *ngIf="f['password'].hasError('required')">Password is required</p>
|
||||
<div *ngIf="!f['password'].hasError('required')">
|
||||
<div [ngClass]="f['password'].hasError('hasNumber') ? 'text-danger': 'text-success'">
|
||||
<i
|
||||
[ngClass]="f['password'].hasError('hasNumber') ? 'bi bi-x-square-fill' : 'bi bi-check-square-fill'"></i>
|
||||
@ -125,9 +121,7 @@
|
||||
Must contain special characters
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="form-floating is-invalid mb-3">
|
||||
@ -140,22 +134,16 @@
|
||||
<label for="confirmPassword">Confirm Password</label>
|
||||
</div>
|
||||
<!-- Confirm Password Invalid Feedback -->
|
||||
@if (f['confirmPassword'].invalid && (f['confirmPassword'].dirty || !f['confirmPassword'].untouched )) {
|
||||
<div
|
||||
<div *ngIf="f['confirmPassword'].invalid && (f['confirmPassword'].dirty || !f['confirmPassword'].untouched )"
|
||||
class="invalid-feedback">
|
||||
@if (f['confirmPassword'].hasError('required')) {
|
||||
<p>Confirmation is required</p>
|
||||
}
|
||||
@if (f['confirmPassword'].hasError('passwordMismatch')) {
|
||||
<p *ngIf="f['confirmPassword'].hasError('required')">Confirmation is required</p>
|
||||
<p
|
||||
>Passwords do not match</p>
|
||||
}
|
||||
*ngIf="f['confirmPassword'].hasError('passwordMismatch')">Passwords do not match</p>
|
||||
</div>
|
||||
}
|
||||
|
||||
<div class="d-grid gap-2 col-6 mx-auto">
|
||||
<button [disabled]="registerForm.invalid" type="submit" class="btn btn-success">Register</button>
|
||||
</div>
|
||||
</form>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -10,8 +10,7 @@ import {environment} from "../../../environments/environment";
|
||||
@Component({
|
||||
selector: 'app-register',
|
||||
templateUrl: './register.component.html',
|
||||
styleUrl: './register.component.css',
|
||||
standalone: false
|
||||
styleUrl: './register.component.css'
|
||||
})
|
||||
export class RegisterComponent implements OnInit {
|
||||
|
||||
|
||||
@ -51,13 +51,9 @@
|
||||
<span (click)="isInputText = !isInputText" class="input-group-text eye-icon">
|
||||
<i [ngClass]="isInputText ? 'bi-eye-slash-fill' : 'bi-eye-fill'" class="bi"></i>
|
||||
</span>
|
||||
@if (password?.hasError && (password?.dirty || !password?.untouched)) {
|
||||
<div class="invalid-feedback">
|
||||
@if (password?.hasError('required')) {
|
||||
<p>Password is required</p>
|
||||
}
|
||||
@if (!password?.hasError('required')) {
|
||||
<div>
|
||||
<div *ngIf="password?.hasError && (password?.dirty || !password?.untouched)" class="invalid-feedback">
|
||||
<p *ngIf="password?.hasError('required')">Password is required</p>
|
||||
<div *ngIf="!password?.hasError('required')">
|
||||
<div [ngClass]="password?.hasError('hasNumber') ? 'text-danger': 'text-success'">
|
||||
<i [ngClass]="password?.hasError('hasNumber') ? 'bi bi-x-square-fill' : 'bi bi-check-square-fill'"></i>
|
||||
Must have at least 1 number!
|
||||
@ -80,9 +76,7 @@
|
||||
Must contain at least 1 special character!
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -95,16 +89,10 @@
|
||||
<span (click)="isInputText = !isInputText" class="input-group-text eye-icon">
|
||||
<i [ngClass]="isInputText ? 'bi-eye-slash-fill' : 'bi-eye-fill'" class="bi"></i>
|
||||
</span>
|
||||
@if (confirmPassword?.errors && (confirmPassword?.dirty || !confirmPassword?.untouched)) {
|
||||
<div class="invalid-feedback">
|
||||
@if (confirmPassword?.hasError('required')) {
|
||||
<p>Repeat password is required</p>
|
||||
}
|
||||
@if (confirmPassword?.hasError('passwordMismatch')) {
|
||||
<p>Passwords do not match</p>
|
||||
}
|
||||
<div *ngIf="confirmPassword?.errors && (confirmPassword?.dirty || !confirmPassword?.untouched)" class="invalid-feedback">
|
||||
<p *ngIf="confirmPassword?.hasError('required')">Repeat password is required</p>
|
||||
<p *ngIf="confirmPassword?.hasError('passwordMismatch')">Passwords do not match</p>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -116,4 +104,4 @@
|
||||
</div>
|
||||
}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -9,8 +9,7 @@ import {ResetPasswordModel} from "../../models/resetPassword.model";
|
||||
@Component({
|
||||
selector: 'app-reset-password',
|
||||
templateUrl: './reset-password.component.html',
|
||||
styleUrl: './reset-password.component.css',
|
||||
standalone: false
|
||||
styleUrl: './reset-password.component.css'
|
||||
})
|
||||
export class ResetPasswordComponent implements OnInit {
|
||||
|
||||
|
||||
@ -98,14 +98,10 @@
|
||||
class="input-group-text eye-icon bi"></i>
|
||||
</span>
|
||||
<!-- Password Invalid Feedback -->
|
||||
@if (f['password'].invalid && (f['password'].dirty || !f['password'].untouched )) {
|
||||
<div
|
||||
<div *ngIf="f['password'].invalid && (f['password'].dirty || !f['password'].untouched )"
|
||||
class="invalid-feedback">
|
||||
@if (f['password'].hasError('required')) {
|
||||
<p>Required</p>
|
||||
}
|
||||
@if (!f['password'].hasError('required')) {
|
||||
<div>
|
||||
<p *ngIf="f['password'].hasError('required')">Required</p>
|
||||
<div *ngIf="!f['password'].hasError('required')">
|
||||
<div [ngClass]="f['password'].hasError('hasNumber') ? 'text-danger': 'text-success'">
|
||||
<i
|
||||
[ngClass]="f['password'].hasError('hasNumber') ? 'bi bi-x-square-fill' : 'bi bi-check-square-fill'"></i>
|
||||
@ -132,9 +128,7 @@
|
||||
special
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="form-floating is-invalid mb-3">
|
||||
@ -147,18 +141,12 @@
|
||||
<label for="confirmPassword">Confirm Password</label>
|
||||
</div>
|
||||
<!-- Confirm Password Invalid Feedback -->
|
||||
@if (f['confirmPassword'].invalid && (f['confirmPassword'].dirty || !f['confirmPassword'].untouched )) {
|
||||
<div
|
||||
<div *ngIf="f['confirmPassword'].invalid && (f['confirmPassword'].dirty || !f['confirmPassword'].untouched )"
|
||||
class="invalid-feedback">
|
||||
@if (f['confirmPassword'].hasError('required')) {
|
||||
<p>Confirmation password is required</p>
|
||||
}
|
||||
@if (f['confirmPassword'].hasError('passwordMismatch')) {
|
||||
<p *ngIf="f['confirmPassword'].hasError('required')">Confirmation password is required</p>
|
||||
<p
|
||||
>Passwords do not match</p>
|
||||
}
|
||||
*ngIf="f['confirmPassword'].hasError('passwordMismatch')">Passwords do not match</p>
|
||||
</div>
|
||||
}
|
||||
|
||||
<div class="d-flex justify-content-between">
|
||||
<button type="button" (click)="onCancel()" class="btn btn-warning">Cancel</button>
|
||||
@ -184,5 +172,5 @@
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -10,8 +10,7 @@ import {environment} from "../../../environments/environment";
|
||||
@Component({
|
||||
selector: 'app-sign-up',
|
||||
templateUrl: './sign-up.component.html',
|
||||
styleUrl: './sign-up.component.css',
|
||||
standalone: false
|
||||
styleUrl: './sign-up.component.css'
|
||||
})
|
||||
export class SignUpComponent {
|
||||
|
||||
|
||||
@ -4,8 +4,7 @@ import {AuthenticationService} from "./services/authentication.service";
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
templateUrl: './app.component.html',
|
||||
styleUrl: './app.component.css',
|
||||
standalone: false
|
||||
styleUrl: './app.component.css'
|
||||
})
|
||||
export class AppComponent implements OnInit {
|
||||
title = 'Last War - Player Management';
|
||||
|
||||
@ -65,10 +65,9 @@ import { CustomEventCategoryComponent } from './pages/custom-event/custom-event-
|
||||
import { CustomEventLeaderboardComponent } from './pages/custom-event/custom-event-leaderboard/custom-event-leaderboard.component';
|
||||
import { CustomEventEventsComponent } from './pages/custom-event/custom-event-events/custom-event-events.component';
|
||||
import {NgxMaskDirective, NgxMaskPipe, provideNgxMask} from "ngx-mask";
|
||||
import {CountUpModule} from "ngx-countup";
|
||||
import { PlayerSquadsComponent } from './pages/player-squads/player-squads.component';
|
||||
import { SquadEditModalComponent } from './modals/squad-edit-modal/squad-edit-modal.component';
|
||||
import {CommonModule} from "@angular/common";
|
||||
import {CountUpDirective} from "ngx-countup";
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
@ -127,7 +126,6 @@ import {CountUpDirective} from "ngx-countup";
|
||||
SquadEditModalComponent
|
||||
],
|
||||
imports: [
|
||||
CommonModule,
|
||||
BrowserModule,
|
||||
AppRoutingModule,
|
||||
BrowserAnimationsModule,
|
||||
@ -148,7 +146,7 @@ import {CountUpDirective} from "ngx-countup";
|
||||
AgCharts,
|
||||
NgxMaskDirective,
|
||||
NgxMaskPipe,
|
||||
CountUpDirective
|
||||
CountUpModule
|
||||
],
|
||||
providers: [
|
||||
provideNgxMask(),
|
||||
|
||||
@ -3,8 +3,7 @@ import { Component } from '@angular/core';
|
||||
@Component({
|
||||
selector: 'app-under-development',
|
||||
templateUrl: './under-development.component.html',
|
||||
styleUrl: './under-development.component.css',
|
||||
standalone: false
|
||||
styleUrl: './under-development.component.css'
|
||||
})
|
||||
export class UnderDevelopmentComponent {
|
||||
|
||||
|
||||
@ -2,8 +2,7 @@ import {Pipe, PipeTransform} from '@angular/core';
|
||||
import moment from "moment";
|
||||
|
||||
@Pipe({
|
||||
name: 'week',
|
||||
standalone: false
|
||||
name: 'week'
|
||||
})
|
||||
export class WeekPipe implements PipeTransform {
|
||||
|
||||
|
||||
@ -7,8 +7,7 @@ import {FormArray, FormControl, FormGroup, Validators} from "@angular/forms";
|
||||
@Component({
|
||||
selector: 'app-custom-event-participants-model',
|
||||
templateUrl: './custom-event-participants-model.component.html',
|
||||
styleUrl: './custom-event-participants-model.component.css',
|
||||
standalone: false
|
||||
styleUrl: './custom-event-participants-model.component.css'
|
||||
})
|
||||
export class CustomEventParticipantsModelComponent implements OnInit {
|
||||
|
||||
|
||||
@ -6,8 +6,7 @@ import {PlayerModel} from "../../models/player.model";
|
||||
@Component({
|
||||
selector: 'app-desert-storm-participants-modal',
|
||||
templateUrl: './desert-storm-participants-modal.component.html',
|
||||
styleUrl: './desert-storm-participants-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './desert-storm-participants-modal.component.css'
|
||||
})
|
||||
export class DesertStormParticipantsModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -10,8 +10,7 @@ import {environment} from "../../../environments/environment";
|
||||
@Component({
|
||||
selector: 'app-invite-user-modal',
|
||||
templateUrl: './invite-user-modal.component.html',
|
||||
styleUrl: './invite-user-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './invite-user-modal.component.css'
|
||||
})
|
||||
export class InviteUserModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -6,8 +6,7 @@ import {PlayerModel} from "../../models/player.model";
|
||||
@Component({
|
||||
selector: 'app-marshal-guard-modal',
|
||||
templateUrl: './marshal-guard-modal.component.html',
|
||||
styleUrl: './marshal-guard-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './marshal-guard-modal.component.css'
|
||||
})
|
||||
export class MarshalGuardModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -10,8 +10,7 @@ import Swal from "sweetalert2";
|
||||
@Component({
|
||||
selector: 'app-player-admonition-modal',
|
||||
templateUrl: './player-admonition-modal.component.html',
|
||||
styleUrl: './player-admonition-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-admonition-modal.component.css'
|
||||
})
|
||||
export class PlayerAdmonitionModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -7,8 +7,7 @@ import {ToastrService} from "ngx-toastr";
|
||||
@Component({
|
||||
selector: 'app-player-dismiss-information-modal',
|
||||
templateUrl: './player-dismiss-information-modal.component.html',
|
||||
styleUrl: './player-dismiss-information-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-dismiss-information-modal.component.css'
|
||||
})
|
||||
export class PlayerDismissInformationModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -10,8 +10,7 @@ import {ToastrService} from "ngx-toastr";
|
||||
@Component({
|
||||
selector: 'app-player-edit-modal',
|
||||
templateUrl: './player-edit-modal.component.html',
|
||||
styleUrl: './player-edit-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-edit-modal.component.css'
|
||||
})
|
||||
export class PlayerEditModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -8,8 +8,7 @@ import {PlayerService} from "../../services/player.service";
|
||||
@Component({
|
||||
selector: 'app-player-excel-import-modal',
|
||||
templateUrl: './player-excel-import-modal.component.html',
|
||||
styleUrl: './player-excel-import-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-excel-import-modal.component.css'
|
||||
})
|
||||
export class PlayerExcelImportModalComponent {
|
||||
|
||||
|
||||
@ -10,8 +10,7 @@ import Swal from "sweetalert2";
|
||||
@Component({
|
||||
selector: 'app-player-note-modal',
|
||||
templateUrl: './player-note-modal.component.html',
|
||||
styleUrl: './player-note-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-note-modal.component.css'
|
||||
})
|
||||
export class PlayerNoteModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -10,8 +10,7 @@ import {ToastrService} from "ngx-toastr";
|
||||
@Component({
|
||||
selector: 'app-squad-edit-modal',
|
||||
templateUrl: './squad-edit-modal.component.html',
|
||||
styleUrl: './squad-edit-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './squad-edit-modal.component.css'
|
||||
})
|
||||
export class SquadEditModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -8,8 +8,7 @@ import {FormControl, FormGroup, Validators} from "@angular/forms";
|
||||
@Component({
|
||||
selector: 'app-user-edit-modal',
|
||||
templateUrl: './user-edit-modal.component.html',
|
||||
styleUrl: './user-edit-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './user-edit-modal.component.css'
|
||||
})
|
||||
export class UserEditModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -10,8 +10,7 @@ import {VsDuelLeagueModel} from "../../models/vsDuelLeague.model";
|
||||
@Component({
|
||||
selector: 'app-vs-duel-edit-modal',
|
||||
templateUrl: './vs-duel-create-modal.component.html',
|
||||
styleUrl: './vs-duel-create-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './vs-duel-create-modal.component.css'
|
||||
})
|
||||
export class VsDuelCreateModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -6,8 +6,7 @@ import {PlayerModel} from "../../models/player.model";
|
||||
@Component({
|
||||
selector: 'app-zombie-siege-participants-modal',
|
||||
templateUrl: './zombie-siege-participants-modal.component.html',
|
||||
styleUrl: './zombie-siege-participants-modal.component.css',
|
||||
standalone: false
|
||||
styleUrl: './zombie-siege-participants-modal.component.css'
|
||||
})
|
||||
export class ZombieSiegeParticipantsModalComponent implements OnInit {
|
||||
|
||||
|
||||
@ -78,8 +78,7 @@
|
||||
</ul>
|
||||
|
||||
<!-- User menu (visible only when user is logged in) -->
|
||||
@if (loggedInUser) {
|
||||
<div class="login">
|
||||
<div *ngIf="loggedInUser" class="login">
|
||||
<ul class="navbar-nav me-auto">
|
||||
<li ngbDropdown display="dynamic" class="nav-item" role="presentation">
|
||||
<button type="button" class="nav-link" ngbDropdownToggle>
|
||||
@ -96,19 +95,16 @@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
}
|
||||
|
||||
<!-- Login button (visible only when user is not logged in) -->
|
||||
@if (!loggedInUser) {
|
||||
<div class="d-flex login" routerLink="/login">
|
||||
<div *ngIf="!loggedInUser" class="d-flex login" routerLink="/login">
|
||||
<button (click)="isShown = false" class="btn btn-secondary" routerLink="/login"><i
|
||||
class="bi bi-box-arrow-right"></i> Login
|
||||
</button>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</nav>
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -7,8 +7,7 @@ import {environment} from "../../environments/environment";
|
||||
@Component({
|
||||
selector: 'app-navigation',
|
||||
templateUrl: './navigation.component.html',
|
||||
styleUrl: './navigation.component.css',
|
||||
standalone: false
|
||||
styleUrl: './navigation.component.css'
|
||||
})
|
||||
export class NavigationComponent implements OnInit, OnDestroy {
|
||||
|
||||
|
||||
@ -11,8 +11,7 @@ import {AuthenticationService} from "../../services/authentication.service";
|
||||
@Component({
|
||||
selector: 'app-account',
|
||||
templateUrl: './account.component.html',
|
||||
styleUrl: './account.component.css',
|
||||
standalone: false
|
||||
styleUrl: './account.component.css'
|
||||
})
|
||||
export class AccountComponent implements OnInit{
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
}
|
||||
|
||||
.api-key-input-group {
|
||||
max-width: 420px;
|
||||
max-width: 420px; // Begrenzung der Breite des Input-Feldes
|
||||
}
|
||||
|
||||
.api-key-input {
|
||||
|
||||
@ -7,8 +7,7 @@ import {ToastrService} from "ngx-toastr";
|
||||
@Component({
|
||||
selector: 'app-alliance-api-key',
|
||||
templateUrl: './alliance-api-key.component.html',
|
||||
styleUrl: './alliance-api-key.component.css',
|
||||
standalone: false
|
||||
styleUrl: './alliance-api-key.component.css'
|
||||
})
|
||||
export class AllianceApiKeyComponent implements OnInit {
|
||||
|
||||
|
||||
@ -11,8 +11,7 @@ import {JwtTokenService} from "../../../services/jwt-token.service";
|
||||
@Component({
|
||||
selector: 'app-alliance-user-administration',
|
||||
templateUrl: './alliance-user-administration.component.html',
|
||||
styleUrl: './alliance-user-administration.component.css',
|
||||
standalone: false
|
||||
styleUrl: './alliance-user-administration.component.css'
|
||||
})
|
||||
export class AllianceUserAdministrationComponent implements OnInit {
|
||||
|
||||
|
||||
@ -9,8 +9,7 @@ import {JwtTokenService} from "../../services/jwt-token.service";
|
||||
@Component({
|
||||
selector: 'app-alliance',
|
||||
templateUrl: './alliance.component.html',
|
||||
styleUrl: './alliance.component.css',
|
||||
standalone: false
|
||||
styleUrl: './alliance.component.css'
|
||||
})
|
||||
export class AllianceComponent implements OnInit {
|
||||
|
||||
|
||||
@ -11,8 +11,7 @@ import {JwtTokenService} from "../../services/jwt-token.service";
|
||||
@Component({
|
||||
selector: 'app-change-password',
|
||||
templateUrl: './change-password.component.html',
|
||||
styleUrl: './change-password.component.css',
|
||||
standalone: false
|
||||
styleUrl: './change-password.component.css'
|
||||
})
|
||||
export class ChangePasswordComponent {
|
||||
|
||||
|
||||
@ -13,8 +13,7 @@ import Swal from "sweetalert2";
|
||||
@Component({
|
||||
selector: 'app-custom-event-category',
|
||||
templateUrl: './custom-event-category.component.html',
|
||||
styleUrl: './custom-event-category.component.css',
|
||||
standalone: false
|
||||
styleUrl: './custom-event-category.component.css'
|
||||
})
|
||||
export class CustomEventCategoryComponent implements OnInit {
|
||||
isCreateCustomEventCategory: any;
|
||||
|
||||
@ -6,8 +6,7 @@ import {CustomEventDetailModel} from "../../../models/customEvent.model";
|
||||
@Component({
|
||||
selector: 'app-custom-event-detail',
|
||||
templateUrl: './custom-event-detail.component.html',
|
||||
styleUrl: './custom-event-detail.component.css',
|
||||
standalone: false
|
||||
styleUrl: './custom-event-detail.component.css'
|
||||
})
|
||||
export class CustomEventDetailComponent implements OnInit {
|
||||
|
||||
|
||||
@ -19,8 +19,7 @@ import {forkJoin, Observable} from "rxjs";
|
||||
@Component({
|
||||
selector: 'app-custom-event-events',
|
||||
templateUrl: './custom-event-events.component.html',
|
||||
styleUrl: './custom-event-events.component.css',
|
||||
standalone: false
|
||||
styleUrl: './custom-event-events.component.css'
|
||||
})
|
||||
export class CustomEventEventsComponent implements OnInit {
|
||||
|
||||
|
||||
@ -12,8 +12,7 @@ import {
|
||||
@Component({
|
||||
selector: 'app-custom-event-leaderboard',
|
||||
templateUrl: './custom-event-leaderboard.component.html',
|
||||
styleUrl: './custom-event-leaderboard.component.css',
|
||||
standalone: false
|
||||
styleUrl: './custom-event-leaderboard.component.css'
|
||||
})
|
||||
export class CustomEventLeaderboardComponent implements OnInit {
|
||||
|
||||
|
||||
@ -4,8 +4,7 @@ import {Component} from '@angular/core';
|
||||
@Component({
|
||||
selector: 'app-custom-event',
|
||||
templateUrl: './custom-event.component.html',
|
||||
styleUrl: './custom-event.component.css',
|
||||
standalone: false
|
||||
styleUrl: './custom-event.component.css'
|
||||
})
|
||||
export class CustomEventComponent {
|
||||
|
||||
|
||||
@ -6,8 +6,7 @@ import {DesertStormDetailModel} from "../../../models/desertStorm.model";
|
||||
@Component({
|
||||
selector: 'app-desert-storm-detail',
|
||||
templateUrl: './desert-storm-detail.component.html',
|
||||
styleUrl: './desert-storm-detail.component.css',
|
||||
standalone: false
|
||||
styleUrl: './desert-storm-detail.component.css'
|
||||
})
|
||||
export class DesertStormDetailComponent implements OnInit {
|
||||
|
||||
|
||||
@ -21,8 +21,7 @@ import {forkJoin, Observable} from "rxjs";
|
||||
@Component({
|
||||
selector: 'app-desert-storm',
|
||||
templateUrl: './desert-storm.component.html',
|
||||
styleUrl: './desert-storm.component.css',
|
||||
standalone: false
|
||||
styleUrl: './desert-storm.component.css'
|
||||
})
|
||||
export class DesertStormComponent implements OnInit {
|
||||
|
||||
|
||||
@ -13,8 +13,7 @@ import {
|
||||
@Component({
|
||||
selector: 'app-dismiss-player',
|
||||
templateUrl: './dismiss-player.component.html',
|
||||
styleUrl: './dismiss-player.component.css',
|
||||
standalone: false
|
||||
styleUrl: './dismiss-player.component.css'
|
||||
})
|
||||
export class DismissPlayerComponent implements OnInit {
|
||||
|
||||
|
||||
@ -8,8 +8,7 @@ import {Router} from "@angular/router";
|
||||
@Component({
|
||||
selector: 'app-feedback',
|
||||
templateUrl: './feedback.component.html',
|
||||
styleUrl: './feedback.component.css',
|
||||
standalone: false
|
||||
styleUrl: './feedback.component.css'
|
||||
})
|
||||
export class FeedbackComponent implements OnInit {
|
||||
|
||||
|
||||
@ -3,8 +3,7 @@ import { Component } from '@angular/core';
|
||||
@Component({
|
||||
selector: 'app-imprint',
|
||||
templateUrl: './imprint.component.html',
|
||||
styleUrl: './imprint.component.css',
|
||||
standalone: false
|
||||
styleUrl: './imprint.component.css'
|
||||
})
|
||||
export class ImprintComponent {
|
||||
|
||||
|
||||
@ -6,8 +6,7 @@ import {MarshalGuardDetailModel} from "../../../models/marshalGuard.model";
|
||||
@Component({
|
||||
selector: 'app-marshal-guard-detail',
|
||||
templateUrl: './marshal-guard-detail.component.html',
|
||||
styleUrl: './marshal-guard-detail.component.css',
|
||||
standalone: false
|
||||
styleUrl: './marshal-guard-detail.component.css'
|
||||
})
|
||||
export class MarshalGuardDetailComponent implements OnInit {
|
||||
|
||||
|
||||
@ -24,8 +24,7 @@ import {forkJoin, Observable} from "rxjs";
|
||||
@Component({
|
||||
selector: 'app-marshal-guard',
|
||||
templateUrl: './marshal-guard.component.html',
|
||||
styleUrl: './marshal-guard.component.css',
|
||||
standalone: false
|
||||
styleUrl: './marshal-guard.component.css'
|
||||
})
|
||||
export class MarshalGuardComponent implements OnInit {
|
||||
|
||||
|
||||
@ -8,8 +8,7 @@ import {PlayerMvpModel} from "../../models/player.model";
|
||||
@Component({
|
||||
selector: 'app-mvp',
|
||||
templateUrl: './mvp.component.html',
|
||||
styleUrl: './mvp.component.css',
|
||||
standalone: false
|
||||
styleUrl: './mvp.component.css'
|
||||
})
|
||||
export class MvpComponent implements OnInit {
|
||||
|
||||
|
||||
@ -3,8 +3,7 @@ import {Component} from '@angular/core';
|
||||
@Component({
|
||||
selector: 'app-player-info-custom-event',
|
||||
templateUrl: './player-info-custom-event.component.html',
|
||||
styleUrl: './player-info-custom-event.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-info-custom-event.component.css'
|
||||
})
|
||||
export class PlayerInfoCustomEventComponent {
|
||||
|
||||
|
||||
@ -3,8 +3,7 @@ import {Component} from '@angular/core';
|
||||
@Component({
|
||||
selector: 'app-player-info-desert-storm',
|
||||
templateUrl: './player-info-desert-storm.component.html',
|
||||
styleUrl: './player-info-desert-storm.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-info-desert-storm.component.css'
|
||||
})
|
||||
export class PlayerInfoDesertStormComponent {
|
||||
|
||||
|
||||
@ -6,8 +6,7 @@ import {MarshalGuardParticipantModel} from "../../../models/marshalGuardParticip
|
||||
@Component({
|
||||
selector: 'app-player-info-marshal-guard',
|
||||
templateUrl: './player-info-marshal-guard.component.html',
|
||||
styleUrl: './player-info-marshal-guard.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-info-marshal-guard.component.css'
|
||||
})
|
||||
export class PlayerInfoMarshalGuardComponent {
|
||||
|
||||
|
||||
@ -9,8 +9,7 @@ import {ToastrService} from "ngx-toastr";
|
||||
selector: 'app-player-info-vs-duel',
|
||||
templateUrl: './player-info-vs-duel.component.html',
|
||||
styleUrl: './player-info-vs-duel.component.css',
|
||||
providers: [DatePipe],
|
||||
standalone: false
|
||||
providers: [DatePipe]
|
||||
})
|
||||
export class PlayerInfoVsDuelComponent {
|
||||
|
||||
@ -25,7 +24,9 @@ export class PlayerInfoVsDuelComponent {
|
||||
|
||||
|
||||
options: AgChartOptions = {
|
||||
title: { text: 'Weekly Points' },
|
||||
title: {
|
||||
text: 'Weekly Points'
|
||||
},
|
||||
data: [],
|
||||
series: [
|
||||
{
|
||||
@ -38,21 +39,22 @@ export class PlayerInfoVsDuelComponent {
|
||||
fill: 'blue'
|
||||
}
|
||||
],
|
||||
axes: {
|
||||
y: {
|
||||
axes: [
|
||||
{
|
||||
type: 'number',
|
||||
position: 'left',
|
||||
label: {
|
||||
formatter: (params: any) => params.value.toLocaleString('en-US'),
|
||||
formatter: (params: any) => {
|
||||
return params.value.toLocaleString('en-US')
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
x: {
|
||||
{
|
||||
type: 'category',
|
||||
position: 'bottom',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
getData(take: number) {
|
||||
const chartData: {date: string, points: number}[] = [];
|
||||
|
||||
@ -10,8 +10,7 @@ import {ToastrService} from "ngx-toastr";
|
||||
@Component({
|
||||
selector: 'app-player-information',
|
||||
templateUrl: './player-information.component.html',
|
||||
styleUrl: './player-information.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-information.component.css'
|
||||
})
|
||||
export class PlayerInformationComponent implements OnInit {
|
||||
|
||||
|
||||
@ -9,8 +9,7 @@ import {ToastrService} from "ngx-toastr";
|
||||
@Component({
|
||||
selector: 'app-player-squads',
|
||||
templateUrl: './player-squads.component.html',
|
||||
styleUrl: './player-squads.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player-squads.component.css'
|
||||
})
|
||||
export class PlayerSquadsComponent implements OnInit {
|
||||
|
||||
|
||||
@ -20,8 +20,7 @@ import {
|
||||
@Component({
|
||||
selector: 'app-player',
|
||||
templateUrl: './player.component.html',
|
||||
styleUrl: './player.component.css',
|
||||
standalone: false
|
||||
styleUrl: './player.component.css'
|
||||
})
|
||||
export class PlayerComponent implements OnInit {
|
||||
|
||||
|
||||
@ -7,8 +7,7 @@ import {VsDuelDetailModel} from "../../../models/vsDuel.model";
|
||||
@Component({
|
||||
selector: 'app-vs-duel-detail',
|
||||
templateUrl: './vs-duel-detail.component.html',
|
||||
styleUrl: './vs-duel-detail.component.css',
|
||||
standalone: false
|
||||
styleUrl: './vs-duel-detail.component.css'
|
||||
})
|
||||
export class VsDuelDetailComponent implements OnInit {
|
||||
|
||||
|
||||
@ -13,8 +13,7 @@ import {VsDuelLeagueModel} from "../../../models/vsDuelLeague.model";
|
||||
@Component({
|
||||
selector: 'app-vs-duel-edit',
|
||||
templateUrl: './vs-duel-edit.component.html',
|
||||
styleUrl: './vs-duel-edit.component.css',
|
||||
standalone: false
|
||||
styleUrl: './vs-duel-edit.component.css'
|
||||
})
|
||||
export class VsDuelEditComponent implements OnInit {
|
||||
|
||||
|
||||
@ -12,8 +12,7 @@ import {Router} from "@angular/router";
|
||||
selector: 'app-vs-duel',
|
||||
templateUrl: './vs-duel.component.html',
|
||||
styleUrl: './vs-duel.component.css',
|
||||
providers: [WeekPipe],
|
||||
standalone: false
|
||||
providers: [WeekPipe]
|
||||
})
|
||||
export class VsDuelComponent implements OnInit {
|
||||
|
||||
|
||||
@ -6,8 +6,7 @@ import {ZombieSiegeService} from "../../../services/zombie-siege.service";
|
||||
@Component({
|
||||
selector: 'app-zombie-siege-detail',
|
||||
templateUrl: './zombie-siege-detail.component.html',
|
||||
styleUrl: './zombie-siege-detail.component.css',
|
||||
standalone: false
|
||||
styleUrl: './zombie-siege-detail.component.css'
|
||||
})
|
||||
export class ZombieSiegeDetailComponent implements OnInit {
|
||||
|
||||
|
||||
@ -24,7 +24,6 @@ import {PagedResponseModel} from "../../models/pagedResponse.model";
|
||||
selector: 'app-zombie-siege',
|
||||
templateUrl: './zombie-siege.component.html',
|
||||
styleUrl: './zombie-siege.component.css',
|
||||
standalone: false
|
||||
})
|
||||
export class ZombieSiegeComponent implements OnInit {
|
||||
|
||||
|
||||
@ -1,14 +1,9 @@
|
||||
import { provideZoneChangeDetection } from "@angular/core";
|
||||
/// <reference types="@angular/localize" />
|
||||
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
|
||||
|
||||
import { ModuleRegistry, AllCommunityModule } from 'ag-charts-community';
|
||||
ModuleRegistry.registerModules([AllCommunityModule]);
|
||||
|
||||
platformBrowserDynamic()
|
||||
.bootstrapModule(AppModule, {
|
||||
applicationProviders: [provideZoneChangeDetection()],
|
||||
})
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@ -14,11 +14,15 @@
|
||||
"sourceMap": true,
|
||||
"declaration": false,
|
||||
"experimentalDecorators": true,
|
||||
"moduleResolution": "bundler",
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
"target": "ES2022",
|
||||
"module": "ES2022",
|
||||
"useDefineForClassFields": false
|
||||
"useDefineForClassFields": false,
|
||||
"lib": [
|
||||
"ES2022",
|
||||
"dom"
|
||||
]
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableI18nLegacyMessageIdFormat": false,
|
||||
|
||||
@ -1,12 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Constants\" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<FrameworkReference Include="Microsoft.AspNetCore.App" />
|
||||
<PackageReference Include="MailKit" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http.Features" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" />
|
||||
<PackageReference Include="Octokit" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user