Skip to content

Commit b6abe5b

Browse files
committed
Adopt react-native event emitter signature
1 parent 179c618 commit b6abe5b

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

src/SpotifyRemote.ts

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -301,28 +301,32 @@ const SpotifyRemote: SpotifyRemoteApi = {
301301
nativeModule.eventStartObserving(eventType);
302302
}
303303
eventListeners[eventType].add(sub);
304-
return this;
304+
const _remove = sub.remove;
305+
// rewrite sub.remove so we can add stopObserving API
306+
sub.remove = () => {
307+
_remove.call(sub);
308+
eventListeners[eventType].delete(sub);
309+
if (this.listenerCount(eventType) === 0) {
310+
nativeModule.eventStopObserving(eventType);
311+
}
312+
};
313+
return sub;
305314
},
306315
removeListener(eventType, listener) {
307316
eventListeners[eventType].forEach((eventListener) => {
308-
if (!listener || eventListener.listener === listener) {
309-
eventListener.remove();
310-
eventListeners[eventType].delete(eventListener);
311-
}
317+
if (eventListener.listener === listener) eventListener.remove();
312318
});
313-
if (this.listenerCount(eventType) === 0) {
314-
nativeModule.eventStopObserving(eventType);
315-
}
316-
return this;
317319
},
318320
removeAllListeners(eventType) {
319321
const eventsToRemove = eventType ? [eventType] : this.eventNames();
320-
eventsToRemove.forEach((eventType) => this.removeListener(eventType));
321-
return this;
322+
for (const eventToRemove of eventsToRemove) {
323+
eventListeners[eventToRemove].forEach((eventListener) => {
324+
eventListener.remove();
325+
});
326+
}
322327
},
323328
emit(eventType, ...args) {
324-
nativeEventEmitter.emit(eventType, ...args);
325-
return true;
329+
return nativeEventEmitter.emit(eventType, ...args);
326330
},
327331
listenerCount(eventType) {
328332
return eventListeners[eventType].size;

src/TypedEventEmitter.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { EmitterSubscription } from "react-native";
2+
13
/**
24
* An EventEmitter that supports events given by the interface in {T}
35
* Where each Key represents the eventName and the type represents the payload
@@ -7,12 +9,21 @@
79
* @template T
810
*/
911
export default interface TypedEventEmitter<T> {
10-
addListener<K extends keyof T>(event: K, listener: (v: T[K]) => void): this;
11-
removeListener<K extends keyof T>(event: K, listener?: (v: T[K]) => void): this;
12-
removeAllListeners<K extends keyof T>(event?: K): this;
13-
emit<K extends keyof T>(event: K, args: T[K]): boolean;
12+
addListener<K extends keyof T>(event: K, listener: (v: T[K]) => void): EmitterSubscription;
13+
/**
14+
* @deprecated Use `remove` on the EventSubscription from `addListener`.
15+
*/
16+
removeListener<K extends keyof T>(event: K, listener: (v: T[K]) => void): void;
17+
removeAllListeners<K extends keyof T>(event?: K): void;
18+
emit<K extends keyof T>(event: K, args: T[K]): void;
1419
eventNames(): Array<keyof T>;
1520
listenerCount<K extends keyof T>(type: K): number;
16-
on<K extends keyof T>(name: K, listener: (v: T[K]) => void): this;
17-
off<K extends keyof T>(event: K, listener: (v: T[K]) => void): this;
21+
/**
22+
* @deprecated Use `addListener` instead.
23+
*/
24+
on<K extends keyof T>(name: K, listener: (v: T[K]) => void): EmitterSubscription;
25+
/**
26+
* @deprecated Use `remove` on the EventSubscription from `addListener`.
27+
*/
28+
off<K extends keyof T>(event: K, listener: (v: T[K]) => void): void;
1829
}

0 commit comments

Comments
 (0)