From 0f5c3fdc92f60a1840d0b1161c0e3d4bef7721d3 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 27 Jan 2021 17:20:38 +0100 Subject: [PATCH] fix issue where a bunch of unnecessary requests where made when creating or removing a metadata field --- .../metadata-field-form.component.ts | 1 - .../metadata-schema/metadata-schema.component.ts | 6 ++++-- .../core/data/metadata-field-data.service.spec.ts | 11 +++++------ src/app/core/data/metadata-field-data.service.ts | 13 ++++++------- src/app/core/registry/registry.service.spec.ts | 4 ++-- src/app/core/registry/registry.service.ts | 4 ++-- 6 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/app/+admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/+admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index b6ffa97fdd..1c000c3c76 100644 --- a/src/app/+admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/+admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -158,7 +158,6 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { * Emit the updated/created field using the EventEmitter submitForm */ onSubmit() { - this.registryService.clearMetadataFieldRequests().subscribe(); this.registryService.getActiveMetadataField().pipe(take(1)).subscribe( (field) => { const values = { diff --git a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts index 94215cf29e..822a054d54 100644 --- a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts +++ b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts @@ -91,7 +91,7 @@ export class MetadataSchemaComponent implements OnInit { if (update) { this.needsUpdate$.next(false); } - return this.registryService.getMetadataFieldsBySchema(schema, toFindListOptions(this.config), !update, false, followLink('schema')); + return this.registryService.getMetadataFieldsBySchema(schema, toFindListOptions(this.config), !update, true); }) ); } @@ -101,6 +101,7 @@ export class MetadataSchemaComponent implements OnInit { * a new REST call */ public forceUpdateFields() { + this.registryService.clearMetadataFieldRequests(); this.needsUpdate$.next(true); } @@ -160,7 +161,6 @@ export class MetadataSchemaComponent implements OnInit { * Delete all the selected metadata fields */ deleteFields() { - this.registryService.clearMetadataFieldRequests().subscribe(); this.registryService.getSelectedMetadataFields().pipe(take(1)).subscribe( (fields) => { const tasks$ = []; @@ -174,6 +174,8 @@ export class MetadataSchemaComponent implements OnInit { const failedResponses = responses.filter((response: RemoteData) => response.hasFailed); if (successResponses.length > 0) { this.showNotification(true, successResponses.length); + this.registryService.clearMetadataFieldRequests(); + } if (failedResponses.length > 0) { this.showNotification(false, failedResponses.length); diff --git a/src/app/core/data/metadata-field-data.service.spec.ts b/src/app/core/data/metadata-field-data.service.spec.ts index bfc8676fa3..bb621f74b3 100644 --- a/src/app/core/data/metadata-field-data.service.spec.ts +++ b/src/app/core/data/metadata-field-data.service.spec.ts @@ -33,7 +33,7 @@ describe('MetadataFieldDataService', () => { generateRequestId: '34cfed7c-f597-49ef-9cbe-ea351f0023c2', send: {}, getByUUID: observableOf({ response: new RestResponse(true, 200, 'OK') }), - removeByHrefSubstring: {} + setStaleByHrefSubstring: {} }); halService = Object.assign(new HALEndpointServiceStub(endpoint)); notificationsService = jasmine.createSpyObj('notificationsService', { @@ -64,11 +64,10 @@ describe('MetadataFieldDataService', () => { }); describe('clearRequests', () => { - it('should remove requests on the data service\'s endpoint', (done) => { - metadataFieldService.clearRequests().subscribe(() => { - expect(requestService.removeByHrefSubstring).toHaveBeenCalledWith(`${endpoint}/${(metadataFieldService as any).linkPath}`); - done(); - }); + it('should remove requests on the data service\'s endpoint', () => { + spyOn(metadataFieldService, 'getBrowseEndpoint').and.returnValue(observableOf(endpoint)); + metadataFieldService.clearRequests(); + expect(requestService.setStaleByHrefSubstring).toHaveBeenCalledWith(endpoint); }); }); }); diff --git a/src/app/core/data/metadata-field-data.service.ts b/src/app/core/data/metadata-field-data.service.ts index 1a9d40bcee..3f4e0707cb 100644 --- a/src/app/core/data/metadata-field-data.service.ts +++ b/src/app/core/data/metadata-field-data.service.ts @@ -19,7 +19,7 @@ import { MetadataSchema } from '../metadata/metadata-schema.model'; import { FindListOptions } from './request.models'; import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; +import { tap, take } from 'rxjs/operators'; import { RequestParam } from '../cache/models/request-param.model'; /** @@ -105,12 +105,11 @@ export class MetadataFieldDataService extends DataService { * Clear all metadata field requests * Used for refreshing lists after adding/updating/removing a metadata field from a metadata schema */ - clearRequests(): Observable { - return this.getBrowseEndpoint().pipe( - tap((href: string) => { - this.requestService.removeByHrefSubstring(href); - }) - ); + clearRequests(): void { + this.getBrowseEndpoint().pipe(take(1)).subscribe((href: string) => { + this.requestService.setStaleByHrefSubstring(href); + }); + } } diff --git a/src/app/core/registry/registry.service.spec.ts b/src/app/core/registry/registry.service.spec.ts index 7befef945d..fdfe1c9fac 100644 --- a/src/app/core/registry/registry.service.spec.ts +++ b/src/app/core/registry/registry.service.spec.ts @@ -371,7 +371,7 @@ describe('RegistryService', () => { describe('when clearMetadataSchemaRequests is called', () => { beforeEach(() => { - registryService.clearMetadataSchemaRequests().subscribe(); + registryService.clearMetadataSchemaRequests(); }); it('should remove the requests related to metadata schemas from cache', () => { @@ -381,7 +381,7 @@ describe('RegistryService', () => { describe('when clearMetadataFieldRequests is called', () => { beforeEach(() => { - registryService.clearMetadataFieldRequests().subscribe(); + registryService.clearMetadataFieldRequests(); }); it('should remove the requests related to metadata fields from cache', () => { diff --git a/src/app/core/registry/registry.service.ts b/src/app/core/registry/registry.service.ts index 89e58afe5f..9ac849bdd3 100644 --- a/src/app/core/registry/registry.service.ts +++ b/src/app/core/registry/registry.service.ts @@ -280,8 +280,8 @@ export class RegistryService { /** * Method that clears a cached metadata field request and returns its REST url */ - public clearMetadataFieldRequests(): Observable { - return this.metadataFieldService.clearRequests(); + public clearMetadataFieldRequests(): void { + this.metadataFieldService.clearRequests(); } private showNotifications(success: boolean, edited: boolean, isField: boolean, options: any) {