From f022e89843c5a3be13de45282e0c7622be1c78d1 Mon Sep 17 00:00:00 2001 From: Yogi_Wang Date: Mon, 2 Dec 2019 14:50:30 +0800 Subject: [PATCH] Modify the repository list sort and filter Signed-off-by: Yogi_Wang --- API/harbor/swagger.yaml | 2 +- src/common/dao/repository.go | 3 ++ .../repository-gridview.component.html | 6 ++-- .../repository-gridview.component.ts | 33 +++++++------------ 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/API/harbor/swagger.yaml b/API/harbor/swagger.yaml index f0f8ecc13..7206d17a0 100644 --- a/API/harbor/swagger.yaml +++ b/API/harbor/swagger.yaml @@ -1005,7 +1005,7 @@ paths: get: summary: Get repositories accompany with relevant project and repo name. description: | - This endpoint lets user search repositories accompanying with relevant project ID and repo name. Repositories can be sorted by repo name, creation_time, update_time in either ascending or descending order. + This endpoint lets user search repositories accompanying with relevant project ID and repo name. Repositories can be sorted by repo name, creation_time, update_time, pull_count in either ascending or descending order. parameters: - name: project_id in: query diff --git a/src/common/dao/repository.go b/src/common/dao/repository.go index abb859525..062f5c0bc 100644 --- a/src/common/dao/repository.go +++ b/src/common/dao/repository.go @@ -32,6 +32,9 @@ var orderMap = map[string]string{ "update_time": "update_time asc", "+update_time": "update_time asc", "-update_time": "update_time desc", + "pull_count": "pull_count asc", + "+pull_count": "pull_count asc", + "-pull_count": "pull_count desc", } // AddRepository adds a repo to the database. diff --git a/src/portal/src/lib/components/repository-gridview/repository-gridview.component.html b/src/portal/src/lib/components/repository-gridview/repository-gridview.component.html index ef4e04409..ed2bce3d0 100644 --- a/src/portal/src/lib/components/repository-gridview/repository-gridview.component.html +++ b/src/portal/src/lib/components/repository-gridview/repository-gridview.component.html @@ -29,9 +29,9 @@ - {{'REPOSITORY.NAME' | translate}} - {{'REPOSITORY.TAGS_COUNT' | translate}} - {{'REPOSITORY.PULL_COUNT' | translate}} + {{'REPOSITORY.NAME' | translate}} + {{'REPOSITORY.TAGS_COUNT' | translate}} + {{'REPOSITORY.PULL_COUNT' | translate}} {{'REPOSITORY.PLACEHOLDER' | translate }} {{r.name}} diff --git a/src/portal/src/lib/components/repository-gridview/repository-gridview.component.ts b/src/portal/src/lib/components/repository-gridview/repository-gridview.component.ts index c2066decf..612b47876 100644 --- a/src/portal/src/lib/components/repository-gridview/repository-gridview.component.ts +++ b/src/portal/src/lib/components/repository-gridview/repository-gridview.component.ts @@ -27,7 +27,7 @@ import { TagService } from '../../services'; import { ErrorHandler } from '../../utils/error-handler/error-handler'; -import { CustomComparator, DEFAULT_PAGE_SIZE, calculatePage, doFiltering, doSorting, clone } from '../../utils/utils'; +import { DEFAULT_PAGE_SIZE, calculatePage, clone } from '../../utils/utils'; import { ConfirmationState, ConfirmationTargets, ConfirmationButtons } from '../../entities/shared.const'; import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component'; import { ConfirmationMessage } from '../confirmation-dialog/confirmation-message'; @@ -42,6 +42,7 @@ import { SERVICE_CONFIG, IServiceConfig } from '../../entities/service.config'; import { map, catchError } from "rxjs/operators"; import { Observable, throwError as observableThrowError } from "rxjs"; import { errorHandler as errorHandFn } from "../../utils/shared/shared.utils"; +import { ClrDatagridStateInterface } from "@clr/angular"; @Component({ selector: "hbr-repository-gridview", templateUrl: "./repository-gridview.component.html", @@ -72,9 +73,6 @@ export class RepositoryGridviewComponent implements OnChanges, OnInit { cardHover = false; listHover = false; - pullCountComparator: Comparator = new CustomComparator('pull_count', 'number'); - tagsCountComparator: Comparator = new CustomComparator('tags_count', 'number'); - pageSize: number = DEFAULT_PAGE_SIZE; currentPage = 1; totalCount = 0; @@ -351,15 +349,7 @@ export class RepositoryGridviewComponent implements OnChanges, OnInit { this.totalCount = repo.metadata.xTotalCount; this.repositoriesCopy = repo.data; this.signedCon = {}; - // Do filtering and sorting - this.repositoriesCopy = doFiltering( - this.repositoriesCopy, - this.currentState - ); - this.repositoriesCopy = doSorting( - this.repositoriesCopy, - this.currentState - ); + this.repositories = this.repositories.concat(this.repositoriesCopy); this.loading = false; }, error => { @@ -370,7 +360,7 @@ export class RepositoryGridviewComponent implements OnChanges, OnInit { setTimeout(() => clearInterval(hnd), 5000); } - clrLoad(state: State): void { + clrLoad(state: ClrDatagridStateInterface): void { if (!state || !state.page) { return; } @@ -385,7 +375,14 @@ export class RepositoryGridviewComponent implements OnChanges, OnInit { // Pagination let params: RequestQueryParams = new RequestQueryParams().set("page", "" + pageNumber).set("page_size", "" + this.pageSize); - + if (state.filters && state.filters.length) { + state.filters.forEach(item => { + params = params.set(item.property, item.value); + }); + } + if (state.sort && state.sort.by) { + params = params.set(`sort`, `${(state.sort.reverse ? `-` : ``)}${state.sort.by as string}`); + } this.loading = true; this.repositoryService.getRepositories( @@ -399,12 +396,6 @@ export class RepositoryGridviewComponent implements OnChanges, OnInit { this.repositories = repo.data; this.signedCon = {}; - // Do filtering and sorting - this.repositories = doFiltering( - this.repositories, - state - ); - this.repositories = doSorting(this.repositories, state); this.loading = false; }, error => { this.loading = false;