Vitron-Front/app/requestHandler/use-courier-hooks.tsx
2026-04-29 01:44:16 +03:30

135 lines
3.6 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import { useAuthToken } from "../hooks/use-root-data";
import {
SellerCourierCreate,
SellerCourierUpdate,
} from "../../src/api/types";
import { createSellerCourierManagementApi, createCourierManagementApi } from "~/utils/api-client-factory";
export function useServiceGetCouriers(sellerId: string) {
const token = useAuthToken();
const response = useQuery({
enabled: !!token && !!sellerId,
retry: 1,
retryDelay: 3000,
refetchOnWindowFocus: false,
queryKey: ["getCouriersService", sellerId],
queryFn: async () => {
if (!token) throw new Error("Authentication token is required");
try {
return await createSellerCourierManagementApi(token).apiOrderV1SellerCouriersSellerList({
seller: sellerId,
});
} catch (error) {
console.error("Error fetching couriers:", error);
throw error;
}
},
});
return { ...response };
}
export function useGetAllCouriers() {
const token = useAuthToken();
const response = useQuery({
enabled: !!token,
retry: 1,
retryDelay: 3000,
refetchOnWindowFocus: false,
queryKey: ["getAllCouriers"],
queryFn: async () => {
if (!token) throw new Error("Authentication token is required");
try {
return await createCourierManagementApi(token).apiOrderV1CouriersList();
} catch (error) {
console.error("Error fetching all couriers:", error);
throw error;
}
},
});
return { ...response };
}
export function useCreateSellerCourier() {
const token = useAuthToken();
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (data: SellerCourierCreate) => {
if (!token) throw new Error("Authentication token is required");
try {
return await createSellerCourierManagementApi(token).apiOrderV1SellerCouriersCreate({
data,
});
} catch (error) {
console.error("Error creating seller courier:", error);
throw error;
}
},
onSuccess: () => {
// Invalidate and refetch seller couriers
queryClient.invalidateQueries({ queryKey: ["getCouriersService"] });
},
});
}
export function useDeleteSellerCourier() {
const token = useAuthToken();
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (id: string) => {
if (!token) throw new Error("Authentication token is required");
try {
return await createSellerCourierManagementApi(token).apiOrderV1SellerCouriersDeleteDelete({
id,
});
} catch (error) {
console.error("Error deleting seller courier:", error);
throw error;
}
},
onSuccess: () => {
// Invalidate and refetch seller couriers
queryClient.invalidateQueries({ queryKey: ["getCouriersService"] });
},
});
}
export function useUpdateSellerCourier() {
const token = useAuthToken();
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({
id,
data,
}: {
id: string;
data: SellerCourierUpdate;
}) => {
if (!token) throw new Error("Authentication token is required");
try {
return await createSellerCourierManagementApi(token).apiOrderV1SellerCouriersPartialUpdate({
id,
data,
});
} catch (error) {
console.error("Error updating seller courier:", error);
throw error;
}
},
onSuccess: () => {
// Invalidate and refetch seller couriers
queryClient.invalidateQueries({ queryKey: ["getCouriersService"] });
},
});
}