Skip to content

Commit 9709e50

Browse files
[DSC-2309] improve fallback mechanism for avatar
1 parent c10e62f commit 9709e50

4 files changed

Lines changed: 34 additions & 4 deletions

File tree

src/app/shared/metadata-link-view/metadata-link-view-avatar-popover/metadata-link-view-avatar-popover.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
<img *ngIf="src !== null" class="thumbnail-content img-fluid" [ngClass]="{'d-none': isLoading}"
1111
[src]="src | dsSafeUrl" [alt]="alt | translate" (error)="errorHandler()" (load)="successHandler()">
1212
<div *ngIf="src === null && !isLoading" class="thumbnail-content outer" #thumbnailBox>
13-
<img [src]="fallbackImage" [alt]="placeholder | translate">
13+
<img [src]="placeholderImageUrl" [alt]="placeholder | translate" (error)="onImageError($event)">
1414
</div>
1515
</div>

src/app/shared/metadata-link-view/metadata-link-view-avatar-popover/metadata-link-view-avatar-popover.component.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,10 @@ describe('MetadataLinkViewAvatarPopoverComponent', () => {
5757
it('should create', () => {
5858
expect(component).toBeTruthy();
5959
});
60+
61+
it('should set placeholder image based on entity type', () => {
62+
component.entityType = 'testEntityType';
63+
component.ngOnInit();
64+
expect(component.placeholderImageUrl).toBe('assets/images/testentitytype-placeholder.svg');
65+
});
6066
});
Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,38 @@
1-
import { Component } from '@angular/core';
1+
import { Component, Input, OnInit } from '@angular/core';
22
import { ThumbnailComponent } from 'src/app/thumbnail/thumbnail.component';
33

44
@Component({
55
selector: 'ds-metadata-link-view-avatar-popover',
66
templateUrl: './metadata-link-view-avatar-popover.component.html',
77
styleUrls: ['./metadata-link-view-avatar-popover.component.scss']
88
})
9-
export class MetadataLinkViewAvatarPopoverComponent extends ThumbnailComponent {
9+
export class MetadataLinkViewAvatarPopoverComponent extends ThumbnailComponent implements OnInit {
1010

1111
/**
1212
* The fallback image to use when the thumbnail is not available
1313
*/
14-
fallbackImage = 'assets/images/person-placeholder.svg';
14+
fallbackImageUrl = 'assets/images/replacement_image.svg';
15+
16+
/**
17+
* Placeholder image url that changes based on entity type
18+
*/
19+
placeholderImageUrl: string;
20+
21+
/**
22+
* The entity type of the item which the avatar belong
23+
*/
24+
@Input() entityType: string;
25+
26+
ngOnInit() {
27+
this.placeholderImageUrl = this.entityType ? `assets/images/${this.entityType.toLowerCase()}-placeholder.svg` : this.fallbackImageUrl;
28+
}
29+
30+
/**
31+
* Handle error loading image placeholder, e.g. missing placeholder image for specific entity type.
32+
* @param event
33+
*/
34+
onImageError(event: Event) {
35+
const target = event.target as HTMLImageElement;
36+
target.src = this.fallbackImageUrl;
37+
}
1538
}

src/app/shared/metadata-link-view/metadata-link-view-popover/metadata-link-view-popover.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<ds-metadata-link-view-avatar-popover
55
*ngIf="item.thumbnail | async"
66
[thumbnail]="item.thumbnail | async"
7+
[entityType]="item.entityType"
78
></ds-metadata-link-view-avatar-popover>
89
<span class="font-weight-bold h4"> {{item.firstMetadataValue('dc.title')}} </span>
910
</div>

0 commit comments

Comments
 (0)