Skip to content

Commit 58a268c

Browse files
committed
chore: cleanup events code
1 parent 07b5575 commit 58a268c

File tree

4 files changed

+53
-31
lines changed

4 files changed

+53
-31
lines changed

packages/react-native-video/src/core/VideoPlayer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase {
5656
const parsedError = tryParseNativeVideoError(error);
5757

5858
if (
59-
parsedError instanceof VideoRuntimeError
60-
&& this.triggerEvent('onError', parsedError)
59+
parsedError instanceof VideoRuntimeError &&
60+
this.triggerEvent('onError', parsedError)
6161
) {
6262
// We don't throw errors if onError is provided
6363
return;

packages/react-native-video/src/core/VideoPlayerEvents.ts

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,21 @@
11
import type { VideoPlayerEventEmitter } from '../spec/nitro/VideoPlayerEventEmitter.nitro';
2-
import type { AllPlayerEvents as PlayerEvents } from './types/Events';
2+
import {
3+
ALL_PLAYER_EVENTS,
4+
type AllPlayerEvents as PlayerEvents,
5+
} from './types/Events';
36

47
export class VideoPlayerEvents {
58
protected eventEmitter: VideoPlayerEventEmitter;
6-
protected eventListeners: Partial<Record<keyof PlayerEvents, Set<(...params: any[]) => void>>> = {};
9+
protected eventListeners: Partial<
10+
Record<keyof PlayerEvents, Set<(...params: any[]) => void>>
11+
> = {};
712

8-
protected readonly supportedEvents: (keyof PlayerEvents)[] = [
9-
'onAudioBecomingNoisy',
10-
'onAudioFocusChange',
11-
'onBandwidthUpdate',
12-
'onBuffer',
13-
'onControlsVisibleChange',
14-
'onEnd',
15-
'onExternalPlaybackChange',
16-
'onLoad',
17-
'onLoadStart',
18-
'onPlaybackRateChange',
19-
'onPlaybackStateChange',
20-
'onProgress',
21-
'onReadyToDisplay',
22-
'onSeek',
23-
'onStatusChange',
24-
'onTextTrackDataChanged',
25-
'onTimedMetadata',
26-
'onTrackChange',
27-
'onVolumeChange',
28-
];
13+
protected readonly supportedEvents: (keyof PlayerEvents)[] =
14+
ALL_PLAYER_EVENTS;
2915

3016
constructor(eventEmitter: VideoPlayerEventEmitter) {
3117
this.eventEmitter = eventEmitter;
32-
for (let event of this.supportedEvents){
18+
for (let event of this.supportedEvents) {
3319
// @ts-expect-error we narrow the type of the event
3420
this.eventEmitter[event] = this.triggerEvent.bind(this, event);
3521
}
@@ -39,8 +25,7 @@ export class VideoPlayerEvents {
3925
event: Event,
4026
...params: Parameters<PlayerEvents[Event]>
4127
): boolean {
42-
if (!this.eventListeners[event]?.size)
43-
return false;
28+
if (!this.eventListeners[event]?.size) return false;
4429
for (let fn of this.eventListeners[event]) {
4530
fn(...params);
4631
}
@@ -59,7 +44,7 @@ export class VideoPlayerEvents {
5944
event: Event,
6045
callback: PlayerEvents[Event]
6146
) {
62-
this.eventListeners[event]!.delete(callback);
47+
this.eventListeners[event]?.delete(callback);
6348
}
6449

6550
/**

packages/react-native-video/src/core/hooks/useEvent.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,5 @@ export const useEvent = <T extends keyof AllPlayerEvents>(
1818
player.addEventListener(event, callback);
1919

2020
return () => player.removeEventListener(event, callback);
21-
;
2221
}, [player, event, callback]);
2322
};

packages/react-native-video/src/core/types/Events.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ export interface AllPlayerEvents extends VideoPlayerEvents {
9797
onError: (error: VideoRuntimeError) => void;
9898
}
9999

100-
101100
export interface VideoViewEvents {
102101
/**
103102
* Called when the video view's picture in picture state changes.
@@ -226,3 +225,42 @@ export interface onVolumeChangeData {
226225
*/
227226
muted: boolean;
228227
}
228+
229+
type CheckAllAndOnly<T, A extends readonly (keyof T)[]> =
230+
// Missing keys?
231+
Exclude<keyof T, A[number]> extends never
232+
? // Extra keys?
233+
Exclude<A[number], keyof T> extends never
234+
? A
235+
: ['Extra keys', Exclude<A[number], keyof T>]
236+
: ['Missing keys', Exclude<keyof T, A[number]>];
237+
238+
function allKeysOf<T>() {
239+
return <A extends readonly (keyof T)[]>(...arr: A): CheckAllAndOnly<T, A> => {
240+
return arr as CheckAllAndOnly<T, A>;
241+
};
242+
}
243+
244+
export const ALL_PLAYER_EVENTS: (keyof AllPlayerEvents)[] =
245+
allKeysOf<AllPlayerEvents>()(
246+
'onAudioBecomingNoisy',
247+
'onAudioFocusChange',
248+
'onBandwidthUpdate',
249+
'onBuffer',
250+
'onControlsVisibleChange',
251+
'onEnd',
252+
'onError',
253+
'onExternalPlaybackChange',
254+
'onLoad',
255+
'onLoadStart',
256+
'onPlaybackStateChange',
257+
'onPlaybackRateChange',
258+
'onProgress',
259+
'onReadyToDisplay',
260+
'onSeek',
261+
'onTimedMetadata',
262+
'onTextTrackDataChanged',
263+
'onTrackChange',
264+
'onVolumeChange',
265+
'onStatusChange'
266+
);

0 commit comments

Comments
 (0)