File tree Expand file tree Collapse file tree 2 files changed +29
-8
lines changed Expand file tree Collapse file tree 2 files changed +29
-8
lines changed Original file line number Diff line number Diff line change @@ -75,6 +75,7 @@ declare module 'react-native-callkeep' {
7575 }
7676
7777 type HandleType = 'generic' | 'number' | 'email' ;
78+ type EventListener = { } ;
7879
7980 export type AudioRoute = {
8081 name : string ,
@@ -134,9 +135,14 @@ declare module 'react-native-callkeep' {
134135 static addEventListener < Event extends Events > (
135136 type : Event ,
136137 handler : EventHandlers [ Event ] ,
137- ) : void
138+ ) : EventListener
138139
139- static removeEventListener ( type : Events ) : void
140+ /**
141+ * @description Remove specific event listener if given, otherwise remove all belonging to the given event type.
142+ * @param type
143+ * @param listener
144+ */
145+ static removeEventListener ( type : Events , listener ?: EventListener ) : void
140146
141147 static setup ( options : IOptions ) : Promise < boolean >
142148
Original file line number Diff line number Diff line change @@ -27,17 +27,32 @@ class RNCallKeep {
2727 addEventListener = ( type , handler ) => {
2828 const listener = listeners [ type ] ( handler ) ;
2929
30- this . _callkeepEventHandlers . set ( type , listener ) ;
30+ const listenerSet = this . _callkeepEventHandlers . get ( type ) ?? new Set ( ) ;
31+ listenerSet . add ( listener ) ;
32+
33+ this . _callkeepEventHandlers . set ( type , listenerSet ) ;
34+
35+ return listener ;
3136 } ;
3237
33- removeEventListener = ( type ) => {
34- const listener = this . _callkeepEventHandlers . get ( type ) ;
35- if ( ! listener ) {
38+ removeEventListener = ( type , listener = undefined ) => {
39+ const listenerSet = this . _callkeepEventHandlers . get ( type ) ;
40+ if ( ! listenerSet ) {
3641 return ;
3742 }
3843
39- listener . remove ( ) ;
40- this . _callkeepEventHandlers . delete ( type ) ;
44+ if ( listener ) {
45+ listenerSet . delete ( listener ) ;
46+ listener . remove ( ) ;
47+ if ( listenerSet . size <= 0 ) {
48+ this . _callkeepEventHandlers . delete ( type ) ;
49+ }
50+ } else {
51+ listenerSet . forEach ( ( listener ) => {
52+ listener . remove ( ) ;
53+ } ) ;
54+ this . _callkeepEventHandlers . delete ( type ) ;
55+ }
4156 } ;
4257
4358 setup = async ( options ) => {
You can’t perform that action at this time.
0 commit comments