diff --git a/frontend/src/pages/webinars/HostConsolePage.tsx b/frontend/src/pages/webinars/HostConsolePage.tsx index cf332e4..73b6f5e 100644 --- a/frontend/src/pages/webinars/HostConsolePage.tsx +++ b/frontend/src/pages/webinars/HostConsolePage.tsx @@ -172,6 +172,29 @@ export function HostConsolePage() { reconnectDelay: 4000, onConnect: () => { setConnected(true) + + /* + * DOCIAGNIECIE STANU PO KAZDYM POLACZENIU + * + * WebSocket nie ma historii: zdarzenie wyslane, gdy panel byl + * rozlaczony, przepada bezpowrotnie. Przy pierwszym polaczeniu to bez + * znaczenia (dane przyszly zapytaniami), ale przy KAZDYM NASTEPNYM + * panel wracalby ze stanem sprzed zerwania i pokazywal go jako + * aktualny. + * + * Zdarzylo sie to realnie: backend zrestartowal sie przy wdrozeniu, + * uczestnik poprosil o glos w czasie, gdy panel byl rozlaczony, + * a prowadzacy widzial "Nikt nie prosi o glos" przy zgloszeniu + * czekajacym juz kilkadziesiat sekund. Zgloszenie pojawilo sie + * dopiero po odswiezeniu strony. + * + * Rozlaczenie nie jest przy tym sytuacja wyjatkowa: wystarczy restart + * backendu, chwilowa utrata sieci albo uspienie laptopa. + */ + void loadSpeakQueue() + void initial.refetch() + void webinar.refetch() + stomp.subscribe(`/topic/webinars/${id}/moderation`, (message: IMessage) => { const event = JSON.parse(message.body) as { kind: string; payload: InteractionView } apply(event) @@ -236,6 +259,14 @@ export function HostConsolePage() { return () => { void stomp.deactivate() } + /* + * `initial.refetch` i `webinar.refetch` sa POMINIETE w zaleznosciach + * swiadomie. TanStack Query daje je stabilne, a dopisanie ich tutaj + * przelaczaloby WebSocket przy kazdym odswiezeniu danych: polaczenie + * zrywaloby sie samo i gubilo zdarzenia, czyli dokladnie to, czemu ten + * efekt ma zapobiegac. + */ + // eslint-disable-next-line react-hooks/exhaustive-deps }, [id, loadSpeakQueue]) async function act(interactionId: number, action: string, body?: unknown) {