Skip to content

Commit

Permalink
add basic redux architecture, convert eventlog to redux
Browse files Browse the repository at this point in the history
  • Loading branch information
mhils committed Jun 2, 2016
1 parent 9a76e31 commit ca77fff
Show file tree
Hide file tree
Showing 9 changed files with 2,274 additions and 812 deletions.
246 changes: 181 additions & 65 deletions mitmproxy/web/static/app.js

Large diffs are not rendered by default.

2,709 changes: 1,987 additions & 722 deletions mitmproxy/web/static/vendor.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions web/package.json
Expand Up @@ -30,6 +30,7 @@
},
"devDependencies": {
"babel-core": "^6.7.7",
"babel-eslint": "^6.0.4",
"babel-jest": "^12.0.2",
"babel-plugin-transform-class-properties": "^6.6.0",
"babel-preset-es2015": "^6.6.0",
Expand Down
16 changes: 12 additions & 4 deletions web/src/js/app.js
@@ -1,9 +1,15 @@
import React from "react"
import { render } from 'react-dom'
import {render} from 'react-dom'
import {createStore} from 'redux'
import {Provider} from 'react-redux'
import mitmproxyApp from './reducers'

import $ from "jquery"
import Connection from "./connection"
import {app} from "./components/proxyapp.js"
import { EventLogActions } from "./actions.js"
import {App} from "./components/proxyapp.js"
import {EventLogActions} from "./actions.js"

let store = createStore(mitmproxyApp);

$(function () {
window.ws = new Connection("/updates");
Expand All @@ -12,6 +18,8 @@ $(function () {
EventLogActions.add_event(msg);
};

render(app, document.getElementById("mitmproxy"));
render(
<Provider store={store}>{App}</Provider>,
document.getElementById("mitmproxy"));
});

54 changes: 34 additions & 20 deletions web/src/js/components/eventlog.js
@@ -1,11 +1,12 @@
import React from "react"
import ReactDOM from "react-dom"
import { connect } from 'react-redux'
import shallowEqual from "shallowequal"
import {Query} from "../actions.js"
import {toggleEventLogFilter} from "../reduxActions"
import AutoScroll from "./helpers/AutoScroll";
import {calcVScroll} from "./helpers/VirtualScroll"
import {StoreView} from "../store/view.js"
import _ from "lodash"

class EventLogContents extends React.Component {

Expand Down Expand Up @@ -127,7 +128,7 @@ function ToggleFilter ({ name, active, toggleLevel }) {

function onClick(event) {
event.preventDefault();
toggleLevel(name);
toggleLevel();
}

return (
Expand All @@ -140,42 +141,55 @@ function ToggleFilter ({ name, active, toggleLevel }) {
);
}

const mapStateToProps = (state, ownProps) => {
return {
active: state.eventLog.visibilityFilter[ownProps.name]
}
};

const mapDispatchToProps = (dispatch, ownProps) => {
return {
toggleLevel: () => {
dispatch(toggleEventLogFilter(ownProps.name))
}
}
};

const ToggleEventLogFilter = connect(
mapStateToProps,
mapDispatchToProps
)(ToggleFilter);


const AutoScrollEventLog = AutoScroll(EventLogContents);


const VisibleAutoScrollEventLog = connect(
function mapStateToProps(state, ownProps) {
return {filter: state.eventLog.visibilityFilter}
})(AutoScrollEventLog);


var EventLog = React.createClass({
getInitialState() {
return {
filter: {
"debug": false,
"info": true,
"web": true
}
};
},
close() {
var d = {};
d[Query.SHOW_EVENTLOG] = undefined;
this.props.updateLocation(undefined, d);
},
toggleLevel(level) {
var filter = _.extend({}, this.state.filter);
filter[level] = !filter[level];
this.setState({filter: filter});
},
render() {
return (
<div className="eventlog">
<div>
Eventlog
<div className="pull-right">
<ToggleFilter name="debug" active={this.state.filter.debug} toggleLevel={this.toggleLevel}/>
<ToggleFilter name="info" active={this.state.filter.info} toggleLevel={this.toggleLevel}/>
<ToggleFilter name="web" active={this.state.filter.web} toggleLevel={this.toggleLevel}/>
<ToggleEventLogFilter name="debug"/>
<ToggleEventLogFilter name="info"/>
<ToggleEventLogFilter name="web"/>
<i onClick={this.close} className="fa fa-close"></i>
</div>

</div>
<AutoScrollEventLog filter={this.state.filter}/>
<VisibleAutoScrollEventLog/>
</div>
);
}
Expand Down
2 changes: 1 addition & 1 deletion web/src/js/components/proxyapp.js
Expand Up @@ -145,7 +145,7 @@ var ProxyAppMain = React.createClass({

import { Route, Router as ReactRouter, hashHistory, Redirect} from "react-router";

export var app = (
export var App = (
<ReactRouter history={hashHistory}>
<Redirect from="/" to="/flows" />
<Route path="/" component={ProxyAppMain}>
Expand Down
30 changes: 30 additions & 0 deletions web/src/js/reducers/eventLog.js
@@ -0,0 +1,30 @@
import {combineReducers} from 'redux'
import {TOGGLE_EVENTLOG_FILTER} from "../reduxActions"

const defaultVisibility = {
"debug": false,
"info": true,
"web": true
};

const visibilityFilter = (state = defaultVisibility, action) => {
switch (action.type) {
case TOGGLE_EVENTLOG_FILTER:
return Object.assign({}, state, {
[action.filter]: !state[action.filter]
});
default:
return state;
}
};

const entries = (state = [], action) => {
return state;
};

const eventLog = combineReducers({
visibilityFilter,
entries
});

export default eventLog
8 changes: 8 additions & 0 deletions web/src/js/reducers/index.js
@@ -0,0 +1,8 @@
import { combineReducers } from 'redux';
import eventLog from './eventlog'

const mitmproxyApp = combineReducers({
eventLog
});

export default mitmproxyApp
20 changes: 20 additions & 0 deletions web/src/js/reduxActions.js
@@ -0,0 +1,20 @@
export const TOGGLE_EVENTLOG_FILTER = 'TOGGLE_EVENTLOG_FILTER';
export const HIDE_EVENTLOG = 'HIDE_EVENTLOG';
export const SHOW_EVENTLOG = 'SHOW_EVENTLOG';

export const EventLogFilters = {
DEBUG: 'debug',
INFO: 'info',
WEB: 'web'
};

export function toggleEventLogFilter(filter) {
return {type: TOGGLE_EVENTLOG_FILTER, filter}
}

export function hideEventLog() {
return {type: HIDE_EVENTLOG}
}
export function showEventLog() {
return {type: SHOW_EVENTLOG}
}

0 comments on commit ca77fff

Please sign in to comment.