@burdenoff/microfe-atheletebridge 2026.1013.1 → 2026.1024.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atheletebridge/components/MatchupRow.d.ts.map +1 -1
- package/dist/atheletebridge/components/MatchupRow.js +36 -36
- package/dist/atheletebridge/components/MatchupRow.js.map +1 -1
- package/dist/atheletebridge/components/Scoreboard.d.ts +71 -2
- package/dist/atheletebridge/components/Scoreboard.d.ts.map +1 -1
- package/dist/atheletebridge/components/Scoreboard.js +221 -96
- package/dist/atheletebridge/components/Scoreboard.js.map +1 -1
- package/dist/atheletebridge/hooks/index.d.ts +1 -0
- package/dist/atheletebridge/hooks/index.d.ts.map +1 -1
- package/dist/atheletebridge/hooks/index.js +1 -0
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.d.ts.map +1 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js +93 -82
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js.map +1 -1
- package/dist/atheletebridge/hooks/useScheduledTimeGate.d.ts +18 -0
- package/dist/atheletebridge/hooks/useScheduledTimeGate.d.ts.map +1 -0
- package/dist/atheletebridge/hooks/useScheduledTimeGate.js +24 -0
- package/dist/atheletebridge/hooks/useScheduledTimeGate.js.map +1 -0
- package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js +436 -107
- package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/sessions/SessionDetailPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/sessions/SessionDetailPage.js +164 -159
- package/dist/atheletebridge/pages/sessions/SessionDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/tournaments/TournamentBracketPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/tournaments/TournamentBracketPage.js +104 -103
- package/dist/atheletebridge/pages/tournaments/TournamentBracketPage.js.map +1 -1
- package/dist/atheletebridge/types/index.d.ts +74 -1
- package/dist/atheletebridge/types/index.d.ts.map +1 -1
- package/dist/atheletebridge/utils/index.d.ts +2 -0
- package/dist/atheletebridge/utils/index.d.ts.map +1 -1
- package/dist/atheletebridge/utils/recordResult.d.ts +92 -0
- package/dist/atheletebridge/utils/recordResult.d.ts.map +1 -0
- package/dist/atheletebridge/utils/recordResult.js +114 -0
- package/dist/atheletebridge/utils/recordResult.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TournamentBracketPage.js","names":[],"sources":["../../../../src/atheletebridge/pages/tournaments/TournamentBracketPage.tsx"],"sourcesContent":["/**\n * Tournament Bracket\n * @module atheletebridge/pages/tournaments\n *\n * A round-grouped bracket view for real TOURNAMENT-type fixtures. It lists every\n * competition that has TOURNAMENT fixtures, and for the selected competition\n * groups those fixtures by their `round` string into ordered columns\n * (Round of N → Quarter Finals → Semi Finals → Finals), each match showing crest\n * + score + status straight from the fixture row.\n *\n * Honesty: the backend stores fixtures FLAT (a round label, no parent/child\n * linkage), so columns are laid out as visual grouping only — there are NO\n * fabricated connector edges asserting stored progression, and no \"global rank\".\n * The champion card is driven solely by a real COMPLETED final with a decided\n * winner. Horizontally scrollable so it never breaks layout on mobile.\n */\n\nimport { useMemo, useState } from 'react';\nimport { Gamepad2, Trophy } from 'lucide-react';\nimport { Badge, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { Crest } from '../../components/Crest';\nimport { FilterSelect } from '../../components/FilterSelect';\nimport { EmptyState } from '../../components/EmptyState';\nimport { LoadingState, ErrorState } from '../../components/LoadingState';\nimport { resolveMatchup } from '../../components/Scoreboard';\nimport { STATUS } from '../../components/viz';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport { useFixtures } from '../../hooks/useAthleteBridgeApi';\nimport { formatDate } from '../../utils/formatters';\nimport type { AthFixture, AthFixtureStatus, AthSport } from '../../types';\n\n/** Tokenized status dot color for a fixture. */\nconst STATUS_DOT: Record<AthFixtureStatus, string> = {\n COMPLETED: STATUS.success,\n LIVE: 'var(--color-accent-primary)',\n SCHEDULED: STATUS.warning,\n POSTPONED: 'var(--color-text-muted)',\n CANCELLED: 'var(--color-text-muted)',\n};\n\n/**\n * Order a round label within a single-elimination progression. Recognized\n * labels sort in bracket order; unrecognized labels fall to the end (tie-broken\n * by earliest kickoff) rather than being invented into the sequence.\n */\nfunction roundRank(round: string | null): number {\n if (!round) {\n return 9999;\n }\n const r = round.toLowerCase();\n const roundOf = r.match(/round of\\s*(\\d+)/);\n if (roundOf) {\n return 1000 - Number(roundOf[1]); // larger field ⇒ earlier column\n }\n if (/third|3rd/.test(r)) {\n return 1095;\n }\n if (/(grand\\s*)?final/.test(r) && !/semi|quarter/.test(r)) {\n return 1100;\n }\n if (/semi/.test(r)) {\n return 1050;\n }\n if (/quarter/.test(r)) {\n return 1020;\n }\n return 9999;\n}\n\ninterface RoundColumn {\n key: string;\n label: string;\n rank: number;\n earliest: number;\n fixtures: AthFixture[];\n}\n\n/** Group a competition's tournament fixtures into ordered round columns. */\nfunction buildRounds(fixtures: AthFixture[]): RoundColumn[] {\n const byRound = new Map<string, AthFixture[]>();\n for (const f of fixtures) {\n const key = f.round?.trim() || 'Unscheduled round';\n const list = byRound.get(key) ?? [];\n list.push(f);\n byRound.set(key, list);\n }\n return Array.from(byRound.entries())\n .map(([label, list]) => {\n const sorted = [...list].sort(\n (a, b) => new Date(a.scheduledAt).getTime() - new Date(b.scheduledAt).getTime()\n );\n const earliest = sorted.reduce(\n (acc, f) => Math.min(acc, new Date(f.scheduledAt).getTime() || acc),\n Number.POSITIVE_INFINITY\n );\n return {\n key: label,\n label,\n rank: roundRank(list[0]?.round ?? null),\n earliest: Number.isFinite(earliest) ? earliest : 0,\n fixtures: sorted,\n };\n })\n .sort((a, b) => (a.rank !== b.rank ? a.rank - b.rank : a.earliest - b.earliest));\n}\n\nexport function TournamentBracketPage() {\n const { navigateTo } = useAthleteBridge();\n const fixturesQuery = useFixtures({ pagination: { limit: 200 } });\n\n const tournamentFixtures = useMemo(\n () => (fixturesQuery.data?.items ?? []).filter((f) => f.type === 'TOURNAMENT'),\n [fixturesQuery.data]\n );\n\n const competitions = useMemo(() => {\n const set = new Set<string>();\n for (const f of tournamentFixtures) {\n set.add(f.competition?.trim() || 'Tournament');\n }\n return Array.from(set).sort();\n }, [tournamentFixtures]);\n\n const [selected, setSelected] = useState<string>('');\n const activeCompetition = selected || competitions[0] || '';\n\n const rounds = useMemo(() => {\n const forComp = tournamentFixtures.filter(\n (f) => (f.competition?.trim() || 'Tournament') === activeCompetition\n );\n return buildRounds(forComp);\n }, [tournamentFixtures, activeCompetition]);\n\n const matchCount = rounds.reduce((acc, r) => acc + r.fixtures.length, 0);\n\n // Champion: a COMPLETED final (last round) with a decided winner. No fabrication.\n const champion = useMemo(() => {\n const finalColumn = rounds[rounds.length - 1];\n if (!finalColumn) {\n return null;\n }\n for (const f of finalColumn.fixtures) {\n if (f.status !== 'COMPLETED') {\n continue;\n }\n const m = resolveMatchup(f);\n if (m.homeWon) {\n return { name: m.homeName, sport: m.homeSport, score: `${f.homeScore}–${f.awayScore}` };\n }\n if (m.awayWon) {\n return { name: m.awayName, sport: m.awaySport, score: `${f.awayScore}–${f.homeScore}` };\n }\n }\n return null;\n }, [rounds]);\n\n if (fixturesQuery.isLoading) {\n return (\n <PageLayout title=\"Tournaments\">\n <LoadingState label=\"Loading tournament fixtures…\" />\n </PageLayout>\n );\n }\n\n if (fixturesQuery.isError) {\n return (\n <PageLayout title=\"Tournaments\">\n <ErrorState onRetry={() => void fixturesQuery.refetch()} />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Tournaments\"\n description=\"Round-grouped brackets for your knockout competitions — every match is a real fixture.\"\n actions={\n competitions.length > 1 ? (\n <FilterSelect\n value={activeCompetition}\n onChange={(value) => setSelected(value)}\n options={competitions.map((c) => ({ value: c, label: c }))}\n allLabel=\"All competitions\"\n ariaLabel=\"Select competition\"\n />\n ) : undefined\n }\n >\n {tournamentFixtures.length === 0 ? (\n <EmptyState\n illustration=\"empty-calendar\"\n icon={<Trophy className=\"h-10 w-10\" />}\n title=\"No tournament fixtures yet\"\n description=\"Schedule fixtures with the Tournament type and a round label (e.g. “Quarter Finals”) to build a bracket.\"\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/fixtures/new')}\n className=\"rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90\"\n >\n Schedule a fixture\n </button>\n }\n />\n ) : (\n <div className=\"space-y-6\">\n {/* Meta strip */}\n <GlassCard\n treatment=\"insight\"\n className=\"flex flex-wrap items-center gap-x-6 gap-y-3 p-5\"\n >\n <span className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <Trophy className=\"h-5 w-5 text-[var(--color-accent-teal)]\" />\n {activeCompetition}\n </span>\n <span className=\"text-sm text-text-secondary\">\n <span className=\"font-semibold tabular-nums text-text-primary\">{rounds.length}</span>{' '}\n {rounds.length === 1 ? 'round' : 'rounds'}\n </span>\n <span className=\"text-sm text-text-secondary\">\n <span className=\"font-semibold tabular-nums text-text-primary\">{matchCount}</span>{' '}\n {matchCount === 1 ? 'match' : 'matches'}\n </span>\n <div className=\"ml-auto flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-text-secondary\">\n <StatusDot color={STATUS.success} label=\"Completed\" />\n <StatusDot color=\"var(--color-accent-primary)\" label=\"Live\" />\n <StatusDot color={STATUS.warning} label=\"Scheduled\" />\n </div>\n </GlassCard>\n\n {/* Bracket — horizontally scrollable columns */}\n <div className=\"overflow-x-auto pb-2\">\n <div className=\"flex min-w-max items-stretch gap-4\">\n {rounds.map((round) => (\n <div key={round.key} className=\"flex w-72 shrink-0 flex-col gap-3\">\n <div className=\"px-1\">\n <h2 className=\"text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n {round.label}\n </h2>\n {round.earliest > 0 ? (\n <p className=\"text-xs text-text-muted\">\n {formatDate(new Date(round.earliest).toISOString())}\n </p>\n ) : null}\n </div>\n <div className=\"flex flex-1 flex-col justify-around gap-3\">\n {round.fixtures.map((fixture) => (\n <MatchCard\n key={fixture.id}\n fixture={fixture}\n onClick={() => navigateTo(`/fixtures/${fixture.id}`)}\n />\n ))}\n </div>\n </div>\n ))}\n\n {/* Champion column (only when a real completed final exists) */}\n {champion ? (\n <div className=\"flex w-72 shrink-0 flex-col justify-center gap-3\">\n <div className=\"px-1\">\n <h2 className=\"text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n Champion\n </h2>\n </div>\n <GlassCard\n treatment=\"glass\"\n className=\"flex flex-col items-center gap-3 p-6 text-center\"\n >\n <Trophy className=\"h-8 w-8 text-[var(--color-status-warning-text)]\" />\n <Crest name={champion.name} sport={champion.sport} size={56} />\n <div>\n <p className=\"text-lg font-semibold text-text-primary\">{champion.name}</p>\n <p className=\"mt-0.5 text-sm tabular-nums text-text-secondary\">\n Won {champion.score}\n </p>\n </div>\n <Badge variant=\"default\">Champions</Badge>\n </GlassCard>\n </div>\n ) : null}\n </div>\n </div>\n\n {rounds.length === 0 ? (\n <EmptyState\n illustration=\"empty-calendar\"\n icon={<Gamepad2 className=\"h-10 w-10\" />}\n title=\"No matches in this competition\"\n description=\"Add round labels to this competition's tournament fixtures to populate the bracket.\"\n />\n ) : null}\n </div>\n )}\n </PageLayout>\n );\n}\n\n// ── Match card ───────────────────────────────────────────────────────────────\n\ninterface MatchCardProps {\n fixture: AthFixture;\n onClick: () => void;\n}\n\nfunction MatchCard({ fixture, onClick }: MatchCardProps) {\n const m = resolveMatchup(fixture);\n const dot = STATUS_DOT[fixture.status];\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"group w-full rounded-[var(--radius-card)] border border-border-seam bg-bg-surface p-3 text-left transition-all duration-200 hover:-translate-y-0.5 hover:border-border-strong hover:shadow-elevation-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <MatchSide\n name={m.homeName}\n sport={m.homeSport}\n score={fixture.homeScore}\n won={m.homeWon}\n dimmed={m.awayWon}\n />\n <div className=\"my-1 h-px bg-border-seam\" aria-hidden=\"true\" />\n <MatchSide\n name={m.awayName}\n sport={m.awaySport}\n score={fixture.awayScore}\n won={m.awayWon}\n dimmed={m.homeWon}\n />\n <div className=\"mt-2 flex items-center gap-1.5 text-xs text-text-muted\">\n <span\n className=\"h-1.5 w-1.5 rounded-full\"\n style={{ backgroundColor: dot }}\n aria-hidden=\"true\"\n />\n <span className=\"capitalize\">{fixture.status.toLowerCase().replace(/_/g, ' ')}</span>\n {fixture.venue ? <span className=\"truncate\">· {fixture.venue}</span> : null}\n </div>\n </button>\n );\n}\n\ninterface MatchSideProps {\n name: string;\n sport?: AthSport;\n score: number | null;\n won: boolean;\n dimmed: boolean;\n}\n\nfunction MatchSide({ name, sport, score, won, dimmed }: MatchSideProps) {\n return (\n <div className=\"flex items-center gap-2\">\n <Crest name={name} sport={sport} size={22} showSportGlyph={false} />\n <span\n className={\n won\n ? 'min-w-0 flex-1 truncate text-sm font-semibold text-status-success-text'\n : dimmed\n ? 'min-w-0 flex-1 truncate text-sm text-text-muted'\n : 'min-w-0 flex-1 truncate text-sm font-medium text-text-primary'\n }\n >\n {name}\n </span>\n <span\n className={\n won\n ? 'shrink-0 text-sm font-bold tabular-nums text-status-success-text'\n : 'shrink-0 text-sm font-semibold tabular-nums text-text-secondary'\n }\n >\n {score ?? '–'}\n </span>\n </div>\n );\n}\n\n// ── Legend dot ───────────────────────────────────────────────────────────────\n\nfunction StatusDot({ color, label }: { color: string; label: string }) {\n return (\n <span className=\"flex items-center gap-1.5\">\n <span\n className=\"h-2 w-2 rounded-full\"\n style={{ backgroundColor: color }}\n aria-hidden=\"true\"\n />\n {label}\n </span>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TournamentBracketPage.js","names":[],"sources":["../../../../src/atheletebridge/pages/tournaments/TournamentBracketPage.tsx"],"sourcesContent":["/**\n * Tournament Bracket\n * @module atheletebridge/pages/tournaments\n *\n * A round-grouped bracket view for real TOURNAMENT-type fixtures. It lists every\n * competition that has TOURNAMENT fixtures, and for the selected competition\n * groups those fixtures by their `round` string into ordered columns\n * (Round of N → Quarter Finals → Semi Finals → Finals), each match showing crest\n * + score + status straight from the fixture row.\n *\n * Honesty: the backend stores fixtures FLAT (a round label, no parent/child\n * linkage), so columns are laid out as visual grouping only — there are NO\n * fabricated connector edges asserting stored progression, and no \"global rank\".\n * The champion card is driven solely by a real COMPLETED final with a decided\n * winner. Horizontally scrollable so it never breaks layout on mobile.\n */\n\nimport { useMemo, useState } from 'react';\nimport { Gamepad2, Trophy } from 'lucide-react';\nimport { Badge, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { Crest } from '../../components/Crest';\nimport { FilterSelect } from '../../components/FilterSelect';\nimport { EmptyState } from '../../components/EmptyState';\nimport { LoadingState, ErrorState } from '../../components/LoadingState';\nimport { resolveMatchup, useMatchupLabels, type MatchupLabels } from '../../components/Scoreboard';\nimport { STATUS } from '../../components/viz';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport { useFixtures } from '../../hooks/useAthleteBridgeApi';\nimport { formatDate } from '../../utils/formatters';\nimport type { AthFixture, AthFixtureStatus, AthSport } from '../../types';\n\n/** Tokenized status dot color for a fixture. */\nconst STATUS_DOT: Record<AthFixtureStatus, string> = {\n COMPLETED: STATUS.success,\n LIVE: 'var(--color-accent-primary)',\n SCHEDULED: STATUS.warning,\n POSTPONED: 'var(--color-text-muted)',\n CANCELLED: 'var(--color-text-muted)',\n};\n\n/**\n * Order a round label within a single-elimination progression. Recognized\n * labels sort in bracket order; unrecognized labels fall to the end (tie-broken\n * by earliest kickoff) rather than being invented into the sequence.\n */\nfunction roundRank(round: string | null): number {\n if (!round) {\n return 9999;\n }\n const r = round.toLowerCase();\n const roundOf = r.match(/round of\\s*(\\d+)/);\n if (roundOf) {\n return 1000 - Number(roundOf[1]); // larger field ⇒ earlier column\n }\n if (/third|3rd/.test(r)) {\n return 1095;\n }\n if (/(grand\\s*)?final/.test(r) && !/semi|quarter/.test(r)) {\n return 1100;\n }\n if (/semi/.test(r)) {\n return 1050;\n }\n if (/quarter/.test(r)) {\n return 1020;\n }\n return 9999;\n}\n\ninterface RoundColumn {\n key: string;\n label: string;\n rank: number;\n earliest: number;\n fixtures: AthFixture[];\n}\n\n/** Group a competition's tournament fixtures into ordered round columns. */\nfunction buildRounds(fixtures: AthFixture[]): RoundColumn[] {\n const byRound = new Map<string, AthFixture[]>();\n for (const f of fixtures) {\n const key = f.round?.trim() || 'Unscheduled round';\n const list = byRound.get(key) ?? [];\n list.push(f);\n byRound.set(key, list);\n }\n return Array.from(byRound.entries())\n .map(([label, list]) => {\n const sorted = [...list].sort(\n (a, b) => new Date(a.scheduledAt).getTime() - new Date(b.scheduledAt).getTime()\n );\n const earliest = sorted.reduce(\n (acc, f) => Math.min(acc, new Date(f.scheduledAt).getTime() || acc),\n Number.POSITIVE_INFINITY\n );\n return {\n key: label,\n label,\n rank: roundRank(list[0]?.round ?? null),\n earliest: Number.isFinite(earliest) ? earliest : 0,\n fixtures: sorted,\n };\n })\n .sort((a, b) => (a.rank !== b.rank ? a.rank - b.rank : a.earliest - b.earliest));\n}\n\nexport function TournamentBracketPage() {\n const { navigateTo } = useAthleteBridge();\n const fixturesQuery = useFixtures({ pagination: { limit: 200 } });\n\n const tournamentFixtures = useMemo(\n () => (fixturesQuery.data?.items ?? []).filter((f) => f.type === 'TOURNAMENT'),\n [fixturesQuery.data]\n );\n\n const competitions = useMemo(() => {\n const set = new Set<string>();\n for (const f of tournamentFixtures) {\n set.add(f.competition?.trim() || 'Tournament');\n }\n return Array.from(set).sort();\n }, [tournamentFixtures]);\n\n const [selected, setSelected] = useState<string>('');\n const activeCompetition = selected || competitions[0] || '';\n\n const rounds = useMemo(() => {\n const forComp = tournamentFixtures.filter(\n (f) => (f.competition?.trim() || 'Tournament') === activeCompetition\n );\n return buildRounds(forComp);\n }, [tournamentFixtures, activeCompetition]);\n\n const matchCount = rounds.reduce((acc, r) => acc + r.fixtures.length, 0);\n\n const labels = useMatchupLabels();\n\n // Champion: a COMPLETED final (last round) with a decided winner. No fabrication.\n const champion = useMemo(() => {\n const finalColumn = rounds[rounds.length - 1];\n if (!finalColumn) {\n return null;\n }\n for (const f of finalColumn.fixtures) {\n if (f.status !== 'COMPLETED') {\n continue;\n }\n const m = resolveMatchup(f, labels);\n // The card reads \"Won <score>\" under the champion's name, so the score is\n // winner-first. On its own it can also leave a knockout final looking\n // drawn (\"1–1\"), so it carries the decider — \"AET\", \"4–3 pens\", or a\n // cricket scoreline whose result the Scoreboard pill spells out.\n const scoreline = m.cricket\n ? m.homeWon\n ? `${m.cricket.homeLabel} v ${m.cricket.awayLabel}`\n : `${m.cricket.awayLabel} v ${m.cricket.homeLabel}`\n : m.homeWon\n ? `${f.homeScore}–${f.awayScore}`\n : `${f.awayScore}–${f.homeScore}`;\n const score = m.decidedBy && m.outcomeNote ? `${scoreline} (${m.outcomeNote})` : scoreline;\n if (m.homeWon) {\n return { name: m.homeName, sport: m.homeSport, score };\n }\n if (m.awayWon) {\n return { name: m.awayName, sport: m.awaySport, score };\n }\n }\n return null;\n }, [rounds, labels]);\n\n if (fixturesQuery.isLoading) {\n return (\n <PageLayout title=\"Tournaments\">\n <LoadingState label=\"Loading tournament fixtures…\" />\n </PageLayout>\n );\n }\n\n if (fixturesQuery.isError) {\n return (\n <PageLayout title=\"Tournaments\">\n <ErrorState onRetry={() => void fixturesQuery.refetch()} />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Tournaments\"\n description=\"Round-grouped brackets for your knockout competitions — every match is a real fixture.\"\n actions={\n competitions.length > 1 ? (\n <FilterSelect\n value={activeCompetition}\n onChange={(value) => setSelected(value)}\n options={competitions.map((c) => ({ value: c, label: c }))}\n allLabel=\"All competitions\"\n ariaLabel=\"Select competition\"\n />\n ) : undefined\n }\n >\n {tournamentFixtures.length === 0 ? (\n <EmptyState\n illustration=\"empty-calendar\"\n icon={<Trophy className=\"h-10 w-10\" />}\n title=\"No tournament fixtures yet\"\n description=\"Schedule fixtures with the Tournament type and a round label (e.g. “Quarter Finals”) to build a bracket.\"\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/fixtures/new')}\n className=\"rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90\"\n >\n Schedule a fixture\n </button>\n }\n />\n ) : (\n <div className=\"space-y-6\">\n {/* Meta strip */}\n <GlassCard\n treatment=\"insight\"\n className=\"flex flex-wrap items-center gap-x-6 gap-y-3 p-5\"\n >\n <span className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <Trophy className=\"h-5 w-5 text-[var(--color-accent-teal)]\" />\n {activeCompetition}\n </span>\n <span className=\"text-sm text-text-secondary\">\n <span className=\"font-semibold tabular-nums text-text-primary\">{rounds.length}</span>{' '}\n {rounds.length === 1 ? 'round' : 'rounds'}\n </span>\n <span className=\"text-sm text-text-secondary\">\n <span className=\"font-semibold tabular-nums text-text-primary\">{matchCount}</span>{' '}\n {matchCount === 1 ? 'match' : 'matches'}\n </span>\n <div className=\"ml-auto flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-text-secondary\">\n <StatusDot color={STATUS.success} label=\"Completed\" />\n <StatusDot color=\"var(--color-accent-primary)\" label=\"Live\" />\n <StatusDot color={STATUS.warning} label=\"Scheduled\" />\n </div>\n </GlassCard>\n\n {/* Bracket — horizontally scrollable columns */}\n <div className=\"overflow-x-auto pb-2\">\n <div className=\"flex min-w-max items-stretch gap-4\">\n {rounds.map((round) => (\n <div key={round.key} className=\"flex w-72 shrink-0 flex-col gap-3\">\n <div className=\"px-1\">\n <h2 className=\"text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n {round.label}\n </h2>\n {round.earliest > 0 ? (\n <p className=\"text-xs text-text-muted\">\n {formatDate(new Date(round.earliest).toISOString())}\n </p>\n ) : null}\n </div>\n <div className=\"flex flex-1 flex-col justify-around gap-3\">\n {round.fixtures.map((fixture) => (\n <MatchCard\n key={fixture.id}\n fixture={fixture}\n labels={labels}\n onClick={() => navigateTo(`/fixtures/${fixture.id}`)}\n />\n ))}\n </div>\n </div>\n ))}\n\n {/* Champion column (only when a real completed final exists) */}\n {champion ? (\n <div className=\"flex w-72 shrink-0 flex-col justify-center gap-3\">\n <div className=\"px-1\">\n <h2 className=\"text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n Champion\n </h2>\n </div>\n <GlassCard\n treatment=\"glass\"\n className=\"flex flex-col items-center gap-3 p-6 text-center\"\n >\n <Trophy className=\"h-8 w-8 text-[var(--color-status-warning-text)]\" />\n <Crest name={champion.name} sport={champion.sport} size={56} />\n <div>\n <p className=\"text-lg font-semibold text-text-primary\">{champion.name}</p>\n <p className=\"mt-0.5 text-sm tabular-nums text-text-secondary\">\n Won {champion.score}\n </p>\n </div>\n <Badge variant=\"default\">Champions</Badge>\n </GlassCard>\n </div>\n ) : null}\n </div>\n </div>\n\n {rounds.length === 0 ? (\n <EmptyState\n illustration=\"empty-calendar\"\n icon={<Gamepad2 className=\"h-10 w-10\" />}\n title=\"No matches in this competition\"\n description=\"Add round labels to this competition's tournament fixtures to populate the bracket.\"\n />\n ) : null}\n </div>\n )}\n </PageLayout>\n );\n}\n\n// ── Match card ───────────────────────────────────────────────────────────────\n\ninterface MatchCardProps {\n fixture: AthFixture;\n onClick: () => void;\n /** Resolved once by the page and threaded down, so an N-match bracket does\n * not pay for N hook slots to produce the same labels. */\n labels: MatchupLabels;\n}\n\nfunction MatchCard({ fixture, onClick, labels }: MatchCardProps) {\n const m = resolveMatchup(fixture, labels);\n const dot = STATUS_DOT[fixture.status];\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"group w-full rounded-[var(--radius-card)] border border-border-seam bg-bg-surface p-3 text-left transition-all duration-200 hover:-translate-y-0.5 hover:border-border-strong hover:shadow-elevation-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <MatchSide\n name={m.homeName}\n sport={m.homeSport}\n score={fixture.homeScore}\n won={m.homeWon}\n dimmed={m.awayWon}\n />\n <div className=\"my-1 h-px bg-border-seam\" aria-hidden=\"true\" />\n <MatchSide\n name={m.awayName}\n sport={m.awaySport}\n score={fixture.awayScore}\n won={m.awayWon}\n dimmed={m.homeWon}\n />\n <div className=\"mt-2 flex items-center gap-1.5 text-xs text-text-muted\">\n <span\n className=\"h-1.5 w-1.5 rounded-full\"\n style={{ backgroundColor: dot }}\n aria-hidden=\"true\"\n />\n <span className=\"capitalize\">{fixture.status.toLowerCase().replace(/_/g, ' ')}</span>\n {fixture.venue ? <span className=\"truncate\">· {fixture.venue}</span> : null}\n </div>\n </button>\n );\n}\n\ninterface MatchSideProps {\n name: string;\n sport?: AthSport;\n score: number | null;\n won: boolean;\n dimmed: boolean;\n}\n\nfunction MatchSide({ name, sport, score, won, dimmed }: MatchSideProps) {\n return (\n <div className=\"flex items-center gap-2\">\n <Crest name={name} sport={sport} size={22} showSportGlyph={false} />\n <span\n className={\n won\n ? 'min-w-0 flex-1 truncate text-sm font-semibold text-status-success-text'\n : dimmed\n ? 'min-w-0 flex-1 truncate text-sm text-text-muted'\n : 'min-w-0 flex-1 truncate text-sm font-medium text-text-primary'\n }\n >\n {name}\n </span>\n <span\n className={\n won\n ? 'shrink-0 text-sm font-bold tabular-nums text-status-success-text'\n : 'shrink-0 text-sm font-semibold tabular-nums text-text-secondary'\n }\n >\n {score ?? '–'}\n </span>\n </div>\n );\n}\n\n// ── Legend dot ───────────────────────────────────────────────────────────────\n\nfunction StatusDot({ color, label }: { color: string; label: string }) {\n return (\n <span className=\"flex items-center gap-1.5\">\n <span\n className=\"h-2 w-2 rounded-full\"\n style={{ backgroundColor: color }}\n aria-hidden=\"true\"\n />\n {label}\n </span>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAiCA,IAAM,IAA+C;CACnD,WAAW,EAAO;CAClB,MAAM;CACN,WAAW,EAAO;CAClB,WAAW;CACX,WAAW;AACb;AAOA,SAAS,EAAU,GAA8B;CAC/C,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAI,EAAM,YAAY,GACtB,IAAU,EAAE,MAAM,kBAAkB;CAgB1C,OAfI,IACK,MAAO,OAAO,EAAQ,EAAE,IAE7B,YAAY,KAAK,CAAC,IACb,OAEL,mBAAmB,KAAK,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,IAC/C,OAEL,OAAO,KAAK,CAAC,IACR,OAEL,UAAU,KAAK,CAAC,IACX,OAEF;AACT;AAWA,SAAS,EAAY,GAAuC;CAC1D,IAAM,oBAAU,IAAI,IAA0B;CAC9C,KAAK,IAAM,KAAK,GAAU;EACxB,IAAM,IAAM,EAAE,OAAO,KAAK,KAAK,qBACzB,IAAO,EAAQ,IAAI,CAAG,KAAK,CAAC;EAElC,AADA,EAAK,KAAK,CAAC,GACX,EAAQ,IAAI,GAAK,CAAI;CACvB;CACA,OAAO,MAAM,KAAK,EAAQ,QAAQ,CAAC,EAChC,KAAK,CAAC,GAAO,OAAU;EACtB,IAAM,IAAS,CAAC,GAAG,CAAI,EAAE,MACtB,GAAG,MAAM,IAAI,KAAK,EAAE,WAAW,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,WAAW,EAAE,QAAQ,CAChF,GACM,IAAW,EAAO,QACrB,GAAK,MAAM,KAAK,IAAI,GAAK,IAAI,KAAK,EAAE,WAAW,EAAE,QAAQ,KAAK,CAAG,GAClE,QACF;EACA,OAAO;GACL,KAAK;GACL;GACA,MAAM,EAAU,EAAK,IAAI,SAAS,IAAI;GACtC,UAAU,OAAO,SAAS,CAAQ,IAAI,IAAW;GACjD,UAAU;EACZ;CACF,CAAC,EACA,MAAM,GAAG,MAAO,EAAE,SAAS,EAAE,OAAyB,EAAE,WAAW,EAAE,WAAjC,EAAE,OAAO,EAAE,IAA+B;AACnF;AAEA,SAAgB,IAAwB;CACtC,IAAM,EAAE,kBAAe,EAAiB,GAClC,IAAgB,EAAY,EAAE,YAAY,EAAE,OAAO,IAAI,EAAE,CAAC,GAE1D,IAAqB,SAClB,EAAc,MAAM,SAAS,CAAC,GAAG,QAAQ,MAAM,EAAE,SAAS,YAAY,GAC7E,CAAC,EAAc,IAAI,CACrB,GAEM,IAAe,QAAc;EACjC,IAAM,oBAAM,IAAI,IAAY;EAC5B,KAAK,IAAM,KAAK,GACd,EAAI,IAAI,EAAE,aAAa,KAAK,KAAK,YAAY;EAE/C,OAAO,MAAM,KAAK,CAAG,EAAE,KAAK;CAC9B,GAAG,CAAC,CAAkB,CAAC,GAEjB,CAAC,GAAU,KAAe,EAAiB,EAAE,GAC7C,IAAoB,KAAY,EAAa,MAAM,IAEnD,IAAS,QAIN,EAHS,EAAmB,QAChC,OAAO,EAAE,aAAa,KAAK,KAAK,kBAAkB,CAElC,CAAO,GACzB,CAAC,GAAoB,CAAiB,CAAC,GAEpC,IAAa,EAAO,QAAQ,GAAK,MAAM,IAAM,EAAE,SAAS,QAAQ,CAAC,GAEjE,IAAS,EAAiB,GAG1B,IAAW,QAAc;EAC7B,IAAM,IAAc,EAAO,EAAO,SAAS;EAC3C,IAAI,CAAC,GACH,OAAO;EAET,KAAK,IAAM,KAAK,EAAY,UAAU;GACpC,IAAI,EAAE,WAAW,aACf;GAEF,IAAM,IAAI,EAAe,GAAG,CAAM,GAK5B,IAAY,EAAE,UAChB,EAAE,UACA,GAAG,EAAE,QAAQ,UAAU,KAAK,EAAE,QAAQ,cACtC,GAAG,EAAE,QAAQ,UAAU,KAAK,EAAE,QAAQ,cACxC,EAAE,UACA,GAAG,EAAE,UAAU,GAAG,EAAE,cACpB,GAAG,EAAE,UAAU,GAAG,EAAE,aACpB,IAAQ,EAAE,aAAa,EAAE,cAAc,GAAG,EAAU,IAAI,EAAE,YAAY,KAAK;GACjF,IAAI,EAAE,SACJ,OAAO;IAAE,MAAM,EAAE;IAAU,OAAO,EAAE;IAAW;GAAM;GAEvD,IAAI,EAAE,SACJ,OAAO;IAAE,MAAM,EAAE;IAAU,OAAO,EAAE;IAAW;GAAM;EAEzD;EACA,OAAO;CACT,GAAG,CAAC,GAAQ,CAAM,CAAC;CAkBnB,OAhBI,EAAc,YAEd,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD,EAAc,OAAM,+BAAgC,CAAA;CAC1C,CAAA,IAIZ,EAAc,UAEd,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD,EAAY,eAAe,KAAK,EAAc,QAAQ,EAAI,CAAA;CAChD,CAAA,IAKd,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SACE,EAAa,SAAS,IACpB,kBAAC,GAAD;GACE,OAAO;GACP,WAAW,MAAU,EAAY,CAAK;GACtC,SAAS,EAAa,KAAK,OAAO;IAAE,OAAO;IAAG,OAAO;GAAE,EAAE;GACzD,UAAS;GACT,WAAU;EACX,CAAA,IACC,KAAA;YAGL,EAAmB,WAAW,IAC7B,kBAAC,GAAD;GACE,cAAa;GACb,MAAM,kBAAC,GAAD,EAAQ,WAAU,YAAa,CAAA;GACrC,OAAM;GACN,aAAY;GACZ,QACE,kBAAC,UAAD;IACE,MAAK;IACL,eAAe,EAAW,eAAe;IACzC,WAAU;cACX;GAEO,CAAA;EAEX,CAAA,IAED,kBAAC,OAAD;GAAK,WAAU;aAAf;IAEE,kBAAC,GAAD;KACE,WAAU;KACV,WAAU;eAFZ;MAIE,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CACE,kBAAC,GAAD,EAAQ,WAAU,0CAA2C,CAAA,GAC5D,CACG;;MACN,kBAAC,QAAD;OAAM,WAAU;iBAAhB;QACE,kBAAC,QAAD;SAAM,WAAU;mBAAgD,EAAO;QAAa,CAAA;QAAE;QACrF,EAAO,WAAW,IAAI,UAAU;OAC7B;;MACN,kBAAC,QAAD;OAAM,WAAU;iBAAhB;QACE,kBAAC,QAAD;SAAM,WAAU;mBAAgD;QAAiB,CAAA;QAAE;QAClF,MAAe,IAAI,UAAU;OAC1B;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,GAAD;SAAW,OAAO,EAAO;SAAS,OAAM;QAAa,CAAA;QACrD,kBAAC,GAAD;SAAW,OAAM;SAA8B,OAAM;QAAQ,CAAA;QAC7D,kBAAC,GAAD;SAAW,OAAO,EAAO;SAAS,OAAM;QAAa,CAAA;OAClD;;KACI;;IAGX,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACG,EAAO,KAAK,MACX,kBAAC,OAAD;OAAqB,WAAU;iBAA/B,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAM;QACL,CAAA,GACH,EAAM,WAAW,IAChB,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAW,IAAI,KAAK,EAAM,QAAQ,EAAE,YAAY,CAAC;QACjD,CAAA,IACD,IACD;WACL,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAM,SAAS,KAAK,MACnB,kBAAC,GAAD;SAEW;SACD;SACR,eAAe,EAAW,aAAa,EAAQ,IAAI;QACpD,GAJM,EAAQ,EAId,CACF;OACE,CAAA,CACF;SArBK,EAAM,GAqBX,CACN,GAGA,IACC,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,MAAD;SAAI,WAAU;mBAAoE;QAE9E,CAAA;OACD,CAAA,GACL,kBAAC,GAAD;QACE,WAAU;QACV,WAAU;kBAFZ;SAIE,kBAAC,GAAD,EAAQ,WAAU,kDAAmD,CAAA;SACrE,kBAAC,GAAD;UAAO,MAAM,EAAS;UAAM,OAAO,EAAS;UAAO,MAAM;SAAK,CAAA;SAC9D,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;UAAG,WAAU;oBAA2C,EAAS;SAAQ,CAAA,GACzE,kBAAC,KAAD;UAAG,WAAU;oBAAb,CAA+D,QACxD,EAAS,KACb;WACA,EAAA,CAAA;SACL,kBAAC,GAAD;UAAO,SAAQ;oBAAU;SAAgB,CAAA;QAChC;SACR;WACH,IACD;;IACF,CAAA;IAEJ,EAAO,WAAW,IACjB,kBAAC,GAAD;KACE,cAAa;KACb,MAAM,kBAAC,GAAD,EAAU,WAAU,YAAa,CAAA;KACvC,OAAM;KACN,aAAY;IACb,CAAA,IACC;GACD;;CAEG,CAAA;AAEhB;AAYA,SAAS,EAAU,EAAE,YAAS,YAAS,aAA0B;CAC/D,IAAM,IAAI,EAAe,GAAS,CAAM,GAClC,IAAM,EAAW,EAAQ;CAE/B,OACE,kBAAC,UAAD;EACE,MAAK;EACI;EACT,WAAU;YAHZ;GAKE,kBAAC,GAAD;IACE,MAAM,EAAE;IACR,OAAO,EAAE;IACT,OAAO,EAAQ;IACf,KAAK,EAAE;IACP,QAAQ,EAAE;GACX,CAAA;GACD,kBAAC,OAAD;IAAK,WAAU;IAA2B,eAAY;GAAQ,CAAA;GAC9D,kBAAC,GAAD;IACE,MAAM,EAAE;IACR,OAAO,EAAE;IACT,OAAO,EAAQ;IACf,KAAK,EAAE;IACP,QAAQ,EAAE;GACX,CAAA;GACD,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,QAAD;MACE,WAAU;MACV,OAAO,EAAE,iBAAiB,EAAI;MAC9B,eAAY;KACb,CAAA;KACD,kBAAC,QAAD;MAAM,WAAU;gBAAc,EAAQ,OAAO,YAAY,EAAE,QAAQ,MAAM,GAAG;KAAQ,CAAA;KACnF,EAAQ,QAAQ,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CAA2B,MAAG,EAAQ,KAAY;UAAI;IACpE;;EACC;;AAEZ;AAUA,SAAS,EAAU,EAAE,SAAM,UAAO,UAAO,QAAK,aAA0B;CACtE,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD;IAAa;IAAa;IAAO,MAAM;IAAI,gBAAgB;GAAQ,CAAA;GACnE,kBAAC,QAAD;IACE,WACE,IACI,2EACA,IACE,oDACA;cAGP;GACG,CAAA;GACN,kBAAC,QAAD;IACE,WACE,IACI,qEACA;cAGL,KAAS;GACN,CAAA;EACH;;AAET;AAIA,SAAS,EAAU,EAAE,UAAO,YAA2C;CACrE,OACE,kBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,kBAAC,QAAD;GACE,WAAU;GACV,OAAO,EAAE,iBAAiB,EAAM;GAChC,eAAY;EACb,CAAA,GACA,CACG;;AAEV"}
|
|
@@ -144,12 +144,49 @@ export interface AthFixture {
|
|
|
144
144
|
awayTeam?: Pick<AthTeam, 'id' | 'name' | 'sport'> | null;
|
|
145
145
|
homeScore: number | null;
|
|
146
146
|
awayScore: number | null;
|
|
147
|
+
extraTimeHomeScore: number | null;
|
|
148
|
+
extraTimeAwayScore: number | null;
|
|
149
|
+
penaltyHomeScore: number | null;
|
|
150
|
+
penaltyAwayScore: number | null;
|
|
151
|
+
cricketScorecard: AthCricketScorecard | null;
|
|
147
152
|
scheduledAt: string;
|
|
148
153
|
kickoffAt: string | null;
|
|
149
154
|
notes: string | null;
|
|
150
155
|
createdAt: string;
|
|
151
156
|
updatedAt: string;
|
|
152
157
|
}
|
|
158
|
+
export interface AthCricketInnings {
|
|
159
|
+
runs: number;
|
|
160
|
+
wickets: number;
|
|
161
|
+
overs: number;
|
|
162
|
+
balls: number;
|
|
163
|
+
extras: number | null;
|
|
164
|
+
}
|
|
165
|
+
export interface AthCricketScorecard {
|
|
166
|
+
homeInnings: AthCricketInnings;
|
|
167
|
+
awayInnings: AthCricketInnings;
|
|
168
|
+
winner: 'HOME' | 'AWAY';
|
|
169
|
+
decidedBy: 'RUNS' | 'WICKETS';
|
|
170
|
+
margin: number;
|
|
171
|
+
superOver: boolean;
|
|
172
|
+
dls: boolean;
|
|
173
|
+
}
|
|
174
|
+
export interface AthCricketInningsInput {
|
|
175
|
+
runs: number;
|
|
176
|
+
wickets: number;
|
|
177
|
+
overs: number;
|
|
178
|
+
balls?: number;
|
|
179
|
+
extras?: number;
|
|
180
|
+
}
|
|
181
|
+
export interface AthCricketScorecardInput {
|
|
182
|
+
homeInnings: AthCricketInningsInput;
|
|
183
|
+
awayInnings: AthCricketInningsInput;
|
|
184
|
+
winner: 'HOME' | 'AWAY';
|
|
185
|
+
decidedBy: 'RUNS' | 'WICKETS';
|
|
186
|
+
margin: number;
|
|
187
|
+
superOver?: boolean;
|
|
188
|
+
dls?: boolean;
|
|
189
|
+
}
|
|
153
190
|
export interface AthStanding {
|
|
154
191
|
id: string;
|
|
155
192
|
workspaceId: string;
|
|
@@ -497,9 +534,45 @@ export interface AthCreateFixtureInput {
|
|
|
497
534
|
notes?: string;
|
|
498
535
|
}
|
|
499
536
|
export interface AthRecordResultInput {
|
|
537
|
+
homeScore?: number;
|
|
538
|
+
awayScore?: number;
|
|
539
|
+
cricketScorecard?: AthCricketScorecardInput;
|
|
540
|
+
extraTimeHomeScore?: number;
|
|
541
|
+
extraTimeAwayScore?: number;
|
|
542
|
+
penaltyHomeScore?: number;
|
|
543
|
+
penaltyAwayScore?: number;
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* A record-result payload that is actually complete.
|
|
547
|
+
*
|
|
548
|
+
* `AthRecordResultInput` above is a faithful mirror of the GraphQL input,
|
|
549
|
+
* which the schema cannot narrow: GraphQL input fields are all independently
|
|
550
|
+
* optional, so the wire format admits `{}` or `{ penaltyHomeScore: 4 }` and
|
|
551
|
+
* the backend is what rejects it. Mirroring that faithfully is correct for
|
|
552
|
+
* anything reading the contract, but it means the compiler will happily accept
|
|
553
|
+
* a structurally invalid payload at the point one is built.
|
|
554
|
+
*
|
|
555
|
+
* This union closes that gap where it is actually created — the builders in
|
|
556
|
+
* `utils/recordResult.ts` — without making the mirror lie about the schema.
|
|
557
|
+
* Both branches are assignable to `AthRecordResultInput`, so the mutation
|
|
558
|
+
* hook still accepts it unchanged.
|
|
559
|
+
*
|
|
560
|
+
* Extra-time and penalty scores stay optional on the scoring branch, and are
|
|
561
|
+
* not offered on the scorecard branch: they are a knockout chain hanging off a
|
|
562
|
+
* full-time score, which a cricket scorecard is not. A payload carrying them is
|
|
563
|
+
* still valid schema input, so the union does not forbid them outright — it
|
|
564
|
+
* only stops them standing alone, or riding on a cricket scorecard.
|
|
565
|
+
*/
|
|
566
|
+
export type AthRecordResultPayload = {
|
|
500
567
|
homeScore: number;
|
|
501
568
|
awayScore: number;
|
|
502
|
-
|
|
569
|
+
extraTimeHomeScore?: number;
|
|
570
|
+
extraTimeAwayScore?: number;
|
|
571
|
+
penaltyHomeScore?: number;
|
|
572
|
+
penaltyAwayScore?: number;
|
|
573
|
+
} | {
|
|
574
|
+
cricketScorecard: AthCricketScorecardInput;
|
|
575
|
+
};
|
|
503
576
|
export interface AthCreateProgramInput {
|
|
504
577
|
name: string;
|
|
505
578
|
sport?: AthSport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,4 +11,6 @@ export { timeAgo } from './timeAgo';
|
|
|
11
11
|
export { isRecord, humanizePayloadKey, formatPayloadValue, toPayloadEntries, toProvenanceEntries, summarizeDecision, formatConfidence, formatLoadChange, programIdFromInputRefs, } from './aiDecision';
|
|
12
12
|
export type { AiPayloadEntry, AiDecisionKind, AiDecisionSummary } from './aiDecision';
|
|
13
13
|
export { stableHash, initials, gradientForSeed, gradientCss, CREST_GRADIENTS } from './identity';
|
|
14
|
+
export { buildCricketResultInput, buildRecordResultInput, parseScoreInput } from './recordResult';
|
|
15
|
+
export type { CricketDecidedBy, CricketResultFields, CricketWinner, RecordResultFields, RecordResultDraft, } from './recordResult';
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClG,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { AthRecordResultPayload } from '../types';
|
|
2
|
+
|
|
3
|
+
/** Raw text of the four score inputs on the record-result form. */
|
|
4
|
+
export interface RecordResultFields {
|
|
5
|
+
homeScore: string;
|
|
6
|
+
awayScore: string;
|
|
7
|
+
extraTimeHome: string;
|
|
8
|
+
extraTimeAway: string;
|
|
9
|
+
penaltyHome: string;
|
|
10
|
+
penaltyAway: string;
|
|
11
|
+
}
|
|
12
|
+
export type RecordResultDraft = {
|
|
13
|
+
ok: true;
|
|
14
|
+
input: AthRecordResultPayload;
|
|
15
|
+
} | {
|
|
16
|
+
ok: false;
|
|
17
|
+
error: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Parse one score input. `null` means "no usable value" — covering an empty
|
|
21
|
+
* field, text that is not a number, and text that only *starts* with a number.
|
|
22
|
+
* Returning `NaN` here instead would be a silent data bug: `NaN !== null` is
|
|
23
|
+
* true (so a pair of garbage values looks complete), `NaN !== NaN` is true (so
|
|
24
|
+
* a level check never fires), and `NaN` would go straight into the payload.
|
|
25
|
+
*
|
|
26
|
+
* `Number.parseInt` is deliberately not used on its own: it accepts any prefix
|
|
27
|
+
* (`'3abc'` -> 3, `'2.5'` -> 2), so a typo or paste would be silently rounded
|
|
28
|
+
* down to a plausible-looking score instead of being rejected. Only a whole
|
|
29
|
+
* integer — optionally signed, so a negative can still be *reported* as one by
|
|
30
|
+
* the caller rather than being indistinguishable from a typo — is accepted.
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseScoreInput(raw: string): number | null;
|
|
33
|
+
/**
|
|
34
|
+
* Validate the form and build the mutation input, or explain why it cannot be
|
|
35
|
+
* submitted.
|
|
36
|
+
*
|
|
37
|
+
* @param messages Localised copy for the failure cases; the page passes
|
|
38
|
+
* `tr(key, fallback)` results so validation stays in the i18n surface.
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildRecordResultInput(fields: RecordResultFields, messages: {
|
|
41
|
+
scoresRequired: string;
|
|
42
|
+
scoresNegative: string;
|
|
43
|
+
extraTimePair: string;
|
|
44
|
+
extraTimeNumeric: string;
|
|
45
|
+
extraTimeNegative: string;
|
|
46
|
+
penaltyPair: string;
|
|
47
|
+
penaltyNumeric: string;
|
|
48
|
+
penaltyNegative: string;
|
|
49
|
+
extraTimeDecided: string;
|
|
50
|
+
extraTimeLevel: string;
|
|
51
|
+
penaltyLevel: string;
|
|
52
|
+
}): RecordResultDraft;
|
|
53
|
+
/** Which side won a cricket fixture, and how. */
|
|
54
|
+
export type CricketWinner = 'HOME' | 'AWAY';
|
|
55
|
+
export type CricketDecidedBy = 'RUNS' | 'WICKETS';
|
|
56
|
+
/** Raw text of the nine scorecard inputs plus the four toggles. */
|
|
57
|
+
export interface CricketResultFields {
|
|
58
|
+
homeRuns: string;
|
|
59
|
+
homeWickets: string;
|
|
60
|
+
homeOvers: string;
|
|
61
|
+
homeBalls: string;
|
|
62
|
+
awayRuns: string;
|
|
63
|
+
awayWickets: string;
|
|
64
|
+
awayOvers: string;
|
|
65
|
+
awayBalls: string;
|
|
66
|
+
margin: string;
|
|
67
|
+
winner: CricketWinner;
|
|
68
|
+
decidedBy: CricketDecidedBy;
|
|
69
|
+
superOver: boolean;
|
|
70
|
+
dls: boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Validate the cricket scorecard form and build the mutation input, or explain
|
|
74
|
+
* why it cannot be submitted.
|
|
75
|
+
*
|
|
76
|
+
* A cricket result is a margin, not a score comparison, so none of the knockout
|
|
77
|
+
* rules above apply — but the parsing discipline does. Every field goes through
|
|
78
|
+
* `parseScoreInput`, so `'20.5'` in Overs is reported as a typo rather than
|
|
79
|
+
* being floored to 20 overs with half a ball silently dropped.
|
|
80
|
+
*
|
|
81
|
+
* @param messages Localised copy for the failure cases; the page passes
|
|
82
|
+
* `tr(key, fallback)` results so validation stays in the i18n surface.
|
|
83
|
+
*/
|
|
84
|
+
export declare function buildCricketResultInput(fields: CricketResultFields, messages: {
|
|
85
|
+
required: string;
|
|
86
|
+
negative: string;
|
|
87
|
+
wicketsRange: string;
|
|
88
|
+
ballsRange: string;
|
|
89
|
+
marginMinimum: string;
|
|
90
|
+
wicketMarginMax: string;
|
|
91
|
+
}): RecordResultDraft;
|
|
92
|
+
//# sourceMappingURL=recordResult.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordResult.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/utils/recordResult.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,sBAAsB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1D;AAYD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE;IACR,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,GACA,iBAAiB,CAqEnB;AAID,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAC5C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAAC;AAElD,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;CACd;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE;IACR,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB,GACA,iBAAiB,CAsEnB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
//#region src/atheletebridge/utils/recordResult.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
let t = e.trim();
|
|
4
|
+
return t === "" || !/^[+-]?\d+$/.test(t) ? null : Number.parseInt(t, 10);
|
|
5
|
+
}
|
|
6
|
+
function t(e, t) {
|
|
7
|
+
return e !== "" || t !== "";
|
|
8
|
+
}
|
|
9
|
+
function n(e) {
|
|
10
|
+
return e.some((e) => e !== null && e < 0);
|
|
11
|
+
}
|
|
12
|
+
function r(r, i) {
|
|
13
|
+
let a = e(r.homeScore), o = e(r.awayScore);
|
|
14
|
+
if (a === null || o === null) return {
|
|
15
|
+
ok: !1,
|
|
16
|
+
error: i.scoresRequired
|
|
17
|
+
};
|
|
18
|
+
if (a < 0 || o < 0) return {
|
|
19
|
+
ok: !1,
|
|
20
|
+
error: i.scoresNegative
|
|
21
|
+
};
|
|
22
|
+
let s = {
|
|
23
|
+
homeScore: a,
|
|
24
|
+
awayScore: o
|
|
25
|
+
};
|
|
26
|
+
if (a !== o) return {
|
|
27
|
+
ok: !0,
|
|
28
|
+
input: s
|
|
29
|
+
};
|
|
30
|
+
let c = e(r.extraTimeHome), l = e(r.extraTimeAway), u = e(r.penaltyHome), d = e(r.penaltyAway), f = t(r.extraTimeHome, r.extraTimeAway), p = t(r.penaltyHome, r.penaltyAway), m = c !== null && l !== null, h = u !== null && d !== null;
|
|
31
|
+
return f && !m ? {
|
|
32
|
+
ok: !1,
|
|
33
|
+
error: r.extraTimeHome === "" || r.extraTimeAway === "" ? i.extraTimePair : i.extraTimeNumeric
|
|
34
|
+
} : p && !h ? {
|
|
35
|
+
ok: !1,
|
|
36
|
+
error: r.penaltyHome === "" || r.penaltyAway === "" ? i.penaltyPair : i.penaltyNumeric
|
|
37
|
+
} : n([c, l]) ? {
|
|
38
|
+
ok: !1,
|
|
39
|
+
error: i.extraTimeNegative
|
|
40
|
+
} : n([u, d]) ? {
|
|
41
|
+
ok: !1,
|
|
42
|
+
error: i.penaltyNegative
|
|
43
|
+
} : m && c !== l && h ? {
|
|
44
|
+
ok: !1,
|
|
45
|
+
error: i.extraTimeDecided
|
|
46
|
+
} : m && c === l && !h ? {
|
|
47
|
+
ok: !1,
|
|
48
|
+
error: i.extraTimeLevel
|
|
49
|
+
} : h && u === d ? {
|
|
50
|
+
ok: !1,
|
|
51
|
+
error: i.penaltyLevel
|
|
52
|
+
} : (m && (s.extraTimeHomeScore = c, s.extraTimeAwayScore = l), h && (s.penaltyHomeScore = u, s.penaltyAwayScore = d), {
|
|
53
|
+
ok: !0,
|
|
54
|
+
input: s
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
var i = 10, a = 5;
|
|
58
|
+
function o(t, r) {
|
|
59
|
+
let o = e(t.homeRuns), s = e(t.homeWickets), c = e(t.homeOvers), l = e(t.awayRuns), u = e(t.awayWickets), d = e(t.awayOvers), f = e(t.margin), p = t.homeBalls === "" ? 0 : e(t.homeBalls), m = t.awayBalls === "" ? 0 : e(t.awayBalls);
|
|
60
|
+
return o === null || s === null || c === null || l === null || u === null || d === null || f === null || p === null || m === null ? {
|
|
61
|
+
ok: !1,
|
|
62
|
+
error: r.required
|
|
63
|
+
} : n([
|
|
64
|
+
o,
|
|
65
|
+
s,
|
|
66
|
+
c,
|
|
67
|
+
l,
|
|
68
|
+
u,
|
|
69
|
+
d,
|
|
70
|
+
f,
|
|
71
|
+
p,
|
|
72
|
+
m
|
|
73
|
+
]) ? {
|
|
74
|
+
ok: !1,
|
|
75
|
+
error: r.negative
|
|
76
|
+
} : s > i || u > i ? {
|
|
77
|
+
ok: !1,
|
|
78
|
+
error: r.wicketsRange
|
|
79
|
+
} : p > a || m > a ? {
|
|
80
|
+
ok: !1,
|
|
81
|
+
error: r.ballsRange
|
|
82
|
+
} : f < 1 ? {
|
|
83
|
+
ok: !1,
|
|
84
|
+
error: r.marginMinimum
|
|
85
|
+
} : t.decidedBy === "WICKETS" && f > i ? {
|
|
86
|
+
ok: !1,
|
|
87
|
+
error: r.wicketMarginMax
|
|
88
|
+
} : {
|
|
89
|
+
ok: !0,
|
|
90
|
+
input: { cricketScorecard: {
|
|
91
|
+
homeInnings: {
|
|
92
|
+
runs: o,
|
|
93
|
+
wickets: s,
|
|
94
|
+
overs: c,
|
|
95
|
+
balls: p
|
|
96
|
+
},
|
|
97
|
+
awayInnings: {
|
|
98
|
+
runs: l,
|
|
99
|
+
wickets: u,
|
|
100
|
+
overs: d,
|
|
101
|
+
balls: m
|
|
102
|
+
},
|
|
103
|
+
winner: t.winner,
|
|
104
|
+
decidedBy: t.decidedBy,
|
|
105
|
+
margin: f,
|
|
106
|
+
superOver: t.superOver,
|
|
107
|
+
dls: t.dls
|
|
108
|
+
} }
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//#endregion
|
|
112
|
+
export { o as buildCricketResultInput, r as buildRecordResultInput, e as parseScoreInput };
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=recordResult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordResult.js","names":[],"sources":["../../../src/atheletebridge/utils/recordResult.ts"],"sourcesContent":["/**\n * Record-result form contract\n * @module atheletebridge/utils\n *\n * Validation for the fixture \"Record result\" form (BOFF-7640), kept out of the\n * page component so it can be unit-tested and so the rules live in one place.\n *\n * The rules mirror the backend (`recordFixtureResult` in wspace-atheletebridge-svc)\n * exactly; the client copy exists to give immediate feedback, never to be the\n * only thing standing between a typo and a rejected mutation.\n *\n * The load-bearing rule is that a knockout outcome only exists when the tie is\n * level at full time. That gate is applied to the *payload*, not just to the\n * validation: the inputs are hidden when the full-time score stops being level\n * but the state they wrote survives, so an ungated submission would pair\n * \"3–2 at full time\" with a stale \"1–0 after extra time\".\n */\n\nimport type { AthRecordResultPayload } from '../types';\n\n/** Raw text of the four score inputs on the record-result form. */\nexport interface RecordResultFields {\n homeScore: string;\n awayScore: string;\n extraTimeHome: string;\n extraTimeAway: string;\n penaltyHome: string;\n penaltyAway: string;\n}\n\nexport type RecordResultDraft =\n { ok: true; input: AthRecordResultPayload } | { ok: false; error: string };\n\n/**\n * Parse one score input. `null` means \"no usable value\" — covering an empty\n * field, text that is not a number, and text that only *starts* with a number.\n * Returning `NaN` here instead would be a silent data bug: `NaN !== null` is\n * true (so a pair of garbage values looks complete), `NaN !== NaN` is true (so\n * a level check never fires), and `NaN` would go straight into the payload.\n *\n * `Number.parseInt` is deliberately not used on its own: it accepts any prefix\n * (`'3abc'` -> 3, `'2.5'` -> 2), so a typo or paste would be silently rounded\n * down to a plausible-looking score instead of being rejected. Only a whole\n * integer — optionally signed, so a negative can still be *reported* as one by\n * the caller rather than being indistinguishable from a typo — is accepted.\n */\nexport function parseScoreInput(raw: string): number | null {\n const trimmed = raw.trim();\n if (trimmed === '') return null;\n if (!/^[+-]?\\d+$/.test(trimmed)) return null;\n return Number.parseInt(trimmed, 10);\n}\n\n/** True when at least one field of the pair has been typed into. */\nfunction pairEntered(a: string, b: string): boolean {\n return a !== '' || b !== '';\n}\n\n/** True when any supplied value is below zero. Absent values are not negative. */\nfunction anyNegative(values: readonly (number | null)[]): boolean {\n return values.some((value) => value !== null && value < 0);\n}\n\n/**\n * Validate the form and build the mutation input, or explain why it cannot be\n * submitted.\n *\n * @param messages Localised copy for the failure cases; the page passes\n * `tr(key, fallback)` results so validation stays in the i18n surface.\n */\nexport function buildRecordResultInput(\n fields: RecordResultFields,\n messages: {\n scoresRequired: string;\n scoresNegative: string;\n extraTimePair: string;\n extraTimeNumeric: string;\n extraTimeNegative: string;\n penaltyPair: string;\n penaltyNumeric: string;\n penaltyNegative: string;\n extraTimeDecided: string;\n extraTimeLevel: string;\n penaltyLevel: string;\n }\n): RecordResultDraft {\n const home = parseScoreInput(fields.homeScore);\n const away = parseScoreInput(fields.awayScore);\n\n if (home === null || away === null) {\n return { ok: false, error: messages.scoresRequired };\n }\n if (home < 0 || away < 0) {\n return { ok: false, error: messages.scoresNegative };\n }\n\n const input: AthRecordResultPayload = { homeScore: home, awayScore: away };\n\n // Knockout outcome only applies to a tie. Everything below — validation AND\n // payload — is gated on this, so a full-time score that stops being level\n // cannot leak the now-hidden extra-time / penalty values into the mutation.\n if (home !== away) return { ok: true, input };\n\n const etHome = parseScoreInput(fields.extraTimeHome);\n const etAway = parseScoreInput(fields.extraTimeAway);\n const penHome = parseScoreInput(fields.penaltyHome);\n const penAway = parseScoreInput(fields.penaltyAway);\n const etEntered = pairEntered(fields.extraTimeHome, fields.extraTimeAway);\n const penEntered = pairEntered(fields.penaltyHome, fields.penaltyAway);\n const etComplete = etHome !== null && etAway !== null;\n const penComplete = penHome !== null && penAway !== null;\n\n // A pair is either wholly absent or wholly supplied: say which of the two\n // mistakes was made, because the fix differs.\n if (etEntered && !etComplete) {\n const halfFilled = fields.extraTimeHome === '' || fields.extraTimeAway === '';\n return { ok: false, error: halfFilled ? messages.extraTimePair : messages.extraTimeNumeric };\n }\n if (penEntered && !penComplete) {\n const halfFilled = fields.penaltyHome === '' || fields.penaltyAway === '';\n return { ok: false, error: halfFilled ? messages.penaltyPair : messages.penaltyNumeric };\n }\n if (anyNegative([etHome, etAway])) {\n return { ok: false, error: messages.extraTimeNegative };\n }\n if (anyNegative([penHome, penAway])) {\n return { ok: false, error: messages.penaltyNegative };\n }\n // Extra time is only worth recording when it was the stage that decided the\n // tie; once it hands the game to a team, a shootout contradicts it.\n if (etComplete && etHome !== etAway && penComplete) {\n return { ok: false, error: messages.extraTimeDecided };\n }\n // Still level after extra time: the shootout is not optional.\n if (etComplete && etHome === etAway && !penComplete) {\n return { ok: false, error: messages.extraTimeLevel };\n }\n if (penComplete && penHome === penAway) {\n return { ok: false, error: messages.penaltyLevel };\n }\n\n // `etComplete` / `penComplete` already imply a non-null pair, so the guard is\n // the whole condition — repeating the null checks here would only invite the\n // belief that a null could slip through it.\n if (etComplete) {\n input.extraTimeHomeScore = etHome;\n input.extraTimeAwayScore = etAway;\n }\n if (penComplete) {\n input.penaltyHomeScore = penHome;\n input.penaltyAwayScore = penAway;\n }\n\n return { ok: true, input };\n}\n\n// ── Cricket scorecard (BOFF-7644) ────────────────────────────────────────────\n\n/** Which side won a cricket fixture, and how. */\nexport type CricketWinner = 'HOME' | 'AWAY';\nexport type CricketDecidedBy = 'RUNS' | 'WICKETS';\n\n/** Raw text of the nine scorecard inputs plus the four toggles. */\nexport interface CricketResultFields {\n homeRuns: string;\n homeWickets: string;\n homeOvers: string;\n homeBalls: string;\n awayRuns: string;\n awayWickets: string;\n awayOvers: string;\n awayBalls: string;\n margin: string;\n winner: CricketWinner;\n decidedBy: CricketDecidedBy;\n superOver: boolean;\n dls: boolean;\n}\n\n/** A side can be all out for at most ten wickets — the most one can win by. */\nconst MAX_WICKETS = 10;\n/** An over is six legal deliveries; the form carries the part-over separately. */\nconst MAX_BALLS_IN_OVER = 5;\n\n/**\n * Validate the cricket scorecard form and build the mutation input, or explain\n * why it cannot be submitted.\n *\n * A cricket result is a margin, not a score comparison, so none of the knockout\n * rules above apply — but the parsing discipline does. Every field goes through\n * `parseScoreInput`, so `'20.5'` in Overs is reported as a typo rather than\n * being floored to 20 overs with half a ball silently dropped.\n *\n * @param messages Localised copy for the failure cases; the page passes\n * `tr(key, fallback)` results so validation stays in the i18n surface.\n */\nexport function buildCricketResultInput(\n fields: CricketResultFields,\n messages: {\n required: string;\n negative: string;\n wicketsRange: string;\n ballsRange: string;\n marginMinimum: string;\n wicketMarginMax: string;\n }\n): RecordResultDraft {\n const homeRuns = parseScoreInput(fields.homeRuns);\n const homeWickets = parseScoreInput(fields.homeWickets);\n const homeOvers = parseScoreInput(fields.homeOvers);\n const awayRuns = parseScoreInput(fields.awayRuns);\n const awayWickets = parseScoreInput(fields.awayWickets);\n const awayOvers = parseScoreInput(fields.awayOvers);\n const margin = parseScoreInput(fields.margin);\n // Balls bowled in the part-completed over are the one genuinely optional\n // field: blank means \"no partial over\", not \"missing data\".\n const homeBalls = fields.homeBalls === '' ? 0 : parseScoreInput(fields.homeBalls);\n const awayBalls = fields.awayBalls === '' ? 0 : parseScoreInput(fields.awayBalls);\n\n if (\n homeRuns === null ||\n homeWickets === null ||\n homeOvers === null ||\n awayRuns === null ||\n awayWickets === null ||\n awayOvers === null ||\n margin === null ||\n homeBalls === null ||\n awayBalls === null\n ) {\n return { ok: false, error: messages.required };\n }\n\n if (\n anyNegative([\n homeRuns,\n homeWickets,\n homeOvers,\n awayRuns,\n awayWickets,\n awayOvers,\n margin,\n homeBalls,\n awayBalls,\n ])\n ) {\n return { ok: false, error: messages.negative };\n }\n if (homeWickets > MAX_WICKETS || awayWickets > MAX_WICKETS) {\n return { ok: false, error: messages.wicketsRange };\n }\n if (homeBalls > MAX_BALLS_IN_OVER || awayBalls > MAX_BALLS_IN_OVER) {\n return { ok: false, error: messages.ballsRange };\n }\n if (margin < 1) {\n return { ok: false, error: messages.marginMinimum };\n }\n // You cannot win by more wickets than the losing side has; ten is the ceiling.\n if (fields.decidedBy === 'WICKETS' && margin > MAX_WICKETS) {\n return { ok: false, error: messages.wicketMarginMax };\n }\n\n return {\n ok: true,\n input: {\n cricketScorecard: {\n homeInnings: { runs: homeRuns, wickets: homeWickets, overs: homeOvers, balls: homeBalls },\n awayInnings: { runs: awayRuns, wickets: awayWickets, overs: awayOvers, balls: awayBalls },\n winner: fields.winner,\n decidedBy: fields.decidedBy,\n margin,\n superOver: fields.superOver,\n dls: fields.dls,\n },\n },\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burdenoff/microfe-atheletebridge",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.1024.1",
|
|
4
4
|
"description": "Burdenoff AthleteBridge Microfrontend - Sports, coaching & training platform for teams, fixtures, programs, sessions and athlete performance",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|