|
| 1 | +import { useEffect, DependencyList } from 'react' |
1 | 2 | import {
|
2 |
| - pickEventType, |
3 |
| - pickHandler, |
4 |
| - pickListenerOption, |
5 |
| - detectListenerOption, |
6 |
| - captureOption, |
7 |
| - checkArgs |
8 |
| -} from './libs' |
| 3 | + registerEventListeners, |
| 4 | + EventType, |
| 5 | + EventListeners |
| 6 | +} from 'register-event-listeners' |
9 | 7 |
|
10 |
| -import { EventType, EventListeners } from './types/EventListeners' |
| 8 | +type Values<U extends EventType> = { |
| 9 | + eventTarget?: EventTarget | null |
| 10 | + listeners: EventListeners<U> |
| 11 | +} |
11 | 12 |
|
12 |
| -export const useEventListeners = <K extends EventType>( |
13 |
| - eventTarget: EventTarget, |
14 |
| - eventListeners: EventListeners<K> |
| 13 | +export const useEventListeners = <U extends EventType>( |
| 14 | + { eventTarget, listeners }: Values<U>, |
| 15 | + deps?: DependencyList |
15 | 16 | ) => {
|
16 |
| - checkArgs(eventListeners) |
17 |
| - |
18 |
| - const register = () => |
19 |
| - eventListeners.forEach(eventListener => { |
20 |
| - const eventType = pickEventType(eventListener) |
21 |
| - const handler = pickHandler(eventListener) |
22 |
| - const pickedOption = pickListenerOption(eventListener) |
23 |
| - const listenerOption = detectListenerOption(pickedOption) |
24 |
| - |
25 |
| - eventTarget.addEventListener(eventType, handler, listenerOption) |
26 |
| - }) |
27 |
| - |
28 |
| - const unRegister = () => |
29 |
| - eventListeners.forEach(eventListener => { |
30 |
| - const eventType = pickEventType(eventListener) |
31 |
| - const handler = pickHandler(eventListener) |
32 |
| - const pickedOption = pickListenerOption(eventListener) |
33 |
| - const listenerOption = captureOption(pickedOption) |
34 |
| - |
35 |
| - eventTarget.removeEventListener( |
36 |
| - eventType, |
37 |
| - handler, |
38 |
| - listenerOption // c.f https://developer.mozilla.org/ja/docs/Web/API/EventTarget/removeEventListener |
| 17 | + useEffect(() => { |
| 18 | + if (eventTarget) { |
| 19 | + const { register, unRegister } = registerEventListeners( |
| 20 | + eventTarget, |
| 21 | + listeners |
39 | 22 | )
|
40 |
| - }) |
41 |
| - |
42 |
| - return { register, unRegister } |
| 23 | + register() |
| 24 | + return unRegister |
| 25 | + } |
| 26 | + return undefined |
| 27 | + }, deps) |
43 | 28 | }
|
0 commit comments