@@ -12,50 +12,47 @@ import { useEffect, useRef, useState } from 'react';
1212 * const { push, subscribe, unsubscribe, useSubscribe } = createEventEmitter<{ foo: number }>();
1313 */
1414export const createEventEmitter = ( ) => {
15- const listeners = new Map ( ) ;
16- const push = ( event , data ) => {
17- const eventListeners = listeners . get ( event ) ;
18- eventListeners ?. forEach ( ( listener ) => listener ( data ) ) ;
19- } ;
20- const unsubscribe = ( event , listener ) => {
21- const eventKey = event ;
22- const eventListeners = listeners . get ( eventKey ) ;
23- if ( ! eventListeners )
24- return ;
25- eventListeners . delete ( listener ) ;
26- if ( ! eventListeners . size )
27- listeners . delete ( eventKey ) ;
28- } ;
29- const subscribe = ( event , listener ) => {
30- const eventKey = event ;
31- if ( ! listeners . has ( eventKey ) )
32- listeners . set ( eventKey , new Set ( ) ) ;
33- const eventListeners = listeners . get ( event ) ;
34- eventListeners . add ( listener ) ;
35- return ( ) => {
36- unsubscribe ( event , listener ) ;
37- } ;
38- } ;
39- const useSubscribe = ( event , listener ) => {
40- const [ data , setData ] = useState ( undefined ) ;
41- const listenerRef = useRef ( listener ) ;
42- listenerRef . current = listener ;
43- useEffect ( ( ) => {
44- const onSubscribe = ( data ) => {
45- setData ( data ) ;
46- listenerRef . current ?. ( data ) ;
47- } ;
48- const unsubscribe = subscribe ( event , onSubscribe ) ;
49- return ( ) => {
50- unsubscribe ( ) ;
51- } ;
52- } , [ event ] ) ;
53- return data ;
54- } ;
55- return {
56- push,
57- subscribe,
58- unsubscribe,
59- useSubscribe
15+ const listeners = new Map ( ) ;
16+ const push = ( event , data ) => {
17+ const eventListeners = listeners . get ( event ) ;
18+ eventListeners ?. forEach ( ( listener ) => listener ( data ) ) ;
19+ } ;
20+ const unsubscribe = ( event , listener ) => {
21+ const eventKey = event ;
22+ const eventListeners = listeners . get ( eventKey ) ;
23+ if ( ! eventListeners ) return ;
24+ eventListeners . delete ( listener ) ;
25+ if ( ! eventListeners . size ) listeners . delete ( eventKey ) ;
26+ } ;
27+ const subscribe = ( event , listener ) => {
28+ const eventKey = event ;
29+ if ( ! listeners . has ( eventKey ) ) listeners . set ( eventKey , new Set ( ) ) ;
30+ const eventListeners = listeners . get ( event ) ;
31+ eventListeners . add ( listener ) ;
32+ return ( ) => {
33+ unsubscribe ( event , listener ) ;
6034 } ;
35+ } ;
36+ const useSubscribe = ( event , listener ) => {
37+ const [ data , setData ] = useState ( undefined ) ;
38+ const listenerRef = useRef ( listener ) ;
39+ listenerRef . current = listener ;
40+ useEffect ( ( ) => {
41+ const onSubscribe = ( data ) => {
42+ setData ( data ) ;
43+ listenerRef . current ?. ( data ) ;
44+ } ;
45+ const unsubscribe = subscribe ( event , onSubscribe ) ;
46+ return ( ) => {
47+ unsubscribe ( ) ;
48+ } ;
49+ } , [ event ] ) ;
50+ return data ;
51+ } ;
52+ return {
53+ push,
54+ subscribe,
55+ unsubscribe,
56+ useSubscribe
57+ } ;
6158} ;
0 commit comments