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;