UNPKG

react-native-theoplayer

Version:

A THEOplayer video component for react-native.

45 lines (39 loc) 1.58 kB
import type { EventBroadcastAPI } from 'react-native-theoplayer'; import type { THEOplayer } from 'react-native-theoplayer'; import type { THEOplayerWebAdapter } from '../THEOplayerWebAdapter'; import type { StringKeyOf } from '../../../api/event/EventDispatcher'; import type { PlayerEventMap } from 'react-native-theoplayer'; import type { Event as WebEvent, EventMap } from 'theoplayer'; import { AdEvent, PlayerEventType } from 'react-native-theoplayer'; import { DefaultWebEventDispatcher } from './web/DefaultWebEventDispatcher'; export class EventBroadcastAdapter extends DefaultWebEventDispatcher<EventMap<string>> implements EventBroadcastAPI { constructor(private _player: THEOplayer) { super(); } broadcastEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): void { // Broadcast ReactNative event. (this._player as THEOplayerWebAdapter).dispatchEvent(event); // Broadcast native event. const nativeEvent = toNativeEvent(event); if (nativeEvent) { this.dispatchEvent(nativeEvent); } } } function toNativeEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): WebEvent | undefined { switch (event.type) { case PlayerEventType.AD_EVENT: return toNativeAdEvent(event); default: { console.warn(`EventBroadcastAdapter: native event of type ${event?.type}} not supported`); return undefined; } } } function toNativeAdEvent(event: AdEvent): WebEvent | undefined { return { type: event.subType, ad: event.ad, date: event.date, } as WebEvent; }