import { useCallback, useEffect, useState } from 'react'; import { request, type Paginated } from './api'; export function useAdminList(path: string, buildQuery: () => URLSearchParams, deps: unknown[]) { const [data, setData] = useState | null>(null); const [loading, setLoading] = useState(false); const [page, setPage] = useState(1); const [pageSize, setPageSize] = useState(20); const load = useCallback(async () => { setLoading(true); try { const qs = buildQuery(); qs.set('page', String(page)); qs.set('pageSize', String(pageSize)); const res = await request>(`${path}?${qs}`); setData(res); } finally { setLoading(false); } }, [path, page, pageSize, ...deps]); useEffect(() => { void load(); }, [load]); return { data, loading, page, pageSize, setPage, setPageSize, reload: load }; }