Added pagesize to browse service.
The default page size of 500 is causing a bit of a slowdown on storyboard.o.o when using the typeahead in search and quicknav. This patch applies a few changes to the Criteria and the ResourceFactory as follows: - Default pagesize for criteria searches is now Preference.page_size. - PageSize can be overridden in the actual invocation of the criteria resolver and/or the search builder. - SearchResults have been fixed to use the user's preference setting instead of a hardcoded 20. - List population for the typeahead dropdowns has been hardcoded to no more than 5 records per type, since the speed of a user's typing tends to alter the result set very quickly. Change-Id: I12c4fa8d62e0510ebd2287a709d93d6f922fdfcd Story: 131
This commit is contained in:
@@ -48,7 +48,7 @@ angular.module('sb.search').controller('SearchCriteriaController',
|
||||
resourceTypes = types || resourceTypes;
|
||||
$scope.criteria = defaultCriteria || [];
|
||||
$scope.searchForCriteria =
|
||||
Criteria.buildCriteriaSearch(resourceTypes);
|
||||
Criteria.buildCriteriaSearch(resourceTypes, 5);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
* @see ProjectListController
|
||||
*/
|
||||
angular.module('sb.search').directive('searchResults',
|
||||
function ($log, $parse, Criteria, $injector) {
|
||||
function ($log, $parse, Criteria, $injector, Preference) {
|
||||
'use strict';
|
||||
|
||||
return {
|
||||
@@ -30,7 +30,8 @@ angular.module('sb.search').directive('searchResults',
|
||||
|
||||
// Extract the resource type.
|
||||
var resourceName = args.searchResource;
|
||||
var pageSize = args.searchPageSize || 20;
|
||||
var pageSize = args.searchPageSize ||
|
||||
Preference.get('page_size');
|
||||
var searchWithoutCriteria =
|
||||
args.searchWithoutCriteria === 'true';
|
||||
var criteria = [];
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* validation, filtering, criteria-to-parameter mapping, and more.
|
||||
*/
|
||||
angular.module('sb.services').service('Criteria',
|
||||
function ($q, $log, $injector) {
|
||||
function ($q, $log, $injector, Preference) {
|
||||
'use strict';
|
||||
|
||||
return {
|
||||
@@ -91,8 +91,12 @@ angular.module('sb.services').service('Criteria',
|
||||
* customized lambda that will perform our browse search for us.
|
||||
*
|
||||
* @param types An array of resource types to browse.
|
||||
* @param pageSize An optional page size for the criteria. Defaults
|
||||
* to the global page_size preference.
|
||||
*/
|
||||
buildCriteriaSearch: function (types) {
|
||||
buildCriteriaSearch: function (types, pageSize) {
|
||||
pageSize = pageSize || Preference.get('page_size');
|
||||
|
||||
var resolvers = [];
|
||||
types.forEach(function (type) {
|
||||
// Retrieve an instance of the declared resource.
|
||||
@@ -122,7 +126,7 @@ angular.module('sb.services').service('Criteria',
|
||||
var promises = [];
|
||||
|
||||
resolvers.forEach(function (resolver) {
|
||||
promises.push(resolver(searchString));
|
||||
promises.push(resolver(searchString, pageSize));
|
||||
});
|
||||
|
||||
// Wrap everything into a collective promise
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
*/
|
||||
angular.module('sb.services')
|
||||
.service('ResourceFactory',
|
||||
function ($q, $log, $injector, Criteria, $resource, storyboardApiBase) {
|
||||
function ($q, $log, $injector, Criteria, $resource, storyboardApiBase,
|
||||
Preference) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
@@ -147,33 +148,36 @@ angular.module('sb.services')
|
||||
/**
|
||||
* Add the criteria resolver method.
|
||||
*/
|
||||
resource.criteriaResolver = function (searchString) {
|
||||
resource.criteriaResolver =
|
||||
function (searchString, pageSize) {
|
||||
pageSize = pageSize || Preference.get('page_size');
|
||||
|
||||
var deferred = $q.defer();
|
||||
var deferred = $q.defer();
|
||||
|
||||
// build the query parameters.
|
||||
var queryParams = {};
|
||||
queryParams[nameField] = searchString;
|
||||
// build the query parameters.
|
||||
var queryParams = {};
|
||||
queryParams[nameField] = searchString;
|
||||
queryParams.limit = pageSize;
|
||||
|
||||
resource.query(queryParams,
|
||||
function (result) {
|
||||
// Transform the results to criteria tags.
|
||||
var criteriaResults = [];
|
||||
result.forEach(function (item) {
|
||||
criteriaResults.push(
|
||||
Criteria.create(resourceName,
|
||||
item.id,
|
||||
item[nameField])
|
||||
);
|
||||
});
|
||||
deferred.resolve(criteriaResults);
|
||||
}, function () {
|
||||
deferred.resolve([]);
|
||||
}
|
||||
);
|
||||
resource.query(queryParams,
|
||||
function (result) {
|
||||
// Transform the results to criteria tags.
|
||||
var criteriaResults = [];
|
||||
result.forEach(function (item) {
|
||||
criteriaResults.push(
|
||||
Criteria.create(resourceName,
|
||||
item.id,
|
||||
item[nameField])
|
||||
);
|
||||
});
|
||||
deferred.resolve(criteriaResults);
|
||||
}, function () {
|
||||
deferred.resolve([]);
|
||||
}
|
||||
);
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
return deferred.promise;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -96,8 +96,8 @@ angular.module('storyboard').controller('HeaderController',
|
||||
searchString = searchString || '';
|
||||
|
||||
$q.all({
|
||||
projects: Project.criteriaResolver(searchString),
|
||||
stories: Story.criteriaResolver(searchString)
|
||||
projects: Project.criteriaResolver(searchString, 5),
|
||||
stories: Story.criteriaResolver(searchString, 5)
|
||||
}).then(function (results) {
|
||||
|
||||
var criteria = [
|
||||
|
||||
Reference in New Issue
Block a user