"use client"; import { useQueryClient } from "@tanstack/react-query"; import { useEffect } from "react"; import ApiHealth from "./ApiHealth"; import Card from "./Card"; import FilesProcessedCard from "./FilesProcessedCard"; import FileWatcherCard from "./FileWatcherCard"; import TaskProcessingCard from "./TaskProcessingCard"; import WatcherHealthStatus from "./WatcherHealthStatus"; export default function StatsSection() { const queryClient = useQueryClient(); // Listen for WebSocket updates to refresh stats useEffect(() => { const handleTaskUpdate = (event: CustomEvent) => { const taskData = event.detail; // Refresh task-related queries when tasks are updated if ( taskData.type === "progress" || taskData.type === "completed" || taskData.type === "failed" ) { queryClient.invalidateQueries({ queryKey: ["tasks"] }); queryClient.invalidateQueries({ queryKey: ["tasks", "processing-status"], }); queryClient.invalidateQueries({ queryKey: ["tasks", "queue", "status"], }); } }; const handleFileUpdate = (event: CustomEvent) => { const fileData = event.detail; // Refresh file stats when files are processed if (fileData.type === "processed" || fileData.type === "success") { queryClient.invalidateQueries({ queryKey: ["files-stats-successful"] }); queryClient.invalidateQueries({ queryKey: ["files-stats-processed"] }); } }; window.addEventListener("taskUpdate", handleTaskUpdate as EventListener); window.addEventListener("fileUpdate", handleFileUpdate as EventListener); return () => { window.removeEventListener( "taskUpdate", handleTaskUpdate as EventListener ); window.removeEventListener( "fileUpdate", handleFileUpdate as EventListener ); }; }, [queryClient]); return (
{/* API Health Widget */} {/* File Watcher Card */} {/* Task Processing Card */} {/* Files Processed Card */}
{/* Watcher Health Status - Full Width */}

Watcher Health

Status & Monitoring

); }