import React from 'react'; import { BreadCrumb } from '../components/'; import { Bundle, debounce, NgIf, Loader, Error, Container } from '../utilities/'; import { Files, opener, EventReceiver, EventEmitter } from '../data/'; import { AudioPlayer, FileDownloader, ImageViewer, PDFViewer } from './viewerpage/'; import Path from 'path'; const VideoPlayer = (props) => ( {(Comp) => } ); const IDE = (props) => ( {(Comp) => } ); @EventReceiver export class ViewerPage extends React.Component { constructor(props){ super(props); this.state = { path: props.match.url.replace('/view', ''), filename: Path.basename(props.match.url.replace('/view', '')) || 'untitled.dat', opener: null, data: '', needSaving: false, isSaving: false, height: null, loading: true, error: false }; this.resetHeight = debounce(this.resetHeight.bind(this), 100); this.props.subscribe('file.select', this.onPathUpdate.bind(this)); } componentWillMount(){ this.setState({loading: true, error: false}); let app = opener(this.state.path); if(app === 'editor'){ Files.cat(this.state.path).then((content) => { this.setState({data: content, loading: false, opener: app}); }).catch(err => { if(err && err.code === 'CANCELLED'){ return } if(err.code === 'BINARY_FILE'){ Files.url(this.state.path).then((url) => { this.setState({data: url, loading: false, opener: 'download'}); }).catch(err => { this.setState({error: err}); }); }else{ this.setState({error: err}); } }); }else{ Files.url(this.state.path).then((url) => { this.setState({data: url, loading: false, opener: app}); }).catch(err => { if(err && err.code === 'CANCELLED'){ return } this.setState({error: err}); }); } } componentWillUnmount() { this.props.unsubscribe('file.select') window.removeEventListener("resize", this.resetHeight); } save(file){ this.setState({isSaving: true}) Files.save(this.state.path, file) .then(() => { this.setState({isSaving: false}) this.setState({needSaving: false}) }) .catch((err) => { if(err && err.code === 'CANCELLED'){ return } this.setState({isSaving: false}) let message = "Oups, something went wrong" if(err.message){ message += ':\n'+err.message } alert(message); }); } onPathUpdate(path){ this.props.history.push('/files'+path) } needSaving(bool){ this.setState({needSaving: bool}) } componentDidMount(){ this.resetHeight(); window.addEventListener("resize", this.resetHeight); } resetHeight(){ this.setState({ height: document.body.clientHeight - document.querySelector('.breadcrumb').offsetHeight }); } render() { let style = {height: '100%'}; return (
); } }