UNPKG

dbl-components

Version:

Framework based on bootstrap 5

90 lines (82 loc) 2.78 kB
import React from "react"; import PropTypes from "prop-types"; import YouTube from "react-youtube"; import Component from "../component"; import AspectRatioContainer from "../containers/proportional-container"; export default class YoutubeVideoComponent extends Component { static jsClass = 'YoutubeVideoComponent'; static propTypes = { ...Component.propTypes, ratio: PropTypes.number, // TODO: ajustar los proptypes según la página de propiedades // https://developers.google.com/youtube/player_parameters youtubeOpts: PropTypes.shape({ autoPlay: PropTypes.oneOf([0, 1, '0', '1']), cc_load_policy: PropTypes.oneOf([1, '1']), color: PropTypes.string, controls: PropTypes.oneOf([0, 1, 2, '0', '1', '2']), disablekb: PropTypes.oneOf([0, 1, '0', '1']), enablejsapi: PropTypes.string, end: PropTypes.number, fs: PropTypes.string, hl: PropTypes.string, iv_load_policy: PropTypes.string, list: PropTypes.string, listType: PropTypes.string, loop: PropTypes.string, modestbranding: PropTypes.string, origin: PropTypes.string, playlist: PropTypes.string, playsInline: PropTypes.string, rel: PropTypes.string, showinfo: PropTypes.string, start: PropTypes.string }), videoId: PropTypes.string.isRequired, className: PropTypes.string, containerClassName: PropTypes.string, onReady: PropTypes.func, onPlay: PropTypes.func, onPause: PropTypes.func, onEnd: PropTypes.func, onError: PropTypes.func, onStateChange: PropTypes.func, onPlaybackRateChange: PropTypes.func, onPlaybackQualityChange: PropTypes.func } static defaultProps = { ...Component.defaultProps, ratio: 2 / 3 } content(children = this.props.children) { const { ratio, overflow, youtubeOpts, videoId, ytbClasses, ytbContainerClasses, onReady, onPlay, onPause, onEnd, onError, onStateChange, onPlaybackRateChange, onPlaybackQualityChange } = this.props; const propsYoutube = { videoId, id: videoId, className: ytbClasses, containerClassName: ['h-100 w-100', ytbContainerClasses].flat().join(' '), onReady, onPlay, onPause, onEnd, onError, onStateChange, onPlaybackRateChange, onPlaybackQualityChange, opts: { height: '100%', width: '100%', playerVars: youtubeOpts, } } return React.createElement(AspectRatioContainer, { ratio: ratio, overflow: overflow, fullWidth: true }, videoId && React.createElement(YouTube, { ...propsYoutube }), children ); } }