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

fix for 31 and 32 #34

Merged
merged 2 commits into from
Jul 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions src/controllers/IssueController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
*/

/**
* This controller exposes project endpoints.
*
* @author veshu
* @version 1.0
*/
const helper = require('../common/helper');
const IssueService = require('../services/IssueService');

/**
* search issues
* @param {Object} req the request
* @param {Object} res the response
* @returns {Object} the result
*/
async function search(req) {
return await IssueService.search(req.query, req.currentUser.handle);
}

module.exports = {
search,
};

helper.buildController(module.exports);
2 changes: 2 additions & 0 deletions src/front/src/app/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ angular.module('topcoderX', [
})
.state('app.main', {
url: '/main',
controller: 'MainController',
controllerAs: 'vm',
templateUrl: 'app/main/main.html',
data: { pageTitle: 'Dashboard' },
resolve: { auth: authenticate }
Expand Down
23 changes: 23 additions & 0 deletions src/front/src/app/main/issue.service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
*
* This is a service to access the backend api for issue related operation.
*/
'use strict';

angular.module('topcoderX')
.factory('IssueService', ['$http', 'Helper', function ($http, Helper) {
var baseUrl = Helper.baseUrl;
var service = {};

/**
* search for issues
*/
service.search = function (label, sortBy, sortDir, pageNo, pageSize) {
return $http.get(baseUrl + '/api/v1/issues?label=' + label + '&sortBy=' + sortBy + '&sortDir=' + sortDir + '&page=' + pageNo + '&perPage=' + pageSize).then(function (response) {
return response;
});
};

return service;
}]);
133 changes: 128 additions & 5 deletions src/front/src/app/main/main.controller.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,141 @@
'use strict';

angular.module('topcoderX')
.controller('MainController', ['$scope', '$rootScope', '$timeout', '$state', 'AuthService',
function ($scope, $rootScope, $timeout, $state, AuthService) {
.controller('MainController', ['$scope', '$rootScope', 'Alert', '$state', 'AuthService', 'IssueService',
function ($scope, $rootScope, Alert, $state, AuthService, IssueService) {
$scope.isLoaded = false;
$scope.tableConfig = {
readyForReview: {
pageNumber: 1,
pageSize: 20,
isLoading: false,
items: [],
label: 'Ready for review',
sortBy: 'updatedAt',
sortDir: 'desc',
totalPages: 1,
initialized: false,
},
assigned: {
pageNumber: 1,
pageSize: 20,
isLoading: false,
items: [],
label: 'Assigned',
sortBy: 'updatedAt',
sortDir: 'desc',
totalPages: 1,
initialized: false,
},
openForPickup: {
pageNumber: 1,
pageSize: 20,
isLoading: false,
items: [],
label: 'Open for pickup',
sortBy: 'updatedAt',
sortDir: 'desc',
totalPages: 1,
initialized: false,
},
paid: {
pageNumber: 1,
pageSize: 20,
isLoading: false,
items: [],
label: 'Paid',
sortBy: 'updatedAt',
sortDir: 'desc',
totalPages: 1,
initialized: false,
},
};
$rootScope.currentUser = AuthService.getCurrentUser();

$scope.logout = function () {
AuthService.logout();
$state.go('auth')
$state.go('auth');
};

// auth
$scope.authorized = function () {
return AuthService.isLoggedIn();
};
}
]);

var _search = function (provider) {
var config = $scope.tableConfig[provider];
config.isLoading = true;
IssueService.search(config.label, config.sortBy, config.sortDir, config.pageNumber, config.pageSize)
.then(function (res) {
config.items = res.data.docs;
config.pages = res.data.pages;
config.isLoading = false;
config.initialized = true;
}).catch(function (err) {
config.isLoading = false;
config.initialized = true;
_handleError(err, 'An error occurred while getting the data for ' + provider + '.');
});
};

_search('readyForReview');

// handle errors
function _handleError(error, defaultMsg) {
var errMsg = error.data ? error.data.message : defaultMsg;
Alert.error(errMsg, $scope);
}

// change to a specific page
$scope.changePage = function (pageNumber, provider) {
if (pageNumber === 0 || pageNumber > $scope.tableConfig[provider].pages ||
(pageNumber === $scope.tableConfig[provider].pages &&
$scope.tableConfig[provider].pageNumber === pageNumber)) {
return false;
}
$scope.tableConfig[provider].pageNumber = pageNumber;
_search(provider);
};

$scope.tabChanged = function (provider) {
$scope.tableConfig[provider].sortBy = 'updatedAt';
$scope.tableConfig[provider].sortDir = 'desc';
$scope.tableConfig[provider].pageNumber = 1;
$scope.tableConfig[provider].initialized = false;
_search(provider);
};

// get the number array that shows the pagination bar
$scope.getPageArray = function (provider) {
var res = [];

var pageNo = $scope.tableConfig[provider].pageNumber;
var i = pageNo - 5;
for (i; i <= pageNo; i++) {
if (i > 0) {
res.push(i);
}
}
var j = pageNo + 1;
for (j; j <= $scope.tableConfig[provider].pages && j <= pageNo + 5; j++) {
res.push(j);
}
return res;
};

// sort by criteria
$scope.sort = function (criteria, provider) {
if (criteria === $scope.tableConfig[provider].sortBy) {
if ($scope.tableConfig[provider].sortDir === 'asc') {
$scope.tableConfig[provider].sortDir = 'desc';
} else {
$scope.tableConfig[provider].sortDir = 'asc';
}
} else {
$scope.tableConfig[provider].sortDir = 'asc';
}
$scope.tableConfig[provider].sortBy = criteria;
$scope.tableConfig[provider].pageNumber = 1;
_search(provider);
};
}]);
Loading