Skip to content

Commit

Permalink
refactor: implement review changes
Browse files Browse the repository at this point in the history
  • Loading branch information
jarrisondev committed Apr 6, 2024
1 parent fd0b453 commit bd12eb3
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions src/common/hooks/useOnClickOutside/useOnClickOutside.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
import { RefObject, useEffect } from 'react';

export const useOnClickOutside = (ref: RefObject<HTMLElement>, handler: (event: MouseEvent) => void) => {
type EventType = keyof DocumentEventMap;

export const useOnClickOutside = <T extends HTMLElement = HTMLElement>(
ref: RefObject<T>,
handler: (event: Event) => void,
eventTypes: EventType[] = ['mousedown', 'touchstart']
) => {
useEffect(() => {
const listener = (event: MouseEvent) => {
if (!ref.current || ref.current.contains(event.target as Node)) {
return;
}
const listener = (event: Event) => {
const target = event.target as Node;
if (!ref.current || ref.current.contains(target)) return;
handler(event);
};

document.addEventListener('mousedown', listener);
eventTypes.forEach((eventType) => {
document.addEventListener(eventType, listener);
});

return () => {
document.removeEventListener('mousedown', listener);
eventTypes.forEach((eventType) => {
document.removeEventListener(eventType, listener);
});
};
}, [ref, handler]);
}, [ref, handler, eventTypes]);
};

0 comments on commit bd12eb3

Please sign in to comment.