mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-05 12:44:22 +00:00
34 lines
926 B
TypeScript
34 lines
926 B
TypeScript
|
|
import { useQuery } from '@tanstack/react-query';
|
||
|
|
import { useMemo } from 'react';
|
||
|
|
|
||
|
|
import { HttpUtil } from '@/utils';
|
||
|
|
import { Status } from '@/models/status';
|
||
|
|
import { keys } from '@/api/queryKeys';
|
||
|
|
|
||
|
|
const POLL_INTERVAL_MS = 2000;
|
||
|
|
|
||
|
|
async function fetchStatus(): Promise<Status> {
|
||
|
|
const msg = await HttpUtil.get('/panel/api/server/status', undefined, { silent: true });
|
||
|
|
if (!msg?.success) throw new Error(msg?.msg || 'Failed to fetch status');
|
||
|
|
return new Status(msg.obj);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useStatusQuery() {
|
||
|
|
const query = useQuery({
|
||
|
|
queryKey: keys.server.status(),
|
||
|
|
queryFn: fetchStatus,
|
||
|
|
refetchInterval: POLL_INTERVAL_MS,
|
||
|
|
refetchIntervalInBackground: false,
|
||
|
|
staleTime: 0,
|
||
|
|
});
|
||
|
|
|
||
|
|
const status = useMemo(() => query.data ?? new Status(), [query.data]);
|
||
|
|
const refresh = async () => { await query.refetch(); };
|
||
|
|
|
||
|
|
return {
|
||
|
|
status,
|
||
|
|
fetched: query.data !== undefined,
|
||
|
|
refresh,
|
||
|
|
};
|
||
|
|
}
|