import { useState } from "react"; import { useNavigate } from "react-router"; import { toast } from "react-toastify"; import usePaginatedList from "../../../hooks/usePaginatedList"; import { fetchWorkOrdersPaged } from "./api"; import Table from "./Table"; import DeleteModal from "../../../components/DeleteModal"; import ActionBar from "../../../components/ActionBar"; import "./styles.css"; export default function WorkOrdersList() { const navigate = useNavigate(); const { rows, search, setSearch, page, setPage, pageSize, setPageSize, totalCount, loading, err } = usePaginatedList(fetchWorkOrdersPaged); const [viewMode, setViewMode] = useState("list"); 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 })); } }; return ( <> navigate("/workorders/new")} onBulkEdit={() => console.log("Bulk edit")} selectedCount={0} />
Work Orders

Search for Work Orders

Use the settings menu to adjust how to filter the list, and which columns to display.
setSearch(e.target.value)} placeholder="Enter search criteria here..." />
{page}
navigate(`/workorders/edit/${item.id}`)} onDelete={handleDeleteClick} page={page} setPage={setPage} pageSize={pageSize} setPageSize={setPageSize} totalCount={totalCount} totalPages={totalPages} /> 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} /> ); }