add role colors
This commit is contained in:
parent
16c34adc19
commit
d2be3d833b
101
projects/common/src/scoresaber.util.ts
Normal file
101
projects/common/src/scoresaber.util.ts
Normal file
@ -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>
|
||||||
|
Reference in New Issue
Block a user