From dfe11431846872abce7bc750a751ab4cb184a633 Mon Sep 17 00:00:00 2001
From: lotte <lotte_hofstede@hotmail.com>
Date: Thu, 10 Oct 2019 16:18:14 +0200
Subject: [PATCH] metadata representation

---
 .../publication/publication.component.ts      |  4 +-
 ...etadata-representation-list.component.html |  6 +--
 .../+my-dspace-page/my-dspace-page.module.ts  |  3 +-
 .../my-dspace-results.component.html          |  3 +-
 .../my-dspace-results.component.ts            |  2 +
 src/app/+search-page/search-result.model.ts   |  4 +-
 src/app/core/metadata/metadata-field.model.ts |  4 +-
 .../core/metadata/metadata-schema.model.ts    |  4 +-
 src/app/core/shared/browse-entry.model.ts     |  4 +-
 src/app/core/shared/dspace-object.model.ts    |  4 +-
 src/app/core/shared/item.model.ts             | 12 ++---
 ...-search-result-grid-element.component.html |  2 +-
 ...-search-result-grid-element.component.html |  2 +-
 ...-search-result-grid-element.component.html |  2 +-
 ...-search-result-grid-element.component.html |  2 +-
 ...-search-result-grid-element.component.html |  2 +-
 ...-search-result-grid-element.component.html |  2 +-
 ...rgunit-item-page-list-element.component.ts |  3 --
 .../project/project-list-element.component.ts |  6 +--
 ...ct-search-result-list-element.component.ts |  6 +--
 .../metadata-representation.decorator.ts      |  4 +-
 .../object-collection.component.html          |  3 ++
 .../object-collection.component.ts            |  1 +
 .../shared/listable-object.model.ts           |  2 +-
 ...table-object-component-loader.component.ts |  2 +-
 .../listable-object.decorator.ts              | 47 +++++++++++--------
 ...-search-result-detail-element.component.ts |  6 +++
 .../object-detail.component.html              |  6 +--
 .../object-detail.component.scss              |  4 +-
 .../object-detail/object-detail.component.ts  |  2 +
 .../publication-grid-element.component.ts     |  4 +-
 .../object-grid/object-grid.component.html    |  6 +--
 .../object-grid/object-grid.component.scss    |  2 +-
 .../object-grid/object-grid.component.ts      |  4 +-
 ...-search-result-grid-element.component.html |  2 +-
 .../publication-list-element.component.ts     |  4 +-
 .../item-type-badge.component.html            |  2 +-
 .../item-metadata-list-element.component.ts   |  4 +-
 ...in-text-metadata-list-element.component.ts |  6 +--
 ...ed-search-result-list-element.component.ts |  1 +
 ...esult-list-element-submission.component.ts | 10 ++--
 ...ol-search-result-list-element.component.ts |  1 +
 ...em-search-result-list-element.component.ts |  1 +
 ...em-search-result-list-element.component.ts |  1 +
 .../object-list/object-list.component.html    |  2 +-
 .../object-list/object-list.component.ts      |  2 +
 ...on-search-result-list-element.component.ts |  1 -
 ...-search-result-list-element.component.html | 26 +++++-----
 48 files changed, 131 insertions(+), 102 deletions(-)

diff --git a/src/app/+item-page/simple/item-types/publication/publication.component.ts b/src/app/+item-page/simple/item-types/publication/publication.component.ts
index 8f0bdc141d..5bc118a4ca 100644
--- a/src/app/+item-page/simple/item-types/publication/publication.component.ts
+++ b/src/app/+item-page/simple/item-types/publication/publication.component.ts
@@ -5,10 +5,10 @@ import { ItemComponent } from '../shared/item.component';
 import { MetadataRepresentation } from '../../../../core/shared/metadata-representation/metadata-representation.model';
 import { getRelatedItemsByTypeLabel } from '../shared/item-relationships-utils';
 import { ViewMode } from '../../../../core/shared/view-mode.model';
-import { DEFAULT_ITEM_TYPE, listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
 
 @listableObjectComponent('Publication', ViewMode.StandalonePage)
-@listableObjectComponent(DEFAULT_ITEM_TYPE, ViewMode.StandalonePage)
+@listableObjectComponent(Item.name, ViewMode.StandalonePage)
 @Component({
   selector: 'ds-publication',
   styleUrls: ['./publication.component.scss'],
diff --git a/src/app/+item-page/simple/metadata-representation-list/metadata-representation-list.component.html b/src/app/+item-page/simple/metadata-representation-list/metadata-representation-list.component.html
index 0bc7d51244..c875f7fe32 100644
--- a/src/app/+item-page/simple/metadata-representation-list/metadata-representation-list.component.html
+++ b/src/app/+item-page/simple/metadata-representation-list/metadata-representation-list.component.html
@@ -1,5 +1,5 @@
 <ds-metadata-field-wrapper *ngIf="representations && representations.length > 0" [label]="label">
-  <ds-listable-object-component-loader *ngFor="let rep of representations"
-                           [object]="rep" [viewMode]="viewMode">
-  </ds-listable-object-component-loader>
+    <ds-metadata-representation-loader *ngFor="let rep of representations"
+                                       [mdRepresentation]="rep">
+    </ds-metadata-representation-loader>
 </ds-metadata-field-wrapper>
diff --git a/src/app/+my-dspace-page/my-dspace-page.module.ts b/src/app/+my-dspace-page/my-dspace-page.module.ts
index 6d2b8c0614..685f1155be 100644
--- a/src/app/+my-dspace-page/my-dspace-page.module.ts
+++ b/src/app/+my-dspace-page/my-dspace-page.module.ts
@@ -58,7 +58,8 @@ import { PoolSearchResultDetailElementComponent } from '../shared/object-detail/
     WorkspaceItemSearchResultDetailElementComponent,
     WorkflowItemSearchResultDetailElementComponent,
     ClaimedTaskSearchResultDetailElementComponent,
-    PoolSearchResultDetailElementComponent
+    PoolSearchResultDetailElementComponent,
+    ItemSearchResultListElementSubmissionComponent
   ]
 })
 
diff --git a/src/app/+my-dspace-page/my-dspace-results/my-dspace-results.component.html b/src/app/+my-dspace-page/my-dspace-results/my-dspace-results.component.html
index 132a0d2204..63eb0ff9a7 100644
--- a/src/app/+my-dspace-page/my-dspace-results/my-dspace-results.component.html
+++ b/src/app/+my-dspace-page/my-dspace-results/my-dspace-results.component.html
@@ -4,7 +4,8 @@
     [hasBorder]="hasBorder"
     [sortConfig]="searchConfig.sort"
     [objects]="searchResults"
-    [hideGear]="true">
+    [hideGear]="true"
+    [context]="context">
   </ds-viewable-collection>
 </div>
 <ds-loading *ngIf="isLoading()" message="{{'loading.mydspace-results' | translate}}"></ds-loading>
diff --git a/src/app/+my-dspace-page/my-dspace-results/my-dspace-results.component.ts b/src/app/+my-dspace-page/my-dspace-results/my-dspace-results.component.ts
index a72e797b35..61669277cf 100644
--- a/src/app/+my-dspace-page/my-dspace-results/my-dspace-results.component.ts
+++ b/src/app/+my-dspace-page/my-dspace-results/my-dspace-results.component.ts
@@ -7,6 +7,7 @@ import { PaginatedList } from '../../core/data/paginated-list';
 import { ViewMode } from '../../core/shared/view-mode.model';
 import { isEmpty } from '../../shared/empty.util';
 import { SearchResult } from '../../+search-page/search-result.model';
+import { Context } from '../../core/shared/context.model';
 
 /**
  * Component that represents all results for mydspace page
@@ -36,6 +37,7 @@ export class MyDSpaceResultsComponent {
    */
   @Input() viewMode: ViewMode;
 
+  context = Context.Submission;
   /**
    * A boolean representing if search results entry are separated by a line
    */
diff --git a/src/app/+search-page/search-result.model.ts b/src/app/+search-page/search-result.model.ts
index 0006426119..693f81e65b 100644
--- a/src/app/+search-page/search-result.model.ts
+++ b/src/app/+search-page/search-result.model.ts
@@ -16,7 +16,7 @@ export class SearchResult<T extends DSpaceObject> implements ListableObject {
    */
   hitHighlights: MetadataMap;
 
-  getRenderType(): string {
-    return this.indexableObject.getRenderType() + 'SearchResult';
+  getRenderTypes(): string[] {
+    return this.indexableObject.getRenderTypes().map((type) => type +'SearchResult');
   }
 }
diff --git a/src/app/core/metadata/metadata-field.model.ts b/src/app/core/metadata/metadata-field.model.ts
index e451398fab..b4a20924b9 100644
--- a/src/app/core/metadata/metadata-field.model.ts
+++ b/src/app/core/metadata/metadata-field.model.ts
@@ -51,7 +51,7 @@ export class MetadataField implements ListableObject {
     return key;
   }
 
-  getRenderType(): string {
-    return this.constructor.name;
+  getRenderTypes(): string[] {
+    return [this.constructor.name];
   }
 }
diff --git a/src/app/core/metadata/metadata-schema.model.ts b/src/app/core/metadata/metadata-schema.model.ts
index 6859f580c0..f1551327a5 100644
--- a/src/app/core/metadata/metadata-schema.model.ts
+++ b/src/app/core/metadata/metadata-schema.model.ts
@@ -27,7 +27,7 @@ export class MetadataSchema implements ListableObject {
    */
   namespace: string;
 
-  getRenderType(): string {
-    return this.constructor.name;
+  getRenderTypes(): string[] {
+    return [this.constructor.name];
   }
 }
diff --git a/src/app/core/shared/browse-entry.model.ts b/src/app/core/shared/browse-entry.model.ts
index 067fac2bff..a8b41894f5 100644
--- a/src/app/core/shared/browse-entry.model.ts
+++ b/src/app/core/shared/browse-entry.model.ts
@@ -29,7 +29,7 @@ export class BrowseEntry implements ListableObject {
    */
   count: number;
 
-  getRenderType(): string {
-    return (this as any).type.value;
+  getRenderTypes(): string[] {
+    return [this.constructor.name];
   }
 }
diff --git a/src/app/core/shared/dspace-object.model.ts b/src/app/core/shared/dspace-object.model.ts
index 0a22315598..16f4002b7f 100644
--- a/src/app/core/shared/dspace-object.model.ts
+++ b/src/app/core/shared/dspace-object.model.ts
@@ -146,7 +146,7 @@ export class DSpaceObject implements CacheableObject, ListableObject {
     });
   }
 
-  getRenderType(): string {
-    return this.constructor.name;
+  getRenderTypes(): string[] {
+    return [this.constructor.name];
   }
 }
diff --git a/src/app/core/shared/item.model.ts b/src/app/core/shared/item.model.ts
index 28a889a18f..2f553a58db 100644
--- a/src/app/core/shared/item.model.ts
+++ b/src/app/core/shared/item.model.ts
@@ -5,7 +5,7 @@ import { DSpaceObject } from './dspace-object.model';
 import { Collection } from './collection.model';
 import { RemoteData } from '../data/remote-data';
 import { Bitstream } from './bitstream.model';
-import { hasValue, isNotEmpty } from '../../shared/empty.util';
+import { hasValue, isEmpty, isNotEmpty } from '../../shared/empty.util';
 import { PaginatedList } from '../data/paginated-list';
 import { Relationship } from './item-relationships/relationship.model';
 import { ResourceType } from './resource-type';
@@ -110,11 +110,11 @@ export class Item extends DSpaceObject {
       }));
   }
 
-  getRenderType(): string {
-    const entityType = this.firstMetadataValue('relationship.type');
-    if (isNotEmpty(entityType)) {
-      return entityType;
+  getRenderTypes(): string[] {
+    let entityType = this.firstMetadataValue('relationship.type');
+    if (isEmpty(entityType)) {
+      entityType = 'Publication';
     }
-    return 'Publication';
+    return [entityType, ...super.getRenderTypes()];
   }
 }
diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html
index ed5d11ef71..23cc3ae285 100644
--- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html
+++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html
@@ -7,7 +7,7 @@
             </div>
         </a>
         <div class="card-body">
-            <ds-item-type-badge [object]="object"></ds-item-type-badge>
+            <ds-item-type-badge [object]="dso"></ds-item-type-badge>
             <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
                 <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
             </ds-truncatable-part>
diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html
index 4dea5fc879..f9ee1c51b7 100644
--- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html
+++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html
@@ -7,7 +7,7 @@
                 </div>
             </a>
             <div class="card-body">
-                <ds-item-type-badge [object]="object"></ds-item-type-badge>
+                <ds-item-type-badge [object]="dso"></ds-item-type-badge>
                 <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
                     <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
                 </ds-truncatable-part>
diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html
index 2474c27b6c..72faf6a864 100644
--- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html
+++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html
@@ -7,7 +7,7 @@
             </div>
         </a>
         <div class="card-body">
-            <ds-item-type-badge [object]="object"></ds-item-type-badge>
+            <ds-item-type-badge [object]="dso"></ds-item-type-badge>
             <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
                 <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
             </ds-truncatable-part>
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/orgunit/orgunit-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/orgunit/orgunit-search-result-grid-element.component.html
index f3fc0d269b..675044294a 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/orgunit/orgunit-search-result-grid-element.component.html
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/orgunit/orgunit-search-result-grid-element.component.html
@@ -7,7 +7,7 @@
             </div>
         </a>
         <div class="card-body">
-            <ds-item-type-badge [object]="object"></ds-item-type-badge>
+            <ds-item-type-badge [object]="dso"></ds-item-type-badge>
             <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
                 <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('organization.legalName')"></h4>
             </ds-truncatable-part>
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html
index 523f524834..378bf43ec2 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html
@@ -7,7 +7,7 @@
             </div>
         </a>
         <div class="card-body">
-            <ds-item-type-badge [object]="object"></ds-item-type-badge>
+            <ds-item-type-badge [object]="dso"></ds-item-type-badge>
             <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
                 <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('person.familyName') + ', ' + dso.firstMetadataValue('person.givenName')"></h4>
             </ds-truncatable-part>
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html
index c409a850cd..4e98f94fb9 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html
@@ -7,7 +7,7 @@
             </div>
         </a>
         <div class="card-body">
-            <ds-item-type-badge [object]="object"></ds-item-type-badge>
+            <ds-item-type-badge [object]="dso"></ds-item-type-badge>
             <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
                 <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
             </ds-truncatable-part>
diff --git a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-item-page-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-item-page-list-element.component.ts
index 62a257010f..708139da95 100644
--- a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-item-page-list-element.component.ts
+++ b/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-item-page-list-element.component.ts
@@ -1,7 +1,4 @@
 import { Component } from '@angular/core';
-import { ViewMode } from '../../../../core/shared/view-mode.model';
-import { DEFAULT_ITEM_TYPE, listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
-import { Context } from '../../../../core/shared/context.model';
 import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
 import { Item } from '../../../../core/shared/item.model';
 import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
diff --git a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.ts
index 04d66dcf34..5f158158d8 100644
--- a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.ts
+++ b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.ts
@@ -1,10 +1,10 @@
 import { Component } from '@angular/core';
-import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
-import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
 import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
 import { Item } from '../../../../core/shared/item.model';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
 
-@metadataRepresentationComponent('Project', MetadataRepresentationType.PlainText)
+@listableObjectComponent('Project', ViewMode.ListElement)
 @Component({
   selector: 'ds-project-list-element',
   styleUrls: ['./project-list-element.component.scss'],
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.ts
index 5fd5d57d81..c00ae53d6c 100644
--- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.ts
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.ts
@@ -1,11 +1,11 @@
 import { Component } from '@angular/core';
 import { SearchResultListElementComponent } from '../../../../../shared/object-list/search-result-list-element/search-result-list-element.component';
 import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
-import { metadataRepresentationComponent } from '../../../../../shared/metadata-representation/metadata-representation.decorator';
-import { MetadataRepresentationType } from '../../../../../core/shared/metadata-representation/metadata-representation.model';
 import { Item } from '../../../../../core/shared/item.model';
+import { listableObjectComponent } from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../../core/shared/view-mode.model';
 
-@metadataRepresentationComponent('ProjectSearchResult', MetadataRepresentationType.PlainText)
+@listableObjectComponent('ProjectSearchResult', ViewMode.ListElement)
 @Component({
   selector: 'ds-project-search-result-list-element',
   styleUrls: ['./project-search-result-list-element.component.scss'],
diff --git a/src/app/shared/metadata-representation/metadata-representation.decorator.ts b/src/app/shared/metadata-representation/metadata-representation.decorator.ts
index 42495fec81..913599b989 100644
--- a/src/app/shared/metadata-representation/metadata-representation.decorator.ts
+++ b/src/app/shared/metadata-representation/metadata-representation.decorator.ts
@@ -1,7 +1,7 @@
 import { MetadataRepresentationType } from '../../core/shared/metadata-representation/metadata-representation.model';
 import { hasNoValue, hasValue } from '../empty.util';
 import { Context } from '../../core/shared/context.model';
-import { DEFAULT_ITEM_TYPE } from '../object-collection/shared/listable-object/listable-object.decorator';
+import { Item } from '../../core/shared/item.model';
 
 const map = new Map();
 
@@ -39,5 +39,5 @@ export function getMetadataRepresentationComponent(entityType: string, mdReprese
     }
     return mapForEntity.get(DEFAULT_REPRESENTATION_TYPE).get(DEFAULT_CONTEXT);
   }
-  return map.get(DEFAULT_ITEM_TYPE).get(DEFAULT_REPRESENTATION_TYPE).get(DEFAULT_CONTEXT);
+  return map.get(Item.name).get(DEFAULT_REPRESENTATION_TYPE).get(DEFAULT_CONTEXT);
 }
\ No newline at end of file
diff --git a/src/app/shared/object-collection/object-collection.component.html b/src/app/shared/object-collection/object-collection.component.html
index b3175aef2b..cd845b5b47 100644
--- a/src/app/shared/object-collection/object-collection.component.html
+++ b/src/app/shared/object-collection/object-collection.component.html
@@ -3,6 +3,7 @@
                 [objects]="objects"
                 [hasBorder]="hasBorder"
                 [hideGear]="hideGear"
+                [context]="context"
                 (paginationChange)="onPaginationChange($event)"
                 (pageChange)="onPageChange($event)"
                 (pageSizeChange)="onPageSizeChange($event)"
@@ -15,6 +16,7 @@
                 [sortConfig]="sortConfig"
                 [objects]="objects"
                 [hideGear]="hideGear"
+                [context]="context"
                 (paginationChange)="onPaginationChange($event)"
                 (pageChange)="onPageChange($event)"
                 (pageSizeChange)="onPageSizeChange($event)"
@@ -27,6 +29,7 @@
                   [sortConfig]="sortConfig"
                   [objects]="objects"
                   [hideGear]="hideGear"
+                  [context]="context"
                   *ngIf="(currentMode$ | async) === viewModeEnum.DetailedListElement">
 </ds-object-detail>
 
diff --git a/src/app/shared/object-collection/object-collection.component.ts b/src/app/shared/object-collection/object-collection.component.ts
index 2b25915f1e..175bd3ea53 100644
--- a/src/app/shared/object-collection/object-collection.component.ts
+++ b/src/app/shared/object-collection/object-collection.component.ts
@@ -24,6 +24,7 @@ export class ObjectCollectionComponent implements OnInit {
   @Input() sortConfig: SortOptions;
   @Input() hasBorder = false;
   @Input() hideGear = false;
+  @Input() context: string;
   pageInfo: Observable<PageInfo>;
   /**
    * An event fired when the page is changed.
diff --git a/src/app/shared/object-collection/shared/listable-object.model.ts b/src/app/shared/object-collection/shared/listable-object.model.ts
index 62ab24ae33..cef068e47c 100644
--- a/src/app/shared/object-collection/shared/listable-object.model.ts
+++ b/src/app/shared/object-collection/shared/listable-object.model.ts
@@ -1,5 +1,5 @@
 import { TypedObject } from '../../../core/cache/object-cache.reducer';
 
 export interface ListableObject extends TypedObject {
-  getRenderType(): string;
+  getRenderTypes(): string[];
 }
diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts
index 00e78a3d50..45367df857 100644
--- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts
+++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts
@@ -49,6 +49,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit {
    * @returns {string}
    */
   private getComponent(): GenericConstructor<Component> {
-    return getListableObjectComponent(this.object.getRenderType(), this.viewMode)
+    return getListableObjectComponent(this.object.getRenderTypes(), this.viewMode, this.context)
   }
 }
diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object.decorator.ts b/src/app/shared/object-collection/shared/listable-object/listable-object.decorator.ts
index 092bf8068f..29cd1287a1 100644
--- a/src/app/shared/object-collection/shared/listable-object/listable-object.decorator.ts
+++ b/src/app/shared/object-collection/shared/listable-object/listable-object.decorator.ts
@@ -1,15 +1,12 @@
 import { ViewMode } from '../../../../core/shared/view-mode.model';
-import { GenericConstructor } from '../../../../core/shared/generic-constructor';
-import { ListableObject } from '../listable-object.model';
 import { Context } from '../../../../core/shared/context.model';
 import { hasNoValue, hasValue } from '../../../empty.util';
 import { DEFAULT_CONTEXT } from '../../../metadata-representation/metadata-representation.decorator';
 
-export const DEFAULT_ITEM_TYPE = 'Default';
 export const DEFAULT_VIEW_MODE = ViewMode.ListElement;
 
 
-const listElementMap = new Map();
+const map = new Map();
 
 /**
  * Decorator used for rendering simple item pages by type and viewMode (and optionally a representationType)
@@ -21,30 +18,40 @@ export function listableObjectComponent(objectType: string, viewMode: ViewMode,
     if (hasNoValue(objectType)) {
       return;
     }
-    if (hasNoValue(listElementMap.get(objectType))) {
-      listElementMap.set(objectType, new Map());
+    if (hasNoValue(map.get(objectType))) {
+      map.set(objectType, new Map());
     }
-    if (hasNoValue(listElementMap.get(objectType).get(viewMode))) {
-      listElementMap.get(objectType).set(viewMode, new Map());
+    if (hasNoValue(map.get(objectType).get(viewMode))) {
+      map.get(objectType).set(viewMode, new Map());
     }
-    listElementMap.get(objectType).get(viewMode).set(context, component);
+    map.get(objectType).get(viewMode).set(context, component);
   };
 }
 
 
-export function getListableObjectComponent(entityType: GenericConstructor<ListableObject> | string, viewMode: ViewMode, context: Context = DEFAULT_CONTEXT) {
-  const mapForType = listElementMap.get(entityType);
-  if (hasValue(mapForType)) {
-    const typeAndMDRepMap = mapForType.get(viewMode);
-    if (hasValue(typeAndMDRepMap)) {
-      if (hasValue(typeAndMDRepMap.get(context))) {
-        return typeAndMDRepMap.get(context);
+export function getListableObjectComponent(types: string[], viewMode: ViewMode, context: Context = DEFAULT_CONTEXT) {
+  let bestMatch = undefined;
+  let bestMatchValue = 0;
+  for (let i = 0; i < types.length; i++) {
+    const typeMap = map.get(types[i]);
+    if (hasValue(typeMap)) {
+      const typeModeMap = typeMap.get(viewMode);
+      if (hasValue(typeModeMap)) {
+        if (hasValue(typeModeMap.get(context))) {
+          console.log(typeModeMap.get(context));
+          return typeModeMap.get(context);
+        }
+        if (bestMatchValue < 2 && hasValue(typeModeMap.get(DEFAULT_CONTEXT))) {
+          bestMatchValue = 2;
+          bestMatch = typeModeMap.get(DEFAULT_CONTEXT);
+        }
       }
-      if (hasValue(typeAndMDRepMap.get(DEFAULT_CONTEXT))) {
-        return typeAndMDRepMap.get(DEFAULT_CONTEXT);
+      if (bestMatchValue < 1 && hasValue(typeMap.get(DEFAULT_VIEW_MODE).get(DEFAULT_CONTEXT))) {
+        bestMatchValue = 1;
+        bestMatch = typeMap.get(DEFAULT_VIEW_MODE).get(DEFAULT_CONTEXT);
       }
     }
-    return mapForType.get(DEFAULT_VIEW_MODE).get(DEFAULT_CONTEXT);
   }
-  return listElementMap.get(DEFAULT_ITEM_TYPE).get(DEFAULT_VIEW_MODE).get(DEFAULT_CONTEXT);
+  console.log(bestMatch);
+  return bestMatch;
 }
\ No newline at end of file
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts
index c0e3db6348..4a9b4d6380 100644
--- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts
@@ -17,6 +17,12 @@ import { ItemSearchResult } from '../../../object-collection/shared/item-search-
 })
 
 @listableObjectComponent('PublicationSearchResult', ViewMode.DetailedListElement)
+@listableObjectComponent('OrgUnitSearchResult', ViewMode.DetailedListElement)
+@listableObjectComponent('PersonSearchResult', ViewMode.DetailedListElement)
+@listableObjectComponent('JournalSearchResult', ViewMode.DetailedListElement)
+@listableObjectComponent('JournalIssueSearchResult', ViewMode.DetailedListElement)
+@listableObjectComponent('JournalVolumeSearchResult', ViewMode.DetailedListElement)
+@listableObjectComponent('ProjectSearchResult', ViewMode.DetailedListElement)
 export class ItemSearchResultDetailElementComponent extends SearchResultDetailElementComponent<ItemSearchResult, Item> {
 
   /**
diff --git a/src/app/shared/object-detail/object-detail.component.html b/src/app/shared/object-detail/object-detail.component.html
index 400781b6d2..7fef7d9689 100644
--- a/src/app/shared/object-detail/object-detail.component.html
+++ b/src/app/shared/object-detail/object-detail.component.html
@@ -14,9 +14,9 @@
     <div class="row mt-2" *ngIf="objects?.hasSucceeded" @fadeIn>
       <div class="col"
            *ngFor="let object of objects?.payload?.page">
-        <ds-listable-object-component-loader [object]="object" [viewMode]="viewMode"></ds-listable-object-component-loader>
+        <ds-listable-object-component-loader [object]="object" [viewMode]="viewMode" [context]="context"></ds-listable-object-component-loader>
       </div>
     </div>
-  <ds-error *ngIf="objects.hasFailed | async" message="{{'error.objects' | translate}}"></ds-error>
-  <ds-loading *ngIf="objects.isLoading | async" message="{{'loading.objects' | translate}}"></ds-loading>
+  <ds-error *ngIf="objects.hasFailed" message="{{'error.objects' | translate}}"></ds-error>
+  <ds-loading *ngIf="objects.isLoading" message="{{'loading.objects' | translate}}"></ds-loading>
 </ds-pagination>
diff --git a/src/app/shared/object-detail/object-detail.component.scss b/src/app/shared/object-detail/object-detail.component.scss
index 9a077e3e08..e0a4e3abdc 100644
--- a/src/app/shared/object-detail/object-detail.component.scss
+++ b/src/app/shared/object-detail/object-detail.component.scss
@@ -1,9 +1,9 @@
 @import '../../../styles/variables';
 @import '../../../styles/mixins';
 
-ds-wrapper-detail-element ::ng-deep {
+:host::ng-deep {
   div.thumbnail > img {
     height: $card-thumbnail-height;
     width: 100%;
   }
-}
+}
\ No newline at end of file
diff --git a/src/app/shared/object-detail/object-detail.component.ts b/src/app/shared/object-detail/object-detail.component.ts
index 24df1bf504..93da1bcce6 100644
--- a/src/app/shared/object-detail/object-detail.component.ts
+++ b/src/app/shared/object-detail/object-detail.component.ts
@@ -16,6 +16,7 @@ import { ListableObject } from '../object-collection/shared/listable-object.mode
 
 import { PaginationComponentOptions } from '../pagination/pagination-component-options.model';
 import { ViewMode } from '../../core/shared/view-mode.model';
+import { Context } from '../../core/shared/context.model';
 
 /**
  * This component renders a paginated set of results in the detail view.
@@ -50,6 +51,7 @@ export class ObjectDetailComponent {
    * A boolean representing if to hide pagination when there is only a page
    */
   @Input() hidePagerWhenSinglePage = true;
+  @Input() context: Context;
 
   /**
    * The list of objects to paginate
diff --git a/src/app/shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.ts b/src/app/shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.ts
index 0893d6b121..4927b18b9d 100644
--- a/src/app/shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.ts
+++ b/src/app/shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.ts
@@ -1,12 +1,12 @@
 import { Component } from '@angular/core';
 import { focusShadow } from '../../../../animations/focus';
 import { ViewMode } from '../../../../../core/shared/view-mode.model';
-import { DEFAULT_ITEM_TYPE, listableObjectComponent } from '../../../../object-collection/shared/listable-object/listable-object.decorator';
+import { listableObjectComponent } from '../../../../object-collection/shared/listable-object/listable-object.decorator';
 import { AbstractListableElementComponent } from '../../../../object-collection/shared/object-collection-element/abstract-listable-element.component';
 import { Item } from '../../../../../core/shared/item.model';
 
 @listableObjectComponent('Publication', ViewMode.GridElement)
-@listableObjectComponent(DEFAULT_ITEM_TYPE, ViewMode.GridElement)
+@listableObjectComponent(Item.name, ViewMode.GridElement)
 @Component({
   selector: 'ds-publication-grid-element',
   styleUrls: ['./publication-grid-element.component.scss'],
diff --git a/src/app/shared/object-grid/object-grid.component.html b/src/app/shared/object-grid/object-grid.component.html
index c5cd34608f..f527aa3555 100644
--- a/src/app/shared/object-grid/object-grid.component.html
+++ b/src/app/shared/object-grid/object-grid.component.html
@@ -13,11 +13,11 @@
     <div class="card-columns row" *ngIf="objects?.hasSucceeded">
       <div class="card-column col col-sm-6 col-lg-4" *ngFor="let column of (columns$ | async)" @fadeIn>
         <div class="card-element" *ngFor="let object of column">
-          <ds-listable-object-component-loader [object]="object" [viewMode]="viewMode"></ds-listable-object-component-loader>
+          <ds-listable-object-component-loader [object]="object" [viewMode]="viewMode" [context]="context"></ds-listable-object-component-loader>
         </div>
       </div>
     </div>
-  <ds-error *ngIf="objects.hasFailed | async" message="{{'error.objects' | translate}}"></ds-error>
-  <ds-loading *ngIf="objects.isLoading | async" message="{{'loading.objects' | translate}}"></ds-loading>
+  <ds-error *ngIf="objects.hasFailed" message="{{'error.objects' | translate}}"></ds-error>
+  <ds-loading *ngIf="objects.isLoading" message="{{'loading.objects' | translate}}"></ds-loading>
 </ds-pagination>
 
diff --git a/src/app/shared/object-grid/object-grid.component.scss b/src/app/shared/object-grid/object-grid.component.scss
index 8f19309d89..fb883a1f07 100644
--- a/src/app/shared/object-grid/object-grid.component.scss
+++ b/src/app/shared/object-grid/object-grid.component.scss
@@ -1,6 +1,6 @@
 $ds-wrapper-grid-spacing: $spacer/2;
 
-ds-wrapper-grid-element ::ng-deep {
+:host ::ng-deep {
   div.thumbnail > img {
     height: $card-thumbnail-height;
     width: 100%;
diff --git a/src/app/shared/object-grid/object-grid.component.ts b/src/app/shared/object-grid/object-grid.component.ts
index d3bfbb8e58..52f6e29d14 100644
--- a/src/app/shared/object-grid/object-grid.component.ts
+++ b/src/app/shared/object-grid/object-grid.component.ts
@@ -21,6 +21,7 @@ import { ListableObject } from '../object-collection/shared/listable-object.mode
 
 import { PaginationComponentOptions } from '../pagination/pagination-component-options.model';
 import { ViewMode } from '../../core/shared/view-mode.model';
+import { Context } from '../../core/shared/context.model';
 
 @Component({
   changeDetection: ChangeDetectionStrategy.Default,
@@ -32,12 +33,13 @@ import { ViewMode } from '../../core/shared/view-mode.model';
 })
 
 export class ObjectGridComponent implements OnInit {
-  viewMode = ViewMode.ListElement;
+  viewMode = ViewMode.GridElement;
 
   @Input() config: PaginationComponentOptions;
   @Input() sortConfig: SortOptions;
   @Input() hideGear = false;
   @Input() hidePagerWhenSinglePage = true;
+  @Input() context: Context;
   private _objects$: BehaviorSubject<RemoteData<PaginatedList<ListableObject>>>;
 
   @Input() set objects(objects: RemoteData<PaginatedList<ListableObject>>) {
diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.html
index d5b481f13c..e0eedc22fc 100644
--- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.html
+++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.html
@@ -7,7 +7,7 @@
             </div>
         </a>
         <div class="card-body">
-            <ds-item-type-badge [object]="object"></ds-item-type-badge>
+            <ds-item-type-badge [object]="dso"></ds-item-type-badge>
             <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
                 <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
             </ds-truncatable-part>
diff --git a/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.ts b/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.ts
index 9c1b27e785..73cdf978ac 100644
--- a/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.ts
+++ b/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.ts
@@ -1,11 +1,11 @@
 import { Component } from '@angular/core';
 import { ViewMode } from '../../../../../core/shared/view-mode.model';
-import { DEFAULT_ITEM_TYPE, listableObjectComponent } from '../../../../object-collection/shared/listable-object/listable-object.decorator';
+import { listableObjectComponent } from '../../../../object-collection/shared/listable-object/listable-object.decorator';
 import { AbstractListableElementComponent } from '../../../../object-collection/shared/object-collection-element/abstract-listable-element.component';
 import { Item } from '../../../../../core/shared/item.model';
 
 @listableObjectComponent('Publication', ViewMode.ListElement)
-@listableObjectComponent(DEFAULT_ITEM_TYPE, ViewMode.ListElement)
+@listableObjectComponent(Item.name, ViewMode.ListElement)
 @Component({
   selector: 'ds-publication-list-element',
   styleUrls: ['./publication-list-element.component.scss'],
diff --git a/src/app/shared/object-list/item-type-badge/item-type-badge.component.html b/src/app/shared/object-list/item-type-badge/item-type-badge.component.html
index 35d7663801..947970b7e1 100644
--- a/src/app/shared/object-list/item-type-badge/item-type-badge.component.html
+++ b/src/app/shared/object-list/item-type-badge/item-type-badge.component.html
@@ -1,3 +1,3 @@
-<div *ngIf="object && object.indexableObject && object.indexableObject.firstMetadataValue('relationship.type') as type">
+<div *ngIf="object && object.firstMetadataValue('relationship.type') as type">
   <span class="badge badge-light">{{ type.toLowerCase() + '.listelement.badge' | translate }}</span>
 </div>
diff --git a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.ts b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.ts
index 25e97d59f6..08ff67e3f1 100644
--- a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.ts
+++ b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.ts
@@ -3,9 +3,9 @@ import { Component } from '@angular/core';
 import { MetadataRepresentationListElementComponent } from '../metadata-representation-list-element.component';
 import { ViewMode } from '../../../../core/shared/view-mode.model';
 import { metadataRepresentationComponent } from '../../../metadata-representation/metadata-representation.decorator';
-import { DEFAULT_ITEM_TYPE } from '../../../object-collection/shared/listable-object/listable-object.decorator';
+import { Item } from '../../../../core/shared/item.model';
 
-@metadataRepresentationComponent(DEFAULT_ITEM_TYPE, MetadataRepresentationType.Item)
+@metadataRepresentationComponent(Item.name, MetadataRepresentationType.Item)
 @Component({
   selector: 'ds-item-metadata-list-element',
   templateUrl: './item-metadata-list-element.component.html'
diff --git a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts
index 20d7c9739e..50e2c2a60b 100644
--- a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts
+++ b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts
@@ -2,11 +2,11 @@ import { MetadataRepresentationType } from '../../../../core/shared/metadata-rep
 import { Component } from '@angular/core';
 import { MetadataRepresentationListElementComponent } from '../metadata-representation-list-element.component';
 import { metadataRepresentationComponent } from '../../../metadata-representation/metadata-representation.decorator';
-import { DEFAULT_ITEM_TYPE } from '../../../object-collection/shared/listable-object/listable-object.decorator';
+import { Item } from '../../../../core/shared/item.model';
 
-@metadataRepresentationComponent(DEFAULT_ITEM_TYPE, MetadataRepresentationType.PlainText)
+@metadataRepresentationComponent(Item.name, MetadataRepresentationType.PlainText)
 // For now, authority controlled fields are rendered the same way as plain text fields
-@metadataRepresentationComponent(DEFAULT_ITEM_TYPE, MetadataRepresentationType.AuthorityControlled)
+@metadataRepresentationComponent(Item.name, MetadataRepresentationType.AuthorityControlled)
 @Component({
   selector: 'ds-plain-text-metadata-list-element',
   templateUrl: './plain-text-metadata-list-element.component.html'
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts
index 5668ece14e..1e74487a97 100644
--- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts
+++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts
@@ -46,6 +46,7 @@ export class ClaimedSearchResultListElementComponent extends SearchResultListEle
    * Initialize all instance variables
    */
   ngOnInit() {
+    super.ngOnInit();
     this.initWorkflowItem(this.dso.workflowitem as Observable<RemoteData<WorkflowItem>>);
   }
 
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts
index 6ff9afd0d7..31d2977304 100644
--- a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts
+++ b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts
@@ -1,4 +1,4 @@
-import { Component } from '@angular/core';
+import { Component, OnInit } from '@angular/core';
 
 import { Item } from '../../../../core/shared/item.model';
 import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
@@ -17,12 +17,14 @@ import { SearchResultListElementComponent } from '../../search-result-list-eleme
   templateUrl: './item-search-result-list-element-submission.component.html'
 })
 
-@listableObjectComponent('PublicationSearchResult', ViewMode.ListElement, Context.Submission)
-export class ItemSearchResultListElementSubmissionComponent extends SearchResultListElementComponent<ItemSearchResult, Item> {
+@listableObjectComponent(ItemSearchResult.name, ViewMode.ListElement, Context.Submission)
+export class ItemSearchResultListElementSubmissionComponent extends SearchResultListElementComponent<ItemSearchResult, Item> implements OnInit {
+  ngOnInit() {
+    super.ngOnInit();
+  }
 
   /**
    * Represent item's status
    */
   public status = MyDspaceItemStatusType.ARCHIVED;
-
 }
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts
index 3ec85ae040..92e0ea3818 100644
--- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts
+++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts
@@ -51,6 +51,7 @@ export class PoolSearchResultListElementComponent extends SearchResultListElemen
    * Initialize all instance variables
    */
   ngOnInit() {
+    super.ngOnInit();
     this.initWorkflowItem(this.dso.workflowitem as Observable<RemoteData<WorkflowItem>>);
   }
 
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts
index d5ac65c740..6a9013b9af 100644
--- a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts
+++ b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts
@@ -39,6 +39,7 @@ export class WorkflowItemSearchResultListElementComponent extends SearchResultLi
    * Initialize all instance variables
    */
   ngOnInit() {
+    super.ngOnInit();
     this.initItem(this.dso.item as Observable<RemoteData<Item>> );
   }
 
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts
index e4d8409f1c..dd32f56aba 100644
--- a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts
+++ b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts
@@ -39,6 +39,7 @@ export class WorkspaceItemSearchResultListElementComponent extends SearchResultL
    * Initialize all instance variables
    */
   ngOnInit() {
+    super.ngOnInit();
     this.initItem(this.dso.item as Observable<RemoteData<Item>>);
   }
 
diff --git a/src/app/shared/object-list/object-list.component.html b/src/app/shared/object-list/object-list.component.html
index b19daa035a..daec1db8ad 100644
--- a/src/app/shared/object-list/object-list.component.html
+++ b/src/app/shared/object-list/object-list.component.html
@@ -12,7 +12,7 @@
   (paginationChange)="onPaginationChange($event)">
   <ul *ngIf="objects?.hasSucceeded" class="list-unstyled">
       <li *ngFor="let object of objects?.payload?.page; let i = index; let last = last" class="mt-4 mb-4" [class.border-bottom]="hasBorder && !last">
-        <ds-listable-object-component-loader [object]="object" [viewMode]="viewMode" [index]="i"></ds-listable-object-component-loader>
+        <ds-listable-object-component-loader [object]="object" [viewMode]="viewMode" [index]="i" [context]="context"></ds-listable-object-component-loader>
       </li>
   </ul>
 </ds-pagination>
diff --git a/src/app/shared/object-list/object-list.component.ts b/src/app/shared/object-list/object-list.component.ts
index cf4728464a..0776134e83 100644
--- a/src/app/shared/object-list/object-list.component.ts
+++ b/src/app/shared/object-list/object-list.component.ts
@@ -13,6 +13,7 @@ import { fadeIn } from '../animations/fade';
 import { ListableObject } from '../object-collection/shared/listable-object.model';
 import { PaginationComponentOptions } from '../pagination/pagination-component-options.model';
 import { ViewMode } from '../../core/shared/view-mode.model';
+import { Context } from '../../core/shared/context.model';
 
 @Component({
   changeDetection: ChangeDetectionStrategy.Default,
@@ -29,6 +30,7 @@ export class ObjectListComponent {
   @Input() hasBorder = false;
   @Input() hideGear = false;
   @Input() hidePagerWhenSinglePage = true;
+  @Input() context: Context;
   private _objects: RemoteData<PaginatedList<ListableObject>>;
   @Input() set objects(objects: RemoteData<PaginatedList<ListableObject>>) {
     this._objects = objects;
diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.ts b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.ts
index 1a678dddb7..014763c53a 100644
--- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.ts
+++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.ts
@@ -6,7 +6,6 @@ import { Collection } from '../../../../core/shared/collection.model';
 import { CollectionSearchResult } from '../../../object-collection/shared/collection-search-result.model';
 import { ViewMode } from '../../../../core/shared/view-mode.model';
 import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
-import { BrowseEntry } from '../../../../core/shared/browse-entry.model';
 
 @Component({
   selector: 'ds-collection-search-result-list-element',
diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-search-result-list-element.component.html
index f6bfe787cb..62b9bc5e74 100644
--- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-search-result-list-element.component.html
+++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-search-result-list-element.component.html
@@ -1,13 +1,13 @@
-    <ds-item-type-badge [object]="dso"></ds-item-type-badge>
+<ds-item-type-badge [object]="dso"></ds-item-type-badge>
 
-    <ds-truncatable [id]="dso.id" *ngIf="object !== undefined && object !== null">
-        <a
-                [routerLink]="['/items/' + dso.id]" class="lead"
-                [innerHTML]="firstMetadataValue('dc.title')"></a>
-        <span class="text-muted">
+<ds-truncatable [id]="dso.id" *ngIf="object !== undefined && object !== null">
+    <a
+            [routerLink]="['/items/' + dso.id]" class="lead"
+            [innerHTML]="firstMetadataValue('dc.title')"></a>
+    <span class="text-muted">
     <ds-truncatable-part [id]="dso.id" [minLines]="1">
             <ng-container *ngIf="dso.firstMetadataValue('dc.publisher') || dso.firstMetadataValue('dc.date.issued')">(<span class="item-list-publisher"
-                                                                                                                              [innerHTML]="firstMetadataValue('dc.publisher')">, </span><span
+                                                                                                                            [innerHTML]="firstMetadataValue('dc.publisher')">, </span><span
                     *ngIf="dso.firstMetadataValue('dc.date.issued')" class="item-list-date"
                     [innerHTML]="firstMetadataValue('dc.date.issued')"></span>)</ng-container>
             <span *ngIf="dso.allMetadata(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']).length > 0"
@@ -19,9 +19,9 @@
             </span>
         </ds-truncatable-part>
   </span>
-        <div *ngIf="dso.firstMetadataValue('dc.description.abstract')" class="item-list-abstract">
-            <ds-truncatable-part [id]="dso.id" [minLines]="3"><span
-                    [innerHTML]="firstMetadataValue('dc.description.abstract')"></span>
-            </ds-truncatable-part>
-        </div>
-    </ds-truncatable>
+    <div *ngIf="dso.firstMetadataValue('dc.description.abstract')" class="item-list-abstract">
+        <ds-truncatable-part [id]="dso.id" [minLines]="3"><span
+                [innerHTML]="firstMetadataValue('dc.description.abstract')"></span>
+        </ds-truncatable-part>
+    </div>
+</ds-truncatable>
-- 
GitLab