update for loading partial projects with pagination of UI.

This commit is contained in:
kunw 2016-10-12 12:37:15 +08:00
parent 2bdb051b63
commit 1c52a9e0a6
2 changed files with 50 additions and 30 deletions

View File

@ -35,9 +35,10 @@
var DEFAULT_PAGE = 1; var DEFAULT_PAGE = 1;
var DEFAULT_PAGE_SIZE = 15; var DEFAULT_PAGE_SIZE = 15;
vm.page = Number(getParameterByName('page', $location.absUrl()) || DEFAULT_PAGE); vm.page = DEFAULT_PAGE;
vm.pageSize = Number(getParameterByName('page_size', $location.absUrl()) || DEFAULT_PAGE_SIZE); vm.pageSize = DEFAULT_PAGE_SIZE;
vm.projects = [];
vm.retrieve = retrieve; vm.retrieve = retrieve;
vm.filterInput = ''; vm.filterInput = '';
vm.selectItem = selectItem; vm.selectItem = selectItem;
@ -45,12 +46,15 @@
function retrieve() { function retrieve() {
ListProjectService(vm.projectName, vm.isPublic, vm.page, vm.pageSize) ListProjectService(vm.projectName, vm.isPublic, vm.page, vm.pageSize)
.success(getProjectSuccess) .then(getProjectSuccess, getProjectFailed);
.error(getProjectFailed);
} }
$scope.$watch('vm.page', function(current) {
vm.retrieve(); if(current) {
vm.retrieve();
}
});
$scope.$watch('vm.isPublic', function(current) { $scope.$watch('vm.isPublic', function(current) {
vm.projectType = vm.isPublic === 0 ? 'my_project_count' : 'public_project_count'; vm.projectType = vm.isPublic === 0 ? 'my_project_count' : 'public_project_count';
@ -62,33 +66,49 @@
} }
}); });
function getProjectSuccess(data, status) { function getProjectSuccess(response) {
vm.projects = data || [];
if(vm.projects.length == 0 && vm.isPublic === 0){ var partialProjects = response.data || [];
$window.location.href = '/project'; for(var i in partialProjects) {
vm.projects.push(partialProjects[i]);
} }
if(getParameterByName('project_id', $location.absUrl())){ var link = response.headers("Link") || '';
for(var i in vm.projects) { var pattern = /^<\/api\/projects\?is_public=(\d+)&page\=(\d+)&page_size=(\d+)\&project_name=>; rel=\"(\w+)\"$/;
var project = vm.projects[i]; var groups = pattern.exec(link);
if(project['project_id'] == getParameterByName('project_id', $location.absUrl())) {
vm.selectedProject = project; if(groups && groups[4] === 'next') {
break; vm.isPublic = parseInt(groups[1]);
} vm.page = parseInt(groups[2]);
} vm.pageSize = parseInt(groups[3]);
} else {
if(vm.projects.length == 0 && vm.isPublic === 0){
$window.location.href = '/project';
}
if(getParameterByName('project_id', $location.absUrl())){
for(var i in vm.projects) {
var project = vm.projects[i];
if(project['project_id'] == getParameterByName('project_id', $location.absUrl())) {
vm.selectedProject = project;
break;
}
}
}
$location.search('project_id', vm.selectedProject.project_id);
vm.checkProjectMember(vm.selectedProject.project_id);
vm.resultCount = vm.projects.length;
$scope.$watch('vm.filterInput', function(current, origin) {
vm.resultCount = $filter('name')(vm.projects, vm.filterInput, 'name').length;
});
} }
$location.search('project_id', vm.selectedProject.project_id);
vm.checkProjectMember(vm.selectedProject.project_id);
vm.resultCount = vm.projects.length;
$scope.$watch('vm.filterInput', function(current, origin) {
vm.resultCount = $filter('name')(vm.projects, vm.filterInput, 'name').length;
});
} }
function getProjectFailed(data) { function getProjectFailed(response) {
$scope.$emit('modalTitle', $filter('tr')('error')); $scope.$emit('modalTitle', $filter('tr')('error'));
$scope.$emit('modalMessage', $filter('tr')('failed_to_get_project')); $scope.$emit('modalMessage', $filter('tr')('failed_to_get_project'));
$scope.$emit('raiseError', true); $scope.$emit('raiseError', true);

View File

@ -59,7 +59,7 @@
<td colspan="5" height="320px" class="empty-hint" ng-if="vm.projects.length === 0"><h4 class="text-muted">// 'no_projects_add_new_project' | tr //</h4></td> <td colspan="5" height="320px" class="empty-hint" ng-if="vm.projects.length === 0"><h4 class="text-muted">// 'no_projects_add_new_project' | tr //</h4></td>
</tr> </tr>
<tr ng-if="vm.projects.length > 0" ng-repeat="p in vm.projects"> <tr ng-if="vm.projects.length > 0" ng-repeat="p in vm.projects">
<td width="20%"><a href="/repository#/repositories?page=//vm.page//&page_size=//vm.pageSize//&project_id=//p.project_id//&is_public=//p.public//">//p.name//</a></td> <td width="20%"><a href="/repository#/repositories?project_id=//p.project_id//&is_public=//p.public//">//p.name//</a></td>
<td width="15%">//p.repo_count//</td> <td width="15%">//p.repo_count//</td>
<td width="15%" ng-if="vm.isPublic === 0">//vm.getProjectRole(p.current_user_role_id) | tr//</td> <td width="15%" ng-if="vm.isPublic === 0">//vm.getProjectRole(p.current_user_role_id) | tr//</td>
<td width="20%">//p.creation_time | dateL : 'YYYY-MM-DD HH:mm:ss'//</td> <td width="20%">//p.creation_time | dateL : 'YYYY-MM-DD HH:mm:ss'//</td>