34 lines
1.1 KiB
TypeScript
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,
|
|
};
|
|
}
|