diff --git a/src/app/[name]/(Main)/components/MenuIndex.tsx b/src/app/[name]/(Main)/components/MenuIndex.tsx index e070f52..632cb7c 100644 --- a/src/app/[name]/(Main)/components/MenuIndex.tsx +++ b/src/app/[name]/(Main)/components/MenuIndex.tsx @@ -10,6 +10,8 @@ import MenuItemRenderer from "@/components/listview/MenuItemRenderer"; import VerticalScrollView from "@/components/listview/VerticalScrollView"; import useToggle from "@/hooks/helpers/useToggle"; import { glassSurfaceFlat } from "@/lib/styles/glassSurface"; +import clsx from "clsx"; +import { motion } from "framer-motion"; import { Candle2 } from "iconsax-react"; import { useQueryState } from "next-usequerystate"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; @@ -37,7 +39,7 @@ const MenuIndex = () => { }); const [selectedIngredients, setSelectedIngredients] = useQueryState("ingredients", { defaultValue: "" }); const [selectedDeliveryId, setSelectedDeliveryId] = useQueryState("delivery", { defaultValue: "0" }); - const categoryStickySentinelRef: React.RefObject = useRef(null); + const smallCategoriesRef: React.RefObject = useRef(null); const wrapperRef: React.RefObject = useRef(null); const [smallCategoriesVisible, setSmallCategoriesVisibility] = useState(false); const [isInitialMount, setIsInitialMount] = useState(true); @@ -66,18 +68,16 @@ const MenuIndex = () => { const scrollContainer = wrapperRef.current.parentElement?.parentElement; if (!scrollContainer) return; - const sentinel = categoryStickySentinelRef.current; - if (!sentinel) return; + const handleScroll = () => { + if (!smallCategoriesRef.current) return; + setSmallCategoriesVisibility(scrollContainer.scrollTop >= smallCategoriesRef.current.offsetTop); + }; - const observer = new IntersectionObserver( - ([entry]) => setSmallCategoriesVisibility(!entry.isIntersecting), - { root: scrollContainer, threshold: 0 }, - ); - - observer.observe(sentinel); + scrollContainer.addEventListener("scroll", handleScroll, { passive: true }); + handleScroll(); return () => { - observer.disconnect(); + scrollContainer.removeEventListener("scroll", handleScroll); }; }, [isLoading]); @@ -169,19 +169,11 @@ const MenuIndex = () => {
-
-
- -
+
-
-
+
+
{selectedCategory === "0" ? "" : categories.find((c) => c.id === selectedCategory)?.title || ""}
- + + + + + {filteredReceiptItems.length === 0 ? (
{foodsData ? "غذایی یافت نشد" : "در حال بارگذاری..."}
) : ( diff --git a/src/components/wrapper/ClientMenuRouteWrapper.tsx b/src/components/wrapper/ClientMenuRouteWrapper.tsx index f219a98..5f0a409 100644 --- a/src/components/wrapper/ClientMenuRouteWrapper.tsx +++ b/src/components/wrapper/ClientMenuRouteWrapper.tsx @@ -106,7 +106,7 @@ function ClientMenuRouteWrapper({ children }: Props) { return (
-
+