94481: Use DSONameService in all other remaining place where dc.title, person.familyName, person.givenName or organization.legalName is used

This commit is contained in:
Alexandre Vryghem
2022-09-19 17:45:05 +02:00
parent 80a1eed63c
commit a4b9a6da1d
20 changed files with 58 additions and 63 deletions

View File

@@ -57,11 +57,14 @@ export class DSONameService {
.filter((type) => typeof type === 'string') .filter((type) => typeof type === 'string')
.find((type: string) => Object.keys(this.factories).includes(type)) as string; .find((type: string) => Object.keys(this.factories).includes(type)) as string;
let name;
if (hasValue(match)) { if (hasValue(match)) {
return this.factories[match](dso); name = this.factories[match](dso);
} else {
return this.factories.Default(dso);
} }
if (isEmpty(name)) {
name = this.factories.Default(dso);
}
return name;
} }
} }

View File

@@ -21,7 +21,7 @@
<div class="card-body"> <div class="card-body">
<ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge> <ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge>
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4"> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<h4 class="card-title" [innerHTML]="firstMetadataValue('dc.title')"></h4> <h4 class="card-title" [innerHTML]="dsoTitle"></h4>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('creativework.datePublished')" <p *ngIf="dso.hasMetadata('creativework.datePublished')"
class="item-date card-text text-muted"> class="item-date card-text text-muted">

View File

@@ -21,7 +21,7 @@
<div class="card-body"> <div class="card-body">
<ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge> <ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge>
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4"> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4> <h4 class="card-title" [innerHTML]="dsoTitle"></h4>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('creativework.datePublished')" <p *ngIf="dso.hasMetadata('creativework.datePublished')"
class="item-date card-text text-muted"> class="item-date card-text text-muted">

View File

@@ -21,7 +21,7 @@
<div class="card-body"> <div class="card-body">
<ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge> <ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge>
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4"> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<h4 class="card-title" [innerHTML]="firstMetadataValue('dc.title')"></h4> <h4 class="card-title" [innerHTML]="dsoTitle"></h4>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('creativework.editor')" <p *ngIf="dso.hasMetadata('creativework.editor')"
class="item-publisher card-text text-muted"> class="item-publisher card-text text-muted">

View File

@@ -21,7 +21,7 @@
<div class="card-body"> <div class="card-body">
<ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge> <ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge>
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4"> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<h4 class="card-title" [innerHTML]="firstMetadataValue('organization.legalName')"></h4> <h4 class="card-title" [innerHTML]="dsoTitle"></h4>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('organization.foundingDate')" <p *ngIf="dso.hasMetadata('organization.foundingDate')"
class="item-date card-text text-muted"> class="item-date card-text text-muted">

View File

@@ -21,8 +21,7 @@
<div class="card-body"> <div class="card-body">
<ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge> <ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge>
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4"> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<h4 class="card-title" <h4 class="card-title" [innerHTML]="dsoTitle"></h4>
[innerHTML]="firstMetadataValue('person.familyName') + ', ' + firstMetadataValue('person.givenName')"></h4>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('person.email')" class="item-email card-text text-muted"> <p *ngIf="dso.hasMetadata('person.email')" class="item-email card-text text-muted">
<ds-truncatable-part [id]="dso.id" [minLines]="1"> <ds-truncatable-part [id]="dso.id" [minLines]="1">

View File

@@ -21,7 +21,7 @@
<div class="card-body"> <div class="card-body">
<ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge> <ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge>
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4"> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<h4 class="card-title" [innerHTML]="firstMetadataValue('dc.title')"></h4> <h4 class="card-title" [innerHTML]="dsoTitle"></h4>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('dc.description')" class="item-description card-text text-muted"> <p *ngIf="dso.hasMetadata('dc.description')" class="item-description card-text text-muted">
<ds-truncatable-part [id]="dso.id" [minLines]="3"> <ds-truncatable-part [id]="dso.id" [minLines]="3">

View File

@@ -2,10 +2,8 @@
<ds-truncatable [id]="dso.id"> <ds-truncatable [id]="dso.id">
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" <a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer"
[routerLink]="[itemPageRoute]" class="lead" [routerLink]="[itemPageRoute]" class="lead"
[innerHTML]="firstMetadataValue('organization.legalName')"></a> [innerHTML]="dsoTitle"></a>
<span *ngIf="linkType == linkTypes.None" <span *ngIf="linkType == linkTypes.None" class="lead" [innerHTML]="dsoTitle"></span>
class="lead"
[innerHTML]="firstMetadataValue('organization.legalName')"></span>
<span class="text-muted"> <span class="text-muted">
<ds-truncatable-part [id]="dso.id" [minLines]="3"> <ds-truncatable-part [id]="dso.id" [minLines]="3">
<span *ngIf="dso.allMetadata(['dc.description']).length > 0" <span *ngIf="dso.allMetadata(['dc.description']).length > 0"

View File

@@ -2,10 +2,8 @@
<ds-truncatable [id]="dso.id"> <ds-truncatable [id]="dso.id">
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" <a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer"
[routerLink]="[itemPageRoute]" class="lead" [routerLink]="[itemPageRoute]" class="lead"
[innerHTML]="name"></a> [innerHTML]="dsoTitle"></a>
<span *ngIf="linkType == linkTypes.None" <span *ngIf="linkType == linkTypes.None" class="lead" [innerHTML]="dsoTitle"></span>
class="lead"
[innerHTML]="firstMetadataValue('person.familyName') + ', ' + firstMetadataValue('person.givenName')"></span>
<span class="text-muted"> <span class="text-muted">
<ds-truncatable-part [id]="dso.id" [minLines]="1"> <ds-truncatable-part [id]="dso.id" [minLines]="1">
<span *ngIf="dso.allMetadata(['person.jobTitle']).length > 0" <span *ngIf="dso.allMetadata(['person.jobTitle']).length > 0"

View File

@@ -13,10 +13,4 @@ import { ItemSearchResultListElementComponent } from '../../../../../shared/obje
* The component for displaying a list element for an item search result of the type Person * The component for displaying a list element for an item search result of the type Person
*/ */
export class PersonSearchResultListElementComponent extends ItemSearchResultListElementComponent { export class PersonSearchResultListElementComponent extends ItemSearchResultListElementComponent {
get name() {
return this.value ?
this.value :
this.firstMetadataValue('person.familyName') + ', ' + this.firstMetadataValue('person.givenName');
}
} }

View File

@@ -17,12 +17,6 @@ import { Item } from '../../../../../core/shared/item.model';
* a sidebar search modal * a sidebar search modal
*/ */
export class OrgUnitSidebarSearchListElementComponent extends SidebarSearchListElementComponent<ItemSearchResult, Item> { export class OrgUnitSidebarSearchListElementComponent extends SidebarSearchListElementComponent<ItemSearchResult, Item> {
/**
* Get the title of the Org Unit by returning its legal name
*/
getTitle(): string {
return this.firstMetadataValue('organization.legalName');
}
/** /**
* Get the description of the Org Unit by returning its dc.description * Get the description of the Org Unit by returning its dc.description

View File

@@ -30,25 +30,6 @@ export class PersonSidebarSearchListElementComponent extends SidebarSearchListEl
super(truncatableService, linkService, dsoNameService); super(truncatableService, linkService, dsoNameService);
} }
/**
* Get the title of the Person by returning a combination of its family name and given name (or "No name found")
*/
getTitle(): string {
const familyName = this.firstMetadataValue('person.familyName');
const givenName = this.firstMetadataValue('person.givenName');
let title = '';
if (isNotEmpty(familyName)) {
title = familyName;
}
if (isNotEmpty(title)) {
title += ', ';
}
if (isNotEmpty(givenName)) {
title += givenName;
}
return this.defaultIfEmpty(title, this.translateService.instant('person.listelement.no-title'));
}
/** /**
* Get the description of the Person by returning its job title(s) * Get the description of the Person by returning its job title(s)
*/ */

View File

@@ -6,9 +6,7 @@
<ds-org-unit-input-suggestions *ngIf="useNameVariants" [suggestions]="allSuggestions" [(ngModel)]="selectedName" (clickSuggestion)="select($event)" <ds-org-unit-input-suggestions *ngIf="useNameVariants" [suggestions]="allSuggestions" [(ngModel)]="selectedName" (clickSuggestion)="select($event)"
(submitSuggestion)="selectCustom($event)"></ds-org-unit-input-suggestions> (submitSuggestion)="selectCustom($event)"></ds-org-unit-input-suggestions>
<div *ngIf="!useNameVariants" <div *ngIf="!useNameVariants" class="lead" [innerHTML]="dsoTitle"></div>
class="lead"
[innerHTML]="firstMetadataValue('organization.legalName')"></div>
<span class="text-muted"> <span class="text-muted">
<span *ngIf="dso.allMetadata('organization.address.addressLocality').length > 0" <span *ngIf="dso.allMetadata('organization.address.addressLocality').length > 0"

View File

@@ -54,7 +54,7 @@ export class OrgUnitSearchResultListSubmissionElementComponent extends SearchRes
this.useNameVariants = this.context === Context.EntitySearchModalWithNameVariants; this.useNameVariants = this.context === Context.EntitySearchModalWithNameVariants;
if (this.useNameVariants) { if (this.useNameVariants) {
const defaultValue = this.firstMetadataValue('organization.legalName'); const defaultValue = this.dsoTitle;
const alternatives = this.allMetadataValues(this.alternativeField); const alternatives = this.allMetadataValues(this.alternativeField);
this.allSuggestions = [defaultValue, ...alternatives]; this.allSuggestions = [defaultValue, ...alternatives];

View File

@@ -48,7 +48,7 @@ export class PersonSearchResultListSubmissionElementComponent extends SearchResu
ngOnInit() { ngOnInit() {
super.ngOnInit(); super.ngOnInit();
const defaultValue = this.firstMetadataValue('person.familyName') + ', ' + this.firstMetadataValue('person.givenName'); const defaultValue = this.dsoTitle;
const alternatives = this.allMetadataValues(this.alternativeField); const alternatives = this.allMetadataValues(this.alternativeField);
this.allSuggestions = [defaultValue, ...alternatives]; this.allSuggestions = [defaultValue, ...alternatives];

View File

@@ -19,7 +19,7 @@
<div class="card-body"> <div class="card-body">
<ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge> <ds-type-badge *ngIf="showLabel" [object]="dso"></ds-type-badge>
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4"> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<h4 class="card-title" [innerHTML]="firstMetadataValue('dc.title')"></h4> <h4 class="card-title" [innerHTML]="dsoTitle"></h4>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata(['dc.contributor.author', 'dc.creator', 'dc.contributor.*'])" <p *ngIf="dso.hasMetadata(['dc.contributor.author', 'dc.creator', 'dc.contributor.*'])"
class="item-authors card-text text-muted"> class="item-authors card-text text-muted">

View File

@@ -1,11 +1,16 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { focusShadow } from '../../../../animations/focus'; import { focusShadow } from '../../../../animations/focus';
import { ViewMode } from '../../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../../core/shared/view-mode.model';
import { listableObjectComponent } from '../../../../object-collection/shared/listable-object/listable-object.decorator'; import {
listableObjectComponent
} from '../../../../object-collection/shared/listable-object/listable-object.decorator';
import { SearchResultGridElementComponent } from '../../search-result-grid-element.component'; import { SearchResultGridElementComponent } from '../../search-result-grid-element.component';
import { Item } from '../../../../../core/shared/item.model'; import { Item } from '../../../../../core/shared/item.model';
import { ItemSearchResult } from '../../../../object-collection/shared/item-search-result.model'; import { ItemSearchResult } from '../../../../object-collection/shared/item-search-result.model';
import { getItemPageRoute } from '../../../../../item-page/item-page-routing-paths'; import { getItemPageRoute } from '../../../../../item-page/item-page-routing-paths';
import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service';
import { TruncatableService } from '../../../../truncatable/truncatable.service';
import { BitstreamDataService } from '../../../../../core/data/bitstream-data.service';
@listableObjectComponent('PublicationSearchResult', ViewMode.GridElement) @listableObjectComponent('PublicationSearchResult', ViewMode.GridElement)
@listableObjectComponent(ItemSearchResult, ViewMode.GridElement) @listableObjectComponent(ItemSearchResult, ViewMode.GridElement)
@@ -24,8 +29,19 @@ export class ItemSearchResultGridElementComponent extends SearchResultGridElemen
*/ */
itemPageRoute: string; itemPageRoute: string;
dsoTitle: string;
constructor(
protected truncatableService: TruncatableService,
protected bitstreamDataService: BitstreamDataService,
private dsoNameService: DSONameService,
) {
super(truncatableService, bitstreamDataService);
}
ngOnInit(): void { ngOnInit(): void {
super.ngOnInit(); super.ngOnInit();
this.itemPageRoute = getItemPageRoute(this.dso); this.itemPageRoute = getItemPageRoute(this.dso);
this.dsoTitle = this.dsoNameService.getName(this.dso);
} }
} }

View File

@@ -4,7 +4,7 @@
</ng-container> </ng-container>
<ds-type-badge [object]="item"></ds-type-badge> <ds-type-badge [object]="item"></ds-type-badge>
<ds-truncatable [id]="item.id"> <ds-truncatable [id]="item.id">
<h3 [innerHTML]="item.firstMetadataValue('dc.title') || ('mydspace.results.no-title' | translate)" [ngClass]="{'lead': true,'text-muted': !item.firstMetadataValue('dc.title')}"></h3> <h3 [innerHTML]="dsoTitle" [ngClass]="{'lead': true,'text-muted': !item.firstMetadataValue('dc.title')}"></h3>
<div> <div>
<span class="text-muted"> <span class="text-muted">
<ds-truncatable-part [id]="item.id" [minLines]="1"> <ds-truncatable-part [id]="item.id" [minLines]="1">

View File

@@ -1,9 +1,12 @@
import { Component, Input } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { fadeInOut } from '../../../animations/fade'; import { fadeInOut } from '../../../animations/fade';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import {
MyDspaceItemStatusType
} from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { SearchResult } from '../../../search/models/search-result.model'; import { SearchResult } from '../../../search/models/search-result.model';
import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service';
/** /**
* This component show metadata for the given item object in the list view. * This component show metadata for the given item object in the list view.
@@ -14,7 +17,7 @@ import { SearchResult } from '../../../search/models/search-result.model';
templateUrl: 'item-list-preview.component.html', templateUrl: 'item-list-preview.component.html',
animations: [fadeInOut] animations: [fadeInOut]
}) })
export class ItemListPreviewComponent { export class ItemListPreviewComponent implements OnInit {
/** /**
* The item to display * The item to display
@@ -36,4 +39,15 @@ export class ItemListPreviewComponent {
*/ */
@Input() showSubmitter = false; @Input() showSubmitter = false;
dsoTitle: string;
constructor(
private dsoNameService: DSONameService,
) {
}
ngOnInit(): void {
this.dsoTitle = this.dsoNameService.getName(this.item);
}
} }

View File

@@ -71,7 +71,7 @@ export class SidebarSearchListElementComponent<T extends SearchResult<K>, K exte
getParentTitle(): Observable<string> { getParentTitle(): Observable<string> {
return this.getParent().pipe( return this.getParent().pipe(
map((parentRD: RemoteData<DSpaceObject>) => { map((parentRD: RemoteData<DSpaceObject>) => {
return hasValue(parentRD) && hasValue(parentRD.payload) ? parentRD.payload.firstMetadataValue('dc.title') : undefined; return hasValue(parentRD) && hasValue(parentRD.payload) ? this.dsoNameService.getName(parentRD.payload) : undefined;
}) })
); );
} }
@@ -91,10 +91,10 @@ export class SidebarSearchListElementComponent<T extends SearchResult<K>, K exte
/** /**
* Get the title of the object * Get the title of the object
* Default: "dc.title" * Default: defined by {@link DSONameService}
*/ */
getTitle(): string { getTitle(): string {
return this.firstMetadataValue('dc.title'); return this.dsoNameService.getName(this.dso);
} }
/** /**