import React, { useEffect, useState, useCallback } from 'react' import { Descriptions, Space, Flex, Alert, Typography, Spin, message, Button, Collapse, Segmented, Card } from 'antd' import { LoadingOutlined, CaretLeftOutlined } from '@ant-design/icons' import { Line } from '@ant-design/charts' import axios from 'axios' import PrinterIcon from '../../Icons/PrinterIcon' import JobIcon from '../../Icons/JobIcon' import ReloadIcon from '../../Icons/ReloadIcon' import useCollapseState from '../hooks/useCollapseState' import config from '../../../config' const { Title, Text } = Typography const ProductionOverview = () => { const [messageApi, contextHolder] = message.useMessage() const [error, setError] = useState(null) const [fetchPrinterStatsLoading, setFetchPrinterStatsLoading] = useState(true) const [chartData, setChartData] = useState([]) const [collapseState, updateCollapseState] = useCollapseState( 'ProductionOverview', { overview: true, printerStats: true, jobStats: true } ) const [timeRanges, setTimeRanges] = useState({ overview: '24h', printerStats: '24h', jobStats: '24h' }) const [stats, setStats] = useState({ totalPrinters: 0, activePrinters: 0, totalJobs: 0, activeJobs: 0, completedJobs: 0, printerStatus: { idle: 0, printing: 0, error: 0, offline: 0 } }) const fetchAllStats = useCallback(async () => { await fetchPrinterStats() await fetchJobstats() await fetchChartData() }, []) const fetchPrinterStats = async () => { try { setFetchPrinterStatsLoading(true) const response = await axios.get(`${config.backendUrl}/printers/stats`, { headers: { Accept: 'application/json' }, withCredentials: true }) const printStats = response.data setStats((prev) => ({ ...prev, printers: printStats })) setError(null) } catch (err) { setError('Failed to fetch printer details') messageApi.error('Failed to fetch printer details') } finally { setFetchPrinterStatsLoading(false) } } const fetchJobstats = async () => { try { setFetchPrinterStatsLoading(true) const response = await axios.get(`${config.backendUrl}/jobs/stats`, { headers: { Accept: 'application/json' }, withCredentials: true }) const jobstats = response.data setStats((prev) => ({ ...prev, jobs: jobstats })) setError(null) } catch (err) { setError('Failed to fetch printer details') messageApi.error('Failed to fetch printer details') } finally { setFetchPrinterStatsLoading(false) } } const fetchChartData = async () => { try { const response = await axios.get(`${config.backendUrl}/stats/history`, { headers: { Accept: 'application/json' }, withCredentials: true }) setChartData(response.data) } catch (err) { console.error('Failed to fetch chart data:', err) } } useEffect(() => { fetchAllStats() }, [fetchAllStats]) if (fetchPrinterStatsLoading || fetchPrinterStatsLoading) { return (
{error || 'Printer not found'}
} onClick={fetchAllStats}> Retry