aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/components/eventlog.js
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2015-03-27 21:58:04 +0100
committerMaximilian Hils <git@maximilianhils.com>2015-03-27 21:58:04 +0100
commit1913975fa60c76bfb7e79a908b18e7e93793f71f (patch)
tree54a4ea1605e2d8219d2983d2181ce4b27168ed49 /web/src/js/components/eventlog.js
parentf39e6c5c18890de902d061226ba413254114c8ad (diff)
downloadmitmproxy-1913975fa60c76bfb7e79a908b18e7e93793f71f.tar.gz
mitmproxy-1913975fa60c76bfb7e79a908b18e7e93793f71f.tar.bz2
mitmproxy-1913975fa60c76bfb7e79a908b18e7e93793f71f.zip
web: use contexts to pass down stores.
Using contexts frees us from the contracts we have using props - namely, we can assume them to be constant for the lifetime of the object.
Diffstat (limited to 'web/src/js/components/eventlog.js')
-rw-r--r--web/src/js/components/eventlog.js43
1 files changed, 17 insertions, 26 deletions
diff --git a/web/src/js/components/eventlog.js b/web/src/js/components/eventlog.js
index de69462b..65024712 100644
--- a/web/src/js/components/eventlog.js
+++ b/web/src/js/components/eventlog.js
@@ -31,46 +31,37 @@ var LogMessage = React.createClass({
});
var EventLogContents = React.createClass({
+ contextTypes: {
+ eventStore: React.PropTypes.object.isRequired
+ },
mixins: [common.AutoScrollMixin, VirtualScrollMixin],
getInitialState: function () {
- return {
- log: []
- };
- },
- componentWillMount: function () {
- this.openView(this.props.eventStore);
- },
- componentWillUnmount: function () {
- this.closeView();
- },
- openView: function (store) {
- var view = new views.StoreView(store, function (entry) {
+ var filterFn = function (entry) {
return this.props.filter[entry.level];
- }.bind(this));
- this.setState({
- view: view
- });
-
+ };
+ var view = new views.StoreView(this.context.eventStore, filterFn.bind(this));
view.addListener("add", this.onEventLogChange);
view.addListener("recalculate", this.onEventLogChange);
+
+ return {
+ log: view.list,
+ view: view
+ };
},
- closeView: function () {
+ componentWillUnmount: function () {
this.state.view.close();
},
+ filter: function (entry) {
+ return this.props.filter[entry.level];
+ },
onEventLogChange: function () {
- this.setState({
- log: this.state.view.list
- });
+ this.forceUpdate();
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.filter !== this.props.filter) {
this.props.filter = nextProps.filter; // Dirty: Make sure that view filter sees the update.
this.state.view.recalculate();
}
- if (nextProps.eventStore !== this.props.eventStore) {
- this.closeView();
- this.openView(nextProps.eventStore);
- }
},
getDefaultProps: function () {
return {
@@ -149,7 +140,7 @@ var EventLog = React.createClass({
</div>
</div>
- <EventLogContents filter={this.state.filter} eventStore={this.props.eventStore}/>
+ <EventLogContents filter={this.state.filter}/>
</div>
);
}