Skip to content

Commit c666067

Browse files
Outfactor user2icon
1 parent 140a505 commit c666067

2 files changed

Lines changed: 19 additions & 20 deletions

File tree

frontend/src/app/menu/user-menu/user-menu.component.ts

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import { Component, DestroyRef, OnInit } from "@angular/core";
2-
import { filter, map, Observable } from "rxjs";
2+
import { filter, map } from "rxjs";
33
import { AuthService } from "../../services/auth.service";
44
import { Router, RouterModule } from "@angular/router";
55
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
66
import { CommonModule } from "@angular/common";
7-
import { faUser, faUserAstronaut, faUserGraduate, faUserTag } from "@fortawesome/free-solid-svg-icons";
87
import { FontAwesomeModule } from "@fortawesome/angular-fontawesome";
98
import { ToastService } from "../../services/toast.service";
109
import { NgbDropdownModule } from "@ng-bootstrap/ng-bootstrap";
11-
import { UserRole } from "@/user/models/user";
10+
import user2icon from "@/shared/user2icon";
1211

1312
@Component({
1413
selector: "la-user-menu",
@@ -24,23 +23,7 @@ export class UserMenuComponent implements OnInit {
2423

2524
public user$ = this.authService.currentUser$;
2625

27-
public userIcon$ = this.user$.pipe(
28-
map(user => {
29-
if (!user) {
30-
return faUser;
31-
}
32-
switch (user.role) {
33-
case UserRole.SUPERUSER:
34-
return faUserAstronaut;
35-
case UserRole.ANNOTATOR:
36-
return faUserTag;
37-
case UserRole.MASTER_ANNOTATOR:
38-
return faUserGraduate;
39-
case UserRole.VISITOR:
40-
return faUser;
41-
}
42-
})
43-
);
26+
public userIcon$ = this.user$.pipe(map(user2icon));
4427

4528
public showSignIn$ = this.authService.currentUser$.pipe(
4629
map((user) => user === null)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { User, UserRole } from "@/user/models/user";
2+
import { IconDefinition } from "@fortawesome/angular-fontawesome";
3+
import { faUser, faUserAstronaut, faUserGraduate, faUserTag } from "@fortawesome/free-solid-svg-icons";
4+
5+
const DEFAULT_USER_ICON = faUser;
6+
7+
const ROLE_ICONS: Record<UserRole, IconDefinition> = {
8+
[UserRole.SUPERUSER]: faUserAstronaut,
9+
[UserRole.ANNOTATOR]: faUserTag,
10+
[UserRole.MASTER_ANNOTATOR]: faUserGraduate,
11+
[UserRole.VISITOR]: faUser,
12+
};
13+
14+
export default function user2icon(user: User | null | undefined): IconDefinition {
15+
return user ? ROLE_ICONS[user.role] : DEFAULT_USER_ICON;
16+
}

0 commit comments

Comments
 (0)