master @ 74 LINES
[ HISTORY ] [ UP ]
┌─ ASTRO ────────────────────────────────────────────────────────────────────┐
│ --- │
│ import type { TeamMember } from "../../../lib/types"; │
│ import PlayerLink from "../PlayerLink/PlayerLink.astro"; │
│ import { getSpecInfo } from "../../../lib/wow-constants"; │
│ import { getEffectiveRealmSlug } from "../../../lib/realms"; │
│ import "./TeamComposition.scss"; │
│ │
│ interface Props { │
│ members: TeamMember[]; │
│ currentRegion?: string; │
│ currentRealm?: string; │
│ } │
│ │
│ const { members = [], currentRegion, currentRealm } = Astro.props; │
│ │
│ // Only show cross-realm indicators when viewing a specific realm (not "all" or "g │
│ lobal") │
│ const showCrossRealmIndicators = │
│ currentRegion && │
│ currentRealm && │
│ currentRealm !== "all" && │
│ currentRegion !== "global"; │
│ │
│ const effectiveLeaderboardRealm = │
│ showCrossRealmIndicators && currentRegion && currentRealm │
│ ? getEffectiveRealmSlug(currentRegion, currentRealm) │
│ : undefined; │
│ │
│ // sort members by role: tank -> healer -> dps, then alphabetically by name │
│ const roleOrder: Record<string, number> = { tank: 0, healer: 1, dps: 2 }; │
│ const sortedMembers = [...members].sort((a, b) => { │
│ const aSpec = getSpecInfo(a.spec_id); │
│ const bSpec = getSpecInfo(b.spec_id); │
│ const aRole = aSpec?.role || "dps"; │
│ const bRole = bSpec?.role || "dps"; │
│ const aWeight = roleOrder[aRole] ?? 99; │
│ const bWeight = roleOrder[bRole] ?? 99; │
│ │
│ // sort by role first │
│ if (aWeight !== bWeight) return aWeight - bWeight; │
│ │
│ // then by name │
│ return a.name.localeCompare(b.name); │
│ }); │
│ --- │
│ │
│ <div class="team-composition"> │
│ { │
│ sortedMembers.map((member) => { │
│ const memberEffectiveRealm = getEffectiveRealmSlug( │
│ member.region || currentRegion, │
│ member.realm_slug, │
│ ); │
│ │
│ const isCrossRealm = │
│ showCrossRealmIndicators && │
│ effectiveLeaderboardRealm && │
│ memberEffectiveRealm && │
│ memberEffectiveRealm !== effectiveLeaderboardRealm; │
│ │
│ return ( │
│ <span class="team-member"> │
│ <PlayerLink │
│ name={member.name} │
│ specId={member.spec_id} │
│ region={member.region || "us"} │
│ realmSlug={member.realm_slug} │
│ /> │
│ {isCrossRealm && <span class="cross-realm-indicator">*</span>} │
│ </span> │
│ ); │
│ }) │
│ } │
│ </div> │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ ASTRO ──────────────────────────────┐
│ --- │
│ import type { TeamMember } from "../../../li │
│ b/types"; │
│ import PlayerLink from "../PlayerLink/Player │
│ Link.astro"; │
│ import { getSpecInfo } from "../../../lib/wo │
│ w-constants"; │
│ import { getEffectiveRealmSlug } from "../.. │
│ /../lib/realms"; │
│ import "./TeamComposition.scss"; │
│ │
│ interface Props { │
│ members: TeamMember[]; │
│ currentRegion?: string; │
│ currentRealm?: string; │
│ } │
│ │
│ const { members = [], currentRegion, current │
│ Realm } = Astro.props; │
│ │
│ // Only show cross-realm indicators when vie │
│ wing a specific realm (not "all" or "global" │
│ ) │
│ const showCrossRealmIndicators = │
│ currentRegion && │
│ currentRealm && │
│ currentRealm !== "all" && │
│ currentRegion !== "global"; │
│ │
│ const effectiveLeaderboardRealm = │
│ showCrossRealmIndicators && currentRegion │
│ && currentRealm │
│ ? getEffectiveRealmSlug(currentRegion, c │
│ urrentRealm) │
│ : undefined; │
│ │
│ // sort members by role: tank -> healer -> d │
│ ps, then alphabetically by name │
│ const roleOrder: Record<string, number> = { │
│ tank: 0, healer: 1, dps: 2 }; │
│ const sortedMembers = [...members].sort((a, │
│ b) => { │
│ const aSpec = getSpecInfo(a.spec_id); │
│ const bSpec = getSpecInfo(b.spec_id); │
│ const aRole = aSpec?.role || "dps"; │
│ const bRole = bSpec?.role || "dps"; │
│ const aWeight = roleOrder[aRole] ?? 99; │
│ const bWeight = roleOrder[bRole] ?? 99; │
│ │
│ // sort by role first │
│ if (aWeight !== bWeight) return aWeight - │
│ bWeight; │
│ │
│ // then by name │
│ return a.name.localeCompare(b.name); │
│ }); │
│ --- │
│ │
│ <div class="team-composition"> │
│ { │
│ sortedMembers.map((member) => { │
│ const memberEffectiveRealm = getEffect │
│ iveRealmSlug( │
│ member.region || currentRegion, │
│ member.realm_slug, │
│ ); │
│ │
│ const isCrossRealm = │
│ showCrossRealmIndicators && │
│ effectiveLeaderboardRealm && │
│ memberEffectiveRealm && │
│ memberEffectiveRealm !== effectiveLe │
│ aderboardRealm; │
│ │
│ return ( │
│ <span class="team-member"> │
│ <PlayerLink │
│ name={member.name} │
│ specId={member.spec_id} │
│ region={member.region || "us"} │
│ realmSlug={member.realm_slug} │
│ /> │
│ {isCrossRealm && <span class="cros │
│ s-realm-indicator">*</span>} │
│ </span> │
│ ); │
│ }) │
│ } │
│ </div> │
└──────────────────────────────────────────────┘
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET