From f7ee83f93aa3a06f64bc52cd96adc728d08d237b Mon Sep 17 00:00:00 2001 From: michelleyeoh Date: Thu, 26 Mar 2026 21:59:59 -0700 Subject: [PATCH 1/2] add judging state and temp table number fix --- app/(pages)/(hackers)/(hub)/page.tsx | 4 ++- .../_components/HomeJudging/HeroJudging.tsx | 8 +++--- .../HomeJudging/_components/JudgeBanners.tsx | 2 +- .../TableNumberCheckin/TableNumberCheckin.tsx | 8 ++++-- app/(pages)/_contexts/TableNumberContext.tsx | 25 ++++++++++++++++--- app/(pages)/_hooks/useTableNumber.ts | 12 ++++++--- .../_hooks/useTeamJudgesFromTableNumber.ts | 7 +++++- app/_types/team.ts | 2 +- 8 files changed, 50 insertions(+), 18 deletions(-) diff --git a/app/(pages)/(hackers)/(hub)/page.tsx b/app/(pages)/(hackers)/(hub)/page.tsx index d532b760b..2c767b7d6 100644 --- a/app/(pages)/(hackers)/(hub)/page.tsx +++ b/app/(pages)/(hackers)/(hub)/page.tsx @@ -13,6 +13,7 @@ import HeroJudging from '../_components/HomeJudging/HeroJudging'; import HackerChoiceAward from '../_components/HomeJudging/HackersChoiceAwards'; import HeroHacking from '../_components/HomeHacking/HeroHacking'; import { useRollout } from '@pages/_hooks/useRollout'; +import HeroWaiting from '../_components/HomeJudging/HeroWaiting'; export default function Page() { const { rolloutRes, loading } = useRollout('hacking-starts'); @@ -31,10 +32,11 @@ export default function Page() { {/* temporarilty set featureId below to "hero-hacking" to test */} + - + diff --git a/app/(pages)/(hackers)/_components/HomeJudging/HeroJudging.tsx b/app/(pages)/(hackers)/_components/HomeJudging/HeroJudging.tsx index e373cba0e..76d1724b0 100644 --- a/app/(pages)/(hackers)/_components/HomeJudging/HeroJudging.tsx +++ b/app/(pages)/(hackers)/_components/HomeJudging/HeroJudging.tsx @@ -8,7 +8,7 @@ import { LuEye, LuEyeOff } from 'react-icons/lu'; import useTableNumberContext from '@pages/_hooks/useTableNumberContext'; import JudgeBanners from './_components/JudgeBanners'; -import HeroWaiting from './HeroWaiting'; +// import HeroWaiting from './HeroWaiting'; import DoneJudgingModal from './_components/DoneJudgingModal'; import clouds from '@public/hackers/hero/Clouds.svg'; @@ -25,9 +25,9 @@ export default function HeroJudging() { } }, [hasDismissedModal]); - if (!tableNumber) { - return ; - } + // if (!tableNumber) { + // return ; + // } return (
diff --git a/app/(pages)/(hackers)/_components/HomeJudging/_components/JudgeBanners.tsx b/app/(pages)/(hackers)/_components/HomeJudging/_components/JudgeBanners.tsx index 8435bd413..de88299e4 100644 --- a/app/(pages)/(hackers)/_components/HomeJudging/_components/JudgeBanners.tsx +++ b/app/(pages)/(hackers)/_components/HomeJudging/_components/JudgeBanners.tsx @@ -33,7 +33,7 @@ export default function JudgeBanners({ }: JudgeBannersProps) { const { storedValue: tableNumber } = useTableNumberContext(); const { team, judges, loading, error, fetchTeamJudges } = - useTeamJudgesFromTableNumber(tableNumber ?? -1); + useTeamJudgesFromTableNumber(tableNumber); const allScored = judges?.every((judge: HydratedJudge) => judge.isScored); useEffect(() => { diff --git a/app/(pages)/(hackers)/_components/TableNumberCheckin/TableNumberCheckin.tsx b/app/(pages)/(hackers)/_components/TableNumberCheckin/TableNumberCheckin.tsx index be0cd5ec1..923a09d21 100644 --- a/app/(pages)/(hackers)/_components/TableNumberCheckin/TableNumberCheckin.tsx +++ b/app/(pages)/(hackers)/_components/TableNumberCheckin/TableNumberCheckin.tsx @@ -25,7 +25,7 @@ export default function TableNumberCheckin() { const { loading, tableNumber, fetchTableNumber, setTableNumber, error } = useTableNumber(); - if (localStorageLoading || storedValue) { + if (localStorageLoading || storedValue !== null) { return null; } @@ -133,7 +133,11 @@ export default function TableNumberCheckin() { diff --git a/app/(pages)/_contexts/TableNumberContext.tsx b/app/(pages)/_contexts/TableNumberContext.tsx index 84f4b5077..830de2d13 100644 --- a/app/(pages)/_contexts/TableNumberContext.tsx +++ b/app/(pages)/_contexts/TableNumberContext.tsx @@ -4,8 +4,8 @@ import { createContext } from 'react'; import { useLocalStorage } from '@pages/_hooks/useLocalStorage'; interface TableNumberContextValue { - storedValue: number | null; - setValue: (val: any) => void; + storedValue: string | null; + setValue: (val: string) => void; fetchValue: () => void; loading: boolean; } @@ -14,7 +14,7 @@ export type { TableNumberContextValue }; export const TableNumberContext = createContext({ storedValue: null, - setValue: (_: any) => {}, + setValue: (_: string) => {}, fetchValue: () => {}, loading: false, }); @@ -27,8 +27,25 @@ export default function TableNumberContextProvider({ const { storedValue, setValue, fetchValue, loading } = useLocalStorage('tableNumber'); + const parsedStoredValue = (() => { + if (storedValue === null) { + return null; + } + + const normalized = String(storedValue).trim(); + if ( + normalized.length === 0 || + normalized === 'null' || + normalized === 'undefined' + ) { + return null; + } + + return normalized; + })(); + const value = { - storedValue: Number(storedValue), + storedValue: parsedStoredValue, setValue, fetchValue, loading, diff --git a/app/(pages)/_hooks/useTableNumber.ts b/app/(pages)/_hooks/useTableNumber.ts index 7787e2700..9020e1944 100644 --- a/app/(pages)/_hooks/useTableNumber.ts +++ b/app/(pages)/_hooks/useTableNumber.ts @@ -4,7 +4,7 @@ import { getManyTeams } from '@actions/teams/getTeams'; import { useState } from 'react'; export function useTableNumber() { - const [tableNumber, setTableNumber] = useState(null); + const [tableNumber, setTableNumber] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); @@ -16,9 +16,13 @@ export function useTableNumber() { setError(teamsRes.error); } else { // grab first team that matches teamNumber, get tableNumber back - const tableNumber = teamsRes.body?.[0]?.tableNumber ?? null; - setTableNumber(tableNumber); - if (!tableNumber) { + const tableNumber = teamsRes.body?.[0]?.tableNumber; + const normalizedTableNumber = + tableNumber === null || tableNumber === undefined + ? null + : String(tableNumber); + setTableNumber(normalizedTableNumber); + if (!normalizedTableNumber) { setError('No team with given teamNumber'); } else { setError(null); diff --git a/app/(pages)/_hooks/useTeamJudgesFromTableNumber.ts b/app/(pages)/_hooks/useTeamJudgesFromTableNumber.ts index 7dc4d7d15..d5d88f624 100644 --- a/app/(pages)/_hooks/useTeamJudgesFromTableNumber.ts +++ b/app/(pages)/_hooks/useTeamJudgesFromTableNumber.ts @@ -14,13 +14,18 @@ interface HydratedJudge extends User { isScored: boolean; } -export function useTeamJudgesFromTableNumber(tableNumber: number): any { +export function useTeamJudgesFromTableNumber(tableNumber: string | null): any { const [team, setTeam] = useState(null); const [judges, setJudges] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const fetchTeamJudges = useCallback(async () => { + if (!tableNumber) { + setLoading(false); + return; + } + try { const teamRes = await getManyTeams({ tableNumber }); diff --git a/app/_types/team.ts b/app/_types/team.ts index 8ceb34a12..b89ddc7d1 100644 --- a/app/_types/team.ts +++ b/app/_types/team.ts @@ -1,7 +1,7 @@ interface Team { _id?: string; teamNumber: number; - tableNumber: number; + tableNumber: string; name: string; tracks: string[]; reports: { From 33f07d1481a7b1dbe46ef0aeec2864edba276703 Mon Sep 17 00:00:00 2001 From: michelleyeoh Date: Thu, 26 Mar 2026 23:09:19 -0700 Subject: [PATCH 2/2] revert judge banner --- .../_components/HomeJudging/_components/JudgeBanners.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/(pages)/(hackers)/_components/HomeJudging/_components/JudgeBanners.tsx b/app/(pages)/(hackers)/_components/HomeJudging/_components/JudgeBanners.tsx index de88299e4..aee755712 100644 --- a/app/(pages)/(hackers)/_components/HomeJudging/_components/JudgeBanners.tsx +++ b/app/(pages)/(hackers)/_components/HomeJudging/_components/JudgeBanners.tsx @@ -33,7 +33,7 @@ export default function JudgeBanners({ }: JudgeBannersProps) { const { storedValue: tableNumber } = useTableNumberContext(); const { team, judges, loading, error, fetchTeamJudges } = - useTeamJudgesFromTableNumber(tableNumber); + useTeamJudgesFromTableNumber(tableNumber ?? ''); const allScored = judges?.every((judge: HydratedJudge) => judge.isScored); useEffect(() => {