import { useEffect, useState } from 'react'; import type { WorkSession } from '@solelog/shared'; import { useActiveSessions } from '../api/admin-sessions'; import { formatTime } from '../lib/elapsed'; export default function Live() { const { data, isLoading, isError } = useActiveSessions(); // Client-side 1s tick so the elapsed timer on each card keeps counting up // between the 5s server refreshes. const [now, setNow] = useState(() => Date.now()); useEffect(() => { const id = setInterval(() => setNow(Date.now()), 1000); return () => clearInterval(id); }, []); if (isLoading) { return (

Laden…

); } if (isError) { return (

Kon gegevens niet laden.

); } const sessions = Array.isArray(data) ? data : []; return (

Actief nu ({sessions.length})

{sessions.length === 0 ? (

Niemand is nu aan het werk.

) : (
{sessions.map((session) => ( ))}
)}
); } function LiveCard({ session, now }: { session: WorkSession; now: number }) { const elapsed = formatTime((now - Date.parse(session.start_time)) / 1000); return (
{session.user_name ?? 'Onbekend'} {session.insole_type && {session.insole_type}}
{session.activity_name ?? 'Onbekende handeling'}
{session.pair_count} zolen
{elapsed}
); }