diff --git a/src/app/(client-components)/(Header)/Header3.tsx b/src/app/(client-components)/(Header)/Header3.tsx new file mode 100644 index 0000000..0f950d6 --- /dev/null +++ b/src/app/(client-components)/(Header)/Header3.tsx @@ -0,0 +1,203 @@ +"use client"; + +import React, { FC, useEffect, useRef, useState } from "react"; +import Logo from "@/shared/Logo"; +import useOutsideAlerter from "@/hooks/useOutsideAlerter"; +import NotifyDropdown from "./NotifyDropdown"; +import AvatarDropdown from "./AvatarDropdown"; +import MenuBar from "@/shared/MenuBar"; +import { SearchTab } from "../(HeroSearchForm)/HeroSearchForm"; +import HeroSearchForm2MobileFactory from "../(HeroSearchForm2Mobile)/HeroSearchForm2MobileFactory"; +import Link from "next/link"; +import { usePathname } from "next/navigation"; +import HeroSearchFormSmall from "../(HeroSearchFormSmall)/HeroSearchFormSmall"; +import { StaySearchFormFields } from "../type"; +import { MagnifyingGlassIcon } from "@heroicons/react/24/outline"; + +interface Header3Props { + className?: string; +} + +let WIN_PREV_POSITION = 0; +if (typeof window !== "undefined") { + WIN_PREV_POSITION = (window as any).pageYOffset; +} + +const Header3: FC = ({ className = "" }) => { + const headerInnerRef = useRef(null); + // + const [showHeroSearch, setShowHeroSearch] = + useState(); + // + const [currentTab, setCurrentTab] = useState("Stays"); + + // + useOutsideAlerter(headerInnerRef, () => { + setShowHeroSearch(null); + setCurrentTab("Stays"); + }); + + let pathname = usePathname(); + // + + useEffect(() => { + setShowHeroSearch(null); + }, [pathname]); + + // HIDDEN WHEN SCROLL EVENT + useEffect(() => { + window.addEventListener("scroll", handleEvent); + return () => { + window.removeEventListener("scroll", handleEvent); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const handleEvent = () => { + window.requestAnimationFrame(handleHideSearchForm); + }; + + const handleHideSearchForm = () => { + if (!document.querySelector("#nc-Header-3-anchor")) { + return; + } + // + let currentScrollPos = window.pageYOffset; + if ( + WIN_PREV_POSITION - currentScrollPos > 100 || + WIN_PREV_POSITION - currentScrollPos < -100 + ) { + setShowHeroSearch(null); + } else { + return; + } + WIN_PREV_POSITION = currentScrollPos; + }; + + // + const renderHeroSearch = () => { + return ( +
+
+ +
+
+ ); + }; + + const renderButtonOpenHeroSearch = () => { + return ( +
+
+ setShowHeroSearch("location")} + className="block pl-5 pr-4 cursor-pointer py-3" + > + Location + + + setShowHeroSearch("dates")} + className="block px-4 cursor-pointer py-3 " + > + Check In + + + { + setShowHeroSearch("guests"); + }} + className="block px-4 cursor-pointer font-normal py-3" + > + Add guests + +
+ +
setShowHeroSearch("location")} + > + + + +
+
+ ); + }; + + return ( + <> +
+ {showHeroSearch &&
} +
+
+
+
+ {/* Logo (lg+) */} +
+ +
+ +
+
+ {renderButtonOpenHeroSearch()} +
+
+ +
+ {renderHeroSearch()} +
+ + {/* NAV */} +
+
+ + List your property + + + + + +
+
+
+
+
+ + ); +}; + +export default Header3;