Skip to content

Commit 2bfc083

Browse files
committed
feat: implement useEventListeners
1 parent 33e9fba commit 2bfc083

File tree

1 file changed

+22
-37
lines changed

1 file changed

+22
-37
lines changed

src/useEventListeners.ts

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,28 @@
1+
import { useEffect, DependencyList } from 'react'
12
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'
97

10-
import { EventType, EventListeners } from './types/EventListeners'
8+
type Values<U extends EventType> = {
9+
eventTarget?: EventTarget | null
10+
listeners: EventListeners<U>
11+
}
1112

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
1516
) => {
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
3922
)
40-
})
41-
42-
return { register, unRegister }
23+
register()
24+
return unRegister
25+
}
26+
return undefined
27+
}, deps)
4328
}

0 commit comments

Comments
 (0)