From c852a0219fb8db2ef3b807c906714f1d8b94de82 Mon Sep 17 00:00:00 2001 From: Taken Date: Sun, 28 Sep 2025 00:18:58 +0200 Subject: [PATCH] Updated guild members page --- .../guild/[value]/_components/members.tsx | 31 +++++++++++++++---- src/app/(stats)/guild/[value]/page.tsx | 2 +- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/app/(stats)/guild/[value]/_components/members.tsx b/src/app/(stats)/guild/[value]/_components/members.tsx index 2d258e1..b046c8a 100644 --- a/src/app/(stats)/guild/[value]/_components/members.tsx +++ b/src/app/(stats)/guild/[value]/_components/members.tsx @@ -6,7 +6,10 @@ import { getColor } from "@/lib/colors" import { formatDate, formatNumber } from "@/lib/formatters" import { head } from "@/lib/hypixel/general" import { Guild } from "@/lib/schema/guild" -import { PlayerForGuild } from "@/lib/schema/player" +import { playerForGuildSchema } from "@/lib/schema/player" +import z from "zod" + +type PlayerForGuild = z.infer import Image from "next/image" import Link from "next/link" import { useEffect, useState } from "react" @@ -17,7 +20,7 @@ type MemberWithPlayer = Guild["guild"]["members"][number] & { error?: boolean } -export function GuildMembers({ members: mem }: { members: Guild["guild"]["members"] }) { +export function GuildMembers({ members: mem, ranks }: { members: Guild["guild"]["members"], ranks: Guild["guild"]["ranks"] }) { const [members, setMembers] = useState( mem.map(member => ({ ...member, loading: false, error: false })) ) @@ -69,7 +72,23 @@ export function GuildMembers({ members: mem }: { members: Guild["guild"]["member - {members.filter(member => member.player).map((member, i) => )} + {members.filter(member => member.player).sort((a, b) => { + // Guild Master always comes first + if (a.rank === "Guild Master" && b.rank !== "Guild Master") return -1 + if (b.rank === "Guild Master" && a.rank !== "Guild Master") return 1 + + const aRank = ranks?.find(rank => rank.name === a.rank) + const bRank = ranks?.find(rank => rank.name === b.rank) + + const aPriority = aRank?.priority ?? Number.MIN_SAFE_INTEGER + const bPriority = bRank?.priority ?? Number.MIN_SAFE_INTEGER + + if (aPriority !== bPriority) { + return bPriority - aPriority + } + + return a.uuid.localeCompare(b.uuid) + }).map((member, i) => )} {currentIndex < members.length && ( @@ -88,9 +107,9 @@ function MemberCard({ member: m }: { member: MemberWithPlayer }) { {"Member
- +