From f10c3ab2d3f8fa2a9e42637381a48826b277282f Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Thu, 10 Apr 2025 02:08:27 +0200 Subject: [PATCH] Refactor team component to use dynamic data loading Replaced static member entries with dynamic rendering using `getTeamMembers` for better scalability. Added caching and data deduplication logic to optimize API calls. This enhances maintainability and reduces redundancy in the team component. --- frontend/src/app/team/team.component.html | 44 ++++++++++++++++++----- frontend/src/app/team/team.component.ts | 28 ++++++++++----- 2 files changed, 55 insertions(+), 17 deletions(-) diff --git a/frontend/src/app/team/team.component.html b/frontend/src/app/team/team.component.html index f6c0fd5..38ea691 100644 --- a/frontend/src/app/team/team.component.html +++ b/frontend/src/app/team/team.component.html @@ -12,17 +12,16 @@

Management

-
- akastijn's Minecraft skin -

akastijn

+
+ {{members.name}}'s Minecraft skin +

{{ members.name }}

Owner

-

{{ members }}

-
- akalexu's Minecraft skin -

akalexu

+
+ {{members.name}}'s Minecraft skin +

{{ members.name }}

Manager

@@ -30,16 +29,43 @@

Admins

+
+ {{members.name}}'s Minecraft skin +

{{ members.name }}

+

Admin

+

Head Moderators

+
+ {{members.name}}'s Minecraft skin +

{{ members.name }}

+

Admin

+

Moderators

+
+ {{members.name}}'s Minecraft skin +

{{ members.name }}

+
+
+
+
+
+

Trainees

+
+ {{members.name}}'s Minecraft skin +

{{ members.name }}

+
diff --git a/frontend/src/app/team/team.component.ts b/frontend/src/app/team/team.component.ts index 52f9290..4203e83 100644 --- a/frontend/src/app/team/team.component.ts +++ b/frontend/src/app/team/team.component.ts @@ -1,9 +1,10 @@ import {Component} from '@angular/core'; import {ScrollService} from '../scroll/scroll.service'; -import {BASE_PATH, TeamMember, TeamService} from '../../api'; +import {BASE_PATH, Player, TeamService} from '../../api'; import {CommonModule, NgOptimizedImage} from '@angular/common'; import {HeaderComponent} from '../header/header.component'; import {CookieService} from 'ngx-cookie-service'; +import {map, Observable, shareReplay} from 'rxjs'; @Component({ selector: 'app-team', @@ -22,14 +23,25 @@ import {CookieService} from 'ngx-cookie-service'; styleUrl: './team.component.scss' }) export class TeamComponent { - public members: TeamMember[] = []; + + private teamMembersCache: { [key: string]: Observable } = {}; constructor(public scrollService: ScrollService, public teamApi: TeamService) { - console.log("TeamComponent") - teamApi.getTeamMembers("test").subscribe(res => { - console.log(res) - console.log("AHH") - this.members = res; - }); + } + + public getTeamMembers(team: string): Observable { + if (!this.teamMembersCache[team]) { + this.teamMembersCache[team] = this.teamApi.getTeamMembers(team).pipe( + map(res => this.removeDuplicates(res)), + shareReplay(1) + ); + } + return this.teamMembersCache[team]; + } + + private removeDuplicates(array: Player[]): Player[] { + return array.filter((player, index, self) => + index === self.findIndex((p) => p.uuid === player.uuid) + ); } }