brackt/app/components/league/SportIcon.tsx
Chris Parsons e201ecd28a
Extract reusable league wizard components; wire settings page (#350)
* Extract reusable league wizard components; wire settings page (#103)

Extracts 9 domain components from new.tsx and $leagueId.settings.tsx into
app/components/league/ (each with a Storybook story), consolidates wizard
form-building into wizard-state.ts, and updates the settings page to use
the shared components instead of hand-rolled duplicates. new.tsx shrinks
from ~2000 → ~1280 lines.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix sports-season test: add participants to mock data

findDraftableSportsSeasons now returns participantCount, which requires
participants in the mock db response.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix sports-season test: loosen makeMockDb type to Record<string, unknown>[]

typeof mockSeasons became too strict after adding participants to the mock
data, breaking inline arrays in other tests that don't include participants.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:24:13 -07:00

20 lines
696 B
TypeScript

export interface SportIconProps {
sport: { name: string; iconUrl: string | null };
size?: "sm" | "md";
}
export function SportIcon({ sport, size = "md" }: SportIconProps) {
const cls = size === "sm" ? "w-4 h-4" : "w-5 h-5";
if (sport.iconUrl) {
const isAbsolute = sport.iconUrl.startsWith("data:") || sport.iconUrl.startsWith("http") || sport.iconUrl.startsWith("/");
const src = isAbsolute ? sport.iconUrl : `/sports-icons/${sport.iconUrl}`;
return (
<img
src={src}
alt={sport.name}
className={`${cls} object-contain shrink-0`}
/>
);
}
return <span className={`${cls} rounded-sm bg-muted shrink-0 inline-block`} aria-hidden />;
}