From 73f2a4f56fb2fa7f43d3812fb7853baab115292a Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Thu, 28 Aug 2025 22:37:34 +0200 Subject: [PATCH] ui/hooks: add clickOutside hook --- pkgs/clan-app/ui/src/hooks/useClickOutside.tsx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 pkgs/clan-app/ui/src/hooks/useClickOutside.tsx diff --git a/pkgs/clan-app/ui/src/hooks/useClickOutside.tsx b/pkgs/clan-app/ui/src/hooks/useClickOutside.tsx new file mode 100644 index 000000000..2f5cf262c --- /dev/null +++ b/pkgs/clan-app/ui/src/hooks/useClickOutside.tsx @@ -0,0 +1,15 @@ +import { onCleanup } from "solid-js"; + +export function useClickOutside( + el: () => HTMLElement | undefined, + handler: (e: MouseEvent) => void, +) { + const listener = (e: MouseEvent) => { + const element = el(); + if (element && !element.contains(e.target as Node)) { + handler(e); + } + }; + document.addEventListener("mousedown", listener); + onCleanup(() => document.removeEventListener("mousedown", listener)); +}