From da6ace18827153ef247e0e4e1bbb2d09c46edc95 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Thu, 8 May 2025 01:34:47 +0200 Subject: [PATCH] 130424: Fix validation on the edit metadata tab sometimes wrongly displaying an error message This only happens when the request that validates the metadata field doesn't return the field with qualifier null on the first page --- .../metadata-field-selector.component.spec.ts | 8 ++++++++ .../metadata-field-selector.component.ts | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.spec.ts b/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.spec.ts index de8736df94..1f0dc52503 100644 --- a/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.spec.ts +++ b/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.spec.ts @@ -105,6 +105,14 @@ describe('MetadataFieldSelectorComponent', () => { }); }); + it('should sort the fields by name to ensure the one without a qualifier is first', () => { + component.mdField = 'dc.relation'; + + component.validate(); + + expect(registryService.queryMetadataFields).toHaveBeenCalledWith('dc.relation', { elementsPerPage: 10, sort: new SortOptions('fieldName', SortDirection.ASC) }, true, false, followLink('schema')); + }); + describe('when querying the metadata fields returns an error response', () => { beforeEach(() => { (registryService.queryMetadataFields as jasmine.Spy).and.returnValue(createFailedRemoteDataObject$('Failed')); diff --git a/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.ts b/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.ts index fc0d57046d..8009055708 100644 --- a/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.ts +++ b/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.ts @@ -26,6 +26,7 @@ import { of } from 'rxjs/internal/observable/of'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model'; +import { FindListOptions } from '../../../core/data/find-list-options.model'; @Component({ selector: 'ds-metadata-field-selector', @@ -97,6 +98,11 @@ export class MetadataFieldSelectorComponent implements OnInit, OnDestroy, AfterV */ showInvalid = false; + searchOptions: FindListOptions = { + elementsPerPage: 10, + sort: new SortOptions('fieldName', SortDirection.ASC), + }; + /** * Subscriptions to unsubscribe from on destroy */ @@ -129,7 +135,7 @@ export class MetadataFieldSelectorComponent implements OnInit, OnDestroy, AfterV switchMap((query: string) => { this.showInvalid = false; if (query !== null) { - return this.registryService.queryMetadataFields(query, { elementsPerPage: 10, sort: new SortOptions('fieldName', SortDirection.ASC) }, true, false, followLink('schema')).pipe( + return this.registryService.queryMetadataFields(query, this.searchOptions, true, false, followLink('schema')).pipe( getAllSucceededRemoteData(), metadataFieldsToString(), ); @@ -154,7 +160,7 @@ export class MetadataFieldSelectorComponent implements OnInit, OnDestroy, AfterV * Upon subscribing to the returned observable, the showInvalid flag is updated accordingly to show the feedback under the input */ validate(): Observable { - return this.registryService.queryMetadataFields(this.mdField, null, true, false, followLink('schema')).pipe( + return this.registryService.queryMetadataFields(this.mdField, this.searchOptions, true, false, followLink('schema')).pipe( getFirstCompletedRemoteData(), switchMap((rd) => { if (rd.hasSucceeded) {