Merge pull request #22002 from votdev/fix_deletion

mgr/dashboard: Handle errors during deletion

Reviewed-by: Ricardo Marques <rimarques@suse.com>
This commit is contained in:
Lenz Grimmer 2018-05-16 14:23:32 +02:00 committed by GitHub
commit 9ae6d1cf7a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 58 additions and 33 deletions

View File

@ -7,9 +7,7 @@ import { Observable } from 'rxjs/Observable';
import { Subscriber } from 'rxjs/Subscriber';
import { RgwBucketService } from '../../../shared/api/rgw-bucket.service';
import {
DeletionModalComponent
} from '../../../shared/components/deletion-modal/deletion-modal.component';
import { DeletionModalComponent } from '../../../shared/components/deletion-modal/deletion-modal.component';
import { TableComponent } from '../../../shared/datatable/table/table.component';
import { CdTableColumn } from '../../../shared/models/cd-table-column';
import { CdTableSelection } from '../../../shared/models/cd-table-selection';
@ -20,16 +18,17 @@ import { CdTableSelection } from '../../../shared/models/cd-table-selection';
styleUrls: ['./rgw-bucket-list.component.scss']
})
export class RgwBucketListComponent {
@ViewChild(TableComponent) table: TableComponent;
columns: CdTableColumn[] = [];
buckets: object[] = [];
selection: CdTableSelection = new CdTableSelection();
constructor(private router: Router,
private rgwBucketService: RgwBucketService,
private bsModalService: BsModalService) {
constructor(
private router: Router,
private rgwBucketService: RgwBucketService,
private bsModalService: BsModalService
) {
this.columns = [
{
name: 'Name',
@ -45,14 +44,16 @@ export class RgwBucketListComponent {
}
getBucketList() {
this.rgwBucketService.list()
.subscribe((resp: object[]) => {
this.rgwBucketService.list().subscribe(
(resp: object[]) => {
this.buckets = resp;
}, () => {
},
() => {
// Force datatable to hide the loading indicator in
// case of an error.
this.buckets = [];
});
}
);
}
updateSelection(selection: CdTableSelection) {
@ -65,19 +66,30 @@ export class RgwBucketListComponent {
metaType: this.selection.hasSingleSelection ? 'bucket' : 'buckets',
deletionObserver: (): Observable<any> => {
return new Observable((observer: Subscriber<any>) => {
// Delete all selected data table rows.
Observable.forkJoin(
this.selection.selected.map((bucket: any) => {
return this.rgwBucketService.delete(bucket.bucket);
}))
.subscribe(null, null, () => {
observer.complete();
// Finally reload the data table content.
})
).subscribe(
null,
(error) => {
// Forward the error to the observer.
observer.error(error);
// Reload the data table content because some deletions might
// have been executed successfully in the meanwhile.
this.table.refreshBtn();
});
},
() => {
// Notify the observer that we are done.
observer.complete();
// Reload the data table content.
this.table.refreshBtn();
}
);
});
},
modalRef: modalRef
});
}
}

View File

@ -7,9 +7,7 @@ import { Observable } from 'rxjs/Observable';
import { Subscriber } from 'rxjs/Subscriber';
import { RgwUserService } from '../../../shared/api/rgw-user.service';
import {
DeletionModalComponent
} from '../../../shared/components/deletion-modal/deletion-modal.component';
import { DeletionModalComponent } from '../../../shared/components/deletion-modal/deletion-modal.component';
import { TableComponent } from '../../../shared/datatable/table/table.component';
import { CellTemplate } from '../../../shared/enum/cell-template.enum';
import { CdTableColumn } from '../../../shared/models/cd-table-column';
@ -21,16 +19,17 @@ import { CdTableSelection } from '../../../shared/models/cd-table-selection';
styleUrls: ['./rgw-user-list.component.scss']
})
export class RgwUserListComponent {
@ViewChild(TableComponent) table: TableComponent;
columns: CdTableColumn[] = [];
users: object[] = [];
selection: CdTableSelection = new CdTableSelection();
constructor(private router: Router,
private rgwUserService: RgwUserService,
private bsModalService: BsModalService) {
constructor(
private router: Router,
private rgwUserService: RgwUserService,
private bsModalService: BsModalService
) {
this.columns = [
{
name: 'Username',
@ -62,14 +61,16 @@ export class RgwUserListComponent {
}
getUserList() {
this.rgwUserService.list()
.subscribe((resp: object[]) => {
this.rgwUserService.list().subscribe(
(resp: object[]) => {
this.users = resp;
}, () => {
},
() => {
// Force datatable to hide the loading indicator in
// case of an error.
this.users = [];
});
}
);
}
updateSelection(selection: CdTableSelection) {
@ -82,15 +83,27 @@ export class RgwUserListComponent {
metaType: this.selection.hasSingleSelection ? 'user' : 'users',
deletionObserver: (): Observable<any> => {
return new Observable((observer: Subscriber<any>) => {
// Delete all selected data table rows.
Observable.forkJoin(
this.selection.selected.map((user: any) => {
return this.rgwUserService.delete(user.user_id);
}))
.subscribe(null, null, () => {
observer.complete();
// Finally reload the data table content.
})
).subscribe(
null,
(error) => {
// Forward the error to the observer.
observer.error(error);
// Reload the data table content because some deletions might
// have been executed successfully in the meanwhile.
this.table.refreshBtn();
});
},
() => {
// Notify the observer that we are done.
observer.complete();
// Reload the data table content.
this.table.refreshBtn();
}
);
});
},
modalRef: modalRef