import { useState, useEffect } from "react"; import { useNavigate } from "react-router"; import { toast } from "react-toastify"; import usePaginatedList from "../../../hooks/usePaginatedList"; import { fetchWorkOrdersPaged } from "./api"; import { fetchUsers } from "../api"; import Table from "./Table"; import DeleteModal from "../../../components/DeleteModal"; import "./styles.css"; export default function WorkOrdersList() { const navigate = useNavigate(); const { rows, search, setSearch, page, setPage, pageSize, setPageSize, totalCount, loading, err, sortBy, setSortBy, sortDir, setSortDir } = usePaginatedList(fetchWorkOrdersPaged); const [deleteModal, setDeleteModal] = useState({ isOpen: false, item: null, loading: false }); const totalPages = Math.max(1, Math.ceil(totalCount / pageSize)); const handleDeleteClick = (item) => { setDeleteModal({ isOpen: true, item, loading: false }); }; const handleDeleteConfirm = async () => { setDeleteModal((prev) => ({ ...prev, loading: true })); try { await new Promise((resolve) => setTimeout(resolve, 500)); toast.success("Work Order deleted successfully!"); setDeleteModal({ isOpen: false, item: null, loading: false }); } catch { toast.error("Failed to delete work order"); setDeleteModal((prev) => ({ ...prev, loading: false })); } }; const [statusFilter, setStatusFilter] = useState(""); const [assigneeFilter, setAssigneeFilter] = useState(""); const [users, setUsers] = useState([]); const statuses = ["Open", "In Progress", "On Hold", "Done", "Cancelled"]; useEffect(() => { fetchUsers().then(setUsers).catch(() => {}); }, []); const filteredRows = rows.filter((r) => { if (statusFilter && r.status !== statusFilter) return false; if (assigneeFilter === "__unassigned" && r.assignedTo) return false; if (assigneeFilter && assigneeFilter !== "__unassigned" && r.assignedTo !== assigneeFilter) return false; return true; }); const hasFilter = statusFilter || assigneeFilter; return ( <>

Work Orders

{hasFilter ? `${filteredRows.length} of ${totalCount}` : `${totalCount} total`}
{ setSearch(e.target.value); setPage(1); }} placeholder="Search..." />
{statuses.map((s) => ( ))}
navigate(`/workorders/${item.id}`)} onDelete={handleDeleteClick} page={page} setPage={setPage} pageSize={pageSize} setPageSize={setPageSize} totalCount={hasFilter ? filteredRows.length : totalCount} totalPages={totalPages} sortBy={sortBy} setSortBy={setSortBy} sortDir={sortDir} setSortDir={setSortDir} /> setDeleteModal({ isOpen: false, item: null, loading: false }) } onConfirm={handleDeleteConfirm} title="Delete Work Order" message={`Are you sure you want to delete "${deleteModal.item?.title}"? This action cannot be undone.`} loading={deleteModal.loading} /> ); }