toggle favorite

This commit is contained in:
hamid zarghami
2025-12-22 11:51:35 +03:30
parent 4f5ec51f09
commit e3cc14f114
3 changed files with 15 additions and 40 deletions
@@ -8,14 +8,8 @@ export const useGetFood = (id: string) => {
}); });
}; };
export const useAddToFavorite = () => { export const useToggleFavorite = () => {
return useMutation({ return useMutation({
mutationFn: api.addToFavorite, mutationFn: api.toggleFavorite,
});
};
export const useRemoveFromFavorite = () => {
return useMutation({
mutationFn: api.removeFromFavorite,
}); });
}; };
+12 -26
View File
@@ -9,7 +9,7 @@ import { ArrowLeft, Clock, Cup, Heart, TruckTick } from 'iconsax-react'
import Image from 'next/image' import Image from 'next/image'
import { useParams, useRouter } from 'next/navigation' import { useParams, useRouter } from 'next/navigation'
import React, { useEffect, useMemo, useState } from 'react' import React, { useEffect, useMemo, useState } from 'react'
import { useAddToFavorite, useGetFood, useRemoveFromFavorite } from './hooks/useFoodData' import { useGetFood, useToggleFavorite } from './hooks/useFoodData'
import { useGetAbout } from '../about/hooks/useAboutData' import { useGetAbout } from '../about/hooks/useAboutData'
import { useGetProfile } from '../../(Profile)/profile/hooks/userProfileData' import { useGetProfile } from '../../(Profile)/profile/hooks/userProfileData'
import { toast } from '@/components/Toast' import { toast } from '@/components/Toast'
@@ -26,8 +26,7 @@ function FoodPage({ }: Props) {
const { data: about } = useGetAbout(); const { data: about } = useGetAbout();
const { items, addToCart, removeFromCart } = useCart(); const { items, addToCart, removeFromCart } = useCart();
const [isFavorite, setIsFavorite] = useState<boolean>(false); const [isFavorite, setIsFavorite] = useState<boolean>(false);
const { mutate: addToFavorite } = useAddToFavorite(); const { mutate: toggleFavorite } = useToggleFavorite();
const { mutate: removeFromFavorite } = useRemoveFromFavorite();
const foodId = food?.data?.id || id as string; const foodId = food?.data?.id || id as string;
const quantity = useMemo(() => { const quantity = useMemo(() => {
@@ -63,29 +62,16 @@ function FoodPage({ }: Props) {
const previousFavorite = isFavorite; const previousFavorite = isFavorite;
setIsFavorite(!isFavorite); setIsFavorite(!isFavorite);
if (previousFavorite) { toggleFavorite(foodId, {
removeFromFavorite(foodId, { onSuccess: () => {
onSuccess: () => { // تایید تغییر در صورت موفقیت
// تایید تغییر در صورت موفقیت },
}, onError: () => {
onError: () => { // بازگرداندن به حالت قبلی در صورت خطا
// بازگرداندن به حالت قبلی در صورت خطا setIsFavorite(previousFavorite);
setIsFavorite(previousFavorite); toast('خطا در تغییر وضعیت علاقه‌مندی', 'error');
toast('خطا در حذف از علاقه‌مندی‌ها', 'error'); },
}, });
});
} else {
addToFavorite(foodId, {
onSuccess: () => {
// تایید تغییر در صورت موفقیت
},
onError: () => {
// بازگرداندن به حالت قبلی در صورت خطا
setIsFavorite(previousFavorite);
toast('خطا در افزودن به علاقه‌مندی‌ها', 'error');
},
});
}
}; };
useEffect(() => { useEffect(() => {
@@ -6,12 +6,7 @@ export const getFood = async (id: string): Promise<FoodResponse> => {
return data; return data;
}; };
export const addToFavorite = async (foodId: string) => { export const toggleFavorite = async (foodId: string) => {
const { data } = await api.post(`/public/foods/favorite/${foodId}`); const { data } = await api.post(`/public/foods/favorite/${foodId}`);
return data; return data;
}; };
export const removeFromFavorite = async (foodId: string) => {
const { data } = await api.delete(`/public/foods/favorite/${foodId}`);
return data;
};