// src/SessionTable.jsx import React, { useEffect, useState } from "react"; import { getSessionId } from "./useSessionId"; export default function SessionTable({ userId, onSelectSession, onClosePanel }) { const [sessions, setSessions] = useState([]); const [loading, setLoading] = useState(false); const [editingSessionId, setEditingSessionId] = useState(null); const [editName, setEditName] = useState(""); const activeSessionId = getSessionId(); const fetchSessions = async () => { setLoading(true); try { const res = await fetch(`/v1/sessions?user_id=${userId}`); const data = await res.json(); setSessions(data); } catch (err) { console.error("Failed to fetch sessions", err); } finally { setLoading(false); } }; useEffect(() => { if (userId) fetchSessions(); }, [userId]); const startEditing = (session) => { setEditingSessionId(session.session_id); setEditName(session.session_name); }; const saveName = async (sessionId) => { try { await fetch(`/v1/sessions/${sessionId}?user_id=${userId}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ session_name: editName }), }); setEditingSessionId(null); fetchSessions(); } catch (err) { console.error("Failed to rename session", err); } }; const deleteSession = async (sessionId) => { if (!window.confirm("Delete this session and its history?")) return; try { await fetch(`/v1/sessions/${sessionId}?user_id=${userId}`, { method: "DELETE" }); fetchSessions(); } catch (err) { console.error("Failed to delete session", err); } }; return (
| Session | Created | # mess | ||
|---|---|---|---|---|
| Loading… | ||||
| No sessions found | ||||
| {editingSessionId === s.session_id ? ( setEditName(e.target.value)} onBlur={() => saveName(s.session_id)} onKeyDown={(e) => { if (e.key === "Enter") saveName(s.session_id); if (e.key === "Escape") setEditingSessionId(null); }} autoFocus /> ) : ( { onSelectSession(s.session_id); if (typeof onClosePanel === "function") onClosePanel(); }} title="Click to load this session" > {s.session_name} )} | {new Date(s.created_at).toLocaleString()} | {s.message_count} | ||