mirror of
https://github.com/TheRealOwenRees/chess-scribe-website.git
synced 2026-07-23 09:56:57 +00:00
click outside of button/dropdowqn as hook
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import { type RefObject, useEffect } from "react";
|
||||
|
||||
interface IProps {
|
||||
isOpen: boolean;
|
||||
setIsOpen: (isOpen: boolean) => void;
|
||||
ref: RefObject<HTMLDivElement | null>;
|
||||
setSearch: (search: string) => void;
|
||||
}
|
||||
|
||||
export const useClickOutside = ({
|
||||
isOpen,
|
||||
setIsOpen,
|
||||
setSearch,
|
||||
ref,
|
||||
}: IProps) => {
|
||||
useEffect(() => {
|
||||
const handleClickOutside = (event: MouseEvent) => {
|
||||
if (
|
||||
isOpen &&
|
||||
ref.current &&
|
||||
!ref.current.contains(event.target as Node)
|
||||
) {
|
||||
setIsOpen(false);
|
||||
setSearch("");
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener("mousedown", handleClickOutside);
|
||||
|
||||
return () => {
|
||||
document.removeEventListener("mousedown", handleClickOutside);
|
||||
};
|
||||
}, [isOpen, setIsOpen, setSearch, ref]);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user