Author: jruchaud Date: 2015-04-29 14:00:13 +0000 (Wed, 29 Apr 2015) New Revision: 1297 Url: http://forge.nuiton.org/projects/sandbox/repository/revisions/1297 Log: Create tree to display Modified: wit/js/components/FilterBar.js wit/js/components/FilterLogs.js Modified: wit/js/components/FilterBar.js =================================================================== --- wit/js/components/FilterBar.js 2015-04-29 13:47:56 UTC (rev 1296) +++ wit/js/components/FilterBar.js 2015-04-29 14:00:13 UTC (rev 1297) @@ -6,7 +6,7 @@ var moment = require('moment'); var now = moment(); - now.add(1, 'hours'); + now.add(1, 'days'); var endDefaultDate = now.format("YYYY-MM-DDThh:mm"); now.subtract(7, 'days'); Modified: wit/js/components/FilterLogs.js =================================================================== --- wit/js/components/FilterLogs.js 2015-04-29 13:47:56 UTC (rev 1296) +++ wit/js/components/FilterLogs.js 2015-04-29 14:00:13 UTC (rev 1297) @@ -32,33 +32,85 @@ window.location.href = link; }, - render: function() { - var moment = require('moment'); + getInitialState: function() { + return {data: {}}; + }, + + componentWillReceiveProps: function(nextProps) { + var state = {}; - var items = this.props.data.map(function(log) { + nextProps.data.forEach(function(log) { + var date = moment(log.startDate).format("MM/DD/YY"); var diff = moment(log.endDate.diff(log.startDate)).utcOffset(0); - return ( - <tr> - <td>{moment(log.startDate).format("MM/DD/YY")}</td> - <td>{diff.format("HH:mm:ss")}</td> - <td>{log.tags.join(",")}</td> - </tr> - ); + var current = state[date] = state[date] || {}; + log.tags.forEach(function(tag) { + current = current[tag] = current[tag] || {}; }); + + if (current.diff) { + current.diff.add(diff); + } else { + current.diff = diff; + } + + current.duration = current.diff.format("HH:mm:ss"); + }); -// if (!this.props.data || !this.props.data.length) { -// return null; -// } + this.setState({data: state}); + }, + + renderTd: function(date, tags, tagObject) { + var r = []; + if (tagObject.duration) { + r.push( + <tr> + <td>{date}</td> + <td>{tagObject.duration}</td> + <td>{tags.join(', ')}</td> + </tr> + ); + } + + var keys = Object.keys(tagObject); + for (var k of keys) { + if (k != "diff" && k != "duration") { + r = r.concat(this.renderTd(date, tags.concat(k), tagObject[k])); + } + } + + return r; + }, + + render: function() { + var items = []; + + var dates = Object.keys(this.state.data); + for (var date of dates) { + var r = this.renderTd(date, [], this.state.data[date]); + items = items.concat(r); + } + return ( <div> <h1>Result</h1> <div ref="actions" className="btn-group" role="group"> - <button onClick={this.onCopy} className="btn btn-primary">Copy</button> - <button onClick={this.onMail} className="btn btn-primary">Mail</button> + <button type="button" className="btn btn-primary" onClick={this.onCopy}> + CSV <span className="glyphicon glyphicon-copy" aria-hidden="true"></span> + </button> + <button type="button" className="btn btn-primary" onClick={this.onCopy}> + TXT <span className="glyphicon glyphicon-copy" aria-hidden="true"></span> + </button> + + <button type="button" className="btn btn-primary" onClick={this.onMail}> + CSV <span className="glyphicon glyphicon-envelope" aria-hidden="true"></span> + </button> + <button type="button" className="btn btn-primary" onClick={this.onMail}> + TXT <span className="glyphicon glyphicon-envelope" aria-hidden="true"></span> + </button> </div> <table className="table">