Files
kandev/apps/web/hooks/use-task-chat-session.ts
T

34 lines
1.1 KiB
TypeScript

import { useMemo } from "react";
import { useAppStore } from "@/components/state-provider";
import type { TaskSessionState, TaskSession } from "@/lib/types/http";
const EMPTY_SESSIONS: TaskSession[] = [];
type UseTaskChatSessionReturn = {
taskSessionId: string | null;
taskSessionState: TaskSessionState | null;
isTaskSessionWorking: boolean;
};
export function useTaskChatSession(taskId: string | null): UseTaskChatSessionReturn {
const sessionsForTask = useAppStore((state) =>
taskId ? (state.taskSessionsByTask.itemsByTaskId[taskId] ?? EMPTY_SESSIONS) : EMPTY_SESSIONS,
);
// Prefer the primary session, fall back to the first (most recent)
const currentSession = useMemo(() => {
if (sessionsForTask.length === 0) return null;
return sessionsForTask.find((s) => s.is_primary) ?? sessionsForTask[0] ?? null;
}, [sessionsForTask]);
const taskSessionId = currentSession?.id ?? null;
const taskSessionState = currentSession?.state ?? null;
const isTaskSessionWorking = taskSessionState === "STARTING" || taskSessionState === "RUNNING";
return {
taskSessionId,
taskSessionState,
isTaskSessionWorking,
};
}