diff --git a/src/hooks/usePaginatedList.js b/src/hooks/usePaginatedList.js
index 4a5a05a0..0ac4f18f 100644
--- a/src/hooks/usePaginatedList.js
+++ b/src/hooks/usePaginatedList.js
@@ -9,6 +9,8 @@ export default function usePaginatedList(fetchFn, extraParams = {}) {
const [totalCount, setTotalCount] = useState(0);
const [loading, setLoading] = useState(true);
const [err, setErr] = useState("");
+ const [sortBy, setSortBy] = useState("lastUpdated");
+ const [sortDir, setSortDir] = useState("desc");
const debounceRef = useRef(null);
const extraKey = JSON.stringify(extraParams);
@@ -25,19 +27,19 @@ export default function usePaginatedList(fetchFn, extraParams = {}) {
const reload = useCallback(() => {
setLoading(true);
setErr("");
- fetchFn({ search: debouncedSearch, page, pageSize, ...extraParams })
+ fetchFn({ search: debouncedSearch, page, pageSize, sortBy, sortDir, ...extraParams })
.then(({ rows, totalCount }) => {
setRows(rows);
setTotalCount(totalCount);
})
.catch((e) => setErr(e.message || "Failed to load"))
.finally(() => setLoading(false));
- }, [fetchFn, debouncedSearch, page, pageSize, extraKey]);
+ }, [fetchFn, debouncedSearch, page, pageSize, sortBy, sortDir, extraKey]);
useEffect(() => { reload(); }, [reload]);
return useMemo(() => ({
rows, search, setSearch, page, setPage, pageSize, setPageSize,
- totalCount, loading, err, reload
- }), [rows, search, page, pageSize, totalCount, loading, err, reload]);
+ totalCount, loading, err, reload, sortBy, setSortBy, sortDir, setSortDir
+ }), [rows, search, page, pageSize, totalCount, loading, err, reload, sortBy, sortDir]);
}
diff --git a/src/pages/workorders/list/List.js b/src/pages/workorders/list/List.js
index 5970f835..9cf57507 100644
--- a/src/pages/workorders/list/List.js
+++ b/src/pages/workorders/list/List.js
@@ -11,16 +11,8 @@ import "./styles.css";
export default function WorkOrdersList() {
const navigate = useNavigate();
const {
- rows,
- search,
- setSearch,
- page,
- setPage,
- pageSize,
- setPageSize,
- totalCount,
- loading,
- err
+ rows, search, setSearch, page, setPage, pageSize, setPageSize,
+ totalCount, loading, err, sortBy, setSortBy, sortDir, setSortDir
} = usePaginatedList(fetchWorkOrdersPaged);
const [deleteModal, setDeleteModal] = useState({
@@ -124,6 +116,10 @@ export default function WorkOrdersList() {
setPageSize={setPageSize}
totalCount={totalCount}
totalPages={totalPages}
+ sortBy={sortBy}
+ setSortBy={setSortBy}
+ sortDir={sortDir}
+ setSortDir={setSortDir}
/>
{
@@ -194,6 +194,6 @@ export default function Table({ loading, error, rows, onEdit, onDelete, page, se
];
return (
-
+
);
}
diff --git a/src/pages/workorders/list/api.js b/src/pages/workorders/list/api.js
index f5b5d70d..37e4e1fb 100644
--- a/src/pages/workorders/list/api.js
+++ b/src/pages/workorders/list/api.js
@@ -1,8 +1,11 @@
import { get } from "../../../apiUtil";
import { API_URL } from "../../../constants";
-export const fetchWorkOrdersPaged = async ({ search = "", page = 1, pageSize = 12 }) => {
- const res = await get(`${API_URL}/WorkOrder/GetWorkOrderList?search=${encodeURIComponent(search)}&page=${page}&pageSize=${pageSize}`);
+export const fetchWorkOrdersPaged = async ({ search = "", page = 1, pageSize = 12, sortBy = "", sortDir = "" }) => {
+ const params = new URLSearchParams({ search, page, pageSize });
+ if (sortBy) params.append("sortBy", sortBy);
+ if (sortDir) params.append("sortDir", sortDir);
+ const res = await get(`${API_URL}/WorkOrder/GetWorkOrderList?${params.toString()}`);
const rows = (res?.data || res?.Data || []).map(x => ({
id: x.id ?? x.Id,
number: x.internalWONumber ?? x.number ?? x.workOrderNumber ?? "",