master @ 86 LINES
[ HISTORY ] [ UP ]
┌─ ASTRO ────────────────────────────────────────────────────────────────────┐
│ --- │
│ import "./ChallengeRun.scss"; │
│ import { formatShortDate } from "../../../lib/utils"; │
│ import { getDungeonIconUrl } from "../../../lib/dungeonIcons"; │
│ import TeamComposition from "../../Leaderboard/TeamComposition/TeamComposition.ast │
│ ro"; │
│ import DungeonTime from "../../DungeonTime/DungeonTime.astro"; │
│ import type { TeamMember } from "../../../lib/types"; │
│ │
│ interface Props { │
│ dungeonName: string; │
│ dungeonSlug: string; │
│ durationMs: number; │
│ completedTimestamp: number; │
│ teamMembers: TeamMember[]; │
│ showDungeonIcon?: boolean; │
│ showDungeonName?: boolean; │
│ rank?: number; │
│ bracket?: string; │
│ seasonId?: number; │
│ } │
│ │
│ const { │
│ dungeonName, │
│ dungeonSlug, │
│ durationMs, │
│ completedTimestamp, │
│ teamMembers, │
│ showDungeonIcon = true, │
│ showDungeonName = true, │
│ rank, │
│ bracket, │
│ seasonId = 3, │
│ } = Astro.props; │
│ │
│ const dungeonIcon = getDungeonIconUrl(dungeonSlug, dungeonName); │
│ const bracketClass = bracket ? `bracket-${bracket}` : ""; │
│ --- │
│ │
│ <article class="challenge-run"> │
│ { │
│ showDungeonIcon && dungeonIcon && ( │
│ <a │
│ class="challenge-run__dungeon" │
│ href={`/challenge-mode/season${seasonId}/global/${dungeonSlug}`} │
│ title={dungeonName} │
│ > │
│ <img src={dungeonIcon} alt={dungeonName} loading="lazy" /> │
│ </a> │
│ ) │
│ } │
│ │
│ { │
│ rank && ( │
│ <span │
│ class:list={["challenge-run__rank", "ranking-number", bracketClass]} │
│ > │
│ {rank} │
│ </span> │
│ ) │
│ } │
│ │
│ { │
│ showDungeonName && ( │
│ <span class="challenge-run__dungeon-name">{dungeonName}</span> │
│ ) │
│ } │
│ │
│ <div class="challenge-run__team"> │
│ <TeamComposition members={teamMembers} /> │
│ </div> │
│ │
│ <DungeonTime │
│ class="challenge-run__duration" │
│ dungeonSlug={dungeonSlug} │
│ durationMs={durationMs} │
│ /> │
│ │
│ <time │
│ class="challenge-run__date" │
│ datetime={new Date(completedTimestamp).toISOString()} │
│ title={new Date(completedTimestamp).toLocaleString()} │
│ > │
│ {formatShortDate(completedTimestamp)} │
│ </time> │
│ </article> │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ ASTRO ──────────────────────────────┐
│ --- │
│ import "./ChallengeRun.scss"; │
│ import { formatShortDate } from "../../../li │
│ b/utils"; │
│ import { getDungeonIconUrl } from "../../../ │
│ lib/dungeonIcons"; │
│ import TeamComposition from "../../Leaderboa │
│ rd/TeamComposition/TeamComposition.astro"; │
│ import DungeonTime from "../../DungeonTime/D │
│ ungeonTime.astro"; │
│ import type { TeamMember } from "../../../li │
│ b/types"; │
│ │
│ interface Props { │
│ dungeonName: string; │
│ dungeonSlug: string; │
│ durationMs: number; │
│ completedTimestamp: number; │
│ teamMembers: TeamMember[]; │
│ showDungeonIcon?: boolean; │
│ showDungeonName?: boolean; │
│ rank?: number; │
│ bracket?: string; │
│ seasonId?: number; │
│ } │
│ │
│ const { │
│ dungeonName, │
│ dungeonSlug, │
│ durationMs, │
│ completedTimestamp, │
│ teamMembers, │
│ showDungeonIcon = true, │
│ showDungeonName = true, │
│ rank, │
│ bracket, │
│ seasonId = 3, │
│ } = Astro.props; │
│ │
│ const dungeonIcon = getDungeonIconUrl(dungeo │
│ nSlug, dungeonName); │
│ const bracketClass = bracket ? `bracket-${br │
│ acket}` : ""; │
│ --- │
│ │
│ <article class="challenge-run"> │
│ { │
│ showDungeonIcon && dungeonIcon && ( │
│ <a │
│ class="challenge-run__dungeon" │
│ href={`/challenge-mode/season${seaso │
│ nId}/global/${dungeonSlug}`} │
│ title={dungeonName} │
│ > │
│ <img src={dungeonIcon} alt={dungeonN │
│ ame} loading="lazy" /> │
│ </a> │
│ ) │
│ } │
│ │
│ { │
│ rank && ( │
│ <span │
│ class:list={["challenge-run__rank", │
│ "ranking-number", bracketClass]} │
│ > │
│ {rank} │
│ </span> │
│ ) │
│ } │
│ │
│ { │
│ showDungeonName && ( │
│ <span class="challenge-run__dungeon-na │
│ me">{dungeonName}</span> │
│ ) │
│ } │
│ │
│ <div class="challenge-run__team"> │
│ <TeamComposition members={teamMembers} / │
│ > │
│ </div> │
│ │
│ <DungeonTime │
│ class="challenge-run__duration" │
│ dungeonSlug={dungeonSlug} │
│ durationMs={durationMs} │
│ /> │
│ │
│ <time │
│ class="challenge-run__date" │
│ datetime={new Date(completedTimestamp).t │
│ oISOString()} │
│ title={new Date(completedTimestamp).toLo │
│ caleString()} │
│ > │
│ {formatShortDate(completedTimestamp)} │
│ </time> │
│ </article> │
└──────────────────────────────────────────────┘
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET