import { useQuery } from '@tanstack/react-query' import { getFilaments, getPrintJobs } from '../services/api' import SummaryCard from '../components/SummaryCard' import RecentPrints from '../components/RecentPrints' import LoadingSpinner from '../components/LoadingSpinner' import { Package, AlertTriangle, Printer, DollarSign, Plus, List } from 'lucide-react' export default function Dashboard() { const { data: filamentData, isLoading: filamentLoading, error: filamentError, } = useQuery({ queryKey: ['filaments', 'count'], queryFn: () => getFilaments({ limit: 1 }), }) const { data: lowStockData, isLoading: lowStockLoading, error: lowStockError, } = useQuery({ queryKey: ['filaments', 'lowStock'], queryFn: () => getFilaments({ low_stock: true, limit: 1 }), }) const { data: recentPrints, isLoading: printsLoading, error: printsError, } = useQuery({ queryKey: ['printJobs', 'recent'], queryFn: () => getPrintJobs({ limit: 5 }), }) const { data: allPrints, isLoading: costLoading, error: costError, } = useQuery({ queryKey: ['printJobs', 'all'], queryFn: () => getPrintJobs({ limit: 1000 }), }) const totalSpools = filamentData?.total ?? 0 const lowStockCount = lowStockData?.total ?? 0 const recentPrintJobs = recentPrints?.data ?? [] // Calculate cost this month from all print jobs const now = new Date() const currentMonth = now.getMonth() const currentYear = now.getFullYear() const monthlyCost = allPrints?.data .filter((job) => { const d = new Date(job.started_at) return d.getMonth() === currentMonth && d.getFullYear() === currentYear }) .reduce((sum, job) => sum + (job.cost_usd ?? 0), 0) ?? 0 const isLoading = filamentLoading || lowStockLoading || printsLoading || costLoading const error = filamentError || lowStockError || printsError || costError if (isLoading) { return (
{(error as Error).message || 'Failed to load dashboard data.'}
Overview of your Extrudex inventory and prints