UNPKG

@theoplayer/react-native-ui

Version:

A React Native UI for @theoplayer/react-native

58 lines (57 loc) 2.23 kB
import { Dimensions, View } from 'react-native'; import { PlayerContext } from '../../util/PlayerContext'; import { ThumbnailView } from './ThumbnailView'; import React, { useContext, useMemo } from 'react'; import { useThumbnailTrack } from '../../../hooks/useThumbnailTrack'; import { useSeekable } from '../../../hooks/useSeekable'; import { useDuration } from '../../../hooks/useDuration'; import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime"; /** * Component for displaying a single preview thumbnail image, sourced from a metadata track containing thumbnail data. */ export function SingleThumbnailView(props) { const player = useContext(PlayerContext).player; const thumbnailTrack = useThumbnailTrack(); const thumbnailSize = useMemo(() => { const window = Dimensions.get('window'); return 0.35 * Math.min(window.height, window.width); }, []); const seekable = useSeekable(); const duration = useDuration(); if (!thumbnailTrack) { return /*#__PURE__*/_jsx(_Fragment, {}); } const { currentTime, seekBarWidth } = props; const marginHorizontal = 8; const normalizedDuration = isNaN(duration) || !isFinite(duration) ? 0 : Math.max(0, duration); const seekableRange = { start: seekable.length > 0 ? seekable[0].start : 0, end: seekable.length > 0 ? seekable[seekable.length - 1].end : normalizedDuration }; // Do not let the thumbnail pass left & right borders. const range = seekableRange.end - seekableRange.start; const offset = range ? seekBarWidth * (currentTime - seekableRange.start) / range : 0; let left = -0.5 * thumbnailSize; if (offset + marginHorizontal < 0.5 * thumbnailSize) { left = -offset - marginHorizontal; } else if (offset - marginHorizontal > seekBarWidth - 0.5 * thumbnailSize) { left = -offset + marginHorizontal + seekBarWidth - thumbnailSize; } return /*#__PURE__*/_jsx(View, { style: { left, marginHorizontal }, children: /*#__PURE__*/_jsx(ThumbnailView, { thumbnailTrack: thumbnailTrack, duration: player.duration, time: currentTime, size: thumbnailSize, showTimeLabel: false }) }); } //# sourceMappingURL=SingleThumbnailView.js.map