UNPKG

@sberdevices/plasma-temple

Version:

SberDevices CanvasApp Templates.

257 lines (199 loc) • 14.6 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.VideoPlayer = void 0; var _react = /*#__PURE__*/_interopRequireDefault( /*#__PURE__*/require("react")); var _styledComponents = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("styled-components")); var _classnames2 = /*#__PURE__*/_interopRequireDefault( /*#__PURE__*/require("classnames")); var _plasmaUi = /*#__PURE__*/require("@sberdevices/plasma-ui"); var _utils = /*#__PURE__*/require("@sberdevices/plasma-ui/utils"); var _MediaPlayerControls = /*#__PURE__*/require("../MediaPlayer/MediaPlayerControls"); var _MediaPlayerTimeline = /*#__PURE__*/require("../MediaPlayer/MediaPlayerTimeline"); var _types = /*#__PURE__*/require("../MediaPlayer/types"); var _useMediaPlayer2 = /*#__PURE__*/require("../MediaPlayer/hooks/useMediaPlayer"); var _useMediaPlayerKeyboard = /*#__PURE__*/require("../MediaPlayer/hooks/useMediaPlayerKeyboard"); var _useTimer2 = /*#__PURE__*/require("../MediaPlayer/hooks/useTimer"); var _MediaPlayer = /*#__PURE__*/require("../MediaPlayer/MediaPlayer"); var _hooks = /*#__PURE__*/require("../../hooks"); var _excluded = ["header", "goBack", "goNext", "backDisabled", "nextDisabled", "alwaysShowControls", "controlsHidden", "customControls", "visibleControlList", "children", "startTime", "endTime", "autoPlay", "muted", "videoFit", "posterClassName", "className"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } var opacityMixin = /*#__PURE__*/(0, _styledComponents.css)(["transition:opacity 0.3s ease-in-out;opacity:", ";"], function (_ref) { var hidden = _ref.hidden; return hidden ? 0 : 1; }); var paddingsControlsMixin = /*#__PURE__*/_utils.gridSizes.map(function (breakpoint) { return (0, _utils.mediaQuery)(breakpoint)((0, _styledComponents.css)(["padding-left:", "rem;padding-right:", "rem;"], _utils.gridMargins[breakpoint], _utils.gridMargins[breakpoint])); }); var StyledContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({ componentId: "plasma-temple__sc-17j4h2f-0" })(["position:relative;height:100%;width:100%;& > video{height:100%;width:100%;object-fit:", ";background:rgba(8,8,8,0.56);}"], function (_ref2) { var videoFit = _ref2.videoFit; return videoFit; }); var StyledOverlay = /*#__PURE__*/_styledComponents["default"].div.withConfig({ componentId: "plasma-temple__sc-17j4h2f-1" })(["display:block;position:absolute;top:0;left:0;width:100%;height:100%;transition:background-color 0.3s ease-in-out;background-color:", ";z-index:10;"], function (_ref3) { var transparent = _ref3.transparent; return transparent ? 'transparent' : 'rgba(8, 8, 8, 0.56)'; }); var StyledControlsWrapper = /*#__PURE__*/_styledComponents["default"].div.withConfig({ componentId: "plasma-temple__sc-17j4h2f-2" })(["position:absolute;bottom:", "px;left:0;right:0;display:flex;flex-direction:column;justify-content:center;", " ", ""], function (_ref4) { var _insets$bottom; var insets = _ref4.insets; return (_insets$bottom = insets === null || insets === void 0 ? void 0 : insets.bottom) !== null && _insets$bottom !== void 0 ? _insets$bottom : 0; }, opacityMixin, paddingsControlsMixin); var StyledSpinner = /*#__PURE__*/(0, _styledComponents["default"])(_plasmaUi.Spinner).withConfig({ componentId: "plasma-temple__sc-17j4h2f-3" })(["position:absolute;top:50%;left:50%;transform:translate(-50%,-50);"]); var StyledHeader = /*#__PURE__*/(0, _styledComponents["default"])(_plasmaUi.Headline3).withConfig({ componentId: "plasma-temple__sc-17j4h2f-4" })(["display:inline-block;position:absolute;top:", ";", " ", ""], function (_ref5) { var insets = _ref5.insets; return insets !== null && insets !== void 0 && insets.top ? "".concat(insets === null || insets === void 0 ? void 0 : insets.top, "px") : '2rem'; }, opacityMixin, paddingsControlsMixin); var CONTROLS_HIDE_TIMEOUT = 5000; var VideoPlayer = /*#__PURE__*/_react["default"].memo(function (_ref6) { var header = _ref6.header, goBack = _ref6.goBack, goNext = _ref6.goNext, backDisabled = _ref6.backDisabled, nextDisabled = _ref6.nextDisabled, alwaysShowControls = _ref6.alwaysShowControls, forceControlsHidden = _ref6.controlsHidden, CustomControlsComponent = _ref6.customControls, visibleControlList = _ref6.visibleControlList, children = _ref6.children, _ref6$startTime = _ref6.startTime, startTime = _ref6$startTime === void 0 ? 0 : _ref6$startTime, endTime = _ref6.endTime, autoPlay = _ref6.autoPlay, muted = _ref6.muted, _ref6$videoFit = _ref6.videoFit, videoFit = _ref6$videoFit === void 0 ? 'contain' : _ref6$videoFit, _ref6$posterClassName = _ref6.posterClassName, posterClassName = _ref6$posterClassName === void 0 ? '' : _ref6$posterClassName, className = _ref6.className, restProps = _objectWithoutProperties(_ref6, _excluded); var insets = (0, _hooks.useInsets)(); var playerRef = _react["default"].useRef(null); var _useMediaPlayer = (0, _useMediaPlayer2.useMediaPlayer)(playerRef, { start: startTime, end: endTime, autoPlay: autoPlay, muted: muted }), actions = _useMediaPlayer.actions, state = _useMediaPlayer.state; var playback = actions.playback, jumpTo = actions.jumpTo; var currentTime = state.currentTime, duration = state.duration, loading = state.loading, paused = state.paused; var _React$useState = _react["default"].useState(true), _React$useState2 = _slicedToArray(_React$useState, 2), isPosterShowing = _React$useState2[0], setIsPosterShowing = _React$useState2[1]; _react["default"].useLayoutEffect(function () { var isOnStart = currentTime === 0; if (isPosterShowing && !loading && !isOnStart) { setIsPosterShowing(false); } if (!isPosterShowing && loading && isOnStart) { setIsPosterShowing(true); } }, [isPosterShowing, loading, currentTime]); var _useTimer = (0, _useTimer2.useTimer)(CONTROLS_HIDE_TIMEOUT), controlsHidden = _useTimer.stopped, startTimer = _useTimer.startTimer, stopTimer = _useTimer.stopTimer; var isControlsHidden = forceControlsHidden || controlsHidden && !alwaysShowControls; var onKewDown = _react["default"].useCallback(function () { return startTimer(); }, [startTimer]); (0, _useMediaPlayerKeyboard.useMediaPlayerKeyboard)(playback, isControlsHidden, onKewDown); _react["default"].useEffect(function () { if (!alwaysShowControls) { startTimer(); } return function () { stopTimer(); }; }, [alwaysShowControls, startTimer, stopTimer]); var customControlsActions = _react["default"].useMemo(function () { return _objectSpread(_objectSpread({}, actions), {}, { goBack: goBack, goNext: goNext }); }, [actions, goBack, goNext]); var controlledTimeLineProps = startTime && endTime ? { currentTime: currentTime, duration: endTime - startTime } : {}; var finished = Boolean(duration) && currentTime >= duration; var playerState = _objectSpread(_objectSpread({}, state), {}, { backDisabled: backDisabled, nextDisabled: nextDisabled, finished: finished }); var classNames = (0, _classnames2["default"])(className, _defineProperty({}, posterClassName, isPosterShowing)); return /*#__PURE__*/_react["default"].createElement(StyledContainer, { onClick: startTimer, videoFit: videoFit }, /*#__PURE__*/_react["default"].createElement(_MediaPlayer.MediaPlayer, _extends({ type: "video" }, restProps, { innerRef: playerRef, className: classNames })), loading && /*#__PURE__*/_react["default"].createElement(StyledSpinner, null), /*#__PURE__*/_react["default"].createElement(StyledOverlay, { transparent: isControlsHidden }, CustomControlsComponent && /*#__PURE__*/_react["default"].createElement(CustomControlsComponent, { playerRef: playerRef, controlsHidden: isControlsHidden, state: playerState, actions: customControlsActions }), children && children({ playerRef: playerRef, controlsHidden: isControlsHidden, state: playerState, actions: customControlsActions }), (0, _MediaPlayerControls.isControlVisible)(_types.ControlType.HEADER, visibleControlList) && /*#__PURE__*/_react["default"].createElement(StyledHeader, { hidden: isControlsHidden, insets: insets }, header), /*#__PURE__*/_react["default"].createElement(StyledControlsWrapper, { hidden: isControlsHidden, insets: insets }, /*#__PURE__*/_react["default"].createElement(_MediaPlayerControls.MediaPlayerControls, { playback: playback, goBack: goBack, goNext: goNext, jumpTo: jumpTo, paused: paused, finished: finished, backDisabled: backDisabled, nextDisabled: nextDisabled, visibleControlList: visibleControlList, canPlay: !loading }), (0, _MediaPlayerControls.isControlVisible)(_types.ControlType.TIMELINE, visibleControlList) && /*#__PURE__*/_react["default"].createElement(_MediaPlayerTimeline.MediaPlayerTimeline, _extends({ playerRef: playerRef }, controlledTimeLineProps))))); }); exports.VideoPlayer = VideoPlayer; //# sourceMappingURL=VideoPlayer.js.map