import NirvanaApi, { ApiCalls } from './nirvanaApi'; import { useMutation, useQuery } from 'react-query'; import { $jwtToken } from './recoil'; import { queryClient } from '../../legacy/nirvanaApp'; import { useRecoilValue } from 'recoil'; // ====== QUERIES /** * ensure that the server is up */ export function useServerCheck() { return useQuery('SERVER_CHECK', ApiCalls.serverCheck, { retry: true, refetchOnWindowFocus: false, refetchInterval: 10000, }); } export function useAuthCheck(enabled: boolean = true) { const jwtToken = useRecoilValue($jwtToken); return useQuery('AUTH_CHECK', ApiCalls.authCheck, { retry: false, refetchOnWindowFocus: false, refetchInterval: 10000, enabled, }); } export function useLogin() { return useMutation('LOGIN', ApiCalls.login, {}); } export function useGetUserDetails() { return useQuery('USER_DETAILS', ApiCalls.getUserDetails, { retry: false, refetchOnWindowFocus: false, onError: (err) => { console.log(err); }, }); } export function useUserSearch(searchQuery: string) { return useQuery('USER_SEARCH', () => ApiCalls.userSearch(searchQuery), { enabled: searchQuery ? true : false, refetchOnWindowFocus: false, }); } /** query responsible solely for getting lines and the intersection with sockets happens elsewhere */ export function useUserLines() { // todo: base/source of truth for getting all of the lines for the user // merge with sockets + audio clip data + master data + convomember data return useQuery('USER_LINES', ApiCalls.getUserLines, { refetchOnWindowFocus: false, refetchIntervalInBackground: false, staleTime: Infinity, }); } // =========== MUTATIONS export function useGetDmByUserId() { return useMutation(ApiCalls.getDmByUserId); } export function useCreateLine() { return useMutation(ApiCalls.createLine, { onSuccess: (res, req) => { queryClient.invalidateQueries(['USER_LINES']); }, }); }