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