diff --git a/src/app/components/items/user-preview.component.ts b/src/app/components/items/user-preview.component.ts index e6632865..f6cf513e 100644 --- a/src/app/components/items/user-preview.component.ts +++ b/src/app/components/items/user-preview.component.ts @@ -6,6 +6,7 @@ import {UserAvatarComponent} from "../ui/photos/user-avatar.component"; import {UserStatisticsComponent} from "./user-statistics.component"; import {UserStatusComponent} from "../ui/info/user-status.component"; +import { UserRoleComponent } from "../ui/info/user-role.component"; @Component({ selector: 'app-user-preview', @@ -13,7 +14,8 @@ import {UserStatusComponent} from "../ui/info/user-status.component"; UserRouterLinkComponent, UserAvatarComponent, UserStatisticsComponent, - UserStatusComponent + UserStatusComponent, + UserRoleComponent ], template: `
@@ -22,7 +24,8 @@ import {UserStatusComponent} from "../ui/info/user-status.component";
-

{{ user.username }}

+ {{ user.username }} +
diff --git a/src/app/components/ui/header/header-me-menu.component.ts b/src/app/components/ui/header/header-me-menu.component.ts index f8f53385..da8ea5fb 100644 --- a/src/app/components/ui/header/header-me-menu.component.ts +++ b/src/app/components/ui/header/header-me-menu.component.ts @@ -8,6 +8,7 @@ import {UserStatisticsComponent} from "../../items/user-statistics.component"; import {DividerComponent} from "../divider.component"; import {NavItem} from "./navtypes"; +import { UserRoleComponent } from "../info/user-role.component"; @Component({ selector: 'app-header-me-menu', @@ -16,7 +17,8 @@ import {NavItem} from "./navtypes"; UserAvatarComponent, UserRouterLinkComponent, UserStatisticsComponent, - DividerComponent + DividerComponent, + UserRoleComponent ], template: `
@@ -26,7 +28,8 @@ import {NavItem} from "./navtypes";
-

{{ user.username }}

+ {{ user.username }} +
diff --git a/src/app/components/ui/info/user-role.component.ts b/src/app/components/ui/info/user-role.component.ts new file mode 100644 index 00000000..1ed7d252 --- /dev/null +++ b/src/app/components/ui/info/user-role.component.ts @@ -0,0 +1,76 @@ +import {Component, Input} from '@angular/core'; +import { UserRoles } from '../../../api/types/users/user-roles'; +import { RolePipe } from '../../../pipes/role.pipe'; +import { FaIconComponent } from "@fortawesome/angular-fontawesome"; +import { IconProp } from '@fortawesome/fontawesome-svg-core'; +import { faUser, faUserAltSlash, faUserAstronaut, faUserCheck, faUserGear, faUserLock, faUserPen, faUserShield } from '@fortawesome/free-solid-svg-icons'; +import { TooltipComponent } from "../text/tooltip.component"; + +@Component({ + selector: 'app-user-role', + imports: [ + RolePipe, + FaIconComponent, + TooltipComponent +], + providers: [ + RolePipe + ], + template: ` + + + + @if (roleIcon) { + + } + @if (!short) { + {{ role | role }} + } + + + + ` +}) +export class UserRoleComponent { + @Input({required: true}) role: UserRoles = UserRoles.User; + @Input() short: boolean = false; + roleIcon: IconProp | undefined; + + ngOnInit() { + switch (this.role) { + case UserRoles.Admin: + this.roleIcon = this.faUserGear; + break; + case UserRoles.Moderator: + this.roleIcon = this.faUserShield; + break; + case UserRoles.Curator: + this.roleIcon = this.faUserPen; + break; + case UserRoles.Trusted: + this.roleIcon = this.faUserCheck; + break; + case UserRoles.User: + this.roleIcon = this.faUser; + break; + case UserRoles.Restricted: + this.roleIcon = this.faUserLock; + break; + case UserRoles.Banned: + this.roleIcon = this.faUserAltSlash; + break; + default: + this.roleIcon = this.faUserAstronaut; + break; + } + } + + protected readonly faUserGear = faUserGear; + protected readonly faUserShield = faUserShield; + protected readonly faUserPen = faUserPen; + protected readonly faUserCheck = faUserCheck; + protected readonly faUser = faUser; + protected readonly faUserAltSlash = faUserAltSlash; + protected readonly faUserLock = faUserLock; + protected readonly faUserAstronaut = faUserAstronaut; +} diff --git a/src/app/components/ui/text/wrappers/user-wrapper.component.ts b/src/app/components/ui/text/wrappers/user-wrapper.component.ts index 79aad976..ceea9650 100644 --- a/src/app/components/ui/text/wrappers/user-wrapper.component.ts +++ b/src/app/components/ui/text/wrappers/user-wrapper.component.ts @@ -8,7 +8,7 @@ import {User} from "../../../../api/types/users/user"; selector: 'app-user-wrapper', imports: [ UserAvatarComponent, - UserRouterLinkComponent + UserRouterLinkComponent, ], template: `
diff --git a/src/app/pages/user/user.component.html b/src/app/pages/user/user.component.html index aceefd82..bd0c9476 100644 --- a/src/app/pages/user/user.component.html +++ b/src/app/pages/user/user.component.html @@ -3,10 +3,13 @@ [description]="user.description | default: user.username + ' hasn\'t introduced themselves yet.'"> + + +
Joined
- +
diff --git a/src/app/pages/user/user.component.ts b/src/app/pages/user/user.component.ts index 24987084..c362f822 100644 --- a/src/app/pages/user/user.component.ts +++ b/src/app/pages/user/user.component.ts @@ -15,6 +15,7 @@ import { UserRelations } from '../../api/types/users/user-relations'; import { FancyHeaderUserButtonsComponent } from "../../components/ui/layouts/fancy-header-user-buttons.component"; import { ExtendedUser } from '../../api/types/users/extended-user'; import { AuthenticationService } from '../../api/authentication.service'; +import { UserRoleComponent } from "../../components/ui/info/user-role.component"; @Component({ selector: 'app-user', @@ -26,7 +27,8 @@ import { AuthenticationService } from '../../api/authentication.service'; AsyncPipe, UserStatusComponent, UserStatisticsComponent, - FancyHeaderUserButtonsComponent + FancyHeaderUserButtonsComponent, + UserRoleComponent ], templateUrl: './user.component.html', styles: ``