"use client"; import { useState, useEffect, useCallback } from "react"; // Added useCallback import { ChatSession } from "../../../lib/types"; import Link from "next/link"; // Placeholder for a SessionListItem component to be created later // For now, we'll display some basic info directly. // import SessionListItem from "../../../components/SessionListItem"; export default function SessionsPage() { const [sessions, setSessions] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [searchTerm, setSearchTerm] = useState(""); // Debounce search term to avoid excessive API calls const [debouncedSearchTerm, setDebouncedSearchTerm] = useState(searchTerm); useEffect(() => { const timerId = setTimeout(() => { setDebouncedSearchTerm(searchTerm); }, 500); // 500ms delay return () => { clearTimeout(timerId); }; }, [searchTerm]); const fetchSessions = useCallback(async () => { setLoading(true); setError(null); try { const query = debouncedSearchTerm ? `?searchTerm=${encodeURIComponent(debouncedSearchTerm)}` : ""; const response = await fetch(`/api/dashboard/sessions${query}`); if (!response.ok) { throw new Error(`Failed to fetch sessions: ${response.statusText}`); } const data = await response.json(); setSessions(data.sessions || []); } catch (err) { setError( err instanceof Error ? err.message : "An unknown error occurred" ); setSessions([]); } finally { setLoading(false); } }, [debouncedSearchTerm]); // Depend on debouncedSearchTerm useEffect(() => { fetchSessions(); }, [fetchSessions]); // fetchSessions is now stable due to useCallback and its dependency return (

Chat Sessions

setSearchTerm(e.target.value)} />
{loading &&

Loading sessions...

} {error &&

Error: {error}

} {!loading && !error && sessions.length === 0 && (

{debouncedSearchTerm ? `No sessions found for "${debouncedSearchTerm}".` : "No sessions found."}

)} {!loading && !error && sessions.length > 0 && (
{sessions.map((session) => (

Session ID: {session.sessionId || session.id}

Start Time: {new Date(session.startTime).toLocaleString()}

{session.category && (

Category:{" "} {session.category}

)} {session.language && (

Language:{" "} {session.language.toUpperCase()}

)} {session.initialMsg && (

Initial Message: {session.initialMsg}

)} View Details
))}
)} {/* TODO: Add pagination controls */}
); }