import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; import { useConfigContext } from '~/config/provider'; import { RouterInputs, api } from '~/utils/api'; import { UsenetInfoRequestParams } from '../../../pages/api/modules/usenet'; import type { UsenetHistoryRequestParams } from '../../../pages/api/modules/usenet/history'; import { UsenetPauseRequestParams } from '../../../pages/api/modules/usenet/pause'; import type { UsenetQueueRequestParams, UsenetQueueResponse, } from '../../../pages/api/modules/usenet/queue'; import { UsenetResumeRequestParams } from '../../../pages/api/modules/usenet/resume'; const POLLING_INTERVAL = 2000; export const useGetUsenetInfo = ({ appId }: UsenetInfoRequestParams) => { const { name: configName } = useConfigContext(); return api.usenet.info.useQuery( { appId, configName: configName!, }, { refetchInterval: POLLING_INTERVAL, keepPreviousData: true, retry: 2, enabled: !!appId, } ); }; export const useGetUsenetDownloads = (params: UsenetQueueRequestParams) => useQuery( ['usenetDownloads', ...Object.values(params)], async () => ( await axios.get('/api/modules/usenet/queue', { params, }) ).data, { refetchInterval: POLLING_INTERVAL, keepPreviousData: true, retry: 2, } ); export const useGetUsenetHistory = (params: UsenetHistoryRequestParams) => { const { name: configName } = useConfigContext(); return api.usenet.history.useQuery( { configName: configName!, ...params, }, { refetchInterval: POLLING_INTERVAL, keepPreviousData: true, retry: 2, } ); }; export const usePauseUsenetQueueMutation = (params: UsenetPauseRequestParams) => { const { name: configName } = useConfigContext(); const { mutateAsync } = api.usenet.pause.useMutation(); const utils = api.useContext(); return async (variables: Omit) => { await mutateAsync( { configName: configName!, ...variables, }, { onSettled() { utils.usenet.info.invalidate({ appId: params.appId }); }, } ); }; }; export const useResumeUsenetQueueMutation = (params: UsenetResumeRequestParams) => { const { name: configName } = useConfigContext(); const { mutateAsync } = api.usenet.resume.useMutation(); const utils = api.useContext(); return async (variables: Omit) => { await mutateAsync( { configName: configName!, ...variables, }, { onSettled() { utils.usenet.info.invalidate({ appId: params.appId }); }, } ); }; };