harb/web-app/src/composables/useClickOutside.ts
johba f8927b426e webapp - ESLint + Prettier with pre-commit hooks (#54)
resolves #47

Co-authored-by: johba <johba@harb.eth>
Reviewed-on: https://codeberg.org/johba/harb/pulls/54
2025-10-03 16:51:44 +02:00

21 lines
614 B
TypeScript

import { onBeforeUnmount, onMounted, type Ref } from 'vue';
export default function useClickOutside(component: Ref<HTMLElement | null>, callback: () => void) {
if (!component) return;
const listener = (event: MouseEvent) => {
if (event.target !== component.value && event.composedPath().includes(component.value as EventTarget)) {
return;
}
if (typeof callback === 'function') {
callback();
}
};
onMounted(() => {
window.addEventListener('click', listener);
});
onBeforeUnmount(() => {
window.removeEventListener('click', listener);
});
return { listener };
}