'use client'; import { useState, useEffect, useCallback } from 'react'; import { Header } from '@/components/layout'; import { AppLayout } from '@/components/layout'; import { EnhancedQueueList } from '@/components/features/queue'; import { apiClient, type QueueStatus, type JobInfo } from '@/lib/api'; import { Loader2 } from 'lucide-react'; export default function QueuePage() { const [queueStatus, setQueueStatus] = useState(null); const [loading, setLoading] = useState(true); const [actionLoading, setActionLoading] = useState(false); const loadQueueStatus = useCallback(async () => { try { const status = await apiClient.getQueueStatus(); setQueueStatus(status); } catch (error) { console.error('Failed to load queue status:', error); } finally { setLoading(false); } }, []); useEffect(() => { loadQueueStatus(); const interval = setInterval(loadQueueStatus, 2000); return () => clearInterval(interval); }, [loadQueueStatus]); const cancelJob = useCallback(async (jobId: string) => { setActionLoading(true); try { await apiClient.cancelJob(jobId); await loadQueueStatus(); } catch (error) { console.error('Failed to cancel job:', error); } finally { setActionLoading(false); } }, [loadQueueStatus]); const clearQueue = useCallback(async () => { setActionLoading(true); try { await apiClient.clearQueue(); await loadQueueStatus(); } catch (error) { console.error('Failed to clear queue:', error); } finally { setActionLoading(false); } }, [loadQueueStatus]); const copyParameters = useCallback((job: JobInfo) => { // This would typically copy to clipboard and show a toast console.log('Parameters copied for job:', job.id); }, []); if (loading) { return (
); } return (
); }