Files
kandev/apps/web/hooks/use-session.ts
T
2026-01-17 19:02:22 +00:00

33 lines
944 B
TypeScript

import { useEffect, useMemo } from 'react';
import { useAppStore } from '@/components/state-provider';
import { getWebSocketClient } from '@/lib/ws/connection';
import type { TaskSession } from '@/lib/types/http';
type UseSessionResult = {
session: TaskSession | null;
isActive: boolean;
};
export function useSession(sessionId: string | null): UseSessionResult {
const session = useAppStore((state) =>
sessionId ? state.taskSessions.items[sessionId] ?? null : null
);
const isActive = useMemo(() => {
if (!session?.state) return false;
return session.state === 'RUNNING' || session.state === 'WAITING_FOR_INPUT';
}, [session?.state]);
useEffect(() => {
if (!session?.id) return;
const client = getWebSocketClient();
if (!client) return;
const unsubscribe = client.subscribeSession(session.id);
return () => {
unsubscribe();
};
}, [session?.id]);
return { session, isActive };
}