From f58deaa2ff5a6d0fedca2cce928806d60c53600c Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Fri, 13 Jan 2017 17:14:07 +0100 Subject: [PATCH] add basic dialog for jira worklog --- app/index.html | 1 + app/scripts/_app.js | 14 +-- app/scripts/dialogs/dialogs-constant.js | 4 + .../jira-add-worklog/_jira-add-worklog-c.scss | 0 .../jira-add-worklog/jira-add-worklog-c.html | 106 ++++++++++++++++++ .../jira-add-worklog/jira-add-worklog-c.js | 37 ++++++ .../jira-add-worklog-c.spec.js | 23 ++++ app/scripts/main/global-services/jira-s.js | 15 +-- .../components/_additions-for-icons.scss | 66 ++++++----- app/styles/main.scss | 2 + 10 files changed, 221 insertions(+), 47 deletions(-) create mode 100644 app/scripts/dialogs/jira-add-worklog/_jira-add-worklog-c.scss create mode 100644 app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.html create mode 100644 app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.js create mode 100644 app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.spec.js diff --git a/app/index.html b/app/index.html index a008d44c57..eaa1e96550 100644 --- a/app/index.html +++ b/app/index.html @@ -113,6 +113,7 @@ TODO configure more restrictive Content-Security-Policy + diff --git a/app/scripts/_app.js b/app/scripts/_app.js index 0c03b4a8be..5402cab0b7 100644 --- a/app/scripts/_app.js +++ b/app/scripts/_app.js @@ -94,11 +94,6 @@ $mdThemingProvider.theme('default') .primaryPalette('blue'); //.dark(); - //$mdThemingProvider.enableBrowserColor({ - // theme: 'default', // Default is 'default' - // palette: 'accent', // Default is 'primary', any basic material palette and extended palettes are available - // hue: '200' // Default is '800' - //}); let themes = THEMES; for (let index = 0; index < themes.length; ++index) { @@ -174,7 +169,13 @@ }); } - function handleCurrentTaskUpdates($rootScope, $window, $q, Jira, Tasks, IS_ELECTRON, $state, Notifier, $interval, SimpleToast, JIRA_UPDATE_POLL_INTERVAL) { + function handleCurrentTaskUpdates($rootScope, $window, $q, Jira, Tasks, IS_ELECTRON, $state, Notifier, $interval, SimpleToast, JIRA_UPDATE_POLL_INTERVAL, Dialogs, $timeout) { + + $timeout(() => { + Dialogs('JIRA_ADD_WORKLOG', { task: $rootScope.r.currentTask }) + $rootScope.r.currentTask.started = $window.moment().subtract('days', 1); + Jira.addWorklog($rootScope.r.currentTask); + }, 10); function doAsyncSeries(arr) { return arr.reduce(function (promise, item) { @@ -206,7 +207,6 @@ }); } - // handle updates that need to be made on jira $rootScope.$watch('r.currentTask', (newCurrent, prevCurrent) => { //console.log(newCurrent && newCurrent.title, $localStorage.currentTask && $localStorage.currentTask.title); diff --git a/app/scripts/dialogs/dialogs-constant.js b/app/scripts/dialogs/dialogs-constant.js index f59743fc9c..827c419ca7 100644 --- a/app/scripts/dialogs/dialogs-constant.js +++ b/app/scripts/dialogs/dialogs-constant.js @@ -45,6 +45,10 @@ JIRA_SET_IN_PROGRESS: { controller: 'JiraSetInProgressCtrl', templateUrl: 'scripts/dialogs/jira-set-in-progress/jira-set-in-progress-c.html' + }, + JIRA_ADD_WORKLOG: { + controller: 'JiraAddWorklogCtrl', + templateUrl: 'scripts/dialogs/jira-add-worklog/jira-add-worklog-c.html' } }); })(); diff --git a/app/scripts/dialogs/jira-add-worklog/_jira-add-worklog-c.scss b/app/scripts/dialogs/jira-add-worklog/_jira-add-worklog-c.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.html b/app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.html new file mode 100644 index 0000000000..264fde7059 --- /dev/null +++ b/app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.html @@ -0,0 +1,106 @@ + + +
+

Submit worklog to jira for "{{ vm.taskCopy.originalKey }}"

+ + + + +
+
+ +
+ + +
+

Submit a worklog for "{{ vm.taskCopy.title }}".

+

The current logged work amount is {{ vm.taskCopy.originalTimeSpent }}.

+ + + + + + + + + + + + + + + + + + + + +
+
The entered value is not a date!
+
This date is required!
+
+
+ + + + +
+
This is required!
+
+
+ + + + + +
Current values is {{ vm.taskCopy.originalTimeSpent }}
+
+
This is required!
+
+
+ + + + + + + + Update local task with values entered here + +
+
+ + + + + Cancel + + + Add worklog on Jira + + +
+
\ No newline at end of file diff --git a/app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.js b/app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.js new file mode 100644 index 0000000000..f770f70e81 --- /dev/null +++ b/app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.js @@ -0,0 +1,37 @@ +/** + * @ngdoc function + * @name superProductivity.controller:JiraAddWorklogCtrl + * @description + * # JiraAddWorklogCtrl + * Controller of the superProductivity + */ + +(function () { + 'use strict'; + + angular + .module('superProductivity') + .controller('JiraAddWorklogCtrl', JiraAddWorklogCtrl); + + /* @ngInject */ + function JiraAddWorklogCtrl($mdDialog, task, $window) { + let vm = this; + vm.taskCopy = angular.copy(task); + console.log(vm.taskCopy); + + vm.taskCopy.started = new Date(task.started); + + vm.isUpdateLocalTaskSettings = false; + + vm.addWorklog = () => { + if (vm.isUpdateLocalTaskSettings) { + angular.extend(task, vm.taskCopy); + } + $mdDialog.hide(vm.taskCopy.originalKey, vm.taskCopy.started, vm.taskCopy.timeSpent, vm.comment); + }; + + vm.cancel = () => { + $mdDialog.cancel(); + }; + } +})(); diff --git a/app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.spec.js b/app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.spec.js new file mode 100644 index 0000000000..2f43b17a37 --- /dev/null +++ b/app/scripts/dialogs/jira-add-worklog/jira-add-worklog-c.spec.js @@ -0,0 +1,23 @@ +'use strict'; + +describe('Controller: JiraAddWorklogCtrl', function () { + + // load the controller's module + beforeEach(module('superProductivity')); + + let JiraAddWorklogCtrl; + let scope; + + // Initialize the controller and a mock scope + beforeEach(inject(function ($controller, $rootScope) { + scope = $rootScope.$new(); + JiraAddWorklogCtrl = $controller('JiraAddWorklogCtrl', { + $scope: scope + // place mocked dependencies here + }); + })); + + it('should ...', function () { + expect(true).toBe(true); + }); +}); diff --git a/app/scripts/main/global-services/jira-s.js b/app/scripts/main/global-services/jira-s.js index a7773d68f9..8a9f66f098 100644 --- a/app/scripts/main/global-services/jira-s.js +++ b/app/scripts/main/global-services/jira-s.js @@ -121,9 +121,6 @@ } } } else { - - // TODO think about if promise should be resolved or rejected when dialog is canceled - let defer = $q.defer(); this.getTransitionsForIssue(task) .then((response) => { @@ -169,20 +166,20 @@ } }; - this.updateWorklog = (task) => { + this.addWorklog = (task) => { + console.log(task); + if (task.originalKey && task.originalType === ISSUE_TYPE) { if ($localStorage.jiraSettings.isWorklogEnabled) { if ($localStorage.jiraSettings.isAutoWorklog) { - return this._updateWorklog(task.originalKey, task.started, task.timeSpent); + return this._addWorklog(task.originalKey, task.started, task.timeSpent); } else { - // TODO think about if promise should be resolved or rejected when dialog is canceled - let defer = $q.defer(); Dialogs('JIRA_ADD_WORKLOG', { task }) .then((originalKey, started, timeSpent, comment) => { - this._updateWorklog(originalKey, started, timeSpent, comment) + this._addWorklog(originalKey, started, timeSpent, comment) .then(defer.resolve, defer.reject); }, defer.reject); @@ -192,7 +189,7 @@ } }; - this._updateWorklog = (originalKey, started, timeSpent, comment) => { + this._addWorklog = (originalKey, started, timeSpent, comment) => { if (originalKey && started && started.toISOString && timeSpent && timeSpent.asSeconds) { let request = { config: $localStorage.jiraSettings, diff --git a/app/styles/components/_additions-for-icons.scss b/app/styles/components/_additions-for-icons.scss index 9ad15366b9..984d7dcfeb 100644 --- a/app/styles/components/_additions-for-icons.scss +++ b/app/styles/components/_additions-for-icons.scss @@ -53,20 +53,6 @@ ng-md-icon svg { pointer-events: none; } -md-input-container > ng-md-icon { - position: absolute; - top: 5px; - left: 2px; -} - -md-input-container > ng-md-icon + input { - margin-left: 56px; -} - -md-input-container.md-default-theme > ng-md-icon { - fill: #fff; -} - md-tabs-wrapper md-prev-button ng-md-icon, md-tabs-wrapper md-next-button ng-md-icon { position: absolute; @@ -81,23 +67,41 @@ md-tabs-wrapper md-next-button ng-md-icon { transform: translate3d(-50%, -50%, 0) rotate(180deg); } -md-input-container > ng-md-icon { - position: absolute; - top: 5px; - left: 2px; -} - -md-input-container > ng-md-icon + input { - margin-left: 56px; -} - md-input-container { + + > ng-md-icon{ + position: relative; + top: auto; + left: auto; + } + + &.md-default-theme > ng-md-icon { + fill: #fff; + } + + $this-float-ml: 32px; &.md-icon-float { - margin-left: 30px; + display: block; + padding-left: $this-float-ml; + label { + margin-left: $this-float-ml; + width: calc(100% - #{$this-float-ml}) !important; + } + .hint{ + margin-left: $this-float-ml; + width: calc(100% - #{$this-float-ml}) !important; + } + > ng-md-icon { + position: absolute; + top: 5px; + left: 0; + vertical-align: middle; + + input { + margin-left: 0; + //width: calc(100% - #{$this-float-ml}); + } + } } - ng-md-icon { - position: absolute; - left: -30px !important; - top: 6px !important; - } -} + + +} \ No newline at end of file diff --git a/app/styles/main.scss b/app/styles/main.scss index c385fcf0ba..e3e5f1428e 100644 --- a/app/styles/main.scss +++ b/app/styles/main.scss @@ -51,6 +51,8 @@ IMPORTANT NOTE: @import '../scripts/dialogs/create-project/_create-project-c.scss'; +@import '../scripts/dialogs/jira-add-worklog/_jira-add-worklog-c.scss'; + @import '../scripts/dialogs/jira-set-in-progress/_jira-set-in-progress-c.scss'; @import '../scripts/dialogs/task-selection/_task-selection-c.scss';