Files
gridpilot.gg/apps/website/hooks/useDriverService.ts
2025-12-21 01:31:31 +01:00

80 lines
2.4 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { useServices } from '@/lib/services/ServiceProvider';
import { CompleteOnboardingInputDTO } from '@/lib/types/generated/CompleteOnboardingInputDTO';
import { DriverLeaderboardViewModel } from '@/lib/view-models/DriverLeaderboardViewModel';
import { DriverViewModel } from '@/lib/view-models/DriverViewModel';
import { DriverProfileViewModel } from '@/lib/view-models/DriverProfileViewModel';
import type { DriverDTO } from '@/lib/types/generated/DriverDTO';
export function useDriverLeaderboard() {
const { driverService } = useServices();
return useQuery({
queryKey: ['driverLeaderboard'],
queryFn: () => driverService.getDriverLeaderboard(),
});
}
export function useCurrentDriver() {
const { driverService } = useServices();
return useQuery({
queryKey: ['currentDriver'],
queryFn: () => driverService.getCurrentDriver(),
});
}
export function useDriverProfile(driverId: string) {
const { driverService } = useServices();
return useQuery({
queryKey: ['driverProfile', driverId],
queryFn: () => driverService.getDriverProfile(driverId),
enabled: !!driverId,
});
}
export function useCompleteDriverOnboarding() {
const { driverService } = useServices();
const queryClient = useQueryClient();
return useMutation({
mutationFn: (input: CompleteOnboardingInputDTO) => driverService.completeDriverOnboarding(input),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['currentDriver'] });
},
});
}
export function useUpdateDriverProfile() {
const { driverService } = useServices();
const queryClient = useQueryClient();
return useMutation({
mutationFn: (updates: { bio?: string; country?: string }) => driverService.updateProfile(updates),
onSuccess: (data, variables) => {
queryClient.invalidateQueries({ queryKey: ['driverProfile', data.currentDriver?.id] });
queryClient.invalidateQueries({ queryKey: ['currentDriver'] });
},
});
}
export function useFindDriverById(id: string) {
const { driverService } = useServices();
return useQuery({
queryKey: ['driver', id],
queryFn: () => driverService.findById(id),
enabled: !!id,
});
}
export function useFindDriversByIds(ids: string[]) {
const { driverService } = useServices();
return useQuery({
queryKey: ['drivers', ids],
queryFn: () => driverService.findByIds(ids),
enabled: ids.length > 0,
});
}