mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-27 20:59:10 +01:00
[OCI] changes some show words
1. search result show artifact count 2. replication shows changes both to all 3. fix delete bug when delete some artifact Signed-off-by: Yogi_Wang <yawang@vmware.com>
This commit is contained in:
parent
fbb3226e85
commit
891ef80e46
@ -685,7 +685,7 @@ export class ArtifactListTabComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
retag() {
|
||||
if (this.selectedRow && this.selectedRow.length) {
|
||||
if (this.selectedRow && this.selectedRow.length && !this.depth) {
|
||||
this.retagDialogOpened = true;
|
||||
this.retagSrcImage = this.repoName + ":" + this.selectedRow[0].digest;
|
||||
}
|
||||
@ -712,7 +712,7 @@ export class ArtifactListTabComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
deleteArtifact() {
|
||||
if (this.selectedRow && this.selectedRow.length) {
|
||||
if (this.selectedRow && this.selectedRow.length && !this.depth) {
|
||||
let artifactNames: string[] = [];
|
||||
this.selectedRow.forEach(artifact => {
|
||||
artifactNames.push(artifact.digest.slice(0, 15));
|
||||
@ -744,9 +744,30 @@ export class ArtifactListTabComponent implements OnInit, OnDestroy {
|
||||
this.deleteArtifactobservableLists.push(this.delOperate(artifact));
|
||||
});
|
||||
this.loading = true;
|
||||
forkJoin(...this.deleteArtifactobservableLists).subscribe((items) => {
|
||||
// if delete one success refresh list
|
||||
if (items.some(item => !item)) {
|
||||
forkJoin(...this.deleteArtifactobservableLists).subscribe((deleteResult) => {
|
||||
let deleteSuccessList = [];
|
||||
let deleteErrorList = [];
|
||||
deleteResult.forEach(result => {
|
||||
if (!result) {
|
||||
// delete success
|
||||
deleteSuccessList.push(result);
|
||||
} else {
|
||||
deleteErrorList.push(result);
|
||||
}
|
||||
});
|
||||
if (deleteSuccessList.length === deleteResult.length) {
|
||||
// all is success
|
||||
this.selectedRow = [];
|
||||
let st: ClrDatagridStateInterface = { page: {from: 0, to: this.pageSize - 1, size: this.pageSize} };
|
||||
this.clrLoad(st);
|
||||
} else if (deleteErrorList.length === deleteResult.length) {
|
||||
// all is error
|
||||
this.loading = false;
|
||||
this.errorHandlerService.error(deleteResult[deleteResult.length - 1].error);
|
||||
} else {
|
||||
// some artifact delete success but it has error delete things
|
||||
this.errorHandlerService.error(deleteErrorList[deleteErrorList.length - 1].error);
|
||||
// if delete one success refresh list
|
||||
this.selectedRow = [];
|
||||
let st: ClrDatagridStateInterface = { page: {from: 0, to: this.pageSize - 1, size: this.pageSize} };
|
||||
this.clrLoad(st);
|
||||
@ -799,7 +820,7 @@ export class ArtifactListTabComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
showDigestId() {
|
||||
if (this.selectedRow && (this.selectedRow.length === 1)) {
|
||||
if (this.selectedRow && (this.selectedRow.length === 1) && !this.depth) {
|
||||
this.manifestInfoTitle = "REPOSITORY.COPY_DIGEST_ID";
|
||||
this.digestId = this.selectedRow[0].digest;
|
||||
this.showTagManifestOpened = true;
|
||||
|
@ -69,7 +69,7 @@
|
||||
|
||||
<clr-dg-footer>
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'VULNERABILITY.GRID.FOOT_OF' | translate}}</span> {{pagination.totalItems}} {{'VULNERABILITY.GRID.FOOT_ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="25" [clrDgTotalItems]="scanningResults.length"></clr-dg-pagination>
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="25" [clrDgTotalItems]="scanningResults?.length"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
</clr-datagrid>
|
||||
</div>
|
||||
|
@ -90,7 +90,7 @@ describe('RepositoryComponentGridview (inline template)', () => {
|
||||
};
|
||||
const fakedRepositoryService = {
|
||||
listRepositoriesResponse(params: NewRepositoryService.ListRepositoriesParams) {
|
||||
if (params.name === 'nginx') {
|
||||
if (params.q === encodeURIComponent(`name=~nginx`)) {
|
||||
return of({headers: new Map(), body: mockNginxRepo});
|
||||
}
|
||||
return of({headers: new Map(), body: mockRepo}).pipe(delay(0));
|
||||
|
@ -75,7 +75,8 @@ export class RepositoryGridviewComponent implements OnChanges, OnInit, OnDestroy
|
||||
cardHover = false;
|
||||
listHover = false;
|
||||
|
||||
pageSize: number = DEFAULT_PAGE_SIZE;
|
||||
// pageSize: number = DEFAULT_PAGE_SIZE;
|
||||
pageSize: number = 3;
|
||||
currentPage = 1;
|
||||
totalCount = 0;
|
||||
currentState: ClrDatagridStateInterface;
|
||||
@ -315,9 +316,11 @@ export class RepositoryGridviewComponent implements OnChanges, OnInit, OnDestroy
|
||||
let params: NewRepositoryService.ListRepositoriesParams = {
|
||||
projectName: this.projectName,
|
||||
page: this.currentPage,
|
||||
pageSize: this.pageSize,
|
||||
name: this.lastFilteredRepoName
|
||||
pageSize: this.pageSize
|
||||
};
|
||||
if (this.lastFilteredRepoName) {
|
||||
params.q = encodeURIComponent(`name=~${this.lastFilteredRepoName}`);
|
||||
}
|
||||
|
||||
this.loading = true;
|
||||
this.newRepoService.listRepositoriesResponse(
|
||||
@ -351,9 +354,11 @@ export class RepositoryGridviewComponent implements OnChanges, OnInit, OnDestroy
|
||||
let params: NewRepositoryService.ListRepositoriesParams = {
|
||||
projectName: this.projectName,
|
||||
page: pageNumber,
|
||||
pageSize: this.pageSize,
|
||||
name: this.lastFilteredRepoName
|
||||
pageSize: this.pageSize
|
||||
};
|
||||
if (this.lastFilteredRepoName) {
|
||||
params.q = encodeURIComponent(`name=~${this.lastFilteredRepoName}`);
|
||||
}
|
||||
if (state.filters && state.filters.length) {
|
||||
state.filters.forEach(item => {
|
||||
params[item.property] = item.value;
|
||||
|
@ -75,7 +75,7 @@
|
||||
<input id="tags" required [(ngModel)]="tagsInput" class="clr-input w-100">
|
||||
</div>
|
||||
</div>
|
||||
<div class="clr-col-3 p-0 font-size-13">
|
||||
<div class="clr-col-3 p-0">
|
||||
<div class="w-100 untagged">
|
||||
<label for="untagged">{{'TAG_RETENTION.INCLUDE_UNTAGGED' | translate}}</label>
|
||||
<input type="checkbox" [(ngModel)]="untagged" name="untagged" id="untagged" class="clr-input w-100" clrCheckbox />
|
||||
|
@ -4,7 +4,7 @@
|
||||
<clr-dg-column>{{'REPOSITORY.PULL_COUNT' | translate}}</clr-dg-column>
|
||||
<clr-dg-row *clrDgItems="let r of repositories" [clrDgItem]='r'>
|
||||
<clr-dg-cell><a href="javascript:void(0)" (click)="gotoLink(projectId || r.project_id, r.name || r.repository_name)">{{r.name || r.repository_name}}</a></clr-dg-cell>
|
||||
<clr-dg-cell>{{r.tags_count}}</clr-dg-cell>
|
||||
<clr-dg-cell>{{r.artifact_count}}</clr-dg-cell>
|
||||
<clr-dg-cell>{{r.pull_count}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
|
@ -82,7 +82,7 @@
|
||||
<div class="select resource-box clr-select-wrapper" *ngIf="supportedFilters[i]?.style==='radio' && supportedFilters[i]?.values.length > 1">
|
||||
<select class="clr-select width-100" formControlName="value" #selectedValue id="{{'select_'+ supportedFilters[i]?.type}}"
|
||||
name="{{supportedFilters[i]?.type}}">
|
||||
<option value="">{{'REPLICATION.BOTH' | translate}}</option>
|
||||
<option value="">{{'REPLICATION.ALL' | translate}}</option>
|
||||
<option *ngFor="let value of supportedFilters[i]?.values;" value="{{value}}">{{value}}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user