Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit 889d984

Browse files
committed
changes for #28 and #29
1 parent 39a5786 commit 889d984

File tree

8 files changed

+561
-7
lines changed

8 files changed

+561
-7
lines changed

src/controllers/IssueController.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
3+
*/
4+
5+
/**
6+
* This controller exposes project endpoints.
7+
*
8+
* @author veshu
9+
* @version 1.0
10+
*/
11+
const helper = require('../common/helper');
12+
const IssueService = require('../services/IssueService');
13+
14+
/**
15+
* search issues
16+
* @param {Object} req the request
17+
* @param {Object} res the response
18+
* @returns {Object} the result
19+
*/
20+
async function search(req) {
21+
return await IssueService.search(req.query, req.currentUser.handle);
22+
}
23+
24+
module.exports = {
25+
search,
26+
};
27+
28+
helper.buildController(module.exports);

src/front/src/app/app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ angular.module('topcoderX', [
6868
})
6969
.state('app.main', {
7070
url: '/main',
71+
controller: 'MainController',
72+
controllerAs: 'vm',
7173
templateUrl: 'app/main/main.html',
7274
data: { pageTitle: 'Dashboard' },
7375
resolve: { auth: authenticate }
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
3+
*
4+
* This is a service to access the backend api for issue related operation.
5+
*/
6+
'use strict';
7+
8+
angular.module('topcoderX')
9+
.factory('IssueService', ['$http', 'Helper', function ($http, Helper) {
10+
var baseUrl = Helper.baseUrl;
11+
var service = {};
12+
13+
/**
14+
* search for issues
15+
*/
16+
service.search = function (label, sortBy, sortDir, pageNo, pageSize) {
17+
return $http.get(baseUrl + '/api/v1/issues?label=' + label + '&sortBy=' + sortBy + '&sortDir=' + sortDir + '&page=' + pageNo + '&perPage=' + pageSize).then(function (response) {
18+
return response;
19+
});
20+
};
21+
22+
return service;
23+
}]);
Lines changed: 128 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,141 @@
11
'use strict';
22

33
angular.module('topcoderX')
4-
.controller('MainController', ['$scope', '$rootScope', '$timeout', '$state', 'AuthService',
5-
function ($scope, $rootScope, $timeout, $state, AuthService) {
4+
.controller('MainController', ['$scope', '$rootScope', 'Alert', '$state', 'AuthService', 'IssueService',
5+
function ($scope, $rootScope, Alert, $state, AuthService, IssueService) {
6+
$scope.isLoaded = false;
7+
$scope.tableConfig = {
8+
readyForReview: {
9+
pageNumber: 1,
10+
pageSize: 20,
11+
isLoading: false,
12+
items: [],
13+
label: 'Ready for review',
14+
sortBy: 'updatedAt',
15+
sortDir: 'desc',
16+
totalPages: 1,
17+
initialized: false,
18+
},
19+
assigned: {
20+
pageNumber: 1,
21+
pageSize: 20,
22+
isLoading: false,
23+
items: [],
24+
label: 'Assigned',
25+
sortBy: 'updatedAt',
26+
sortDir: 'desc',
27+
totalPages: 1,
28+
initialized: false,
29+
},
30+
openForPickup: {
31+
pageNumber: 1,
32+
pageSize: 20,
33+
isLoading: false,
34+
items: [],
35+
label: 'Open for pickup',
36+
sortBy: 'updatedAt',
37+
sortDir: 'desc',
38+
totalPages: 1,
39+
initialized: false,
40+
},
41+
paid: {
42+
pageNumber: 1,
43+
pageSize: 20,
44+
isLoading: false,
45+
items: [],
46+
label: 'Paid',
47+
sortBy: 'updatedAt',
48+
sortDir: 'desc',
49+
totalPages: 1,
50+
initialized: false,
51+
},
52+
};
653
$rootScope.currentUser = AuthService.getCurrentUser();
754

855
$scope.logout = function () {
956
AuthService.logout();
10-
$state.go('auth')
57+
$state.go('auth');
1158
};
1259

1360
// auth
1461
$scope.authorized = function () {
1562
return AuthService.isLoggedIn();
1663
};
17-
}
18-
]);
64+
65+
var _search = function (provider) {
66+
var config = $scope.tableConfig[provider];
67+
config.isLoading = true;
68+
IssueService.search(config.label, config.sortBy, config.sortDir, config.pageNumber, config.pageSize)
69+
.then(function (res) {
70+
config.items = res.data.docs;
71+
config.pages = res.data.pages;
72+
config.isLoading = false;
73+
config.initialized = true;
74+
}).catch(function (err) {
75+
config.isLoading = false;
76+
config.initialized = true;
77+
_handleError(err, 'An error occurred while getting the data for ' + provider + '.');
78+
});
79+
};
80+
81+
_search('readyForReview');
82+
83+
// handle errors
84+
function _handleError(error, defaultMsg) {
85+
var errMsg = error.data ? error.data.message : defaultMsg;
86+
Alert.error(errMsg, $scope);
87+
}
88+
89+
// change to a specific page
90+
$scope.changePage = function (pageNumber, provider) {
91+
if (pageNumber === 0 || pageNumber > $scope.tableConfig[provider].pages ||
92+
(pageNumber === $scope.tableConfig[provider].pages &&
93+
$scope.tableConfig[provider].pageNumber === pageNumber)) {
94+
return false;
95+
}
96+
$scope.tableConfig[provider].pageNumber = pageNumber;
97+
_search(provider);
98+
};
99+
100+
$scope.tabChanged = function (provider) {
101+
$scope.tableConfig[provider].sortBy = 'updatedAt';
102+
$scope.tableConfig[provider].sortDir = 'desc';
103+
$scope.tableConfig[provider].pageNumber = 1;
104+
$scope.tableConfig[provider].initialized = false;
105+
_search(provider);
106+
};
107+
108+
// get the number array that shows the pagination bar
109+
$scope.getPageArray = function (provider) {
110+
var res = [];
111+
112+
var pageNo = $scope.tableConfig[provider].pageNumber;
113+
var i = pageNo - 5;
114+
for (i; i <= pageNo; i++) {
115+
if (i > 0) {
116+
res.push(i);
117+
}
118+
}
119+
var j = pageNo + 1;
120+
for (j; j <= $scope.tableConfig[provider].pages && j <= pageNo + 5; j++) {
121+
res.push(j);
122+
}
123+
return res;
124+
};
125+
126+
// sort by criteria
127+
$scope.sort = function (criteria, provider) {
128+
if (criteria === $scope.tableConfig[provider].sortBy) {
129+
if ($scope.tableConfig[provider].sortDir === 'asc') {
130+
$scope.tableConfig[provider].sortDir = 'desc';
131+
} else {
132+
$scope.tableConfig[provider].sortDir = 'asc';
133+
}
134+
} else {
135+
$scope.tableConfig[provider].sortDir = 'asc';
136+
}
137+
$scope.tableConfig[provider].sortBy = criteria;
138+
$scope.tableConfig[provider].pageNumber = 1;
139+
_search(provider);
140+
};
141+
}]);

0 commit comments

Comments
 (0)