Author: jruchaud Date: 2015-04-30 15:52:21 +0000 (Thu, 30 Apr 2015) New Revision: 1311 Url: http://forge.nuiton.org/projects/sandbox/repository/revisions/1311 Log: Begin log edition Added: wit/js/components/LogsTable.js wit/js/pages/EditionLogs.js Modified: wit/index.html wit/js/main.js wit/js/pages/Rapport.js wit/js/services/TimerService.js wit/js/services/database.js Modified: wit/index.html =================================================================== --- wit/index.html 2015-04-30 15:22:38 UTC (rev 1310) +++ wit/index.html 2015-04-30 15:52:21 UTC (rev 1311) @@ -13,10 +13,12 @@ <script type="text/jsx" src="js/components/FilterBar.js"></script> <script type="text/jsx" src="js/components/FilterLogs.js"></script> <script type="text/jsx" src="js/components/Timeline.js"></script> + <script type="text/jsx" src="js/components/LogsTable.js"></script> <script type="text/jsx" src="js/pages/Timer.js"></script> <script type="text/jsx" src="js/pages/Rapport.js"></script> <script type="text/jsx" src="js/pages/UserActivity.js"></script> <script type="text/jsx" src="js/pages/Options.js"></script> + <script type="text/jsx" src="js/pages/EditionLogs.js"></script> <script type="text/jsx" src="js/main.js"></script> <script type="application/javascript" src="js/gui.js"></script> Copied: wit/js/components/LogsTable.js (from rev 1306, wit/js/components/FilterLogs.js) =================================================================== --- wit/js/components/LogsTable.js (rev 0) +++ wit/js/components/LogsTable.js 2015-04-30 15:52:21 UTC (rev 1311) @@ -0,0 +1,66 @@ +/** @jsx React.DOM */ + +var LogsTable = React.createClass({ + + onDelete: function(e) { + var logId = e.target.dataset.id; + if (logId) { + timer.deleteLog(logId); + + var index = parseInt(e.target.dataset.index); + this.props.data.splice(index, 1); + this.forceUpdate(); + } + }, + + render: function() { + var items = []; + + var classString = ""; + if (!this.props.data) { + classString = "hidden"; + + } else { + this.props.data.forEach(function(log, index) { + items.push( + <tr> + <td>{moment(log.startDate).format()}</td> + <td>{moment(log.endDate).format()}</td> + <td>{log.tags.join(', ')}</td> + <td> + <div ref="actions" className="btn-group" role="group"> + <button type="button" className="btn btn-primary btn-lg" data-index={index} data-id={log._id}> + <span className="glyphicon glyphicon-trash" data-index={index} data-id={log._id} aria-hidden="true"></span> + </button> + </div> + </td> + </tr> + ); + }, this); + } + + return ( + <div className={classString}> + <h1>Result</h1> + + <table className="table"> + <thead> + <tr> + <th>Date start</th> + <th>Date end</th> + <th>Tags</th> + <th></th> + </tr> + </thead> + <tbody onClick={this.onDelete}> + {items} + </tbody> + </table> + + <h3 className={items.length ? "hidden" : "text-center"}> + No result ! + </h3> + </div> + ); + } +}); Modified: wit/js/main.js =================================================================== --- wit/js/main.js 2015-04-30 15:22:38 UTC (rev 1310) +++ wit/js/main.js 2015-04-30 15:52:21 UTC (rev 1311) @@ -74,7 +74,7 @@ Edition <span className="caret"></span> </a> <ul className="dropdown-menu"> - <li><a href="#">Logs</a></li> + <li><Link onClick={this.closeAll} to="editionLogs">Logs</Link></li> <li><a href="#">Tags</a></li> <li><a href="#">Activities</a></li> </ul> @@ -95,6 +95,7 @@ <Route name="rapport" handler={Rapport}/> <Route name="activity" handler={UserActivity}/> <Route name="options" handler={Options}/> + <Route name="editionLogs" handler={EditionLogs}/> <DefaultRoute handler={Timer}/> </Route> ); Copied: wit/js/pages/EditionLogs.js (from rev 1303, wit/js/pages/Rapport.js) =================================================================== --- wit/js/pages/EditionLogs.js (rev 0) +++ wit/js/pages/EditionLogs.js 2015-04-30 15:52:21 UTC (rev 1311) @@ -0,0 +1,30 @@ +/** @jsx React.DOM */ + +var EditionLogs = React.createClass({ + + getInitialState : function() { + var moment = require("moment"); + return { + startDate: moment().subtract(1, "h"), + endDate: moment(), + result: null + }; + }, + + handleSearchResult: function(result, startDate, endDate) { + this.setState({ + startDate: startDate, + endDate: endDate, + result: result + }); + }, + + render: function() { + return ( + <div> + <FilterBar onSearchResult={this.handleSearchResult}/> + <LogsTable data={this.state.result}/> + </div> + ); + } +}); Modified: wit/js/pages/Rapport.js =================================================================== --- wit/js/pages/Rapport.js 2015-04-30 15:22:38 UTC (rev 1310) +++ wit/js/pages/Rapport.js 2015-04-30 15:52:21 UTC (rev 1311) @@ -1,9 +1,9 @@ /** @jsx React.DOM */ -var moment = require("moment"); var Rapport = React.createClass({ getInitialState : function() { + var moment = require("moment"); return { startDate: moment().subtract(1, "h"), endDate: moment(), Modified: wit/js/services/TimerService.js =================================================================== --- wit/js/services/TimerService.js 2015-04-30 15:22:38 UTC (rev 1310) +++ wit/js/services/TimerService.js 2015-04-30 15:52:21 UTC (rev 1311) @@ -206,3 +206,7 @@ var value = moment(diff).utcOffset(0); return value.format("HH:mm:ss"); }; + +exports.deleteLog = function(id) { + db.deleteLog(id); +}; Modified: wit/js/services/database.js =================================================================== --- wit/js/services/database.js 2015-04-30 15:22:38 UTC (rev 1310) +++ wit/js/services/database.js 2015-04-30 15:52:21 UTC (rev 1311) @@ -98,6 +98,19 @@ }); }; + +exports.deleteLog = function(id) { + return new Promise(function(resolve, reject) { + db.logs.remove({_id: id}, {}, function (err, numRemoved) { + if (!err) { + resolve(); + } else { + reject(); + } + }); + }); +}; + /******************************** * Window sessions db management ********************************/