From 7800719e9072f1db41c9783861a1c8dadc450c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Moska=C5=82a?= Date: Wed, 25 Mar 2026 16:02:21 +0100 Subject: [PATCH] refactor(web): move events to folder, fix error codes --- .../react-native-video/src/core/VideoPlayer.ts | 2 +- .../src/core/VideoPlayer.web.ts | 2 +- .../src/core/VideoPlayerEvents.web.ts | 3 --- .../{ => events}/VideoPlayerEvents.native.ts | 4 ++-- .../src/core/{ => events}/VideoPlayerEvents.ts | 0 .../src/core/events/VideoPlayerEvents.web.ts | 16 ++++++++++++++++ .../core/{ => events}/VideoPlayerEventsBase.ts | 4 ++-- .../src/core/video-view/VideoView.web.tsx | 4 +++- .../src/core/web/WebEventEmitter.ts | 7 ++++++- 9 files changed, 31 insertions(+), 11 deletions(-) delete mode 100644 packages/react-native-video/src/core/VideoPlayerEvents.web.ts rename packages/react-native-video/src/core/{ => events}/VideoPlayerEvents.native.ts (92%) rename packages/react-native-video/src/core/{ => events}/VideoPlayerEvents.ts (100%) create mode 100644 packages/react-native-video/src/core/events/VideoPlayerEvents.web.ts rename packages/react-native-video/src/core/{ => events}/VideoPlayerEventsBase.ts (98%) diff --git a/packages/react-native-video/src/core/VideoPlayer.ts b/packages/react-native-video/src/core/VideoPlayer.ts index 070affd1..6e7f11ae 100644 --- a/packages/react-native-video/src/core/VideoPlayer.ts +++ b/packages/react-native-video/src/core/VideoPlayer.ts @@ -15,7 +15,7 @@ import type { VideoPlayerBase } from "./types/VideoPlayerBase"; import type { VideoPlayerStatus } from "./types/VideoPlayerStatus"; import { createPlayer } from "./utils/playerFactory"; import { createSource } from "./utils/sourceFactory"; -import { VideoPlayerEvents } from "./VideoPlayerEvents"; +import { VideoPlayerEvents } from "./events/VideoPlayerEvents"; class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase { private _player: VideoPlayerImpl | undefined; diff --git a/packages/react-native-video/src/core/VideoPlayer.web.ts b/packages/react-native-video/src/core/VideoPlayer.web.ts index 033352fc..0bc4e629 100644 --- a/packages/react-native-video/src/core/VideoPlayer.web.ts +++ b/packages/react-native-video/src/core/VideoPlayer.web.ts @@ -10,7 +10,7 @@ import type { import type { VideoPlayerBase } from "./types/VideoPlayerBase"; import type { VideoPlayerSourceBase } from "./types/VideoPlayerSourceBase"; import type { VideoPlayerStatus } from "./types/VideoPlayerStatus"; -import { VideoPlayerEvents } from "./VideoPlayerEvents"; +import { VideoPlayerEvents } from "./events/VideoPlayerEvents"; import { MediaSessionHandler } from "./web/MediaSession"; import { WebEventEmitter, type VideoStore } from "./web/WebEventEmitter"; diff --git a/packages/react-native-video/src/core/VideoPlayerEvents.web.ts b/packages/react-native-video/src/core/VideoPlayerEvents.web.ts deleted file mode 100644 index cecc19bf..00000000 --- a/packages/react-native-video/src/core/VideoPlayerEvents.web.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { VideoPlayerEventsBase } from "./VideoPlayerEventsBase"; - -export class VideoPlayerEvents extends VideoPlayerEventsBase {} diff --git a/packages/react-native-video/src/core/VideoPlayerEvents.native.ts b/packages/react-native-video/src/core/events/VideoPlayerEvents.native.ts similarity index 92% rename from packages/react-native-video/src/core/VideoPlayerEvents.native.ts rename to packages/react-native-video/src/core/events/VideoPlayerEvents.native.ts index 95f4d8ab..31f5b465 100644 --- a/packages/react-native-video/src/core/VideoPlayerEvents.native.ts +++ b/packages/react-native-video/src/core/events/VideoPlayerEvents.native.ts @@ -1,5 +1,5 @@ -import type { AllPlayerEvents as PlayerEvents } from "./types/Events"; -import type { ListenerSubscription } from "./types/EventEmitter"; +import type { AllPlayerEvents as PlayerEvents } from "../types/Events"; +import type { ListenerSubscription } from "../types/EventEmitter"; import { VideoPlayerEventsBase } from "./VideoPlayerEventsBase"; export class VideoPlayerEvents extends VideoPlayerEventsBase { diff --git a/packages/react-native-video/src/core/VideoPlayerEvents.ts b/packages/react-native-video/src/core/events/VideoPlayerEvents.ts similarity index 100% rename from packages/react-native-video/src/core/VideoPlayerEvents.ts rename to packages/react-native-video/src/core/events/VideoPlayerEvents.ts diff --git a/packages/react-native-video/src/core/events/VideoPlayerEvents.web.ts b/packages/react-native-video/src/core/events/VideoPlayerEvents.web.ts new file mode 100644 index 00000000..395276c2 --- /dev/null +++ b/packages/react-native-video/src/core/events/VideoPlayerEvents.web.ts @@ -0,0 +1,16 @@ +import type { AllPlayerEvents as PlayerEvents } from "../types/Events"; +import type { ListenerSubscription } from "../types/EventEmitter"; +import { VideoPlayerEventsBase } from "./VideoPlayerEventsBase"; + +export class VideoPlayerEvents extends VideoPlayerEventsBase { + addEventListener( + event: Event, + callback: PlayerEvents[Event], + ): ListenerSubscription { + switch (event) { + // Web-only events will be added here + default: + return super.addEventListener(event, callback); + } + } +} diff --git a/packages/react-native-video/src/core/VideoPlayerEventsBase.ts b/packages/react-native-video/src/core/events/VideoPlayerEventsBase.ts similarity index 98% rename from packages/react-native-video/src/core/VideoPlayerEventsBase.ts rename to packages/react-native-video/src/core/events/VideoPlayerEventsBase.ts index 8856d22d..5daf7277 100644 --- a/packages/react-native-video/src/core/VideoPlayerEventsBase.ts +++ b/packages/react-native-video/src/core/events/VideoPlayerEventsBase.ts @@ -2,11 +2,11 @@ import { ALL_PLAYER_EVENTS, type JSVideoPlayerEvents, type AllPlayerEvents as PlayerEvents, -} from "./types/Events"; +} from "../types/Events"; import type { ListenerSubscription, VideoPlayerEventEmitterBase, -} from "./types/EventEmitter"; +} from "../types/EventEmitter"; export class VideoPlayerEventsBase { protected eventEmitter: VideoPlayerEventEmitterBase; diff --git a/packages/react-native-video/src/core/video-view/VideoView.web.tsx b/packages/react-native-video/src/core/video-view/VideoView.web.tsx index 26544c25..7d8adcca 100644 --- a/packages/react-native-video/src/core/video-view/VideoView.web.tsx +++ b/packages/react-native-video/src/core/video-view/VideoView.web.tsx @@ -14,6 +14,7 @@ import type { VideoViewProps, VideoViewRef } from "./VideoViewProps"; import { createPlayer, videoFeatures, usePlayerContext, useMediaAttach } from "@videojs/react"; import { VideoSkin } from "@videojs/react/video"; import "@videojs/react/video/skin.css"; +import type { VideoStore } from "../web/WebEventEmitter"; const Player = createPlayer({ features: videoFeatures }); @@ -22,7 +23,8 @@ const Player = createPlayer({ features: videoFeatures }); * then passes the ready store to the adapter. */ function PlayerBridge({ player }: { player: VideoPlayer }) { - const { store, container } = usePlayerContext(); + const { store: rawStore, container } = usePlayerContext(); + const store = rawStore as unknown as VideoStore; const setMedia = useMediaAttach(); useEffect(() => { diff --git a/packages/react-native-video/src/core/web/WebEventEmitter.ts b/packages/react-native-video/src/core/web/WebEventEmitter.ts index 83097371..a9a7b38b 100644 --- a/packages/react-native-video/src/core/web/WebEventEmitter.ts +++ b/packages/react-native-video/src/core/web/WebEventEmitter.ts @@ -40,7 +40,11 @@ export interface VideoStore { readonly buffered: [number, number][]; readonly error: { code: number; message: string } | null; readonly textTrackList: Array<{ kind: string; label: string; language: string; mode: string }>; + readonly destroyed: boolean; + readonly target: unknown; subscribe(callback: () => void): () => void; + attach(target: { media: HTMLVideoElement; container: HTMLElement | null }): () => void; + destroy(): void; loadSource(src: string): string; play(): Promise; pause(): void; @@ -51,6 +55,7 @@ export interface VideoStore { exitFullscreen(): Promise; requestPictureInPicture(): Promise; exitPictureInPicture(): Promise; + readonly pipAvailability: string; } /** @@ -213,7 +218,7 @@ export class WebEventEmitter implements VideoPlayerEventEmitterBase { } const codeMap: Record = { 1: "player/asset-not-initialized", - 2: "player/network", + 2: "player/not-initialized", 3: "player/invalid-source", 4: "source/unsupported-content-type", };