UNPKG

@theoplayer/react-native-ui

Version:

A React Native UI for @theoplayer/react-native

61 lines (60 loc) 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useWaiting = void 0; var _react = require("react"); var _reactNativeTheoplayer = require("react-native-theoplayer"); var _barrel = require("../barrel"); const WAITING_CHANGE_EVENTS = [_reactNativeTheoplayer.PlayerEventType.WAITING, _reactNativeTheoplayer.PlayerEventType.READYSTATE_CHANGE, _reactNativeTheoplayer.PlayerEventType.ERROR, _reactNativeTheoplayer.PlayerEventType.PLAYING, _reactNativeTheoplayer.PlayerEventType.SOURCE_CHANGE, _reactNativeTheoplayer.PlayerEventType.LOAD_START]; /** * Returns whether the player is waiting, automatically updating whenever it changes. * * This hook must only be used in a component mounted inside a {@link THEOplayerDefaultUi} or {@link UiContainer}, * or alternatively any other component that provides a {@link PlayerContext}. * * @group Hooks */ const useWaiting = () => { const [waiting, setWaiting] = (0, _react.useState)(false); const [hasError, setHasError] = (0, _react.useState)(false); const { player } = (0, _react.useContext)(_barrel.PlayerContext); (0, _react.useEffect)(() => { if (!player) return; const onUpdateWaiting = event => { if (!player) return; switch (event.type) { case _reactNativeTheoplayer.PlayerEventType.WAITING: setWaiting(!hasError && !player.paused); break; case _reactNativeTheoplayer.PlayerEventType.READYSTATE_CHANGE: setWaiting(event.readyState < 3 && !hasError && !player.paused); break; case _reactNativeTheoplayer.PlayerEventType.ERROR: setHasError(true); setWaiting(false); break; case _reactNativeTheoplayer.PlayerEventType.PLAYING: setWaiting(false); break; case _reactNativeTheoplayer.PlayerEventType.SOURCE_CHANGE: setHasError(false); setWaiting(false); break; case _reactNativeTheoplayer.PlayerEventType.LOAD_START: setHasError(false); setWaiting(!player.paused); break; } }; player.addEventListener(WAITING_CHANGE_EVENTS, onUpdateWaiting); return () => { player.removeEventListener(WAITING_CHANGE_EVENTS, onUpdateWaiting); }; }, [player, hasError]); return waiting; }; exports.useWaiting = useWaiting; //# sourceMappingURL=useWaiting.js.map