aboutsummaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-08-15 23:13:57 -0700
committerGitHub <noreply@github.com>2016-08-15 23:13:57 -0700
commitf9f0ac848e8a691a78d4458f3d25f21b3e943658 (patch)
treef7b81554206afbc221b9eaaf1b6dead713f26a74 /web
parent2419ab153d3ce215e719b434f5f69405be9a6586 (diff)
parent81b726bab1cc403977ef4aea060f88ab8a0a66fd (diff)
downloadmitmproxy-f9f0ac848e8a691a78d4458f3d25f21b3e943658.tar.gz
mitmproxy-f9f0ac848e8a691a78d4458f3d25f21b3e943658.tar.bz2
mitmproxy-f9f0ac848e8a691a78d4458f3d25f21b3e943658.zip
Merge pull request #1483 from gzzhanghao/history
[web] Use history object instead of react-router
Diffstat (limited to 'web')
-rw-r--r--web/package.json8
-rw-r--r--web/src/js/app.jsx10
-rw-r--r--web/src/js/components/MainView.jsx6
-rw-r--r--web/src/js/components/ProxyApp.jsx84
-rw-r--r--web/src/js/ducks/ui/flow.js2
5 files changed, 63 insertions, 47 deletions
diff --git a/web/package.json b/web/package.json
index fb2c8c30..59b031b9 100644
--- a/web/package.json
+++ b/web/package.json
@@ -7,7 +7,7 @@
"start": "gulp"
},
"jest": {
- "testRegex": "__tests__/.*\\Spec.js$",
+ "testRegex": "__tests__/.*Spec.js$",
"testPathDirs": [
"<rootDir>/src/js"
],
@@ -19,16 +19,16 @@
"bootstrap": "^3.3.6",
"classnames": "^2.2.5",
"flux": "^2.1.1",
+ "history": "^3.0.0",
"lodash": "^4.11.2",
"react": "^15.1.0",
+ "react-codemirror": "^0.2.6",
"react-dom": "^15.1.0",
"react-redux": "^4.4.5",
- "react-router": "^2.4.0",
"redux": "^3.5.2",
"redux-logger": "^2.6.1",
"redux-thunk": "^2.1.0",
- "shallowequal": "^0.2.2",
- "react-codemirror": "^0.2.6"
+ "shallowequal": "^0.2.2"
},
"devDependencies": {
"babel-core": "^6.7.7",
diff --git a/web/src/js/app.jsx b/web/src/js/app.jsx
index 726b2ae1..f04baea0 100644
--- a/web/src/js/app.jsx
+++ b/web/src/js/app.jsx
@@ -3,10 +3,8 @@ import { render } from 'react-dom'
import { applyMiddleware, createStore } from 'redux'
import { Provider } from 'react-redux'
import thunk from 'redux-thunk'
-import { Route, Router as ReactRouter, hashHistory, Redirect } from 'react-router'
import ProxyApp from './components/ProxyApp'
-import MainView from './components/MainView'
import rootReducer from './ducks/index'
import { add as addLog } from './ducks/eventLog'
@@ -32,13 +30,7 @@ window.addEventListener('error', msg => {
document.addEventListener('DOMContentLoaded', () => {
render(
<Provider store={store}>
- <ReactRouter history={hashHistory}>
- <Redirect from="/" to="/flows" />
- <Route path="/" component={ProxyApp}>
- <Route path="flows" component={MainView}/>
- <Route path="flows/:flowId/:detailTab" component={MainView}/>
- </Route>
- </ReactRouter>
+ <ProxyApp />
</Provider>,
document.getElementById("mitmproxy")
)
diff --git a/web/src/js/components/MainView.jsx b/web/src/js/components/MainView.jsx
index f45f9eef..8be6f21c 100644
--- a/web/src/js/components/MainView.jsx
+++ b/web/src/js/components/MainView.jsx
@@ -29,8 +29,7 @@ class MainView extends Component {
<FlowView
key="flowDetails"
ref="flowDetails"
- tab={this.props.routeParams.detailTab}
- query={this.props.query}
+ tab={this.props.tab}
updateFlow={data => this.props.updateFlow(selectedFlow, data)}
flow={selectedFlow}
/>
@@ -45,7 +44,8 @@ export default connect(
flows: state.flowView.data,
filter: state.flowView.filter,
highlight: state.flowView.highlight,
- selectedFlow: state.flows.byId[state.flows.selected[0]]
+ selectedFlow: state.flows.byId[state.flows.selected[0]],
+ tab: state.ui.flow.tab,
}),
{
selectFlow: flowsActions.select,
diff --git a/web/src/js/components/ProxyApp.jsx b/web/src/js/components/ProxyApp.jsx
index f8a6e262..d76816e5 100644
--- a/web/src/js/components/ProxyApp.jsx
+++ b/web/src/js/components/ProxyApp.jsx
@@ -1,58 +1,77 @@
import React, { Component, PropTypes } from 'react'
import { connect } from 'react-redux'
+import { createHashHistory, useQueries } from 'history'
import { init as appInit, destruct as appDestruct } from '../ducks/app'
import { onKeyDown } from '../ducks/ui/keyboard'
+import { updateFilter, updateHighlight } from '../ducks/flowView'
+import { selectTab } from '../ducks/ui/flow'
+import { select as selectFlow } from '../ducks/flows'
+import { Query } from '../actions'
+import MainView from './MainView'
import Header from './Header'
import EventLog from './EventLog'
import Footer from './Footer'
class ProxyAppMain extends Component {
- static contextTypes = {
- router: PropTypes.object.isRequired,
+ flushToStore(location) {
+ const components = location.pathname.split('/').filter(v => v)
+ const query = location.query || {}
+
+ if (components.length > 2) {
+ this.props.selectFlow(components[1])
+ this.props.selectTab(components[2])
+ } else {
+ this.props.selectFlow(null)
+ this.props.selectTab(null)
+ }
+
+ this.props.updateFilter(query[Query.SEARCH])
+ this.props.updateHighlight(query[Query.HIGHLIGHT])
+ }
+
+ flushToHistory(props) {
+ const query = { ...query }
+
+ if (props.filter) {
+ query[Query.SEARCH] = props.filter
+ }
+
+ if (props.highlight) {
+ query[Query.HIGHLIGHT] = props.highlight
+ }
+
+ if (props.selectedFlowId) {
+ this.history.push({ pathname: `/flows/${props.selectedFlowId}/${props.tab}`, query })
+ } else {
+ this.history.push({ pathname: '/flows', query })
+ }
}
componentWillMount() {
- this.props.appInit(this.context.router)
+ this.props.appInit()
+ this.history = useQueries(createHashHistory)()
+ this.unlisten = this.history.listen(location => this.flushToStore(location))
window.addEventListener('keydown', this.props.onKeyDown);
}
componentWillUnmount() {
- this.props.appDestruct(this.context.router)
+ this.props.appDestruct()
+ this.unlisten()
window.removeEventListener('keydown', this.props.onKeyDown);
}
componentWillReceiveProps(nextProps) {
- /*
- FIXME: improve react-router -> redux integration.
- if (nextProps.location.query[Query.SEARCH] !== nextProps.filter) {
- this.props.updateFilter(nextProps.location.query[Query.SEARCH], false)
- }
- if (nextProps.location.query[Query.HIGHLIGHT] !== nextProps.highlight) {
- this.props.updateHighlight(nextProps.location.query[Query.HIGHLIGHT], false)
- }
- */
- if (nextProps.query === this.props.query && nextProps.selectedFlowId === this.props.selectedFlowId && nextProps.panel === this.props.panel) {
- return
- }
- if (nextProps.selectedFlowId) {
- this.context.router.replace({ pathname: `/flows/${nextProps.selectedFlowId}/${nextProps.panel}`, query: nextProps.query })
- } else {
- this.context.router.replace({ pathname: '/flows', query: nextProps.query })
- }
-
+ this.flushToHistory(nextProps)
}
render() {
- const { showEventLog, location, children, query } = this.props
+ const { showEventLog, location, filter, highlight } = this.props
return (
<div id="container" tabIndex="0">
<Header/>
- {React.cloneElement(
- children,
- { ref: 'view', location, query }
- )}
+ <MainView />
{showEventLog && (
<EventLog key="eventlog"/>
)}
@@ -65,13 +84,18 @@ class ProxyAppMain extends Component {
export default connect(
state => ({
showEventLog: state.eventLog.visible,
- query: state.flowView.filter,
- panel: state.ui.flow.tab,
+ filter: state.flowView.filter,
+ highlight: state.flowView.highlight,
+ tab: state.ui.flow.tab,
selectedFlowId: state.flows.selected[0]
}),
{
appInit,
appDestruct,
- onKeyDown
+ onKeyDown,
+ updateFilter,
+ updateHighlight,
+ selectTab,
+ selectFlow
}
)(ProxyAppMain)
diff --git a/web/src/js/ducks/ui/flow.js b/web/src/js/ducks/ui/flow.js
index fb2a846d..22a8c22d 100644
--- a/web/src/js/ducks/ui/flow.js
+++ b/web/src/js/ducks/ui/flow.js
@@ -85,7 +85,7 @@ export default function reducer(state = defaultState, action) {
case SET_TAB:
return {
...state,
- tab: action.tab,
+ tab: action.tab ? action.tab : 'request',
displayLarge: false,
showFullContent: false
}