feeles-ide
Version:
The hackable and serializable IDE to make learning material
106 lines (92 loc) • 3.28 kB
JavaScript
import _extends from 'babel-runtime/helpers/extends';
import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';
import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
import _createClass from 'babel-runtime/helpers/createClass';
import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
import _inherits from 'babel-runtime/helpers/inherits';
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import Card from '../CardWindow';
import AvMusicVideo from 'material-ui/svg-icons/av/music-video';
import ReactPlayer from 'react-player';
var defaultPlayerState = {
// https://github.com/CookPete/react-player#props
width: 'initial',
style: {
maxWidth: 500
},
soundcloudConfig: {
clientId: 'iFAPeKCVCOTKeA0nNJCHuVHif2gEBKbl',
showArtwork: true
}
};
var MediaCard = function (_PureComponent) {
_inherits(MediaCard, _PureComponent);
function MediaCard() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, MediaCard);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = MediaCard.__proto__ || _Object$getPrototypeOf(MediaCard)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
playerState: {}
}, _this.handleMedia = function (event) {
var value = event.data.value;
if (value) {
// feeles.openMedia()
_this.setState({ playerState: value });
_this.props.updateCard('MediaCard', { visible: true });
} else {
// feeles.closeMedia()
_this.props.updateCard('MediaCard', { visible: false });
}
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(MediaCard, [{
key: 'componentWillMount',
value: function componentWillMount() {
var globalEvent = this.props.globalEvent;
globalEvent.on('message.media', this.handleMedia);
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
var visible = this.props.cardPropsBag.visible;
if (visible && !nextProps.cardPropsBag.visible) {
// カードが close されたとき動画を止める
this.setState({
playerState: _extends({}, this.state.playerState, {
playing: false
})
});
}
}
}, {
key: 'render',
value: function render() {
var playerState = _extends({}, defaultPlayerState, this.state.playerState);
return React.createElement(
Card,
_extends({ icon: MediaCard.icon() }, this.props.cardPropsBag),
this.state.playerState.url ? React.createElement(ReactPlayer, playerState) : React.createElement(
'div',
null,
'URL not given'
)
);
}
}], [{
key: 'icon',
value: function icon() {
return React.createElement(AvMusicVideo, null);
}
}]);
return MediaCard;
}(PureComponent);
MediaCard.propTypes = {
cardPropsBag: PropTypes.object.isRequired,
updateCard: PropTypes.func.isRequired,
globalEvent: PropTypes.object.isRequired
};
export default MediaCard;