From 70dbd1b32d13d30e15c03ee91b0fab7bfdf429b3 Mon Sep 17 00:00:00 2001
From: Maximilian Hils <git@maximilianhils.com>
Date: Mon, 25 Jul 2016 17:03:50 -0700
Subject: web: refactor ContentLoader

---
 web/src/js/components/ContentView/ContentViews.jsx | 44 ++++++++--------------
 1 file changed, 16 insertions(+), 28 deletions(-)

(limited to 'web/src/js/components/ContentView/ContentViews.jsx')

diff --git a/web/src/js/components/ContentView/ContentViews.jsx b/web/src/js/components/ContentView/ContentViews.jsx
index b39e545a..a1adebea 100644
--- a/web/src/js/components/ContentView/ContentViews.jsx
+++ b/web/src/js/components/ContentView/ContentViews.jsx
@@ -1,20 +1,16 @@
 import React, { PropTypes } from 'react'
 import ContentLoader from './ContentLoader'
-import { MessageUtils } from '../../flow/utils.js'
-import CodeEditor from '../common/CodeEditor'
+import { MessageUtils } from '../../flow/utils'
+import CodeEditor from './CodeEditor'
 
 
-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))
-
+const isImage = /^image\/(png|jpe?g|gif|vnc.microsoft.icon|x-icon)$/i
+ViewImage.matches = msg => isImage.test(MessageUtils.getContentType(msg))
 ViewImage.propTypes = {
     flow: PropTypes.object.isRequired,
     message: PropTypes.object.isRequired,
 }
-
-export function ViewImage({ flow, message }) {
+function ViewImage({ flow, message }) {
     return (
         <div className="flowview-image">
             <img src={MessageUtils.getContentURL(flow, message)} alt="preview" className="img-thumbnail"/>
@@ -22,26 +18,23 @@ export function ViewImage({ flow, message }) {
     )
 }
 
-ViewRaw.textView = true
-ViewRaw.matches = () => true
 
+ViewRaw.matches = () => true
 ViewRaw.propTypes = {
     content: React.PropTypes.string.isRequired,
 }
-
-export function ViewRaw({ content, readonly, onChange }) {
+function ViewRaw({ content, readonly, onChange }) {
     return readonly ? <pre>{content}</pre> : <CodeEditor content={content} onChange={onChange}/>
 }
+ViewRaw = ContentLoader(ViewRaw)
 
-ViewJSON.textView = true
-ViewJSON.regex = /^application\/json$/i
-ViewJSON.matches = msg => ViewJSON.regex.test(MessageUtils.getContentType(msg))
 
+const isJSON = /^application\/json$/i
+ViewJSON.matches = msg => isJSON.test(MessageUtils.getContentType(msg))
 ViewJSON.propTypes = {
     content: React.PropTypes.string.isRequired,
 }
-
-export function ViewJSON({ content }) {
+function ViewJSON({ content }) {
     let json = content
     try {
         json = JSON.stringify(JSON.parse(content), null, 2);
@@ -50,23 +43,18 @@ export function ViewJSON({ content }) {
     }
     return <pre>{json}</pre>
 }
+ViewJSON = ContentLoader(ViewJSON)
 
 
 ViewAuto.matches = () => false
-ViewAuto.findView = msg => views.find(v => v.matches(msg)) || views[views.length - 1]
-
+ViewAuto.findView = msg => [ViewImage, ViewJSON, ViewRaw].find(v => v.matches(msg)) || ViewRaw
 ViewAuto.propTypes = {
     message: React.PropTypes.object.isRequired,
     flow: React.PropTypes.object.isRequired,
 }
-
-export function ViewAuto({ message, flow, readonly, onChange }) {
+function ViewAuto({ message, flow, readonly, onChange }) {
     const View = ViewAuto.findView(message)
-    if (View.textView) {
-        return <ContentLoader message={message} flow={flow}><View readonly={readonly} onChange={onChange}  content="" /></ContentLoader>
-    } else {
-        return <View readonly={readonly} message={message} flow={flow} />
-    }
+    return <View message={message} flow={flow} readonly={readonly} onChange={onChange}/>
 }
 
-export default views
+export { ViewImage, ViewRaw, ViewAuto, ViewJSON }
-- 
cgit v1.2.3

