UNPKG

time-tracker-cli

Version:

Tiny time tracker

287 lines (246 loc) 9.84 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _moment = require('moment'); var _moment2 = _interopRequireDefault(_moment); var _constants = require('./constants'); var _utils = require('./utils'); var _output = require('./output'); var _constants2 = require('constants'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Task = function () { function Task(task) { _classCallCheck(this, Task); this.task = task ? task : { description: '', timings: [] }; this.filtered = false; } _createClass(Task, [{ key: '_modifyTiming', value: function _modifyTiming(time, operation) { var timing = this.task.timings[this.task.timings.length - 1]; if (!timing) { throw 'This task is not started, start it.'; } var newStop = (0, _moment2.default)(timing.stop); newStop = newStop[operation](time.value, time.momentKey); if (operation === 'subtract' && newStop.isBefore(timing.start)) { throw 'You cant subtract more time'; return; } this.task.timings[this.task.timings.length - 1].stop = newStop; } }, { key: 'start', value: function start(description) { var _this = this; return new Promise(function (resolve, reject) { var started = false; var timing = _this.task.timings[_this.task.timings.length - 1]; if (timing && timing.start && !timing.stop) { reject(_this.error('This task already started.')); } _this.task.timings.push({ start: (0, _moment2.default)().toDate() }); _this.setDescription(description); _this.setStatus(_constants.IN_PROGRESS); _this.log('start'); resolve(); }); } }, { key: 'pause', value: function pause() { var _this2 = this; return new Promise(function (resolve, reject) { var timing = _this2.task.timings[_this2.task.timings.length - 1]; if (!timing) { reject(_this2.error('This task is not started, start it.')); } if (timing && timing.start && timing.stop) { reject(_this2.error('This task are ended/paused, unpaused it.')); } _this2.task.timings[_this2.task.timings.length - 1].stop = (0, _moment2.default)().toDate(); _this2.setStatus(_constants.PAUSED); _this2.log('pause'); resolve(); }); } }, { key: 'unpause', value: function unpause() { var _this3 = this; return new Promise(function (resolve, reject) { var timing = _this3.task.timings[_this3.task.timings.length - 1]; if (!timing) { reject(_this3.error('This task is not started, start it')); } if (timing && timing.start && !timing.stop) { reject(_this3.error('This task is started, pause/stop first')); } _this3.task.timings.push({ start: (0, _moment2.default)().toDate() }); _this3.setStatus(_constants.IN_PROGRESS); _this3.log('unpause'); resolve(); }); } }, { key: 'stop', value: function stop(description) { var _this4 = this; return new Promise(function (resolve, reject) { var timing = _this4.task.timings[_this4.task.timings.length - 1]; if (!timing || timing && !timing.start) { reject(_this4.error('This task is not started, start it')); } if (timing.start && timing.stop) { reject(_this4.error('This task already ended, start/unpause it.')); } _this4.task.timings[_this4.task.timings.length - 1].stop = (0, _moment2.default)().toDate(); _this4.setDescription(description); _this4.setStatus(_constants.FINISHED); _this4.log('stop'); resolve(); }); } }, { key: 'log', value: function log(operation) { if (!this.task.log) { this.task.log = []; } this.task.log.push(operation + '#' + (0, _moment2.default)().toISOString()); } }, { key: 'description', value: function description() { return this.task.description; } }, { key: 'setDescription', value: function setDescription(text) { this.task.description = text ? text : this.task.description ? this.task.description : ''; } }, { key: 'setStatus', value: function setStatus(status) { this.task.status = status; } }, { key: 'makeOperationOverTime', value: function makeOperationOverTime(operation, stringTime) { var _this5 = this; return new Promise(function (resolve, reject) { var parsed = (0, _utils.recognizeModifierTiming)(stringTime); try { parsed.map(function (t) { _this5._modifyTiming(t, operation); }); } catch (err) { console.error(err); reject(_this5.error('Error trying to ' + operation + ' time to task')); } _this5.log(operation + ':' + stringTime); resolve(); }); } }, { key: 'get', value: function get() { return this.task; } }, { key: 'filterByDates', value: function filterByDates(start, end) { if (this.task.timings) { if (start && end) { this.task.timings = this._filterTimingsByDate(start, end); } else if (start) { end = (0, _moment2.default)().format('YYYY/MM/DD'); this.task.timings = this._filterTimingsByDate(start, end); } else if (end) { start = (0, _moment2.default)(0).format('YYYY/MM/DD'); this.task.timings = this._filterTimingsByDate(start, end); } if (this.task.timings.length === 0) { this.filtered = true; } } else { var t = (0, _utils.inPeriod)(this.task.start, this.task.stop, start, end); if (t.isBetween) { this.task.start = t.start; this.task.stop = t.stop; } else { this.filtered = true; } } return this; } }, { key: '_filterTimingsByDate', value: function _filterTimingsByDate(start, end) { return this.task.timings.reduce(function (acc, val) { console.log(val); var t = (0, _utils.inPeriod)(val.start, val.stop, start, end); console.log(t); if (t.isBetween) { acc.push({ start: t.start, stop: t.stop }); } return acc; }, []); } }, { key: 'getSeconds', value: function getSeconds() { var duration = 0; if (this.task.timings) { this.task.timings.forEach(function (timing) { duration += (0, _utils.getSeconds)(timing); }); } else { duration = (0, _utils.getSeconds)(this.task); } return duration; } }, { key: 'getStartDate', value: function getStartDate() { if (this.task.timings && this.task.timings[0]) { return this.task.timings[0].start; } else { return this.task.start; } } }, { key: 'getEndDate', value: function getEndDate() { if (this.task.timings) { return this.task.timings[this.task.timings.length - 1].stop; } else if (this.task.stop) { return this.task.stop; } else { return (0, _moment2.default)().toDate(); } } }, { key: 'error', value: function error(err) { return err; //+ ` \n Task: ${JSON.stringify(this.task)}` } }]); return Task; }(); exports.default = Task; //# sourceMappingURL=Task.js.map