diff --git a/src/common/db-helper.js b/src/common/db-helper.js index c82ddae..4836b90 100644 --- a/src/common/db-helper.js +++ b/src/common/db-helper.js @@ -94,16 +94,13 @@ async function scanAll(model, size, lastKey) { /** * Get data collection by scan with search * @param {Object} model The dynamoose model to scan - * @param {String} size The size of result - * @param {String} lastKey The lastKey param * @param {String} containsKey The contains key param * @param {String} contains The contains value * @returns {Promise} */ -async function scanAllWithSearch(model, size, lastKey, containsKey, contains) { +async function scanAllWithSearch(model, containsKey, contains) { return await new Promise((resolve, reject) => { - const scanMethod = model.scan(containsKey).contains(contains).limit(size); - if (lastKey) scanMethod.startAt(lastKey); + const scanMethod = model.scan(containsKey).contains(contains).all(); scanMethod.exec((err, result) => { if (err) { logger.error(`DynamoDB scan error ${err}`); diff --git a/src/front/src/app/user-mappings/user-mappings-controller.js b/src/front/src/app/user-mappings/user-mappings-controller.js index 0524e86..48095d1 100644 --- a/src/front/src/app/user-mappings/user-mappings-controller.js +++ b/src/front/src/app/user-mappings/user-mappings-controller.js @@ -15,7 +15,8 @@ angular.module('topcoderX') totalPages: 1, initialized: false, query: '', - lastKey: [] + lastKey: [], + pages: 1 }; $scope.addUserMapping = function () { @@ -40,7 +41,14 @@ angular.module('topcoderX') config.isLoading = true; UserMappingsService.search(config.query, config.sortBy, config.sortDir, config.pageNumber, config.pageSize, config.lastKey[config.pageNumber]) // eslint-disable-line max-len .then(function (res) { - config.items = res.data.docs; + if (config.query) { + config.allItems = res.data.docs; + config.items = config.allItems.slice(0, config.pageSize); + config.pages = Math.ceil(config.allItems.length / config.pageSize); + } + else { + config.items = res.data.docs; + } if (res.data.lastKey && (res.data.lastKey.githubLastKey || res.data.lastKey.gitlabLastKey)) { config.lastKey[config.pageNumber + 1] = res.data.lastKey; if (!config.pages || config.pages <= config.pageNumber) { @@ -122,14 +130,28 @@ angular.module('topcoderX') if (pageNumber === 0 || pageNumber > $scope.tableConfig.pages || (pageNumber === $scope.tableConfig.pages && $scope.tableConfig.pageNumber === pageNumber)) { - return false; + return false; } $scope.tableConfig.pageNumber = pageNumber; - $scope.getUserMappings(); + if ($scope.tableConfig.query && $scope.tableConfig.allItems) { + var start = ($scope.tableConfig.pageNumber - 1) * $scope.tableConfig.pageSize - 1; + if (pageNumber === 1) { + start = 0; + } + $scope.tableConfig.items = $scope.tableConfig.allItems.slice( + start, $scope.tableConfig.pageSize); + $scope.tableConfig.initialized = true; + $scope.tableConfig.isLoading = false; + } + else { + $scope.getUserMappings(); + } }; $scope.onSearchIconClicked = function () { $scope.tableConfig.pageNumber = 1; + $scope.tableConfig.pages = 1; + $scope.tableConfig.allItems = []; $scope.getUserMappings(); }; @@ -137,6 +159,8 @@ angular.module('topcoderX') var config = $scope.tableConfig; config.query = ''; $scope.tableConfig.pageNumber = 1; + $scope.tableConfig.pages = 1; + $scope.tableConfig.allItems = []; $scope.getUserMappings(); }; diff --git a/src/services/UserService.js b/src/services/UserService.js index f706844..34fe129 100644 --- a/src/services/UserService.js +++ b/src/services/UserService.js @@ -187,16 +187,12 @@ async function search(criteria) { if (criteria.query) { githubUserMappings = await dbHelper.scanAllWithSearch( GithubUserMapping, - criteria.perPage / 2, // eslint-disable-line - criteria.githubLastKey ? JSON.parse(criteria.githubLastKey) : undefined, // eslint-disable-line 'topcoderUsername', - criteria.query.toLowerCase()); + criteria.query); gitlabUserMappings = await dbHelper.scanAllWithSearch( GitlabUserMapping, - criteria.perPage / 2, // eslint-disable-line - criteria.gitlabLastKey ? JSON.parse(criteria.gitlabLastKey) : undefined, // eslint-disable-line 'topcoderUsername', - criteria.query.toLowerCase()); + criteria.query); } else { githubUserMappings = await dbHelper.scanAll(