react-query
This commit is contained in:
27
apps/website/hooks/useLeagueMembershipService.ts
Normal file
27
apps/website/hooks/useLeagueMembershipService.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { useServices } from '@/lib/services/ServiceProvider';
|
||||
import type { LeagueMembership } from '@core/racing/domain/entities/LeagueMembership';
|
||||
|
||||
export function useLeagueMemberships(leagueId: string) {
|
||||
const { leagueMembershipService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['leagueMemberships', leagueId],
|
||||
queryFn: () => leagueMembershipService.fetchLeagueMemberships(leagueId),
|
||||
enabled: !!leagueId,
|
||||
});
|
||||
}
|
||||
|
||||
export function useLeagueMembership(leagueId: string, driverId: string) {
|
||||
const { leagueMembershipService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['leagueMembership', leagueId, driverId],
|
||||
queryFn: async () => {
|
||||
// First fetch memberships if not cached
|
||||
await leagueMembershipService.fetchLeagueMemberships(leagueId);
|
||||
return leagueMembershipService.getMembership(leagueId, driverId);
|
||||
},
|
||||
enabled: !!leagueId && !!driverId,
|
||||
});
|
||||
}
|
||||
154
apps/website/hooks/useRaceService.ts
Normal file
154
apps/website/hooks/useRaceService.ts
Normal file
@@ -0,0 +1,154 @@
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { useServices } from '@/lib/services/ServiceProvider';
|
||||
|
||||
export function useRacesPageData() {
|
||||
const { raceService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['racesPageData'],
|
||||
queryFn: () => raceService.getRacesPageData(),
|
||||
});
|
||||
}
|
||||
|
||||
export function useAllRacesPageData() {
|
||||
const { raceService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['allRacesPageData'],
|
||||
queryFn: () => raceService.getAllRacesPageData(),
|
||||
});
|
||||
}
|
||||
|
||||
export function useRaceDetail(raceId: string, driverId: string) {
|
||||
const { raceService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['raceDetail', raceId, driverId],
|
||||
queryFn: () => raceService.getRaceDetail(raceId, driverId),
|
||||
enabled: !!raceId && !!driverId,
|
||||
});
|
||||
}
|
||||
|
||||
export function useRaceDetailMutation() {
|
||||
const { raceService } = useServices();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ raceId, driverId }: { raceId: string; driverId: string }) =>
|
||||
raceService.getRaceDetail(raceId, driverId),
|
||||
onSuccess: (data, variables) => {
|
||||
queryClient.setQueryData(['raceDetail', variables.raceId, variables.driverId], data);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useRaceStewardingData(raceId: string, driverId: string) {
|
||||
const { raceService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['raceStewardingData', raceId, driverId],
|
||||
queryFn: () => raceService.getRaceStewardingData(raceId, driverId),
|
||||
enabled: !!raceId && !!driverId,
|
||||
});
|
||||
}
|
||||
|
||||
export function useRaceResultsDetail(raceId: string, driverId: string) {
|
||||
const { raceResultsService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['raceResultsDetail', raceId, driverId],
|
||||
queryFn: () => raceResultsService.getResultsDetail(raceId, driverId),
|
||||
enabled: !!raceId && !!driverId,
|
||||
});
|
||||
}
|
||||
|
||||
export function useRaceWithSOF(raceId: string) {
|
||||
const { raceResultsService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['raceWithSOF', raceId],
|
||||
queryFn: () => raceResultsService.getWithSOF(raceId),
|
||||
enabled: !!raceId,
|
||||
});
|
||||
}
|
||||
|
||||
export function useRacesTotal() {
|
||||
const { raceService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['racesTotal'],
|
||||
queryFn: () => raceService.getRacesTotal(),
|
||||
});
|
||||
}
|
||||
|
||||
export function useRegisterForRace() {
|
||||
const { raceService } = useServices();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ raceId, leagueId, driverId }: {
|
||||
raceId: string;
|
||||
leagueId: string;
|
||||
driverId: string;
|
||||
}) => raceService.registerForRace(raceId, leagueId, driverId),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['racesPageData'] });
|
||||
queryClient.invalidateQueries({ queryKey: ['allRacesPageData'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useWithdrawFromRace() {
|
||||
const { raceService } = useServices();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ raceId, driverId }: {
|
||||
raceId: string;
|
||||
driverId: string;
|
||||
}) => raceService.withdrawFromRace(raceId, driverId),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['racesPageData'] });
|
||||
queryClient.invalidateQueries({ queryKey: ['allRacesPageData'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useCancelRace() {
|
||||
const { raceService } = useServices();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (raceId: string) => raceService.cancelRace(raceId),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['racesPageData'] });
|
||||
queryClient.invalidateQueries({ queryKey: ['allRacesPageData'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useCompleteRace() {
|
||||
const { raceService } = useServices();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (raceId: string) => raceService.completeRace(raceId),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['racesPageData'] });
|
||||
queryClient.invalidateQueries({ queryKey: ['allRacesPageData'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useReopenRace() {
|
||||
const { raceService } = useServices();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (raceId: string) => raceService.reopenRace(raceId),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['racesPageData'] });
|
||||
queryClient.invalidateQueries({ queryKey: ['allRacesPageData'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
12
apps/website/hooks/useRaceStewardingService.ts
Normal file
12
apps/website/hooks/useRaceStewardingService.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { useServices } from '@/lib/services/ServiceProvider';
|
||||
|
||||
export function useRaceStewardingData(raceId: string, driverId: string) {
|
||||
const { raceStewardingService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['raceStewardingData', raceId, driverId],
|
||||
queryFn: () => raceStewardingService.getRaceStewardingData(raceId, driverId),
|
||||
enabled: !!raceId && !!driverId,
|
||||
});
|
||||
}
|
||||
11
apps/website/hooks/useTeamService.ts
Normal file
11
apps/website/hooks/useTeamService.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { useServices } from '@/lib/services/ServiceProvider';
|
||||
|
||||
export function useAllTeams() {
|
||||
const { teamService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['allTeams'],
|
||||
queryFn: () => teamService.getAllTeams(),
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user