OOKNET                             [ /  search the index  ]  
──────────────────────────────────────────────────────────────────────────────────────
══════════════════════════════════════════════════════════════════════════════════════
OOKNET   [ /  search  ]  
────────────────────────────────────────────────
════════════════════════════════════════════════
 
 
master @ 74 LINES
 
[ HISTORY ]  [ UP ]
 

---
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>

---
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