From b4b900cfc14ef69f6ae7b55187fb7e04da7c9c17 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Mon, 1 Dec 2025 10:33:22 +0330 Subject: [PATCH] bulk cart --- .../(Dialogs)/cart/hooks/useCartData.ts | 8 +++++ .../(Dialogs)/cart/service/CartService.ts | 7 ++++ src/app/[name]/(Dialogs)/cart/types/Types.ts | 6 ++++ src/components/menu/SideMenu.tsx | 22 +++++++++--- .../auth/components/StepEnterNumber.tsx | 3 +- src/features/auth/components/StepOtp.tsx | 34 +++++++++++++++++-- src/features/general/LogoutPrompt.tsx | 13 +++++-- src/locales/fa/common.json | 1 + 8 files changed, 83 insertions(+), 11 deletions(-) create mode 100644 src/app/[name]/(Dialogs)/cart/hooks/useCartData.ts create mode 100644 src/app/[name]/(Dialogs)/cart/service/CartService.ts create mode 100644 src/app/[name]/(Dialogs)/cart/types/Types.ts diff --git a/src/app/[name]/(Dialogs)/cart/hooks/useCartData.ts b/src/app/[name]/(Dialogs)/cart/hooks/useCartData.ts new file mode 100644 index 0000000..eed45d5 --- /dev/null +++ b/src/app/[name]/(Dialogs)/cart/hooks/useCartData.ts @@ -0,0 +1,8 @@ +import { useMutation } from "@tanstack/react-query"; +import * as api from "../service/CartService"; + +export const useBulkCart = () => { + return useMutation({ + mutationFn: api.bulkCart, + }); +}; diff --git a/src/app/[name]/(Dialogs)/cart/service/CartService.ts b/src/app/[name]/(Dialogs)/cart/service/CartService.ts new file mode 100644 index 0000000..aaac41b --- /dev/null +++ b/src/app/[name]/(Dialogs)/cart/service/CartService.ts @@ -0,0 +1,7 @@ +import { api } from "@/config/axios"; +import { BulkCartItem } from "../types/Types"; + +export const bulkCart = async (params: BulkCartItem) => { + const { data } = await api.post("/public/cart/items/bulk", params); + return data; +}; diff --git a/src/app/[name]/(Dialogs)/cart/types/Types.ts b/src/app/[name]/(Dialogs)/cart/types/Types.ts new file mode 100644 index 0000000..758b372 --- /dev/null +++ b/src/app/[name]/(Dialogs)/cart/types/Types.ts @@ -0,0 +1,6 @@ +export type BulkCartItem = { + items: { + foodId: string; + quantity: number; + }[]; +}; diff --git a/src/components/menu/SideMenu.tsx b/src/components/menu/SideMenu.tsx index 018eb17..5dec5bd 100644 --- a/src/components/menu/SideMenu.tsx +++ b/src/components/menu/SideMenu.tsx @@ -10,17 +10,19 @@ import Button from '../button/PrimaryButton'; import { useParams, usePathname } from 'next/navigation'; import clsx from 'clsx'; import { useTranslation } from 'react-i18next'; -import { CalendarSearch, Cup, DirectboxReceive, DirectInbox, DocumentCopy, Game, Icon, Instagram, Like1, LogoutCurve, Notification, Receipt1, Setting2, Share, TicketDiscount, Whatsapp } from 'iconsax-react'; +import { CalendarSearch, Cup, DirectboxReceive, DirectInbox, DocumentCopy, Game, Icon, Instagram, Like1, Login, LogoutCurve, Notification, Receipt1, Setting2, Share, TicketDiscount, Whatsapp } from 'iconsax-react'; import TelegramIcon from '../icons/TelegramIcon'; import Modal from '../utils/Modal'; import LogoutPrompt from '@/features/general/LogoutPrompt'; import useToggle from '@/hooks/helpers/useToggle'; +import { useAuthStore } from '@/zustand/authStore'; type MenuItemType = { href: string | undefined; title: string; icon: Icon; auth?: boolean; + guestOnly?: boolean; }; const menuItems: Array> = [ @@ -38,7 +40,8 @@ const menuItems: Array> = [ [], [ { auth: true, href: 'profile/settings', title: 'Preferences', icon: Setting2 }, - { auth: true, href: '?logout', title: 'Logout', icon: LogoutCurve } + { auth: true, href: '?logout', title: 'Logout', icon: LogoutCurve }, + { guestOnly: true, href: 'auth', title: 'LoginSignup', icon: Login } ] ]; @@ -52,7 +55,7 @@ type Props = { function SideMenu({ menuState, toggleMenuState, nightModeState, togglenightModeState }: Props) { const menuStateMemo = useMemo(() => menuState, [menuState]); const closeRef = useRef(null); - const userIsAuthenticated = true; // useAuthStore((state) => state.isAuthenticated); + const userIsAuthenticated = useAuthStore((state) => state.isAuthenticated); const { state: logoutModal, toggle: toggleLogoutModal } = useToggle(); const { state: shareModal, toggle: toggleShareModal } = useToggle(); const { state: installPwaModal, toggle: toggleInstallPwaModal } = useToggle(); @@ -92,7 +95,11 @@ function SideMenu({ menuState, toggleMenuState, nightModeState, togglenightModeS