copy base dmenu to dkala

This commit is contained in:
hamid zarghami
2026-02-07 15:31:22 +03:30
commit c9e37f6177
521 changed files with 57786 additions and 0 deletions
@@ -0,0 +1,90 @@
import { useCallback, useMemo } from "react";
import { useParams } from "next/navigation";
import { useGetProfile } from "@/app/[name]/(Profile)/profile/hooks/userProfileData";
import { useReceiptStore } from "@/zustand/receiptStore";
import {
useClearCart,
useDecrementCart,
useGetCartItems,
useIncrementCart,
} from "../hooks/useCartData";
export const useCart = () => {
const { isSuccess } = useGetProfile();
const params = useParams();
const currentSlug = (params.name as string) || null;
const { clear, increment, decrement, items, slug, setSlug } = useReceiptStore();
const { mutate: mutateIncrementCart } = useIncrementCart();
const { mutate: mutateDecrementCart } = useDecrementCart();
const { mutate: mutateClearCart } = useClearCart();
const { data: cartItems } = useGetCartItems(isSuccess);
const addToCart = (id: string | number) => {
if (isSuccess) {
mutateIncrementCart(id);
} else {
// تنظیم slug هنگام افزودن آیتم به سبد (فقط برای کاربران لاگین نشده)
if (currentSlug && slug !== currentSlug) {
setSlug(currentSlug);
}
increment(id);
}
};
const removeFromCart = (id: string | number) => {
if (isSuccess) {
mutateDecrementCart(id);
} else {
decrement(id);
}
};
const clearCart = useCallback(() => {
if (isSuccess) {
mutateClearCart();
} else {
clear();
}
}, [isSuccess, mutateClearCart, clear]);
const cartItemsMap = useMemo(() => {
if (isSuccess) {
if (!cartItems?.data?.items) {
return {};
}
return cartItems.data.items.reduce((acc, item) => {
acc[item.foodId] = { quantity: item.quantity };
return acc;
}, {} as Record<string | number, { quantity: number }>);
} else {
return items;
}
}, [isSuccess, cartItems?.data?.items, items]);
const isItemLoading = () => {
return false;
};
// برای کاربران لاگین شده، slug از API می‌آید (در cartItems.data.restaurantId)
// برای کاربران لاگین نشده، slug از receiptStore می‌آید
const cartSlug = useMemo(() => {
if (isSuccess && cartItems?.data?.restaurantId) {
// اگر از API آمده، می‌توانیم restaurantId را برگردانیم
// اما بهتر است slug را از URL بگیریم چون API ممکن است restaurantId را برگرداند نه slug
return currentSlug;
}
return slug;
}, [isSuccess, cartItems?.data?.restaurantId, currentSlug, slug]);
return {
items: cartItemsMap,
slug: cartSlug,
increment,
decrement,
clear,
addToCart,
removeFromCart,
clearCart,
isItemLoading,
};
};