aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/components/ContentView/ContentLoader.jsx
diff options
context:
space:
mode:
authorMatthew Shao <me@matshao.com>2017-06-12 08:41:40 +0800
committerMatthew Shao <me@matshao.com>2017-06-12 08:41:40 +0800
commit49a04e37c36d576bb764c3cb2dac239b24d261be (patch)
tree772f2a3567d1ed381f4eab967c3576b8f89298b2 /web/src/js/components/ContentView/ContentLoader.jsx
parentd1a40def200c60fd26549f766794ca2d5c8da291 (diff)
downloadmitmproxy-49a04e37c36d576bb764c3cb2dac239b24d261be.tar.gz
mitmproxy-49a04e37c36d576bb764c3cb2dac239b24d261be.tar.bz2
mitmproxy-49a04e37c36d576bb764c3cb2dac239b24d261be.zip
[web] Update ContentLoader class name.
Diffstat (limited to 'web/src/js/components/ContentView/ContentLoader.jsx')
-rw-r--r--web/src/js/components/ContentView/ContentLoader.jsx156
1 files changed, 79 insertions, 77 deletions
diff --git a/web/src/js/components/ContentView/ContentLoader.jsx b/web/src/js/components/ContentView/ContentLoader.jsx
index 4cafde28..69e4a988 100644
--- a/web/src/js/components/ContentView/ContentLoader.jsx
+++ b/web/src/js/components/ContentView/ContentLoader.jsx
@@ -2,98 +2,100 @@ import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { MessageUtils } from '../../flow/utils.js'
-export default View => class extends React.Component {
+export default function withContentLoader(View) {
+
+ return class extends React.Component {
+ static displayName = View.displayName || View.name
+ static matches = View.matches
- static displayName = View.displayName || View.name
- static matches = View.matches
-
- static propTypes = {
- ...View.propTypes,
- content: PropTypes.string, // mark as non-required
- flow: PropTypes.object.isRequired,
- message: PropTypes.object.isRequired,
- }
-
- constructor(props) {
- super(props)
- this.state = {
- content: undefined,
- request: undefined,
+ static propTypes = {
+ ...View.propTypes,
+ content: PropTypes.string, // mark as non-required
+ flow: PropTypes.object.isRequired,
+ message: PropTypes.object.isRequired,
}
- }
- componentWillMount() {
- this.updateContent(this.props)
- }
-
- componentWillReceiveProps(nextProps) {
- if (
- nextProps.message.content !== this.props.message.content ||
- nextProps.message.contentHash !== this.props.message.contentHash ||
- nextProps.contentView !== this.props.contentView
- ) {
- this.updateContent(nextProps)
+ constructor(props) {
+ super(props)
+ this.state = {
+ content: undefined,
+ request: undefined,
+ }
}
- }
- componentWillUnmount() {
- if (this.state.request) {
- this.state.request.abort()
+ componentWillMount() {
+ this.updateContent(this.props)
}
- }
- updateContent(props) {
- if (this.state.request) {
- this.state.request.abort()
+ componentWillReceiveProps(nextProps) {
+ if (
+ nextProps.message.content !== this.props.message.content ||
+ nextProps.message.contentHash !== this.props.message.contentHash ||
+ nextProps.contentView !== this.props.contentView
+ ) {
+ this.updateContent(nextProps)
+ }
}
- // We have a few special cases where we do not need to make an HTTP request.
- if(props.message.content !== undefined) {
- return this.setState({request: undefined, content: props.message.content})
- }
- if(props.message.contentLength === 0 || props.message.contentLength === null){
- return this.setState({request: undefined, content: ""})
+
+ componentWillUnmount() {
+ if (this.state.request) {
+ this.state.request.abort()
+ }
}
- let requestUrl = MessageUtils.getContentURL(props.flow, props.message, (View.name == 'ViewServer' ? props.contentView : undefined))
+ updateContent(props) {
+ if (this.state.request) {
+ this.state.request.abort()
+ }
+ // We have a few special cases where we do not need to make an HTTP request.
+ if (props.message.content !== undefined) {
+ return this.setState({request: undefined, content: props.message.content})
+ }
+ if (props.message.contentLength === 0 || props.message.contentLength === null) {
+ return this.setState({request: undefined, content: ""})
+ }
- // We use XMLHttpRequest instead of fetch() because fetch() is not (yet) abortable.
- let request = new XMLHttpRequest();
- request.addEventListener("load", this.requestComplete.bind(this, request));
- request.addEventListener("error", this.requestFailed.bind(this, request));
- request.open("GET", requestUrl);
- request.send();
- this.setState({ request, content: undefined })
- }
+ let requestUrl = MessageUtils.getContentURL(props.flow, props.message, (View.name == 'ViewServer' ? props.contentView : undefined))
- requestComplete(request, e) {
- if (request !== this.state.request) {
- return // Stale request
+ // We use XMLHttpRequest instead of fetch() because fetch() is not (yet) abortable.
+ let request = new XMLHttpRequest();
+ request.addEventListener("load", this.requestComplete.bind(this, request));
+ request.addEventListener("error", this.requestFailed.bind(this, request));
+ request.open("GET", requestUrl);
+ request.send();
+ this.setState({request, content: undefined})
}
- this.setState({
- content: request.responseText,
- request: undefined
- })
- }
- requestFailed(request, e) {
- if (request !== this.state.request) {
- return // Stale request
+ requestComplete(request, e) {
+ if (request !== this.state.request) {
+ return // Stale request
+ }
+ this.setState({
+ content: request.responseText,
+ request: undefined
+ })
+ }
+
+ requestFailed(request, e) {
+ if (request !== this.state.request) {
+ return // Stale request
+ }
+ console.error(e)
+ // FIXME: Better error handling
+ this.setState({
+ content: "Error getting content.",
+ request: undefined
+ })
}
- console.error(e)
- // FIXME: Better error handling
- this.setState({
- content: "Error getting content.",
- request: undefined
- })
- }
- render() {
- return this.state.content !== undefined ? (
- <View content={this.state.content} {...this.props}/>
- ) : (
- <div className="text-center">
- <i className="fa fa-spinner fa-spin"></i>
- </div>
- )
+ render() {
+ return this.state.content !== undefined ? (
+ <View content={this.state.content} {...this.props}/>
+ ) : (
+ <div className="text-center">
+ <i className="fa fa-spinner fa-spin"></i>
+ </div>
+ )
+ }
}
};