import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { useAuthToken } from "../hooks/use-root-data"; import { createCommentReviewManagmentApi } from "~/utils/api-client-factory"; export function useServiceGetComments(page: number, productId: string) { const response = useQuery({ retry: 1, retryDelay: 3000, refetchOnWindowFocus: false, queryKey: ["getCommentsService", productId, page], queryFn: async () => { try { const commentApi = createCommentReviewManagmentApi(); // The API doesn't directly support pagination in the typed client, // so we need to make a custom fetch request return await commentApi.apiCommentV1CommentList({ productId: productId, page: page, }); } catch (error) { console.error("Error fetching comments:", error); throw error; } }, }); return { ...response }; } export function useServiceCreateComment() { const token = useAuthToken(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async (commentData: { product: string; comment: string; parent?: string | null; }) => { const commentApi = createCommentReviewManagmentApi(token); return await commentApi.apiCommentV1CommentCreate({ data: commentData, }); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["getCommentsService"] }); }, }); } export function useServiceSubmitRating() { const token = useAuthToken(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async (ratingData: { product_id: string; rating: number }) => { const commentApi = createCommentReviewManagmentApi(token); return await commentApi.apiCommentV1ReviewCreate({ data: { productId: ratingData.product_id, rating: ratingData.rating, }, }); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["getProductRatingService"] }); }, }); } export function useServiceGetProductRating(productId: string) { const response = useQuery({ retry: 1, retryDelay: 3000, refetchOnWindowFocus: false, queryKey: ["getProductRatingService", productId], queryFn: async () => { try { const commentApi = createCommentReviewManagmentApi(); return await commentApi.apiCommentV1ReviewList({ productId: productId, }); } catch (error) { console.error("Error fetching product rating:", error); throw error; } }, }); return { ...response }; }