diff --git a/src/Video.tsx b/src/Video.tsx index 98b96b64..3a798741 100644 --- a/src/Video.tsx +++ b/src/Video.tsx @@ -30,6 +30,7 @@ import type { OnPlaybackStateChangedData, OnProgressData, OnSeekData, + OnSeekCompleteData, OnTextTrackDataChangedData, OnTimedMetadataData, OnVideoAspectRatioData, @@ -90,6 +91,7 @@ const Video = forwardRef( onError, onProgress, onSeek, + onSeekComplete, onEnd, onBuffer, onBandwidthUpdate, @@ -385,6 +387,13 @@ const Video = forwardRef( [onSeek], ); + const onVideoSeekComplete = useCallback( + (e: NativeSyntheticEvent) => { + onSeekComplete?.(e.nativeEvent); + }, + [onSeekComplete] + ); + const onVideoPlaybackStateChanged = useCallback( (e: NativeSyntheticEvent) => { onPlaybackStateChanged?.(e.nativeEvent); @@ -716,6 +725,7 @@ const Video = forwardRef( onVideoError={onError ? onVideoError : undefined} onVideoProgress={onProgress ? onVideoProgress : undefined} onVideoSeek={onSeek ? onVideoSeek : undefined} + onVideoSeekComplete={onSeekComplete ? onVideoSeekComplete : undefined} onVideoEnd={onEnd} onVideoBuffer={onBuffer ? onVideoBuffer : undefined} onVideoPlaybackStateChanged={ diff --git a/src/specs/VideoNativeComponent.ts b/src/specs/VideoNativeComponent.ts index 546bf97d..7e929262 100644 --- a/src/specs/VideoNativeComponent.ts +++ b/src/specs/VideoNativeComponent.ts @@ -182,6 +182,12 @@ export type OnSeekData = Readonly<{ seekTime: Float; }>; +export type OnVideoSeekCompleteData = Readonly<{ + currentTime: number; + seekTime: number; + target: number; +}>; + export type OnPlaybackStateChangedData = Readonly<{ isPlaying: boolean; isSeeking: boolean; diff --git a/src/types/events.ts b/src/types/events.ts index 6d3e0d9e..3f26f40a 100644 --- a/src/types/events.ts +++ b/src/types/events.ts @@ -258,6 +258,7 @@ export interface ReactVideoEvents { onReceiveAdEvent?: (e: OnReceiveAdEventData) => void; //Android, iOS onRestoreUserInterfaceForPictureInPictureStop?: () => void; //iOS onSeek?: (e: OnSeekData) => void; //Android, iOS, Windows UWP + onSeekComplete?: (e: OnSeekCompleteData) -> void; // iOS onPlaybackStateChanged?: (e: OnPlaybackStateChangedData) => void; // Android, iOS onTimedMetadata?: (e: OnTimedMetadataData) => void; //Android, iOS onAudioTracks?: (e: OnAudioTracksData) => void; // Android