public/video-ui/src/pages/Upload/index.jsx (123 lines of code) (raw):
import React from 'react';
import VideoTrail from '../../components/VideoUpload/VideoTrail';
import { getStore } from '../../util/storeAccessor';
import AddAssetFromURL from '../../components/VideoUpload/AddAssetFromURL';
import PlutoProjectPicker from '../../components/Pluto/PlutoProjectPicker';
import AddSelfHostedAsset from '../../components/VideoUpload/AddSelfHostedAsset';
import YoutubeUpload from '../../components/VideoUpload/YoutubeUpload';
import PACUpload from '../../components/PACUpload/PACUpload';
import PlutoProjectLink from '../../components/Pluto/PlutoProjectLink';
class VideoUpload extends React.Component {
hasCategories = () =>
this.props &&
this.props.youtube &&
this.props.youtube.categories.length !== 0;
hasChannels = () =>
this.props.youtube && this.props.youtube.channels.length !== 0;
componentWillMount() {
this.props.videoActions.getVideo(this.props.params.id);
if (!this.hasCategories()) {
this.props.youtubeActions.getCategories();
}
if (!this.hasChannels()) {
this.props.youtubeActions.getChannels();
}
}
render() {
const uploading = this.props.s3Upload.total > 0;
const activeVersion = this.props.video ? this.props.video.activeVersion : 0;
const projectId = this.props.video.plutoData && this.props.video.plutoData.projectId;
return (
<div>
<div className="video__main">
<div className="video__main__header">
<div className="video__detailbox">
<div>
<div className="form__group">
{ projectId && <PlutoProjectLink projectId={projectId}/> }
<PlutoProjectPicker
video={this.props.video || {}}
saveVideo={this.props.videoActions.saveVideo}
/>
</div>
</div>
<YoutubeUpload
video={this.props.video || {}}
categories={this.props.youtube.categories}
channels={this.props.youtube.channels}
uploading={uploading}
saveVideo={this.props.videoActions.saveVideo}
startUpload={this.props.uploadActions.startVideoUpload}
/>
<PACUpload
startUpload={this.props.uploadActions.startPacFileUpload}
video={this.props.video}
/>
<AddAssetFromURL
video={this.props.video}
createAsset={this.props.videoActions.createAsset}
/>
<AddSelfHostedAsset
video={this.props.video || {}}
permissions={getStore().getState().config.permissions}
uploading={uploading}
startUpload={this.props.uploadActions.startVideoUpload}
/>
</div>
<VideoTrail
video={this.props.video}
activeVersion={activeVersion}
s3Upload={this.props.s3Upload}
uploads={this.props.uploads}
deleteAsset={this.props.videoActions.deleteAsset}
selectAsset={version =>
this.props.videoActions.revertAsset(
this.props.video.id,
version
)}
getUploads={() =>
this.props.uploadActions.getUploads(this.props.video.id)}
/>
</div>
</div>
</div>
);
}
}
//REDUX CONNECTIONS
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as getVideo from '../../actions/VideoActions/getVideo';
import * as saveVideo from '../../actions/VideoActions/saveVideo';
import * as getUpload from '../../actions/UploadActions/getUploads';
import * as s3UploadActions from '../../actions/UploadActions/s3Upload';
import * as createAsset from '../../actions/VideoActions/createAsset';
import * as revertAsset from '../../actions/VideoActions/revertAsset';
import * as deleteAsset from '../../actions/VideoActions/deleteAsset';
import * as getCategories from '../../actions/YoutubeActions/getCategories';
import * as getChannels from '../../actions/YoutubeActions/getChannels';
function mapStateToProps(state) {
return {
video: state.video,
s3Upload: state.s3Upload,
uploads: state.uploads,
youtube: state.youtube
};
}
function mapDispatchToProps(dispatch) {
return {
videoActions: bindActionCreators(
Object.assign({}, getVideo, saveVideo, createAsset, revertAsset, deleteAsset),
dispatch
),
uploadActions: bindActionCreators(
Object.assign({}, s3UploadActions, getUpload),
dispatch
),
youtubeActions: bindActionCreators(
Object.assign({}, getCategories, getChannels),
dispatch
)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(VideoUpload);