Files
cymelle/orders-frontend/src/hooks/useRides.ts
T
2026-06-14 13:19:39 +03:00

73 lines
1.6 KiB
TypeScript

import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import {
acceptRide,
cancelRide,
completeRide,
getRides,
requestRide,
updateRideStatus,
} from "#/api/rides";
import type { CreateRideRequest, RideStatus } from "#/types/ride";
export const rideQueryKeys = {
all: ["rides"] as const,
};
export function useRides() {
return useQuery({
queryKey: rideQueryKeys.all,
queryFn: ({ signal }) => getRides(signal),
});
}
export function useRequestRide() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (request: CreateRideRequest) => requestRide(request),
onSuccess: () =>
queryClient.invalidateQueries({ queryKey: rideQueryKeys.all }),
});
}
export function useAcceptRide() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: acceptRide,
onSuccess: () =>
queryClient.invalidateQueries({ queryKey: rideQueryKeys.all }),
});
}
export function useCompleteRide() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: completeRide,
onSuccess: () =>
queryClient.invalidateQueries({ queryKey: rideQueryKeys.all }),
});
}
export function useCancelRide() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: cancelRide,
onSuccess: () =>
queryClient.invalidateQueries({ queryKey: rideQueryKeys.all }),
});
}
export function useUpdateRideStatus() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, status }: { id: string; status: RideStatus }) =>
updateRideStatus(id, status),
onSuccess: () =>
queryClient.invalidateQueries({ queryKey: rideQueryKeys.all }),
});
}