diff --git a/frontend-angular-new/src/app/components/app/app.ts b/frontend-angular-new/src/app/components/app/app.ts index 45e330b..c188909 100644 --- a/frontend-angular-new/src/app/components/app/app.ts +++ b/frontend-angular-new/src/app/components/app/app.ts @@ -4,6 +4,7 @@ import {CommonModule} from '@angular/common'; import {MatIconModule} from '@angular/material/icon'; import {filter, map} from 'rxjs'; import {LanguageService} from '../../services/language'; +import {ThemeService} from '../../services/theme'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -15,6 +16,8 @@ import {LanguageService} from '../../services/language'; export class App { private router = inject(Router); private langService = inject(LanguageService); + // Iniettato qui per garantire l'inizializzazione del tema al primo caricamento + private themeService = inject(ThemeService); fillIcon = "'FILL' 1"; showBottomNav$ = this.router.events.pipe( diff --git a/frontend-angular-new/src/app/components/bet-history/bet-history.html b/frontend-angular-new/src/app/components/bet-history/bet-history.html index 948b8ce..8c17928 100644 --- a/frontend-angular-new/src/app/components/bet-history/bet-history.html +++ b/frontend-angular-new/src/app/components/bet-history/bet-history.html @@ -36,47 +36,53 @@ -
-
-

Loading history...

-
+ @if (isLoading()) { +
+
+

Loading history...

+
+ } @else { +
+ @for (challenge of historyChallenges(); track challenge.id) { +
+
+
+
+ history +
+
+

{{ challenge.title }}

+

{{ challenge.endDate | date:'mediumDate' }}

+
+
+ + {{ challenge.status }} + +
+
+
+ groups + {{ challenge.participants.length }} +
+
€{{ challenge.stake }}
+
+
+ } -
-
-
-
-
- history -
-
-

{{ challenge.title }}

-

{{ challenge.endDate | date:'mediumDate' }}

-
+ @if (historyChallenges().length === 0) { +
+ history_toggle_off +

No History Found

+

Try searching for something else or join a new bet!

- - {{ challenge.status }} - -
-
-
- groups - {{ challenge.participants.length }} -
-
€{{ challenge.stake }}
-
+ }
- -
- history_toggle_off -

No History Found

-

Try searching for something else or join a new bet!

-
-
+ }
diff --git a/frontend-angular-new/src/app/components/challenge-detail/challenge-detail.html b/frontend-angular-new/src/app/components/challenge-detail/challenge-detail.html index f2e6b89..1ad1723 100644 --- a/frontend-angular-new/src/app/components/challenge-detail/challenge-detail.html +++ b/frontend-angular-new/src/app/components/challenge-detail/challenge-detail.html @@ -60,15 +60,25 @@ {{ data.participants.length }} Joined
-
-
- Participant -
- visibility + @for (p of data.participants; track $index) { +
+
+ @if ($any(p.user)?.avatarUrl) { + + } @else { +
+ person +
+ } + @if (p.role === 'OBSERVER') { +
+ visibility +
+ }
+ {{ $any(p.user)?.name || 'Utente' }}
- User #{{ p.user }} -
+ }
} @else { diff --git a/frontend-angular-new/src/app/components/create-bet/create-bet.html b/frontend-angular-new/src/app/components/create-bet/create-bet.html index cbb6db8..b9df20f 100644 --- a/frontend-angular-new/src/app/components/create-bet/create-bet.html +++ b/frontend-angular-new/src/app/components/create-bet/create-bet.html @@ -45,7 +45,9 @@
expand_more
@@ -83,36 +85,43 @@ class="w-full bg-surface-container rounded-full pl-12 pr-6 py-3 focus:ring-2 focus:ring-primary text-sm border-none"> -
-
- -
-

{{ user.name }}

-

{{ user.email }}

-
- add_circle + @if (searchResults().length > 0) { +
+ @for (user of searchResults(); track user.id) { +
+ +
+

{{ user.name }}

+

{{ user.email }}

+
+ add_circle +
+ }
-
+ }
-
-
- Participant - + @for (user of selectedParticipants(); track user.id) { +
+
+ Participant + +
+

{{ user.name }}

-

{{ user.name }}

-
- -
- Add at least one participant... -
+ } + + @if (selectedParticipants().length === 0) { +
+ Add at least one participant... +
+ }
diff --git a/frontend-angular-new/src/app/components/create-bet/create-bet.ts b/frontend-angular-new/src/app/components/create-bet/create-bet.ts index 51e1410..d2bed8c 100644 --- a/frontend-angular-new/src/app/components/create-bet/create-bet.ts +++ b/frontend-angular-new/src/app/components/create-bet/create-bet.ts @@ -66,7 +66,7 @@ export class CreateBet implements OnInit { if (bet) { this.isEditing = true; - this.editingId = bet._id || bet.id; + this.editingId = bet.id; this.betForm.patchValue({ title: bet.title, description: bet.description, diff --git a/frontend-angular-new/src/app/components/create-group/create-group.html b/frontend-angular-new/src/app/components/create-group/create-group.html index 6fe3e17..5f2b477 100644 --- a/frontend-angular-new/src/app/components/create-group/create-group.html +++ b/frontend-angular-new/src/app/components/create-group/create-group.html @@ -77,32 +77,36 @@ class="w-full bg-surface-container-low rounded-full py-3 pl-12 pr-6 border-none focus:ring-2 focus:ring-primary/20"> -
-
- -
-

{{ user.name }}

-

{{ user.email }}

-
- person_add + @if (searchResults().length > 0) { +
+ @for (user of searchResults(); track user.id) { +
+ +
+

{{ user.name }}

+

{{ user.email }}

+
+ person_add +
+ }
-
+ }
-
-
- Member -

{{ member.name }}

+ @for (member of selectedMembers(); track member.id) { +
+
+ Member +

{{ member.name }}

+
+
- -
+ }
diff --git a/frontend-angular-new/src/app/components/explore/explore.html b/frontend-angular-new/src/app/components/explore/explore.html index ecd8919..fb4b387 100644 --- a/frontend-angular-new/src/app/components/explore/explore.html +++ b/frontend-angular-new/src/app/components/explore/explore.html @@ -81,55 +81,62 @@
-
-
-

Scanning the arena...

-
- -
- -
-
-
-
- public -
-
-

Public Challenge

-

{{ bet.title }}

-
-
-
- Stake - €{{ bet.stake }} -
-
- -

{{ bet.description || 'Join this public bet and prove your skills!' }}

- -
-
-
- User -
- {{ bet.participants.length }} Participants -
-
- share - bookmark_border -
-
+ @if (isLoading()) { +
+
+

Scanning the arena...

+ } @else { +
+ + @for (bet of publicBets(); track bet.id) { +
+
+
+
+ public +
+
+

Public Challenge

+

{{ bet.title }}

+
+
+
+ Stake + €{{ bet.stake }} +
+
-
- public_off -

No Public Bets

-

The arena is quiet right now. Why not create a public bet?

- +

{{ bet.description || 'Join this public bet and prove your skills!' }}

+ +
+
+
+ @for (p of bet.participants.slice(0, 3); track $index) { + User + } +
+ {{ bet.participants.length }} Participants +
+
+ share + bookmark_border +
+
+
+ } + + @if (publicBets().length === 0) { +
+ public_off +

No Public Bets

+

The arena is quiet right now. Why not create a public bet?

+ +
+ }
-
+ }
diff --git a/frontend-angular-new/src/app/components/group-detail/group-detail.html b/frontend-angular-new/src/app/components/group-detail/group-detail.html index 3860938..d36c0da 100644 --- a/frontend-angular-new/src/app/components/group-detail/group-detail.html +++ b/frontend-angular-new/src/app/components/group-detail/group-detail.html @@ -30,17 +30,25 @@
- - lock - PRIVATE - + @if (data.isPrivate) { + + lock + PRIVATE + + }

{{ data.name }}

{{ data.members?.length || 0 }} Members

-
- -
+{{ data.members.length - 3 }}
-
+ @if (data.members && data.members.length > 0) { +
+ @for (member of data.members.slice(0, 3); track $index) { + + } + @if (data.members.length > 3) { +
+{{ data.members.length - 3 }}
+ } +
+ }
@@ -58,16 +66,18 @@ Manage
-
-
- Member -
-

{{ member.name }}

-

Score: {{ member.score }}

+ @for (member of data.members; track member.id) { +
+
+ Member +
+

{{ member.name }}

+

Score: {{ member.score }}

+
+ chevron_right
- chevron_right -
+ }
} @else { diff --git a/frontend-angular-new/src/app/components/groups/groups.html b/frontend-angular-new/src/app/components/groups/groups.html index 1956447..b001e1b 100644 --- a/frontend-angular-new/src/app/components/groups/groups.html +++ b/frontend-angular-new/src/app/components/groups/groups.html @@ -25,38 +25,52 @@ -
-
-

Loading your groups...

-
+ @if (isLoading()) { +
+
+

Loading your groups...

+
+ } @else { +
+ @for (group of groupsList(); track group.id) { +
+
+
+ Group Icon +
+ @if (group.isPrivate) { + Private + } +
+
+

{{ group.name }}

+

{{ group.description || 'No description' }}

+
+
+ @if (group.members && group.members.length > 0) { +
+ @for (member of group.members.slice(0, 3); track $index) { + + } + @if (group.members.length > 3) { +
+{{ group.members.length - 3 }}
+ } +
+ } + {{ group.members?.length || 0 }} Members +
+
+ } -
-
-
-
- Group Icon + @if (groupsList().length === 0) { +
+ groups +

You haven't joined any groups yet.

+
- Private -
-
-

{{ group.name }}

-

{{ group.description || 'No description' }}

-
-
-
- -
+{{ group.members.length - 3 }}
-
- {{ group.members?.length || 0 }} Members -
+ }
- -
- groups -

You haven't joined any groups yet.

- -
-
+ }
diff --git a/frontend-angular-new/src/app/components/home/home.ts b/frontend-angular-new/src/app/components/home/home.ts index b3cffba..367deca 100644 --- a/frontend-angular-new/src/app/components/home/home.ts +++ b/frontend-angular-new/src/app/components/home/home.ts @@ -84,7 +84,7 @@ export class Home { }; const prize = parseFloat(bet.stake.replace(/[^0-9.]/g, '')) || 0; return { - id: bet._id, + id: bet.id, title: bet.title, description: bet.description ?? '', target: 100, // Default target diff --git a/frontend-angular-new/src/app/components/profile/profile.html b/frontend-angular-new/src/app/components/profile/profile.html index 6a7798b..5a1e302 100644 --- a/frontend-angular-new/src/app/components/profile/profile.html +++ b/frontend-angular-new/src/app/components/profile/profile.html @@ -2,8 +2,11 @@
- User Avatar - person + @if (userProfile()?.avatarUrl) { + User Avatar + } @else { + person + }

{{ t('nav.profile') }}

diff --git a/frontend-angular-new/src/app/models/data.models.ts b/frontend-angular-new/src/app/models/data.models.ts index 16d4ad4..2c5b95c 100644 --- a/frontend-angular-new/src/app/models/data.models.ts +++ b/frontend-angular-new/src/app/models/data.models.ts @@ -49,12 +49,12 @@ export type BetStatus = 'ACTIVE' | 'AWAITING_VALIDATION' | 'COMPLETED' | 'EXPIRE export type ParticipantRole = 'PARTICIPANT' | 'OBSERVER'; export interface BetParticipant { - user: string; // PostgreSQL User ID + user: User | string | number; // popolato dal backend con l'oggetto User role: ParticipantRole; } export interface Bet { - _id: string; + id: string; title: string; description?: string; stake: string;