summaryrefslogtreecommitdiff
path: root/garden/src/utils/clickOutside.ts
blob: 9a7a91e0e0b1cce0476f93a772bfec9020e1503e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { onMount, onCleanup, Setter } from "solid-js";

export function useClickOutside(
  getRef: () => HTMLElement | undefined,
  setOpen: Setter<boolean>,
) {
  onMount(() => {
    function handler(e: MouseEvent) {
      const ref = getRef();
      if (ref && !ref.contains(e.target as Node)) setOpen(false);
    }
    document.addEventListener("mousedown", handler);
    onCleanup(() => document.removeEventListener("mousedown", handler));
  });
}