import { useCallback, useEffect, useState } from "react"; import { invoke } from "@tauri-apps/api/core"; import type { ActionResponse, PreviewResult, SessionStatusFilter, SessionsResult, } from "../types/sessions"; export function useSessions() { const [status, setStatus] = useState("active"); const [workspace, setWorkspace] = useState("all"); const [data, setData] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const refresh = useCallback(async () => { setLoading(true); setError(null); try { const result = await invoke("list_sessions", { status, workspace: workspace === "all" ? null : workspace, }); setData(result); } catch (err) { setData(null); setError(err instanceof Error ? err.message : String(err)); } finally { setLoading(false); } }, [status, workspace]); useEffect(() => { refresh(); }, [refresh]); const archiveSession = useCallback( async (workspaceId: string, sessionId: string) => { await invoke("archive_session", { workspaceId, sessionId }); await refresh(); }, [refresh] ); const unarchiveSession = useCallback( async (workspaceId: string, sessionId: string) => { await invoke("unarchive_session", { workspaceId, sessionId, }); await refresh(); }, [refresh] ); const deleteSession = useCallback( async (workspaceId: string, sessionId: string, sessionStatus?: string) => { await invoke("delete_session", { workspaceId, sessionId, status: sessionStatus ?? null, }); await refresh(); }, [refresh] ); const deleteWorkspace = useCallback( async (workspaceId: string) => { await invoke("delete_workspace", { workspaceId, confirm: true, }); await refresh(); }, [refresh] ); const getPreview = useCallback( async (workspaceId: string, sessionId: string, sessionStatus?: string) => { return invoke("get_session_preview", { workspaceId, sessionId, status: sessionStatus ?? null, }); }, [] ); return { status, setStatus, workspace, setWorkspace, data, loading, error, setError, refresh, archiveSession, unarchiveSession, deleteSession, deleteWorkspace, getPreview, }; }