4
4
[ ![ size] ( https://img.shields.io/bundlephobia/minzip/@solid-primitives/event-listener?style=for-the-badge )] ( https://bundlephobia.com/package/@solid-primitives/event-listener )
5
5
[ ![ size] ( https://img.shields.io/npm/v/@solid-primitives/event-listener?style=for-the-badge )] ( https://www.npmjs.com/package/@solid-primitives/event-listener )
6
6
7
- A helpful event listener primitive that binds window and any element supplied .
7
+ A set of primitives that help with listening to DOM and Custom Events .
8
8
9
9
- [ ` createEventListener ` ] ( #createEventListener ) - Very basic and straightforward primitive that handles multiple elements according to a single event binding.
10
10
- [ ` createEventSignal ` ] ( #createEventListener ) - Like ` createEventListener ` , but events are handled with the returned signal, instead of with a callback.
@@ -30,13 +30,16 @@ Can be used to listen to DOM or Custom Events on window, document, list of HTML
30
30
``` ts
31
31
import { createEventListener } from " @solid-primitives/event-listener" ;
32
32
33
- createEventListener (
34
- document .getElementById (" mybutton " ),
33
+ const clear = createEventListener (
34
+ document .getElementById (" myButton " ),
35
35
" mousemove" ,
36
36
e => console .log (" x:" , e .pageX , " y:" , e .pageY ),
37
37
{ passive: true }
38
38
);
39
39
40
+ // to clear all of the event listeners
41
+ clear ();
42
+
40
43
// target element, event name and options can be reactive signals
41
44
const [ref, setRef] = createSignal <HTMLElement >();
42
45
const [name, setName] = createSignal (" mousemove" );
@@ -71,7 +74,7 @@ function createEventListener<
71
74
eventName : MaybeAccessor <EventName >,
72
75
handler : (event : EventMap [EventName ]) => void ,
73
76
options ? : MaybeAccessor <boolean | AddEventListenerOptions >
74
- ): void ;
77
+ ): ClearListeners ;
75
78
76
79
// Directive
77
80
function eventListener(
@@ -96,11 +99,32 @@ Like [`createEventListener`](#createEventListener), but events are handled with
96
99
import { createEventSignal } from " @solid-primitives/event-listener" ;
97
100
98
101
// all arguments can be reactive signals
99
- const lastEvent = createEventSignal (el , " mousemove" , { passive: true });
102
+ const [ lastEvent, clear] = createEventSignal (el , " mousemove" , { passive: true });
100
103
101
104
createEffect (() => {
102
105
console .log (lastEvent ()?.x , lastEvent ()?.y );
103
106
});
107
+
108
+ // to clear all the event listeners
109
+ clear ();
110
+ ```
111
+
112
+ ### Types
113
+
114
+ ``` ts
115
+ function createEventSignal<
116
+ EventMap extends Record <string , Event >,
117
+ EventName extends keyof EventMap = keyof EventMap
118
+ >(
119
+ target : MaybeAccessor <Many <EventTarget >>,
120
+ eventName : MaybeAccessor <EventName >,
121
+ options ? : MaybeAccessor <boolean | AddEventListenerOptions >
122
+ ): EventListenerSignalReturns <EventMap [EventName ]>;
123
+
124
+ type EventListenerSignalReturns <Event > = [
125
+ lastEvent : Accessor <Event | undefined >,
126
+ clear : ClearListeners
127
+ ];
104
128
```
105
129
106
130
## ` createEventListenerMap `
@@ -112,12 +136,15 @@ A helpful primitive that listens to a map of events. Handle them by individual c
112
136
``` ts
113
137
import { createEventListenerMap } from " @solid-primitives/event-listener" ;
114
138
115
- createEventListenerMap (element , {
139
+ const clear = createEventListenerMap (element , {
116
140
mousemove: mouseHandler ,
117
141
mouseenter : e => {},
118
142
touchend: touchHandler
119
143
});
120
144
145
+ // to clear all the event listeners
146
+ clear ();
147
+
121
148
// both target and options args can be reactive:
122
149
const [target, setTarget] = createSignal (document .getElementById (" abc" ));
123
150
const [options, setOptions] = createSignal ({ passive: true });
@@ -171,7 +198,7 @@ function createEventListenerMap<
171
198
target : MaybeAccessor <Many <EventTarget >>,
172
199
handlersMap : EventHandlersMap ,
173
200
options ? : MaybeAccessor <boolean | AddEventListenerOptions >
174
- ): void ;
201
+ ): ClearListeners ;
175
202
```
176
203
177
204
## ` createEventStore `
@@ -181,19 +208,22 @@ Similar to [`createEventListenerMap`](#createEventListenerMap), but provides a r
181
208
### How to use it
182
209
183
210
``` ts
184
- const lastEvents = createEventStore (el , " mousemove" , " touchend" , " click" );
211
+ const [ lastEvents, clear] = createEventStore (el , " mousemove" , " touchend" , " click" );
185
212
186
213
createEffect (() => {
187
214
console .log (lastEvents ?.mousemove .x );
188
215
});
189
216
217
+ // to clear all the event listeners
218
+ clear ()
219
+
190
220
// both target and options args can be reactive:
191
221
const [target, setTarget] = createSignal (document .getElementById (" abc" ));
192
222
const [options, setOptions] = createSignal ({ passive: true });
193
- const lastEvents = createEventStore (target , options , " mousemove" , " touchmove" );
223
+ const [ lastEvents] = createEventStore (target , options , " mousemove" , " touchmove" );
194
224
195
225
// createEventStore can be used to listen to custom events
196
- const lastEvents = createEventStore <
226
+ const [ lastEvents] = createEventStore <
197
227
{
198
228
myEvent : MyEvent ;
199
229
custom : Event ;
@@ -202,7 +232,7 @@ const lastEvents = createEventStore<
202
232
> (target , " myEvent" , " custom" );
203
233
204
234
// DON'T DO THIS:
205
- const { mousemove } = createEventStore (target , " mousemove" , ... );
235
+ const [ { mousemove }] = createEventStore (target , " mousemove" , ... );
206
236
// the store cannot be destructured
207
237
```
208
238
@@ -215,7 +245,7 @@ function createEventStore<
215
245
>(
216
246
target : MaybeAccessor <Many <EventTarget >>,
217
247
... eventNames : UsedEvents []
218
- ): Store < Partial < Pick <EventMap , UsedEvents > >>;
248
+ ): EventListnenerStoreReturns < Pick <EventMap , UsedEvents >>;
219
249
220
250
// with options:
221
251
function createEventStore<
@@ -225,7 +255,9 @@ function createEventStore<
225
255
target : MaybeAccessor <Many <EventTarget >>,
226
256
options : MaybeAccessor <boolean | AddEventListenerOptions >,
227
257
... eventNames : UsedEvents []
228
- ): Store <Partial <Pick <EventMap , UsedEvents >>>;
258
+ ): EventListnenerStoreReturns <Pick <EventMap , UsedEvents >>;
259
+
260
+ type EventListnenerStoreReturns <E > = [lastEvents : Store <Partial <E >>, clear : ClearListeners ];
229
261
```
230
262
231
263
## ` WindowEventListener `
@@ -288,6 +320,6 @@ Migrated to new build process.
288
320
1.3.0
289
321
290
322
** (minor breaking changes to type generics and returned functions)**
291
- Primitive rewritten to provide better types and more reliable usage. Added more primitives.
323
+ Primitive rewritten to provide better types and more reliable usage. Added a lot more primitives.
292
324
293
325
</details >
0 commit comments