2020-12-14 01:04:15 -07:00
|
|
|
import { useQuery } from 'react-query';
|
|
|
|
import { useConfig } from '~/context';
|
2020-12-29 17:22:07 -07:00
|
|
|
import { fetchWithTimeout } from '~/util';
|
2020-12-14 01:04:15 -07:00
|
|
|
|
2020-12-17 16:37:36 -07:00
|
|
|
import type { TFormQuery } from '~/types';
|
2020-12-29 16:50:26 -07:00
|
|
|
import type { TUseLGQueryFn } from './types';
|
2020-12-14 01:04:15 -07:00
|
|
|
|
2020-12-17 16:37:36 -07:00
|
|
|
export function useLGQuery(query: TFormQuery) {
|
2020-12-29 16:50:26 -07:00
|
|
|
const { request_timeout, cache } = useConfig();
|
2020-12-14 01:04:15 -07:00
|
|
|
const controller = new AbortController();
|
|
|
|
|
2020-12-29 16:50:26 -07:00
|
|
|
async function runQuery(ctx: TUseLGQueryFn): Promise<TQueryResponse> {
|
|
|
|
const [url, data] = ctx.queryKey;
|
|
|
|
const { queryLocation, queryTarget, queryType, queryVrf } = data;
|
2020-12-14 01:04:15 -07:00
|
|
|
const res = await fetchWithTimeout(
|
|
|
|
url,
|
|
|
|
{
|
|
|
|
method: 'POST',
|
|
|
|
headers: { 'content-type': 'application/json' },
|
|
|
|
body: JSON.stringify({
|
|
|
|
query_location: queryLocation,
|
|
|
|
query_target: queryTarget,
|
|
|
|
query_type: queryType,
|
|
|
|
query_vrf: queryVrf,
|
|
|
|
}),
|
|
|
|
mode: 'cors',
|
|
|
|
},
|
|
|
|
request_timeout * 1000,
|
|
|
|
controller,
|
|
|
|
);
|
|
|
|
return await res.json();
|
|
|
|
}
|
|
|
|
return useQuery<TQueryResponse, Response | TQueryResponse | Error>(
|
|
|
|
['/api/query/', query],
|
|
|
|
runQuery,
|
2020-12-29 16:50:26 -07:00
|
|
|
{
|
|
|
|
cacheTime: cache.timeout * 1000 * 0.95,
|
|
|
|
refetchOnWindowFocus: false,
|
|
|
|
refetchInterval: false,
|
|
|
|
refetchOnMount: false,
|
|
|
|
},
|
2020-12-14 01:04:15 -07:00
|
|
|
);
|
|
|
|
}
|