import React, { Component, PropTypes } from 'react' import { MessageUtils } from '../flow/utils.js' import { ViewAuto, ViewImage } from './ContentView/ContentViews' import * as MetaViews from './ContentView/MetaViews' import ContentLoader from './ContentView/ContentLoader' import ViewSelector from './ContentView/ViewSelector' import ContentEditor from './ContentView/ContentEditor' export default class ContentView extends Component { static propTypes = { // It may seem a bit weird at the first glance: // Every view takes the flow and the message as props, e.g. // flow: React.PropTypes.object.isRequired, message: React.PropTypes.object.isRequired, onContentChange: React.PropTypes.func.isRequired } constructor(props, context) { super(props, context) this.state = { displayLarge: false, View: ViewAuto, contentEditorClosed: true } this.selectView = this.selectView.bind(this) } selectView(View) { this.setState({ View }) } displayLarge() { this.setState({ displayLarge: true }) } componentWillReceiveProps(nextProps) { if (nextProps.message !== this.props.message) { this.setState({ displayLarge: false, View: ViewAuto }) } } isContentTooLarge(msg) { return msg.contentLength > 1024 * 1024 * (ViewImage.matches(msg) ? 10 : 0.2) } onOpenFile(e) { if (e.target.files.length > 0) { this.props.onContentChange(e.target.files[0]) } e.preventDefault() } render() { const { flow, message } = this.props const { displayLarge, View } = this.state if (message.contentLength === 0) { return } if (message.contentLength === null) { return } if (!displayLarge && this.isContentTooLarge(message)) { return } return (
{this.props.onContentChange(content);this.setState({contentEditorClosed : true});}} onOpen={() => this.setState({contentEditorClosed : false})} isClosed={this.state.contentEditorClosed} content="" /> {this.state.contentEditorClosed && (
{View.textView ? ( ) : ( )}
    {this.fileInput.click(); e.preventDefault();}} title="Upload a file to replace the content." > this.fileInput = ref} className="hidden" type="file" onChange={e => this.onOpenFile(e)} />
)}
) } }