'use client'; import { useState, useCallback } from 'react'; import { useProcesses } from '@/lib/hooks/useSupervisor'; import { ProcessCard } from '@/components/process/ProcessCard'; import { GroupView } from '@/components/groups/GroupView'; import { GroupSelector } from '@/components/groups/GroupSelector'; import { BatchActions } from '@/components/process/BatchActions'; import { ProcessFilters } from '@/components/process/ProcessFilters'; import { RefreshCw, AlertCircle, CheckSquare } from 'lucide-react'; import { Button } from '@/components/ui/button'; import type { ProcessInfo } from '@/lib/supervisor/types'; export default function ProcessesPage() { const [viewMode, setViewMode] = useState<'flat' | 'grouped'>('flat'); const [selectedProcesses, setSelectedProcesses] = useState>(new Set()); const [filteredProcesses, setFilteredProcesses] = useState([]); const { data: processes, isLoading, isError, refetch } = useProcesses(); const handleFilterChange = useCallback((filtered: ProcessInfo[]) => { setFilteredProcesses(filtered); }, []); const handleSelectionChange = (processId: string, selected: boolean) => { setSelectedProcesses((prev) => { const newSet = new Set(prev); if (selected) { newSet.add(processId); } else { newSet.delete(processId); } return newSet; }); }; const handleSelectAll = () => { const displayedProcesses = filteredProcesses.length > 0 ? filteredProcesses : (processes || []); if (displayedProcesses) { if (selectedProcesses.size === displayedProcesses.length) { setSelectedProcesses(new Set()); } else { setSelectedProcesses(new Set(displayedProcesses.map((p) => `${p.group}:${p.name}`))); } } }; const handleClearSelection = () => { setSelectedProcesses(new Set()); }; if (isLoading) { return (

Processes

{[1, 2, 3, 4, 5, 6].map((i) => (
))}
); } if (isError) { return (

Processes

Failed to load processes

Could not connect to Supervisor. Please check your configuration.

); } const displayedProcesses = filteredProcesses.length > 0 || !processes ? filteredProcesses : processes; return (

Processes

{displayedProcesses.length} of {processes?.length ?? 0} processes {displayedProcesses.length !== (processes?.length ?? 0) && ' (filtered)'}

{viewMode === 'flat' && displayedProcesses.length > 0 && ( )}
{/* Filters */} {processes && processes.length > 0 && ( )} {/* Process Display */} {processes && processes.length === 0 ? (

No processes configured

) : displayedProcesses.length === 0 ? (

No processes match the current filters

) : viewMode === 'grouped' ? ( ) : (
{displayedProcesses.map((process) => { const fullName = `${process.group}:${process.name}`; return ( ); })}
)}
); }