add role colors
All checks were successful
Deploy Backend / docker (ubuntu-latest) (push) Successful in 45s
Deploy Website / docker (ubuntu-latest) (push) Successful in 2m11s

This commit is contained in:
Lee 2024-10-19 14:41:01 +01:00
parent 16c34adc19
commit d2be3d833b
3 changed files with 117 additions and 2 deletions

@ -0,0 +1,101 @@
import ScoreSaberPlayerToken from "./types/token/scoresaber/score-saber-player-token";
import ScoreSaberLeaderboardPlayerInfoToken from "./types/token/scoresaber/score-saber-leaderboard-player-info-token";
import ScoreSaberPlayer from "./player/impl/scoresaber-player";
type ScoreSaberRole = {
/**
* The name of the role.
*/
name: string;
/**
* The permissions for the role.
*/
permissions?: number;
/**
* The role for this role.
*/
role?: string;
/**
* The color of the role.
*/
color: string;
};
const scoreSaberPermission = {
RT: 1,
QAT: 2,
QATHead: 4,
NAT: 8,
ADMIN: 16,
PANDA: 32,
SUPPORTER: 64,
PPFARMER: 128,
};
export const scoreSaberRoles: ScoreSaberRole[] = [
{
name: "Admin",
permissions:
scoreSaberPermission.RT |
scoreSaberPermission.QAT |
scoreSaberPermission.QATHead |
scoreSaberPermission.NAT |
scoreSaberPermission.ADMIN,
color: "#bfdcf9",
},
{
name: "Head of Quality Assurance",
role: "Head of Quality Assurance",
permissions: scoreSaberPermission.QAT | scoreSaberPermission.QATHead,
color: "#ff006f",
},
{
name: "Nomination Assessment Team",
role: "Nomination Assessment",
permissions: scoreSaberPermission.RT | scoreSaberPermission.NAT,
color: "#0b64f0",
},
{
name: "Quality Assurance Team",
role: "Quality Assurance",
permissions: scoreSaberPermission.RT | scoreSaberPermission.NAT,
color: "#f70000",
},
{
name: "Ranking Team",
role: "Ranking Team",
permissions: scoreSaberPermission.RT,
color: "#1abc9c",
},
{
name: "Ranking Team Recruit",
role: "Recruit",
permissions: scoreSaberPermission.RT,
color: "#11806a",
},
{
name: "Supporter",
role: "Supporter",
color: "#f96854",
},
];
/**
* Gets the role for a player.
*
* @param player the player
* @returns the role
*/
export function getScoreSaberRole(
player: ScoreSaberPlayerToken | ScoreSaberLeaderboardPlayerInfoToken | ScoreSaberPlayer
): ScoreSaberRole | undefined {
const roles = player.role?.split(", ") || [player.role];
for (const role of scoreSaberRoles) {
if (roles.includes(role.name)) {
return role;
}
}
}

@ -13,6 +13,7 @@ import Link from "next/link";
import { capitalizeFirstLetter } from "@/common/string-utils"; import { capitalizeFirstLetter } from "@/common/string-utils";
import AddFriend from "@/components/friend/add-friend"; import AddFriend from "@/components/friend/add-friend";
import PlayerSteamProfile from "@/components/player/player-steam-profile"; import PlayerSteamProfile from "@/components/player/player-steam-profile";
import { getScoreSaberRole } from "@ssr/common/scoresaber.util";
/** /**
* Renders the change for a stat. * Renders the change for a stat.
@ -176,7 +177,14 @@ export default function PlayerHeader({ player }: Props) {
<div className="w-full flex gap-2 flex-col justify-center items-center lg:justify-start lg:items-start"> <div className="w-full flex gap-2 flex-col justify-center items-center lg:justify-start lg:items-start">
<div> <div>
<div className="flex gap-2 items-center justify-center lg:justify-start"> <div className="flex gap-2 items-center justify-center lg:justify-start">
<p className="font-bold text-2xl">{player.name}</p> <p
className="font-bold text-2xl"
style={{
color: getScoreSaberRole(player)?.color,
}}
>
{player.name}
</p>
<div className="absolute lg:relative top-0 left-0 flex flex-col lg:flex-row gap-2"> <div className="absolute lg:relative top-0 left-0 flex flex-col lg:flex-row gap-2">
<PlayerTrackedStatus player={player} /> <PlayerTrackedStatus player={player} />
<PlayerSteamProfile player={player} /> <PlayerSteamProfile player={player} />

@ -3,6 +3,7 @@ import CountryFlag from "@/components/country-flag";
import Link from "next/link"; import Link from "next/link";
import ScoreSaberPlayerToken from "@ssr/common/types/token/scoresaber/score-saber-player-token"; import ScoreSaberPlayerToken from "@ssr/common/types/token/scoresaber/score-saber-player-token";
import ScoreSaberLeaderboardPlayerInfoToken from "@ssr/common/types/token/scoresaber/score-saber-leaderboard-player-info-token"; import ScoreSaberLeaderboardPlayerInfoToken from "@ssr/common/types/token/scoresaber/score-saber-leaderboard-player-info-token";
import { getScoreSaberRole } from "@ssr/common/scoresaber.util";
type TablePlayerProps = { type TablePlayerProps = {
/** /**
@ -27,7 +28,12 @@ export function TablePlayer({ player, claimedPlayer }: TablePlayerProps) {
</Avatar> </Avatar>
<CountryFlag code={player.country} size={12} /> <CountryFlag code={player.country} size={12} />
<Link className="transform-gpu transition-all hover:text-blue-500" href={`/player/${player.id}`}> <Link className="transform-gpu transition-all hover:text-blue-500" href={`/player/${player.id}`}>
<p className={player.id == claimedPlayer?.id ? "transform-gpu text-pp transition-all hover:brightness-75" : ""}> <p
className={player.id == claimedPlayer?.id ? "font-bold" : ""}
style={{
color: getScoreSaberRole(player)?.color,
}}
>
{player.name} {player.name}
</p> </p>
</Link> </Link>