58789: Metadata field create/edit/delete feature

This commit is contained in:
Kristof De Langhe
2019-01-22 17:15:14 +01:00
parent 09eb01c545
commit fe44146291
11 changed files with 212 additions and 52 deletions

View File

@@ -1,17 +1,22 @@
import { Component, OnInit } from '@angular/core';
import { RegistryService } from '../../../core/registry/registry.service';
import { ActivatedRoute } from '@angular/router';
import { ActivatedRoute, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { RemoteData } from '../../../core/data/remote-data';
import { PaginatedList } from '../../../core/data/paginated-list';
import { MetadataField } from '../../../core/metadata/metadatafield.model';
import { MetadataSchema } from '../../../core/metadata/metadataschema.model';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
import { map } from 'rxjs/operators';
import { map, take } from 'rxjs/operators';
import { hasValue } from '../../../shared/empty.util';
import { RestResponse } from '../../../core/cache/response.models';
import { zip } from 'rxjs/internal/observable/zip';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
@Component({
selector: 'ds-metadata-schema',
templateUrl: './metadata-schema.component.html'
templateUrl: './metadata-schema.component.html',
styleUrls: ['./metadata-schema.component.scss']
})
export class MetadataSchemaComponent implements OnInit {
@@ -25,7 +30,10 @@ export class MetadataSchemaComponent implements OnInit {
pageSizeOptions: [25, 50, 100, 200]
});
constructor(private registryService: RegistryService, private route: ActivatedRoute) {
constructor(private registryService: RegistryService,
private route: ActivatedRoute,
private notificationsService: NotificationsService,
private router: Router) {
}
@@ -53,8 +61,19 @@ export class MetadataSchemaComponent implements OnInit {
});
}
private forceUpdateFields() {
this.registryService.clearMetadataFieldRequests().subscribe();
this.updateFields();
}
editField(field: MetadataField) {
this.registryService.editMetadataField(field);
this.getActiveField().pipe(take(1)).subscribe((activeField) => {
if (field === activeField) {
this.registryService.cancelEditMetadataField();
} else {
this.registryService.editMetadataField(field);
}
});
}
isActive(field: MetadataField): Observable<boolean> {
@@ -80,12 +99,27 @@ export class MetadataSchemaComponent implements OnInit {
}
deleteFields() {
this.registryService.getSelectedMetadataFields().subscribe(
this.registryService.getSelectedMetadataFields().pipe(take(1)).subscribe(
(fields) => {
console.log('metadata fields to delete: ');
const tasks$ = [];
for (const field of fields) {
console.log(field);
if (hasValue(field.id)) {
tasks$.push(this.registryService.deleteMetadataSchema(field.id));
}
}
zip(...tasks$).subscribe((responses: RestResponse[]) => {
const successResponses = responses.filter((response: RestResponse) => response.isSuccessful);
const failedResponses = responses.filter((response: RestResponse) => !response.isSuccessful);
if (successResponses.length > 0) {
this.notificationsService.success('Success', `Successfully deleted ${successResponses.length} metadata fields`);
}
if (failedResponses.length > 0) {
this.notificationsService.error('Error', `Failed to delete ${failedResponses.length} metadata fields`);
}
this.registryService.deselectAllMetadataField();
this.router.navigate([], { queryParams: { page: 1 }, queryParamsHandling: 'merge'});
this.forceUpdateFields();
});
}
)
}