import React, { ReactNode, useEffect, useRef, useState } from "react"; import { motion, Variants } from "framer-motion"; import useOutsideRef from "../hooks/useOutsideRef"; import Router from "next/router"; import { useAppSelector } from "../store/hook"; import { theme_state } from "../store/features/themeSlice"; interface DropdownProps { trigger: ReactNode; children: ReactNode; classname: string; } export const Dropdown = ({ trigger, children, classname }: DropdownProps) => { const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); const { theme } = useAppSelector(theme_state); const { isOutsideRef } = useOutsideRef(dropdownRef); useEffect(() => { if (isOutsideRef) { setIsOpen(false); } }, [isOutsideRef]); const toggleMenu = () => { setIsOpen(!isOpen); }; Router.events.on("routeChangeStart", () => { setIsOpen(false); }); const animation: Variants = { enter: { opacity: 1, scale: 1, transformOrigin: "top right", transition: { duration: 0.25, }, display: "block", }, exit: { opacity: 0, scale: 0.7, transformOrigin: "top right", transition: { duration: 0.2, delay: 0.1, }, transitionEnd: { display: "none", }, }, }; return (
{trigger}
{children}
); };