91 lines
3.2 KiB
TypeScript
91 lines
3.2 KiB
TypeScript
import { useServerSuspenseQuery } from "@/lib/tanstack-query/hooks";
|
|
import { listPlayers, getPlayer, getUnassociatedPlayers, fetchMe, getPlayerStats, getAllPlayerStats, getPlayerMatches, getUnenrolledPlayers, getPlayersActivity } 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, viewType?: 'all' | 'mainline' | 'regional') => ['players', 'stats', id, viewType ?? 'all'],
|
|
allStats: (viewType?: 'all' | 'mainline' | 'regional') => ['players', 'stats', 'all', viewType ?? 'all'],
|
|
matches: (id: string) => ['players', 'matches', id],
|
|
activity: ['players', 'activity'],
|
|
};
|
|
|
|
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, viewType?: 'all' | 'mainline' | 'regional') => ({
|
|
queryKey: playerKeys.stats(id, viewType),
|
|
queryFn: async () => await getPlayerStats({ data: { playerId: id, viewType } })
|
|
}),
|
|
allStats: (viewType?: 'all' | 'mainline' | 'regional') => ({
|
|
queryKey: playerKeys.allStats(viewType),
|
|
queryFn: async () => await getAllPlayerStats({ data: viewType })
|
|
}),
|
|
matches: (id: string) => ({
|
|
queryKey: playerKeys.matches(id),
|
|
queryFn: async () => await getPlayerMatches({ data: id })
|
|
}),
|
|
activity: () => ({
|
|
queryKey: playerKeys.activity,
|
|
queryFn: async () => await getPlayersActivity()
|
|
}),
|
|
};
|
|
|
|
export const useMe = () => {
|
|
const { queryKey, queryFn } = playerQueries.auth();
|
|
return useServerSuspenseQuery({
|
|
queryKey,
|
|
queryFn,
|
|
options: {
|
|
staleTime: 30 * 1000,
|
|
refetchOnMount: false,
|
|
refetchOnWindowFocus: true,
|
|
retry: 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, viewType?: 'all' | 'mainline' | 'regional') =>
|
|
useServerSuspenseQuery(playerQueries.stats(id, viewType));
|
|
|
|
export const useAllPlayerStats = (viewType?: 'all' | 'mainline' | 'regional') =>
|
|
useServerSuspenseQuery(playerQueries.allStats(viewType));
|
|
|
|
export const usePlayerMatches = (id: string) =>
|
|
useServerSuspenseQuery(playerQueries.matches(id));
|
|
|
|
export const useUnenrolledPlayers = (tournamentId: string) =>
|
|
useServerSuspenseQuery(playerQueries.unenrolled(tournamentId));
|
|
|
|
export const usePlayersActivity = () =>
|
|
useServerSuspenseQuery(playerQueries.activity()); |