From ac506795c68f2bb89322831d854058babc9724d7 Mon Sep 17 00:00:00 2001 From: Daniel Bulant Date: Wed, 27 May 2026 21:23:06 +0200 Subject: [PATCH] small fixups --- api/src/party/state.ts | 16 +++++++-------- api/src/routes/party-socket.ts | 29 +-------------------------- web/src/components/party/question.tsx | 11 +++++++--- web/src/hooks/use-party-socket.ts | 7 ++++++- 4 files changed, 23 insertions(+), 40 deletions(-) diff --git a/api/src/party/state.ts b/api/src/party/state.ts index 5572295..7da7d25 100644 --- a/api/src/party/state.ts +++ b/api/src/party/state.ts @@ -30,6 +30,14 @@ export async function updatePartyData( status: status ?? partyObject.status, data, }; + await db + .update(party) + .set({ + data, + ...(status ? { status } : {}), + lastUpdated: new Date(), + }) + .where(eq(party.id, id)); pubsub.publishPartyData(id, { type: "party_status", @@ -54,12 +62,4 @@ export async function updatePartyData( ); void publishDeviceEventForUser(member.userId, event); } - await db - .update(party) - .set({ - data, - ...(status ? { status } : {}), - lastUpdated: new Date(), - }) - .where(eq(party.id, id)); } diff --git a/api/src/routes/party-socket.ts b/api/src/routes/party-socket.ts index e4e150d..7e46160 100644 --- a/api/src/routes/party-socket.ts +++ b/api/src/routes/party-socket.ts @@ -4,7 +4,7 @@ import { betterAuthElysia } from "../auth"; import { db } from "../db"; import { getMemberRecord, getPartyStatus } from "../party-data"; -import type { PartySocketEvent, QuizState } from "../party-types"; +import type { PartySocketEvent } from "../party-types"; export function userTopic(userId: string) { return `user:${userId}`; @@ -63,31 +63,6 @@ async function subscribeWsToParty( return nextPartyId; } -export async function broadcastQuizState( - ws: { publish: (topic: string, message: string) => void }, - partyId: string, -) { - const partyRecord = await db.query.party.findFirst({ - where: { id: partyId }, - }); - - if (!partyRecord) return; - - const quizData = ((partyRecord.data ?? {}) as Record).quiz as - | QuizState - | undefined; - if (!quizData) return; - if (!quizData) return; - - ws.publish( - partyTopic(partyId), - JSON.stringify({ - type: "quiz_state", - quiz: quizData, - }), - ); -} - export const topic = { user: userTopic, party: partyTopic, @@ -118,8 +93,6 @@ export const partySocketApp = new Elysia() ); return; } - - await broadcastQuizState(ws, subscribedPartyId); }, message: async (ws, message) => { const data = ws.data; diff --git a/web/src/components/party/question.tsx b/web/src/components/party/question.tsx index dc56f26..992ba6c 100644 --- a/web/src/components/party/question.tsx +++ b/web/src/components/party/question.tsx @@ -55,6 +55,11 @@ export function Question() { const [isSubmitting, setIsSubmitting] = useState(false); const question = party?.data?.currentQuestion; const questionStartTimestamp = question?.startTimestamp ?? null; + const questionResetKey = question + ? `${party?.data?.questionIndex ?? 0}:${question.startTimestamp}` + : null; + const numericInitialValue = + question?.type === "numeric" ? question.range.min : null; const questionAnnouncement = question ? getQuestionAnnouncement(question) : null; @@ -68,10 +73,10 @@ export function Question() { }, []); useEffect(() => { - if (!question) return; + if (!questionResetKey) return; setSelected(null); - setSelectedValue(question.type === "numeric" ? question.range.min : null); - }, [question]); + setSelectedValue(numericInitialValue); + }, [questionResetKey, numericInitialValue]); useEffect(() => { if ( diff --git a/web/src/hooks/use-party-socket.ts b/web/src/hooks/use-party-socket.ts index 0d6db82..997c160 100644 --- a/web/src/hooks/use-party-socket.ts +++ b/web/src/hooks/use-party-socket.ts @@ -50,7 +50,12 @@ export function usePartySocket({ }; ws.onmessage = (event) => { - const parsed = JSON.parse(event.data) as PartySocketEvent; + let parsed: PartySocketEvent; + try { + parsed = JSON.parse(event.data) as PartySocketEvent; + } catch { + return; + } handlerRef.current?.(parsed); };