import { useEffect, useState, useRef } from "react"; import axios from "axios"; import StatsStyling from "../styles/stats_styling"; import SummaryStats from "../components/SummaryStats"; import EmotionalStats from "../components/EmotionalStats"; import InteractionStats from "../components/UserStats"; import { type SummaryResponse, type UserAnalysisResponse, type TimeAnalysisResponse, type ContentAnalysisResponse } from '../types/ApiTypes' const styles = StatsStyling; const StatPage = () => { const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const [activeView, setActiveView] = useState<"summary" | "emotional" | "interaction">("summary"); const [userData, setUserData] = useState(null); const [timeData, setTimeData] = useState(null); const [contentData, setContentData] = useState(null); const [summary, setSummary] = useState(null); const searchInputRef = useRef(null); const beforeDateRef = useRef(null); const afterDateRef = useRef(null); const getStats = () => { setError(""); setLoading(true); Promise.all([ axios.get("http://localhost:5000/stats/time"), axios.get("http://localhost:5000/stats/user"), axios.get("http://localhost:5000/stats/content"), axios.get(`http://localhost:5000/stats/summary`), ]) .then(([timeRes, userRes, contentRes, summaryRes]) => { setUserData(userRes.data || null); setTimeData(timeRes.data || null); setContentData(contentRes.data || null); setSummary(summaryRes.data || null); }) .catch((e) => setError("Failed to load statistics: " + String(e))) .finally(() => setLoading(false)); }; const onSubmitFilters = () => { const query = searchInputRef.current?.value ?? ""; Promise.all([ axios.post("http://localhost:5000/filter/search", { query: query }), ]) .then(() => { getStats(); }) .catch(e => { setError("Failed to load filters: " + e.response); }) }; const resetFilters = () => { axios.get("http://localhost:5000/filter/reset") .then(() => { getStats(); }) .catch(e => { setError(e); }) }; useEffect(() => { setError(""); getStats(); }, []) if (loading) return

Loading insights…

; if (error) return

{error}

; return (
Analytics Dashboard
{activeView === "summary" && ( )} {activeView === "emotional" && contentData && ( )} {activeView === "emotional" && !contentData && (
No emotional data available.
)} {activeView === "interaction" && userData && ( )}
); } export default StatPage;