var LogMessage = React.createClass({ render: function () { var entry = this.props.entry; var indicator; switch (entry.level) { case "web": indicator = ; break; case "debug": indicator = ; break; default: indicator = ; } return (
{ indicator } {entry.message}
); }, shouldComponentUpdate: function () { return false; // log entries are immutable. } }); var EventLogContents = React.createClass({ mixins: [AutoScrollMixin, VirtualScrollMixin], getInitialState: function () { return { log: [] }; }, componentDidMount: function () { this.log = EventLogStore.getView(); this.log.addListener("change", this.onEventLogChange); }, componentWillUnmount: function () { this.log.removeListener("change", this.onEventLogChange); this.log.close(); }, onEventLogChange: function () { var log = this.log.getAll().filter(function (entry) { return this.props.filter[entry.level]; }.bind(this)); this.setState({ log: log }); }, componentWillReceiveProps: function () { if (this.log) { this.onEventLogChange(); } }, getDefaultProps: function () { return { rowHeight: 45, rowHeightMin: 15, placeholderTagName: "div" }; }, renderRow: function(elem){ return ; }, render: function () { var rows = this.renderRows(this.state.log); return
            { this.getPlaceholderTop() }
            {rows}
            { this.getPlaceholderBottom(this.state.log.length) }
        
; } }); var ToggleFilter = React.createClass({ toggle: function (e) { e.preventDefault(); return this.props.toggleLevel(this.props.name); }, render: function () { var className = "label "; if (this.props.active) { className += "label-primary"; } else { className += "label-default"; } return ( {this.props.name} ); } }); var EventLog = React.createClass({ getInitialState: function () { return { filter: { "debug": false, "info": true, "web": true } }; }, close: function () { SettingsActions.update({ showEventLog: false }); }, toggleLevel: function (level) { var filter = this.state.filter; filter[level] = !filter[level]; this.setState({filter: filter}); }, render: function () { return (
Eventlog
); } });