From 3af01662db67a0eb5dc9ba6f6e5ce1c7d1a245d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 24 Jan 2026 12:28:36 +0100 Subject: [PATCH 01/11] Usings clenaup --- .../Endpoints/Tournaments/SetTournamentMatchPlanEndpoint.cs | 1 - src/Turnierplan.Core/Tournament/Tournament.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/src/Turnierplan.App/Endpoints/Tournaments/SetTournamentMatchPlanEndpoint.cs b/src/Turnierplan.App/Endpoints/Tournaments/SetTournamentMatchPlanEndpoint.cs index 2f502a41..833959dd 100644 --- a/src/Turnierplan.App/Endpoints/Tournaments/SetTournamentMatchPlanEndpoint.cs +++ b/src/Turnierplan.App/Endpoints/Tournaments/SetTournamentMatchPlanEndpoint.cs @@ -2,7 +2,6 @@ using Microsoft.AspNetCore.Mvc; using Turnierplan.App.Extensions; using Turnierplan.App.Security; -using Turnierplan.Core.Exceptions; using Turnierplan.Core.PublicId; using Turnierplan.Core.Tournament.TeamSelectors; using Turnierplan.Dal.Converters; diff --git a/src/Turnierplan.Core/Tournament/Tournament.cs b/src/Turnierplan.Core/Tournament/Tournament.cs index 3cd0aee0..e1e140a1 100644 --- a/src/Turnierplan.Core/Tournament/Tournament.cs +++ b/src/Turnierplan.Core/Tournament/Tournament.cs @@ -1,4 +1,3 @@ -using System.Reflection; using Turnierplan.Core.Entity; using Turnierplan.Core.Exceptions; using Turnierplan.Core.Extensions; From cff13668bb57e823a03eadeb73ef324f213fc0a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 24 Jan 2026 13:21:23 +0100 Subject: [PATCH 02/11] fixes 1 --- .../portal/components/delete-widget/delete-widget.component.ts | 2 +- .../components/document-manager/document-manager.component.ts | 3 +-- .../app/portal/components/edit-match/edit-match.component.ts | 2 +- .../invitation-link-tile/invitation-link-tile.component.html | 2 +- .../new-application-dialog.component.html | 2 +- .../Pages/Shared/Components/Header/Default.cshtml | 2 +- .../Pages/Shared/Components/MatchPlan/Default.cshtml | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Turnierplan.App/Client/src/app/portal/components/delete-widget/delete-widget.component.ts b/src/Turnierplan.App/Client/src/app/portal/components/delete-widget/delete-widget.component.ts index 15246837..4effd227 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/delete-widget/delete-widget.component.ts +++ b/src/Turnierplan.App/Client/src/app/portal/components/delete-widget/delete-widget.component.ts @@ -20,7 +20,7 @@ export class DeleteWidgetComponent { @Input() public set targetObjectName(value: string) { - this.confirmationText = value.replace(/[^A-Za-z0-9.\-_|ÄÖÜäöüß ]+/g, '').trim(); + this.confirmationText = value.replaceAll(/[^A-Za-z0-9.\-_|ÄÖÜäöüß ]+/g, '').trim(); } @Output() diff --git a/src/Turnierplan.App/Client/src/app/portal/components/document-manager/document-manager.component.ts b/src/Turnierplan.App/Client/src/app/portal/components/document-manager/document-manager.component.ts index ffed0b04..91065b77 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/document-manager/document-manager.component.ts +++ b/src/Turnierplan.App/Client/src/app/portal/components/document-manager/document-manager.component.ts @@ -244,8 +244,7 @@ export class DocumentManagerComponent { } private getDocumentFileName(name: string): string { - const fileNameSanitizeRegex = /[^.A-Za-z0-9Ä-Öä-öß _-]/g; - return `${name} - ${this.tournamentName}.pdf`.replace(fileNameSanitizeRegex, '_'); + return `${name} - ${this.tournamentName}.pdf`.replaceAll(/[^.A-Za-z0-9Ä-Öä-öß _-]/g, '_'); } private getDocumentConfig(document: DocumentDto): Observable { diff --git a/src/Turnierplan.App/Client/src/app/portal/components/edit-match/edit-match.component.ts b/src/Turnierplan.App/Client/src/app/portal/components/edit-match/edit-match.component.ts index 64d4c512..1e8f801a 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/edit-match/edit-match.component.ts +++ b/src/Turnierplan.App/Client/src/app/portal/components/edit-match/edit-match.component.ts @@ -81,7 +81,7 @@ export class EditMatchComponent implements OnDestroy, AfterViewInit { } protected closeModal(action: 'cancel' | 'clear' | 'save' | 'saveLive'): void { - const isValidScore = (value: number): boolean => !isNaN(value) && value === parseInt(`${value}`, 10); + const isValidScore = (value: number): boolean => !Number.isNaN(value) && value === Number.parseInt(`${value}`, 10); if (action !== 'cancel') { let request: SetMatchOutcomeEndpointRequest; diff --git a/src/Turnierplan.App/Client/src/app/portal/components/invitation-link-tile/invitation-link-tile.component.html b/src/Turnierplan.App/Client/src/app/portal/components/invitation-link-tile/invitation-link-tile.component.html index 68cd8a61..e19aa825 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/invitation-link-tile/invitation-link-tile.component.html +++ b/src/Turnierplan.App/Client/src/app/portal/components/invitation-link-tile/invitation-link-tile.component.html @@ -304,7 +304,7 @@
@let control = editPropertiesForm.get('validUntil')!; diff --git a/src/Turnierplan.App/Pages/Shared/Components/Header/Default.cshtml b/src/Turnierplan.App/Pages/Shared/Components/Header/Default.cshtml index 576122d6..8edcc898 100644 --- a/src/Turnierplan.App/Pages/Shared/Components/Header/Default.cshtml +++ b/src/Turnierplan.App/Pages/Shared/Components/Header/Default.cshtml @@ -60,7 +60,7 @@ @if (Model.AllowVenueExpand) { - + mehr diff --git a/src/Turnierplan.App/Pages/Shared/Components/MatchPlan/Default.cshtml b/src/Turnierplan.App/Pages/Shared/Components/MatchPlan/Default.cshtml index ec6eec05..8f46e264 100644 --- a/src/Turnierplan.App/Pages/Shared/Components/MatchPlan/Default.cshtml +++ b/src/Turnierplan.App/Pages/Shared/Components/MatchPlan/Default.cshtml @@ -54,7 +54,7 @@ if (displayMatchType) { - @(Model.Localization.LocalizeMatchDisplayName(match)) + @(Model.Localization.LocalizeMatchDisplayName(match)) } } From fb7f1e15e1e4ded95e5fc4cc605741e288b18dc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 24 Jan 2026 13:35:34 +0100 Subject: [PATCH 03/11] fixes 2 --- src/Turnierplan.App/Client/karma.conf.js | 4 +- .../app/core/services/color-theme.service.ts | 2 +- ...nfigure-tournament-add-team.component.html | 4 +- .../document-config-receipts.component.ts | 3 +- .../image-chooser/image-chooser.component.ts | 39 ++++++++----------- .../invitation-link-tile.component.html | 2 +- .../match-tree/match-tree.component.ts | 10 +++-- .../new-application-dialog.component.html | 2 +- .../page-frame/page-frame.component.ts | 3 +- .../rename-dialog/rename-dialog.component.ts | 6 +-- .../text-input-dialog.component.html | 6 +-- .../text-input-dialog.component.ts | 6 +-- src/Turnierplan.App/Client/src/index.html | 2 +- 13 files changed, 42 insertions(+), 47 deletions(-) diff --git a/src/Turnierplan.App/Client/karma.conf.js b/src/Turnierplan.App/Client/karma.conf.js index 4bc031eb..60188fc0 100644 --- a/src/Turnierplan.App/Client/karma.conf.js +++ b/src/Turnierplan.App/Client/karma.conf.js @@ -1,7 +1,7 @@ // Karma configuration file, see link for more information // https://karma-runner.github.io/1.0/config/configuration-file.html -module.exports = function (config) { +module.exports = function karmaConfig(config) { config.set({ basePath: '', frameworks: ['jasmine', '@angular-devkit/build-angular'], @@ -23,7 +23,7 @@ module.exports = function (config) { suppressAll: true // removes the duplicated traces }, coverageReporter: { - dir: require('path').join(__dirname, './coverage/turnierplan-net'), + dir: require('node:path').join(__dirname, './coverage/turnierplan-net'), subdir: '.', reporters: [{ type: 'lcov' }] }, diff --git a/src/Turnierplan.App/Client/src/app/core/services/color-theme.service.ts b/src/Turnierplan.App/Client/src/app/core/services/color-theme.service.ts index 5335e8d6..62a4f126 100644 --- a/src/Turnierplan.App/Client/src/app/core/services/color-theme.service.ts +++ b/src/Turnierplan.App/Client/src/app/core/services/color-theme.service.ts @@ -32,6 +32,6 @@ export class ColorThemeService { } private static setColorTheme(theme: ColorTheme): void { - document.documentElement.setAttribute('data-bs-theme', theme); + document.documentElement.dataset.bsTheme = theme; } } diff --git a/src/Turnierplan.App/Client/src/app/portal/components/configure-tournament-add-team/configure-tournament-add-team.component.html b/src/Turnierplan.App/Client/src/app/portal/components/configure-tournament-add-team/configure-tournament-add-team.component.html index ed5cb049..5cb7dd84 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/configure-tournament-add-team/configure-tournament-add-team.component.html +++ b/src/Turnierplan.App/Client/src/app/portal/components/configure-tournament-add-team/configure-tournament-add-team.component.html @@ -12,13 +12,13 @@
+x); let newEntry = 2; - while (existingEntries.includes(newEntry)) { + while (this.amountKeys.some((x) => +x === newEntry)) { newEntry++; } diff --git a/src/Turnierplan.App/Client/src/app/portal/components/image-chooser/image-chooser.component.ts b/src/Turnierplan.App/Client/src/app/portal/components/image-chooser/image-chooser.component.ts index 04cca4f7..8f46d38a 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/image-chooser/image-chooser.component.ts +++ b/src/Turnierplan.App/Client/src/app/portal/components/image-chooser/image-chooser.component.ts @@ -17,6 +17,7 @@ import { uploadImage$FormData } from '../../../api/fn/images/upload-image-form-d import { getImages } from '../../../api/fn/images/get-images'; import { ImageDto } from '../../../api/models/image-dto'; import { deleteImage } from '../../../api/fn/images/delete-image'; +import { from, switchMap } from 'rxjs'; export interface ImageChooserResult { type: 'ImageDeleted' | 'ImageSelected' | 'ImageUploaded'; @@ -96,34 +97,28 @@ export class ImageChooserComponent { if (targetFile) { this.isUploadingImage = true; - const reader = new FileReader(); - - reader.onload = (data) => { - const content = data.target?.result as ArrayBuffer; - - if (content) { - this.turnierplanApi - .invoke(uploadImage$FormData, { + from(targetFile.arrayBuffer()) + .pipe( + switchMap((arrayBuffer) => + this.turnierplanApi.invoke(uploadImage$FormData, { body: { organizationId: this.organizationId, imageType: this.imageType, imageName: targetFile.name, - image: new Blob([content]) + image: new Blob([arrayBuffer]) } }) - .subscribe({ - next: (result) => { - this.modal.close({ type: 'ImageUploaded', image: result } as ImageChooserResult); - }, - error: () => { - this.isUploadingImage = false; - this.hasUploadError = true; - } - }); - } - }; - - reader.readAsArrayBuffer(targetFile); + ) + ) + .subscribe({ + next: (result) => { + this.modal.close({ type: 'ImageUploaded', image: result } as ImageChooserResult); + }, + error: () => { + this.isUploadingImage = false; + this.hasUploadError = true; + } + }); } }); diff --git a/src/Turnierplan.App/Client/src/app/portal/components/invitation-link-tile/invitation-link-tile.component.html b/src/Turnierplan.App/Client/src/app/portal/components/invitation-link-tile/invitation-link-tile.component.html index e19aa825..27bf053b 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/invitation-link-tile/invitation-link-tile.component.html +++ b/src/Turnierplan.App/Client/src/app/portal/components/invitation-link-tile/invitation-link-tile.component.html @@ -278,7 +278,7 @@
- + diff --git a/src/Turnierplan.App/Client/src/app/portal/components/match-tree/match-tree.component.ts b/src/Turnierplan.App/Client/src/app/portal/components/match-tree/match-tree.component.ts index 20a174bf..4dddcd20 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/match-tree/match-tree.component.ts +++ b/src/Turnierplan.App/Client/src/app/portal/components/match-tree/match-tree.component.ts @@ -205,7 +205,7 @@ export class MatchTreeComponent implements OnChanges, AfterViewInit { nextMatchTileY += matchDiv.offsetHeight + paddingInPixels; } - const missingSpaceY = Math.max(0.0, nextMatchTileY - this.layoutedDiv.nativeElement.offsetHeight); + const missingSpaceY = Math.max(0, nextMatchTileY - this.layoutedDiv.nativeElement.offsetHeight); this.additionalPaddingDiv.nativeElement.style.height = `${missingSpaceY}px`; } @@ -254,9 +254,11 @@ export class MatchTreeComponent implements OnChanges, AfterViewInit { const middleX = Math.round((targetConnectorX + dependencyConnectorX) / 2); - this.connectingLines.push({ x1: dependencyConnectorX, y1: dependencyConnectorY, x2: middleX, y2: dependencyConnectorY }); - this.connectingLines.push({ x1: middleX, y1: dependencyConnectorY, x2: middleX, y2: targetConnectorY }); - this.connectingLines.push({ x1: middleX, y1: targetConnectorY, x2: targetConnectorX, y2: targetConnectorY }); + this.connectingLines.push( + { x1: dependencyConnectorX, y1: dependencyConnectorY, x2: middleX, y2: dependencyConnectorY }, + { x1: middleX, y1: dependencyConnectorY, x2: middleX, y2: targetConnectorY }, + { x1: middleX, y1: targetConnectorY, x2: targetConnectorX, y2: targetConnectorY } + ); }; if (dependencyDiv1 !== undefined && dependencyDiv2 === undefined) { diff --git a/src/Turnierplan.App/Client/src/app/portal/components/new-application-dialog/new-application-dialog.component.html b/src/Turnierplan.App/Client/src/app/portal/components/new-application-dialog/new-application-dialog.component.html index f8515bc7..9ee40675 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/new-application-dialog/new-application-dialog.component.html +++ b/src/Turnierplan.App/Client/src/app/portal/components/new-application-dialog/new-application-dialog.component.html @@ -42,7 +42,7 @@
- + 0) { if (this.currentTabId) { - const stillExists = this.navigationTabs.findIndex((x) => x.id === this.currentTabId) >= 0; - if (!stillExists) { + if (!this.navigationTabs.some((x) => x.id === this.currentTabId)) { this.currentTabId = this.navigationTabs[0].id; } } else { diff --git a/src/Turnierplan.App/Client/src/app/portal/components/rename-dialog/rename-dialog.component.ts b/src/Turnierplan.App/Client/src/app/portal/components/rename-dialog/rename-dialog.component.ts index 4dd6fb49..f4c8771a 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/rename-dialog/rename-dialog.component.ts +++ b/src/Turnierplan.App/Client/src/app/portal/components/rename-dialog/rename-dialog.component.ts @@ -45,10 +45,10 @@ export class RenameDialogComponent { const sanitizedInitial = (this.initialValue ?? '').trim(); if (sanitized.length > 0) { - if (sanitized !== sanitizedInitial) { - this.modal.close(sanitized); - } else { + if (sanitized === sanitizedInitial) { this.modal.dismiss(); + } else { + this.modal.close(sanitized); } } else if (sanitized.length === 0 && this.allowReset) { if (sanitizedInitial.length > 0) { diff --git a/src/Turnierplan.App/Client/src/app/portal/components/text-input-dialog/text-input-dialog.component.html b/src/Turnierplan.App/Client/src/app/portal/components/text-input-dialog/text-input-dialog.component.html index 2bf8997c..ed3b5761 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/text-input-dialog/text-input-dialog.component.html +++ b/src/Turnierplan.App/Client/src/app/portal/components/text-input-dialog/text-input-dialog.component.html @@ -5,10 +5,10 @@