From 2ed6a2a5e39da225aa855982229ef5b185b0894f Mon Sep 17 00:00:00 2001 From: Florian Necas Date: Fri, 23 Jun 2023 11:19:34 +0200 Subject: [PATCH] fix: translations, improve method, alter mapLogo remove untranslated organisation name fields, improving addOrganisationToRecordFromSource without forkJoin, alter mapLogo to not use the record logo for a contact --- .../catalog/src/lib/feature-catalog.module.ts | 3 +- .../organisations-from-groups.service.ts | 2 +- ...rganisations-from-metadata.service.spec.ts | 10 --- .../organisations-from-metadata.service.ts | 61 ++++++++++--------- .../shared/src/lib/utils/atomic-operations.ts | 7 +-- 5 files changed, 36 insertions(+), 47 deletions(-) diff --git a/libs/feature/catalog/src/lib/feature-catalog.module.ts b/libs/feature/catalog/src/lib/feature-catalog.module.ts index be3c110458..948f12e005 100644 --- a/libs/feature/catalog/src/lib/feature-catalog.module.ts +++ b/libs/feature/catalog/src/lib/feature-catalog.module.ts @@ -41,8 +41,7 @@ const organizationsServiceFactory = ( : new OrganisationsFromMetadataService( esService, searchApiService, - groupsApiService, - translateService + groupsApiService ) @NgModule({ diff --git a/libs/feature/catalog/src/lib/organisations/service/organisations-from-groups.service.ts b/libs/feature/catalog/src/lib/organisations/service/organisations-from-groups.service.ts index 3753435292..e99256674b 100644 --- a/libs/feature/catalog/src/lib/organisations/service/organisations-from-groups.service.ts +++ b/libs/feature/catalog/src/lib/organisations/service/organisations-from-groups.service.ts @@ -132,7 +132,7 @@ export class OrganisationsFromGroupsService const groupId = parseInt(selectField(source, 'groupOwner')) const resourceContacts = getAsArray( selectField(source, 'contactForResource') - ).map((contact) => mapContact(contact, source)) + ).map((contact) => mapContact(contact)) return this.groups$.pipe( map((groups) => { const group = groups.find((g) => g.id === groupId) diff --git a/libs/feature/catalog/src/lib/organisations/service/organisations-from-metadata.service.spec.ts b/libs/feature/catalog/src/lib/organisations/service/organisations-from-metadata.service.spec.ts index c6ba489de4..ec7cfa8ac8 100644 --- a/libs/feature/catalog/src/lib/organisations/service/organisations-from-metadata.service.spec.ts +++ b/libs/feature/catalog/src/lib/organisations/service/organisations-from-metadata.service.spec.ts @@ -11,7 +11,6 @@ import { GROUPS_FIXTURE, } from '@geonetwork-ui/util/shared/fixtures' import { MetadataRecord, Organisation } from '@geonetwork-ui/util/shared' -import { TranslateService } from '@ngx-translate/core' const sampleOrgA: Organisation = { description: 'A description for ARE', @@ -82,11 +81,6 @@ class GoupsApiServiceMock { getGroups = jest.fn(() => of(GROUPS_FIXTURE)) } -class TranslateServiceMock { - currentLang = 'fr' - get = jest.fn((key) => of(key)) -} - describe('OrganisationsFromMetadataService', () => { let service: OrganisationsFromMetadataService let searchService: SearchApiService @@ -103,10 +97,6 @@ describe('OrganisationsFromMetadataService', () => { provide: SearchApiService, useClass: SearchApiServiceMock, }, - { - provide: TranslateService, - useClass: TranslateServiceMock, - }, ], }) service = TestBed.inject(OrganisationsFromMetadataService) diff --git a/libs/feature/catalog/src/lib/organisations/service/organisations-from-metadata.service.ts b/libs/feature/catalog/src/lib/organisations/service/organisations-from-metadata.service.ts index 70d306b5fa..083e9b626a 100644 --- a/libs/feature/catalog/src/lib/organisations/service/organisations-from-metadata.service.ts +++ b/libs/feature/catalog/src/lib/organisations/service/organisations-from-metadata.service.ts @@ -17,11 +17,9 @@ import { selectField, SourceWithUnknownProps, } from '@geonetwork-ui/util/shared' -import { combineLatest, forkJoin, Observable, of } from 'rxjs' -import { filter, map, shareReplay, startWith } from 'rxjs/operators' +import { combineLatest, Observable, of } from 'rxjs' +import { filter, map, shareReplay, startWith, takeLast } from 'rxjs/operators' import { OrganisationsServiceInterface } from './organisations.service.interface' -import { TranslateService } from '@ngx-translate/core' -import { LANG_2_TO_3_MAPPER } from '@geonetwork-ui/util/i18n' const IMAGE_URL = '/geonetwork/images/harvesting/' @@ -78,8 +76,7 @@ export class OrganisationsFromMetadataService constructor( private esService: ElasticsearchService, private searchApiService: SearchApiService, - private groupsApiService: GroupsApiService, - private translateService: TranslateService + private groupsApiService: GroupsApiService ) {} equalsNormalizedStrings( @@ -167,13 +164,12 @@ export class OrganisationsFromMetadataService } private mapContactFromOrganisation( - organisation: Organisation, - lang3: string + organisation: Organisation ): MetadataContact { const logoUrl = getAsUrl(`${organisation.logoUrl}`) return { - name: organisation.name[lang3], - organisation: organisation.name[lang3], + name: organisation.name, + organisation: organisation.name, email: organisation.email, ...(organisation.logoUrl && logoUrl && { logoUrl }), } as MetadataContact @@ -202,30 +198,35 @@ export class OrganisationsFromMetadataService source: SourceWithUnknownProps, record: MetadataRecord ): Observable { - return forkJoin([ - of({ - ...record, - resourceContacts: [ - ...getAsArray(selectField(source, 'contactForResource')).map( - (contact) => mapContact(contact, source) - ), - ], - contact: { - ...mapContact(getFirstValue(selectField(source, 'contact')), source), - }, - }), - this.organisations$, - ]).pipe( - map(([record, organisations]) => { + const metadataRecord = { + ...record, + resourceContacts: [ + ...getAsArray(selectField(source, 'contactForResource')).map( + (contact) => mapContact(contact) + ), + ], + contact: { + ...mapContact(getFirstValue(selectField(source, 'contact'))), + }, + } + + return this.organisations$.pipe( + takeLast(1), + map((organisations) => { const org = organisations.filter( - (o) => o.name === record.contact.organisation + (o) => o.name === metadataRecord.resourceContacts[0]?.organisation )[0] + if (org) { - const lang3 = LANG_2_TO_3_MAPPER[this.translateService.currentLang] - record.contact = this.mapContactFromOrganisation(org, lang3) - record.resourceContacts = [record.contact, ...record.resourceContacts] + const contactFromOrg = this.mapContactFromOrganisation(org) + metadataRecord.contact = contactFromOrg + metadataRecord.resourceContacts = [ + contactFromOrg, + ...metadataRecord.resourceContacts, + ] } - return record + + return metadataRecord }) ) } diff --git a/libs/util/shared/src/lib/utils/atomic-operations.ts b/libs/util/shared/src/lib/utils/atomic-operations.ts index 95b62bd2dd..f34bbe217a 100644 --- a/libs/util/shared/src/lib/utils/atomic-operations.ts +++ b/libs/util/shared/src/lib/utils/atomic-operations.ts @@ -50,16 +50,15 @@ export const getAsUrl = (field) => { } export const mapLogo = (source: SourceWithUnknownProps) => { - const logo = selectField(source, 'logo') + const logo = selectField(source, 'logoUrl') return logo ? getAsUrl(`/geonetwork${logo}`) : null } export const mapContact = ( - sourceContact: SourceWithUnknownProps, - sourceRecord: SourceWithUnknownProps + sourceContact: SourceWithUnknownProps ): MetadataContact => { const website = getAsUrl(selectField(sourceContact, 'website')) - const logoUrl = mapLogo(sourceRecord) + const logoUrl = mapLogo(sourceContact) const address = selectField(sourceContact, 'address') const phone = selectField(sourceContact, 'phone') return {