fix(timeline): resync after sse reconnect

This commit is contained in:
2026-04-01 15:04:00 +02:00
parent d4652b7a42
commit 3258b59e21
5 changed files with 94 additions and 2 deletions
+15 -1
View File
@@ -3,7 +3,11 @@
import { SSE_EVENT_TYPES } from "@capakraken/shared";
import { useQueryClient } from "@tanstack/react-query";
import { useEffect, useRef } from "react";
import { getTimelineSseInvalidationKeys, parseTimelineSseEvent } from "./timelineSsePolicy.js";
import {
getTimelineSseInvalidationKeys,
getTimelineSseResyncKeys,
parseTimelineSseEvent,
} from "./timelineSsePolicy.js";
/**
* Connects to the SSE timeline endpoint and invalidates React Query caches
@@ -17,6 +21,7 @@ export function useTimelineSSE() {
let es: EventSource | null = null;
let reconnectAttempts = 0;
let isDisposed = false;
let shouldResyncOnOpen = false;
function scheduleReconnect() {
if (isDisposed || reconnectTimeout.current) return;
@@ -35,6 +40,14 @@ export function useTimelineSSE() {
es.onopen = () => {
reconnectAttempts = 0;
if (!shouldResyncOnOpen) {
return;
}
shouldResyncOnOpen = false;
for (const queryKey of getTimelineSseResyncKeys()) {
void queryClient.invalidateQueries({ queryKey });
}
};
es.onmessage = (event) => {
@@ -54,6 +67,7 @@ export function useTimelineSSE() {
};
es.onerror = () => {
shouldResyncOnOpen = true;
es?.close();
scheduleReconnect();
};