useSubBalancersQuery.ts 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. import { useQuery } from '@tanstack/react-query';
  2. import { useMemo } from 'react';
  3. import { HttpUtil } from '@/utils';
  4. import { parseMsg } from '@/utils/zodValidate';
  5. import { keys } from '@/api/queryKeys';
  6. import { SubBalancerListSchema, type SubBalancer } from '@/schemas/subBalancer';
  7. async function fetchSubBalancers(): Promise<SubBalancer[]> {
  8. const msg = await HttpUtil.get('/panel/api/sub-balancers', undefined, { silent: true });
  9. if (!msg?.success) throw new Error(msg?.msg || 'Failed to fetch subscription balancers');
  10. const validated = parseMsg(msg, SubBalancerListSchema, 'sub-balancers');
  11. return Array.isArray(validated.obj) ? validated.obj : [];
  12. }
  13. export function useSubBalancersQuery() {
  14. const query = useQuery({
  15. queryKey: keys.subBalancers.list(),
  16. queryFn: fetchSubBalancers,
  17. });
  18. const balancers = useMemo(() => query.data ?? [], [query.data]);
  19. return {
  20. balancers,
  21. loading: query.isFetching,
  22. fetched: query.data !== undefined || query.isError,
  23. fetchError: query.error ? (query.error as Error).message : '',
  24. refetch: query.refetch,
  25. };
  26. }