From 587b1fc983ae149b61abbd0b30dfb7eb8bff2a28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Mon, 29 Sep 2025 11:36:13 +0200 Subject: [PATCH 1/9] Update angular.json --- src/Turnierplan.App/Client/angular.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Turnierplan.App/Client/angular.json b/src/Turnierplan.App/Client/angular.json index dd5645cf..6e58bca5 100644 --- a/src/Turnierplan.App/Client/angular.json +++ b/src/Turnierplan.App/Client/angular.json @@ -7,7 +7,7 @@ "root": "", "sourceRoot": "src", "projectType": "application", - "prefix": "app", + "prefix": "cy", "schematics": { "@schematics/angular:component": { "style": "scss" From 51079f471ef60063f69d4ce6b544f3c3efd455ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Mon, 29 Sep 2025 13:39:22 +0200 Subject: [PATCH 2/9] commit todos --- src/Turnierplan.App/Program.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Turnierplan.App/Program.cs b/src/Turnierplan.App/Program.cs index 29715691..771a6c14 100644 --- a/src/Turnierplan.App/Program.cs +++ b/src/Turnierplan.App/Program.cs @@ -117,3 +117,7 @@ // Public class definition is required for functional tests public sealed partial class Program; + +// TODO: Wenn Anmeldung erstellt wird, die Anzahl in der Turnierklassen-Übersicht aktualisieren +// TODO: Button, um alle EMail Adressen zu kopieren in der aktuellen Anmeldungs Übersicht +// TODO: Möglichkeit, Anmeldungen zu löschen From fdfb4d81a47d332c3222c6583d9d907b5bfde11d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Mon, 29 Sep 2025 13:40:03 +0200 Subject: [PATCH 3/9] another one --- src/Turnierplan.App/Program.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Turnierplan.App/Program.cs b/src/Turnierplan.App/Program.cs index 771a6c14..903388b5 100644 --- a/src/Turnierplan.App/Program.cs +++ b/src/Turnierplan.App/Program.cs @@ -121,3 +121,4 @@ public sealed partial class Program; // TODO: Wenn Anmeldung erstellt wird, die Anzahl in der Turnierklassen-Übersicht aktualisieren // TODO: Button, um alle EMail Adressen zu kopieren in der aktuellen Anmeldungs Übersicht // TODO: Möglichkeit, Anmeldungen zu löschen +// TODO: Möglichkeit, nachträglich Mannscahft zu Anmeldung hinzuzufügen From 3f84a5d7652e40097676baa8bf2a1135a8c79af9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Mon, 29 Sep 2025 18:28:57 +0200 Subject: [PATCH 4/9] Fix --- .../view-planning-realm.component.ts | 15 +++++++++++++-- src/Turnierplan.App/Program.cs | 1 - 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Turnierplan.App/Client/src/app/portal/pages/view-planning-realm/view-planning-realm.component.ts b/src/Turnierplan.App/Client/src/app/portal/pages/view-planning-realm/view-planning-realm.component.ts index 6eec04cb..619906f4 100644 --- a/src/Turnierplan.App/Client/src/app/portal/pages/view-planning-realm/view-planning-realm.component.ts +++ b/src/Turnierplan.App/Client/src/app/portal/pages/view-planning-realm/view-planning-realm.component.ts @@ -280,12 +280,23 @@ export class ViewPlanningRealmComponent implements OnInit, OnDestroy, DiscardCha .pipe( tap(() => (this.loadingState = { isLoading: true })), switchMap((request: CreateApplicationEndpointRequest) => - this.turnierplanApi.invoke(createApplication, { planningRealmId: planningRealmId, body: request }) + this.turnierplanApi.invoke(createApplication, { planningRealmId: planningRealmId, body: request }).pipe(map(() => request)) ) ) .subscribe({ - next: () => { + next: (request: CreateApplicationEndpointRequest) => { this.loadingState = { isLoading: false }; + + // Modify the planning realm stored in the client to account for the newly added teams. By doing this "hack" we can prevent + // a separate request for querying the entire planning realm when only the "numberOfTeams" property has changed. + if (this.planningRealm) { + for (const entry of request.entries) { + const tournamentClass = this.planningRealm.tournamentClasses?.find((x) => x.id === entry.tournamentClassId); + if (tournamentClass) { + tournamentClass.numberOfTeams += entry.numberOfTeams; + } + } + } }, error: (error) => { this.loadingState = { isLoading: false, error: error }; diff --git a/src/Turnierplan.App/Program.cs b/src/Turnierplan.App/Program.cs index 903388b5..c5c7fcc6 100644 --- a/src/Turnierplan.App/Program.cs +++ b/src/Turnierplan.App/Program.cs @@ -118,7 +118,6 @@ // Public class definition is required for functional tests public sealed partial class Program; -// TODO: Wenn Anmeldung erstellt wird, die Anzahl in der Turnierklassen-Übersicht aktualisieren // TODO: Button, um alle EMail Adressen zu kopieren in der aktuellen Anmeldungs Übersicht // TODO: Möglichkeit, Anmeldungen zu löschen // TODO: Möglichkeit, nachträglich Mannscahft zu Anmeldung hinzuzufügen From f71c7003dfa6d80e7f7cfc9b8f26a7da7e7bed3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Mon, 29 Sep 2025 18:34:12 +0200 Subject: [PATCH 5/9] wrong prefix woops --- src/Turnierplan.App/Client/angular.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Turnierplan.App/Client/angular.json b/src/Turnierplan.App/Client/angular.json index 6e58bca5..8afedb4d 100644 --- a/src/Turnierplan.App/Client/angular.json +++ b/src/Turnierplan.App/Client/angular.json @@ -7,7 +7,7 @@ "root": "", "sourceRoot": "src", "projectType": "application", - "prefix": "cy", + "prefix": "tp", "schematics": { "@schematics/angular:component": { "style": "scss" From 9c4e468659510926fc704e9523dcb7e06ae345b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Mon, 29 Sep 2025 18:43:47 +0200 Subject: [PATCH 6/9] Add bnutton to copy all mail addresses to clipboard --- src/Turnierplan.App/Client/src/app/i18n/de.ts | 1 + .../copy-to-clipboard/copy-to-clipboard.component.html | 5 ++++- .../copy-to-clipboard/copy-to-clipboard.component.ts | 3 +++ .../manage-applications.component.html | 9 ++++++++- .../manage-applications.component.ts | 10 ++++++++++ src/Turnierplan.App/Program.cs | 1 - 6 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Turnierplan.App/Client/src/app/i18n/de.ts b/src/Turnierplan.App/Client/src/app/i18n/de.ts index 95dd843f..f724087c 100644 --- a/src/Turnierplan.App/Client/src/app/i18n/de.ts +++ b/src/Turnierplan.App/Client/src/app/i18n/de.ts @@ -1033,6 +1033,7 @@ export const de = { TeamCount: 'Teams', Contact: 'Kontaktperson', ContactEmail: 'E-Mail', + CopyAllEmailAddresses: 'Alle E-Mailadressen auf dieser Seite in die Zwischenablage kopieren', ContactTelephone: 'Telefon-Nr.', Comment: 'Bemerkung', CommentTooltip: 'Die Bemerkung wurde bei der Anmeldung mitgeschickt und kann nicht bearbeitet werden.', diff --git a/src/Turnierplan.App/Client/src/app/portal/components/copy-to-clipboard/copy-to-clipboard.component.html b/src/Turnierplan.App/Client/src/app/portal/components/copy-to-clipboard/copy-to-clipboard.component.html index 65c59773..9dc04db5 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/copy-to-clipboard/copy-to-clipboard.component.html +++ b/src/Turnierplan.App/Client/src/app/portal/components/copy-to-clipboard/copy-to-clipboard.component.html @@ -1,5 +1,8 @@ @if (copyToClipboardPressed) { } @else { - + } diff --git a/src/Turnierplan.App/Client/src/app/portal/components/copy-to-clipboard/copy-to-clipboard.component.ts b/src/Turnierplan.App/Client/src/app/portal/components/copy-to-clipboard/copy-to-clipboard.component.ts index 547dc795..ae2f7fad 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/copy-to-clipboard/copy-to-clipboard.component.ts +++ b/src/Turnierplan.App/Client/src/app/portal/components/copy-to-clipboard/copy-to-clipboard.component.ts @@ -11,6 +11,9 @@ export class CopyToClipboardComponent { @Input() public value: string | number = ''; + @Input() + public tooltipOverwrite?: string; + protected copyToClipboardPressed = false; protected copyToClipboard(): void { diff --git a/src/Turnierplan.App/Client/src/app/portal/components/manage-applications/manage-applications.component.html b/src/Turnierplan.App/Client/src/app/portal/components/manage-applications/manage-applications.component.html index 73ba5dd1..f2a386be 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/manage-applications/manage-applications.component.html +++ b/src/Turnierplan.App/Client/src/app/portal/components/manage-applications/manage-applications.component.html @@ -19,7 +19,14 @@ - + + + @if (combinedEmailAddresses && combinedEmailAddresses.length > 0) { + + } + diff --git a/src/Turnierplan.App/Client/src/app/portal/components/manage-applications/manage-applications.component.ts b/src/Turnierplan.App/Client/src/app/portal/components/manage-applications/manage-applications.component.ts index 7f9e99f7..6157e318 100644 --- a/src/Turnierplan.App/Client/src/app/portal/components/manage-applications/manage-applications.component.ts +++ b/src/Turnierplan.App/Client/src/app/portal/components/manage-applications/manage-applications.component.ts @@ -77,6 +77,7 @@ export class ManageApplicationsComponent implements OnDestroy { protected pageSize = 15; protected isLoading = false; protected result?: PaginationResultDtoOfApplicationDto; + protected combinedEmailAddresses?: string = undefined; protected showTeamsApplicationId?: number; protected updatingNotesOfApplicationId?: number; protected updatingLabelsOfApplicationTeamId?: number; @@ -117,6 +118,15 @@ export class ManageApplicationsComponent implements OnDestroy { this.result = result; this.isLoading = false; + if (result.items.length === 0) { + this.combinedEmailAddresses = undefined; + } else { + this.combinedEmailAddresses = result.items + .map((application) => application.contactEmail) + .filter((mail) => !!mail) + .join(' '); + } + if (result.items.length === 1) { this.showTeamsApplicationId = result.items[0].id; } else if (this.showTeamsApplicationId !== undefined && !result.items.some((x) => x.id === this.showTeamsApplicationId)) { diff --git a/src/Turnierplan.App/Program.cs b/src/Turnierplan.App/Program.cs index c5c7fcc6..8dc16a68 100644 --- a/src/Turnierplan.App/Program.cs +++ b/src/Turnierplan.App/Program.cs @@ -118,6 +118,5 @@ // Public class definition is required for functional tests public sealed partial class Program; -// TODO: Button, um alle EMail Adressen zu kopieren in der aktuellen Anmeldungs Übersicht // TODO: Möglichkeit, Anmeldungen zu löschen // TODO: Möglichkeit, nachträglich Mannscahft zu Anmeldung hinzuzufügen From 5eb8c15e1c859302b452b9e9ffabf2f24a98246a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Mon, 29 Sep 2025 18:47:18 +0200 Subject: [PATCH 7/9] Footer layout improvement --- src/Turnierplan.App/Pages/Shared/_Layout.cshtml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Turnierplan.App/Pages/Shared/_Layout.cshtml b/src/Turnierplan.App/Pages/Shared/_Layout.cshtml index 91293ef6..52fb94a9 100644 --- a/src/Turnierplan.App/Pages/Shared/_Layout.cshtml +++ b/src/Turnierplan.App/Pages/Shared/_Layout.cshtml @@ -75,12 +75,14 @@