small fixups
This commit is contained in:
parent
bbf3870a85
commit
ac506795c6
4 changed files with 23 additions and 40 deletions
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<string, unknown>).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;
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue