60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
import { useAuthToken } from "../hooks/use-root-data";
|
|
import { useToast } from "../hooks/use-toast";
|
|
import { createDiscountManagementApi } from "~/utils/api-client-factory";
|
|
|
|
// Query keys
|
|
export const discountKeys = {
|
|
all: ["discounts"] as const,
|
|
verify: () => [...discountKeys.all, "verify"] as const,
|
|
};
|
|
|
|
// Hook to verify discount code
|
|
export function useVerifyDiscountCode() {
|
|
const token = useAuthToken();
|
|
const queryClient = useQueryClient();
|
|
const { toast } = useToast();
|
|
return useMutation({
|
|
mutationFn: async ({ code, cartId }: { code: number; cartId: string }) => {
|
|
try {
|
|
const discountApi = createDiscountManagementApi(token);
|
|
const response = await discountApi.apiDiscountV1DiscountsVerifyCreate({
|
|
data: {
|
|
code,
|
|
cartId,
|
|
},
|
|
});
|
|
return response;
|
|
} catch (error) {
|
|
console.error("Error verifying discount code:", error);
|
|
throw error;
|
|
}
|
|
},
|
|
onSuccess: (response) => {
|
|
if (response.valid) {
|
|
toast({
|
|
title: "تخفیف",
|
|
description: response.message || "تخفیف با موفقیت اعمال شد",
|
|
});
|
|
} else {
|
|
toast({
|
|
title: "خطا",
|
|
description: response.message || "کد تخفیف نامعتبر است",
|
|
variant: "destructive",
|
|
});
|
|
}
|
|
// Invalidate relevant queries (cart details would need to be refreshed)
|
|
queryClient.invalidateQueries({ queryKey: ["carts"] });
|
|
queryClient.invalidateQueries({ queryKey: ["getCouriersService"] });
|
|
},
|
|
onError: (error) => {
|
|
console.error("Error applying discount code:", error);
|
|
toast({
|
|
title: "خطا",
|
|
description: "کد تخفیف نامعتبر است",
|
|
variant: "destructive",
|
|
});
|
|
},
|
|
});
|
|
}
|