92 lines
3.0 KiB
TypeScript
92 lines
3.0 KiB
TypeScript
import { useServerSuspenseQuery } from "@/lib/tanstack-query/hooks";
|
|
import { listPlayers, getPlayer, getUnassociatedPlayers, fetchMe, getPlayerStats, getAllPlayerStats, getPlayerMatches, getUnenrolledPlayers } from "./server";
|
|
|
|
export const playerKeys = {
|
|
auth: ['auth'],
|
|
list: ['players', 'list'],
|
|
details: (id: string) => ['players', 'details', id],
|
|
unassociated: ['players','unassociated'],
|
|
unenrolled: (tournamentId: string) => ['players', 'unenrolled', tournamentId],
|
|
stats: (id: string) => ['players', 'stats', id],
|
|
allStats: ['players', 'stats', 'all'],
|
|
matches: (id: string) => ['players', 'matches', id],
|
|
};
|
|
|
|
export const playerQueries = {
|
|
auth: () => ({
|
|
queryKey: playerKeys.auth,
|
|
queryFn: async () => await fetchMe()
|
|
}),
|
|
list: () => ({
|
|
queryKey: playerKeys.list,
|
|
queryFn: async () => await listPlayers()
|
|
}),
|
|
details: (id: string) => ({
|
|
queryKey: playerKeys.details(id),
|
|
queryFn: async () => await getPlayer({ data: id })
|
|
}),
|
|
unassociated: () => ({
|
|
queryKey: playerKeys.unassociated,
|
|
queryFn: async () => await getUnassociatedPlayers()
|
|
}),
|
|
unenrolled: (tournamentId: string) => ({
|
|
queryKey: playerKeys.unenrolled(tournamentId),
|
|
queryFn: async () => await getUnenrolledPlayers({ data: tournamentId })
|
|
}),
|
|
stats: (id: string) => ({
|
|
queryKey: playerKeys.stats(id),
|
|
queryFn: async () => await getPlayerStats({ data: id })
|
|
}),
|
|
allStats: () => ({
|
|
queryKey: playerKeys.allStats,
|
|
queryFn: async () => await getAllPlayerStats()
|
|
}),
|
|
matches: (id: string) => ({
|
|
queryKey: playerKeys.matches(id),
|
|
queryFn: async () => await getPlayerMatches({ data: id })
|
|
}),
|
|
};
|
|
|
|
export const useMe = () => {
|
|
const { queryKey, queryFn } = playerQueries.auth();
|
|
return useServerSuspenseQuery({
|
|
queryKey,
|
|
queryFn,
|
|
options: {
|
|
staleTime: 0,
|
|
refetchOnMount: true,
|
|
retry: (failureCount, error: any) => {
|
|
if (error?.response?.status === 401) {
|
|
const errorData = error?.response?.data;
|
|
if (errorData?.error === "SESSION_REFRESH_REQUIRED") {
|
|
const currentUrl = window.location.pathname + window.location.search;
|
|
window.location.href = `/refresh-session?redirect=${encodeURIComponent(currentUrl)}`;
|
|
return false;
|
|
}
|
|
}
|
|
return failureCount < 3;
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
export const usePlayer = (id: string) =>
|
|
useServerSuspenseQuery(playerQueries.details(id));
|
|
|
|
export const usePlayers = () =>
|
|
useServerSuspenseQuery(playerQueries.list());
|
|
|
|
export const useUnassociatedPlayers = () =>
|
|
useServerSuspenseQuery(playerQueries.unassociated());
|
|
|
|
export const usePlayerStats = (id: string) =>
|
|
useServerSuspenseQuery(playerQueries.stats(id));
|
|
|
|
export const useAllPlayerStats = () =>
|
|
useServerSuspenseQuery(playerQueries.allStats());
|
|
|
|
export const usePlayerMatches = (id: string) =>
|
|
useServerSuspenseQuery(playerQueries.matches(id));
|
|
|
|
export const useUnenrolledPlayers = (tournamentId: string) =>
|
|
useServerSuspenseQuery(playerQueries.unenrolled(tournamentId)); |