@sberdevices/plasma-temple
Version:
SberDevices CanvasApp Templates.
257 lines (199 loc) • 14.6 kB
JavaScript
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
;