import { RightOutlined, ShoppingCartOutlined } from "@ant-design/icons"; import { Button, Form, Input, message, Row } from "antd"; import { addItem } from "features/order/orderSlice"; import useBreakPoint from "hooks/useBreakPoint"; import { BottomSheet } from "pages/cart/components/specialRequest/BottomSheet.tsx"; import { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { useAppDispatch, useAppSelector } from "redux/hooks"; import { colors, ProBlack2 } from "ThemeConstants"; import { Extra, Product, Variant } from "utils/types/appTypes"; import styles from "../product.module.css"; export default function ProductFooter({ product, isValid = true, selectedExtras, selectedVariant, selectedGroups, quantity, onClose, }: { product: Product; isValid?: boolean; selectedExtras: Extra[]; selectedVariant?: Variant; selectedGroups: Record; quantity: number; onClose?: () => void; }) { const { t } = useTranslation(); const dispatch = useAppDispatch(); const { themeName } = useAppSelector((state) => state.theme); const [isSpecialRequestOpen, setIsSpecialRequestOpen] = useState(false); const { isMobile, isDesktop } = useBreakPoint(); const { isRTL } = useAppSelector((state) => state.locale); const [specialRequest, setSpecialRequest] = useState(""); // Check if product has any customization options const hasCustomizationOptions = useMemo(() => { const hasVariants = product?.variants?.length > 0; const hasExtras = product.extras.length > 0; const hasExtraGroups = product?.theExtrasGroups?.length > 0; return hasVariants || hasExtras || hasExtraGroups; }, [ product?.variants?.length, product.extras.length, product?.theExtrasGroups?.length, ]); const handleAddToCart = () => { if (!isValid) { message.error(t("menu.pleaseSelectRequiredOptions")); return; } if (product) { dispatch( addItem({ item: { id: product?.id, name: product?.name, price: (selectedVariant?.price || product?.price) + selectedExtras.reduce((acc, extra) => acc + extra.price, 0), // selectedGroups.reduce((acc, extra) => acc + extra.price, 0), image: product?.image, description: product?.description, comment: specialRequest, variant: selectedVariant, extras: selectedExtras, extrasgroupnew: Object.keys(selectedGroups).map((key) => ({ groupid: key, extrasid: selectedGroups[Number(key)], })), extrasgroup: [""], isHasLoyalty: product?.isHasLoyalty, no_of_stamps_give: product?.no_of_stamps_give, }, quantity: quantity, }), ); // Navigate back to menu - scroll position will be restored automatically if (!isDesktop) window.history.back(); else { onClose?.(); } } }; const handleSpecialRequestSave = (value: string) => { setSpecialRequest(value); }; const handleSpecialRequestClose = () => { setIsSpecialRequestOpen(false); }; return ( <>
setSpecialRequest(e.target.value)} suffix={
setIsSpecialRequestOpen(true)} > {t("cart.editNote")}
} />
{!isDesktop && isSpecialRequestOpen && ( )} ); }