80 lines
2.4 KiB
TypeScript
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,
|
|
});
|
|
} |