import React, { PropTypes } from 'react' import ContentLoader from './ContentLoader' import { MessageUtils } from '../../flow/utils.js' const views = [ViewAuto, ViewImage, ViewJSON, ViewRaw] ViewImage.regex = /^image\/(png|jpe?g|gif|vnc.microsoft.icon|x-icon)$/i ViewImage.matches = msg => ViewImage.regex.test(MessageUtils.getContentType(msg)) ViewImage.propTypes = { flow: PropTypes.object.isRequired, message: PropTypes.object.isRequired, } export function ViewImage({ flow, message }) { return (
preview
) } ViewRaw.textView = true ViewRaw.matches = () => true ViewRaw.propTypes = { content: React.PropTypes.string.isRequired, } export function ViewRaw({ content }) { return
{content}
} ViewJSON.textView = true ViewJSON.regex = /^application\/json$/i ViewJSON.matches = msg => ViewJSON.regex.test(MessageUtils.getContentType(msg)) ViewJSON.propTypes = { content: React.PropTypes.string.isRequired, } export function ViewJSON({ content }) { let json = content try { json = JSON.stringify(JSON.parse(content), null, 2); } catch (e) { // @noop } return
{json}
} ViewAuto.matches = () => false ViewAuto.findView = msg => views.find(v => v.matches(msg)) || views[views.length - 1] ViewAuto.propTypes = { message: React.PropTypes.object.isRequired, flow: React.PropTypes.object.isRequired, } export function ViewAuto({ message, flow }) { const View = ViewAuto.findView(message) if (View.textView) { return } else { return } } export default views