shoc-frontend-new/src/pages/accounts/list/useAccounts.js

32 lines
1.1 KiB
JavaScript
Raw Normal View History

2026-03-30 07:53:42 -05:00
import { useCallback, useEffect, useMemo, useState } from "react";
import { fetchAccountsPaged } from "./api";
2026-03-30 07:53:42 -05:00
export default function useAccounts() {
const [rows, setRows] = useState([]);
const [search, setSearch] = useState("");
const [page, setPage] = useState(1);
const [pageSize, setPageSize] = useState(12);
const [totalCount, setTotalCount] = useState(0);
2026-03-30 07:53:42 -05:00
const [loading, setLoading] = useState(true);
const [err, setErr] = useState("");
2026-03-30 07:53:42 -05:00
const reload = useCallback(() => {
setLoading(true);
2026-03-30 07:53:42 -05:00
setErr("");
fetchAccountsPaged({ search, page, pageSize })
.then(({ rows, totalCount }) => {
setRows(rows);
setTotalCount(totalCount);
})
.catch((e) => setErr(e.message || "Failed to load"))
.finally(() => setLoading(false));
}, [search, page, pageSize]);
2026-03-30 07:53:42 -05:00
useEffect(() => { reload(); }, [reload]);
2026-03-30 07:53:42 -05:00
return useMemo(() => ({
rows, search, setSearch, page, setPage, pageSize, setPageSize,
totalCount, loading, err, reload
}), [rows, search, page, pageSize, totalCount, loading, err, reload]);
}