fix(roster): order rank groups by Payload _order index
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
parent
7090ebc253
commit
c7894cb664
1 changed files with 16 additions and 2 deletions
|
|
@ -214,11 +214,12 @@ function UnitBox({
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{leader && (
|
{leader && (
|
||||||
<div className="mb-2">
|
<div>
|
||||||
<span className="text-[10px] uppercase tracking-wider text-muted-foreground flex items-center gap-1 mb-1">
|
<span className="text-[10px] uppercase tracking-wider text-muted-foreground flex items-center gap-1 mb-1">
|
||||||
<CrownIcon className="size-3" /> Commanding
|
<CrownIcon className="size-3" /> Commanding
|
||||||
</span>
|
</span>
|
||||||
<MemberCard member={leader} />
|
<MemberCard member={leader} />
|
||||||
|
<hr className="my-2 w-1/3 mx-auto"/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|
@ -304,8 +305,21 @@ function ByRankView({ members }: { members: RosterMember[] }) {
|
||||||
list.push(m);
|
list.push(m);
|
||||||
grouped.set(m.rank.name, list);
|
grouped.set(m.rank.name, list);
|
||||||
}
|
}
|
||||||
|
for (const list of grouped.values()) list.sort(rosterMemberOrder);
|
||||||
|
|
||||||
const sorted = [...grouped.entries()].sort(([a], [b]) => a.localeCompare(b));
|
// `_order` is Payload's orderable fractional index: descending string
|
||||||
|
// compare = highest rank first (same convention as `rosterMemberOrder`).
|
||||||
|
// Ranks without `_order` sink to the bottom.
|
||||||
|
const sorted = [...grouped.entries()].sort(([, groupA], [, groupB]) => {
|
||||||
|
const aOrder = groupA[0].rank._order ?? null;
|
||||||
|
const bOrder = groupB[0].rank._order ?? null;
|
||||||
|
if (aOrder !== null && bOrder !== null && aOrder !== bOrder) {
|
||||||
|
return bOrder.localeCompare(aOrder);
|
||||||
|
}
|
||||||
|
if (aOrder === null && bOrder !== null) return 1;
|
||||||
|
if (aOrder !== null && bOrder === null) return -1;
|
||||||
|
return groupA[0].rank.name.localeCompare(groupB[0].rank.name);
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col gap-4">
|
<div className="flex flex-col gap-4">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue