mirror of
https://github.com/umami-software/umami.git
synced 2026-02-05 21:27:20 +01:00
Add real-time session updates via Server-Sent Events
Implements push-based real-time updates for the Sessions page. New sessions now appear instantly without manual reload or polling. Changes: - Add SSE event emitter for session creation notifications - Create SSE stream endpoint at /api/websites/[id]/sessions/stream - Emit session events in tracking endpoint when sessions are created - Add useSessionStream hook to connect to SSE and invalidate queries - Fix LoadingPanel to prevent flicker during background refetches
This commit is contained in:
parent
81e27fc18c
commit
ef9a382cdd
7 changed files with 78 additions and 5 deletions
|
|
@ -79,6 +79,7 @@ export * from './useNavigation';
|
|||
export * from './usePagedQuery';
|
||||
export * from './usePageParameters';
|
||||
export * from './useRegionNames';
|
||||
export * from './useSessionStream';
|
||||
export * from './useSlug';
|
||||
export * from './useSticky';
|
||||
export * from './useTimezone';
|
||||
|
|
|
|||
18
src/components/hooks/useSessionStream.ts
Normal file
18
src/components/hooks/useSessionStream.ts
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import { useEffect } from 'react';
|
||||
import { useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
export function useSessionStream(websiteId: string) {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
useEffect(() => {
|
||||
if (!websiteId) return;
|
||||
|
||||
const eventSource = new EventSource(`/api/websites/${websiteId}/sessions/stream`);
|
||||
|
||||
eventSource.onmessage = () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['sessions'] });
|
||||
};
|
||||
|
||||
return () => eventSource.close();
|
||||
}, [websiteId, queryClient]);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue