Skip to content

Commit 967acbc

Browse files
committed
remove errors which appeared for unconfigured widgets;
request all issues parallel;
1 parent be686f9 commit 967acbc

File tree

7 files changed

+94
-69
lines changed

7 files changed

+94
-69
lines changed

src/chart/chartController.js

+32-30
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,19 @@ angular.module('adf.widget.redmine')
3030
var createDate = new Date(allIssues[i].created_on);
3131
//console.log("createDate: "+createDate.toDateString());
3232
if (createDate.getTime() <= date.getTime()) {
33-
openIssues.push(allIssues[i]);// should be still sorted
33+
openIssues.push(allIssues[i]);
3434
allIssues.splice(i, 1);
3535
i--;
3636
} else {
37-
//break;
37+
break;
3838
}
3939
}
4040
}
41+
4142
var removeNewClosedIssues = function (openIssues, date) {
4243
for (var i = 0; i < openIssues.length; i++) {
4344
if (openIssues[i].closed_on) {
4445
var closeDate = new Date(openIssues[i].closed_on);
45-
//console.log("closeDate: " + closeDate.toDateString());
4646
if (closeDate.getTime() <= date.getTime()) {
4747
openIssues.splice(i, 1);
4848
i--;
@@ -53,35 +53,37 @@ angular.module('adf.widget.redmine')
5353
}
5454
}
5555

56-
var from = new Date(vm.config.timespan.fromDateTime);
57-
var to = new Date(vm.config.timespan.toDateTime);
58-
var generatedData = calculateOpenIssuesPerDay(from, to, issues);
56+
if (vm.config.timespan && vm.config.timespan.fromDateTime && vm.config.timespan.toDateTime) {
57+
var from = new Date(vm.config.timespan.fromDateTime);
58+
var to = new Date(vm.config.timespan.toDateTime);
59+
var generatedData = calculateOpenIssuesPerDay(from, to, issues);
5960

60-
var options = {
61-
scales: {
62-
yAxes: [
63-
{
64-
id: 'y-axis-1',
65-
display: true,
66-
position: 'left',
67-
scaleLabel: {
61+
var options = {
62+
scales: {
63+
yAxes: [
64+
{
65+
id: 'y-axis-1',
6866
display: true,
69-
labelString: 'Open Issues'
67+
position: 'left',
68+
scaleLabel: {
69+
display: true,
70+
labelString: 'Open Issues'
71+
}
7072
}
71-
}
72-
]
73-
},
74-
legend: {
75-
display: true,
76-
position: "bottom"
77-
}
78-
};
73+
]
74+
},
75+
legend: {
76+
display: true,
77+
position: "bottom"
78+
}
79+
};
7980

80-
vm.chart = {
81-
labels: generatedData.dates,
82-
data: [generatedData.values],
83-
series: ["Project ..."],
84-
class: "chart-line",
85-
options: options
86-
};
81+
vm.chart = {
82+
labels: generatedData.dates,
83+
data: [generatedData.values],
84+
series: ["Project ..."],
85+
class: "chart-line",
86+
options: options
87+
};
88+
}
8789
});

src/chart/edit/editController.js renamed to src/chart/edit/editChartController.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
'use strict';
22

33
angular.module('adf.widget.redmine')
4-
.controller('editController', function (projects, config) {
4+
.controller('editChartController', function (projects, config) {
55
var vm = this;
66
vm.config = config;
77

88
if (angular.equals({}, config)) {
99
config.project = "";
10-
config.assigned_to_id = "me";
1110
config.showClosed = true;
1211
}
1312

src/issues/edit/editController.js renamed to src/issues/edit/editIssuesController.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
'use strict';
22

33
angular.module('adf.widget.redmine')
4-
.controller('editController', function(projects, config){
4+
.controller('editIssuesController', function(projects, config){
55
var vm = this;
6+
console.log("config: "+config);
67
vm.possibleColumns = {
78
"id":{"name":"ID", "show": true},
89
"tracker":{"name":"Tracker","show": true},

src/issues/issueController.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,8 @@ angular.module('adf.widget.redmine')
44
.controller('IssueController', function(issues, config){
55
var vm = this;
66
vm.config = config;
7-
vm.issues = issues.issues;
7+
if(!vm.config.limit) {
8+
vm.config.limit = 25;
9+
}
10+
vm.issues = issues;
811
});

src/issues/view.html

+23-18
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
1-
<table st-table="rowCollection" class="table table-striped">
2-
<thead>
3-
<tr>
4-
<th ng-if="vm.config.columns.id.show">ID</th>
5-
<th ng-if="vm.config.columns.tracker.show">Tracker</th>
6-
<th ng-if="vm.config.columns.status.show">Status</th>
7-
<th ng-if="vm.config.columns.subject.show">Subject</th>
8-
</tr>
9-
</thead>
10-
<tbody>
11-
<tr ng-repeat="issue in vm.issues">
12-
<td ng-if="vm.config.columns.id.show"><a href={{"http://www.redmine.org/issues/"+issue.id}}>{{issue.id}}</a></td>
13-
<td ng-if="vm.config.columns.tracker.show">{{issue.tracker.name}}</td>
14-
<td ng-if="vm.config.columns.status.show">{{issue.status.name}}</td>
15-
<td ng-if="vm.config.columns.subject.show">{{issue.subject}}</td>
16-
</tr>
17-
</tbody>
18-
</table>
1+
<div class="alert alert-info" ng-if="!vm.config.columns">
2+
Please configure the widget
3+
</div>
4+
<div ng-if="vm.config.columns">
5+
<table st-table="rowCollection" class="table table-striped">
6+
<thead>
7+
<tr>
8+
<th ng-if="vm.config.columns.id.show">ID</th>
9+
<th ng-if="vm.config.columns.tracker.show">Tracker</th>
10+
<th ng-if="vm.config.columns.status.show">Status</th>
11+
<th ng-if="vm.config.columns.subject.show">Subject</th>
12+
</tr>
13+
</thead>
14+
<tbody>
15+
<tr ng-repeat="issue in vm.issues">
16+
<td ng-if="vm.config.columns.id.show"><a href="http://www.redmine.org/issues/{{issue.id}}">{{issue.id}}</a></td>
17+
<td ng-if="vm.config.columns.tracker.show">{{issue.tracker.name}}</td>
18+
<td ng-if="vm.config.columns.status.show">{{issue.status.name}}</td>
19+
<td ng-if="vm.config.columns.subject.show">{{issue.subject}}</td>
20+
</tr>
21+
</tbody>
22+
</table>
23+
</div>

src/redmine.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ angular.module('adf.widget.redmine', ['adf.provider', 'smart-table', 'chart.js',
66

77
var editIssues = {
88
templateUrl: '{widgetsPath}/redmine/src/issues/edit/edit.html',
9-
controller: 'editController',
9+
controller: 'editIssuesController',
1010
controllerAs: 'vm',
1111
resolve: {
1212
/** @ngInject **/
@@ -18,7 +18,7 @@ angular.module('adf.widget.redmine', ['adf.provider', 'smart-table', 'chart.js',
1818

1919
var editChart = {
2020
templateUrl: '{widgetsPath}/redmine/src/chart/edit/edit.html',
21-
controller: 'editController',
21+
controller: 'editChartController',
2222
controllerAs: 'vm',
2323
resolve: {
2424
/** @ngInject **/

src/service.js

+30-15
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
angular.module('adf.widget.redmine')
4-
.factory('redmineService', function($http, redmineEndpoint){
4+
.factory('redmineService', function($http, redmineEndpoint, $q){
55

66
function extractData(response){
77
return response.data;
@@ -11,27 +11,42 @@ angular.module('adf.widget.redmine')
1111
return $http.get(redmineEndpoint+param).then(extractData);
1212
}
1313

14-
function getIssues(config){
14+
function getIssues(config) {
1515
var allIssues = [];
16-
var params=generateIssuesParameter(config);
17-
var limit = config.limit ? config.limit : Number.MAX_SAFE_INTEGER;
18-
return collectPageIssues(params, allIssues, 0, limit);
19-
}
20-
21-
function collectPageIssues(params, allIssues, offset, limit){
22-
return request('issues.json'+params+'&offset='+offset).then(function(issues){
23-
angular.forEach(issues.issues, function(issue){
16+
var params = generateIssuesParameter(config);
17+
var limit = config.limit ? config.limit : 200;
18+
return collectPageIssues(params, 0).then(function (issues) {
19+
angular.forEach(issues.issues, function (issue) {
2420
allIssues.push(issue);
2521
});
26-
if(issues.total_count > allIssues.length && allIssues.length < limit) {
27-
return collectPageIssues(params, allIssues, offset+100, limit);
22+
var requests = [];
23+
for (var i = 100; i < issues.total_count && i < limit; i = i + 100) {
24+
requests.push(collectPageIssues(params, i));
25+
}
26+
if (params.length > 0) {
27+
return $q.all(requests).then(function (responses) {
28+
angular.forEach(responses, function (response) {
29+
angular.forEach(response.issues, function (issue) {
30+
allIssues.push(issue);
31+
});
32+
});
33+
return allIssues;
34+
});
35+
} else {
36+
return allIssues;
2837
}
29-
return allIssues;
38+
39+
})
40+
}
41+
42+
function collectPageIssues(params, offset){
43+
return request('issues.json'+params+'&offset='+offset).then(function(issues){
44+
return issues;
3045
});
3146
}
3247

3348
function generateIssuesParameter(data) {
34-
var params = '?limit=100';
49+
var params = '?limit=100&sort=created_on';
3550
if (data.project && data.project !== "All") {
3651
params += '&project_id=' + data.project;
3752
}
@@ -41,7 +56,7 @@ angular.module('adf.widget.redmine')
4156
if (data.showClosed) {
4257
params += '&status_id=*';
4358
}
44-
if (data.timespan.fromDateTime && data.timespan.toDateTime) {
59+
if (data.timespan && data.timespan.fromDateTime && data.timespan.toDateTime) {
4560
var fromDate = new Date(data.timespan.fromDateTime);
4661
var toDate = new Date(data.timespan.toDateTime);
4762

0 commit comments

Comments
 (0)