diff --git a/dev.db b/dev.db index c7b9a98..e22196a 100644 Binary files a/dev.db and b/dev.db differ diff --git a/src/app/api/sessions/[id]/subscribe/route.ts b/src/app/api/sessions/[id]/subscribe/route.ts index f29660d..29894fd 100644 --- a/src/app/api/sessions/[id]/subscribe/route.ts +++ b/src/app/api/sessions/[id]/subscribe/route.ts @@ -66,6 +66,7 @@ export async function GET( `data: ${JSON.stringify({ type: event.type, payload: JSON.parse(event.payload), + userId: event.userId, // Include userId for client-side filtering user: event.user, timestamp: event.createdAt, })}\n\n` diff --git a/src/app/sessions/[id]/page.tsx b/src/app/sessions/[id]/page.tsx index fc71aab..9b231b6 100644 --- a/src/app/sessions/[id]/page.tsx +++ b/src/app/sessions/[id]/page.tsx @@ -66,6 +66,7 @@ export default async function SessionPage({ params }: SessionPageProps) { ; + userId?: string; // ID of the user who created the event user?: { id: string; name: string | null; email: string }; timestamp: string; }; interface UseSessionLiveOptions { sessionId: string; + currentUserId?: string; // Current user ID for client-side filtering enabled?: boolean; onEvent?: (event: LiveEvent) => void; } @@ -24,6 +26,7 @@ interface UseSessionLiveReturn { export function useSessionLive({ sessionId, + currentUserId, enabled = true, onEvent, }: UseSessionLiveOptions): UseSessionLiveReturn { @@ -35,12 +38,17 @@ export function useSessionLive({ const reconnectTimeoutRef = useRef(null); const reconnectAttemptsRef = useRef(0); const onEventRef = useRef(onEvent); + const currentUserIdRef = useRef(currentUserId); - // Keep onEvent ref updated + // Keep refs updated useEffect(() => { onEventRef.current = onEvent; }, [onEvent]); + useEffect(() => { + currentUserIdRef.current = currentUserId; + }, [currentUserId]); + useEffect(() => { if (!enabled || typeof window === 'undefined') return; @@ -69,10 +77,16 @@ export function useSessionLive({ return; } + // Client-side filter: ignore events created by current user + // This prevents duplicates when revalidatePath already refreshed the data + if (currentUserIdRef.current && data.userId === currentUserIdRef.current) { + return; + } + setLastEvent(data); onEventRef.current?.(data); - // Refresh the page data when we receive an event + // Refresh the page data when we receive an event from another user router.refresh(); } catch (e) { console.error('Failed to parse SSE event:', e);