metadata representation

This commit is contained in:
lotte
2019-10-10 16:18:14 +02:00
parent 0fb12c4274
commit dfe1143184
48 changed files with 131 additions and 102 deletions

View File

@@ -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'],

View File

@@ -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>

View File

@@ -58,7 +58,8 @@ import { PoolSearchResultDetailElementComponent } from '../shared/object-detail/
WorkspaceItemSearchResultDetailElementComponent,
WorkflowItemSearchResultDetailElementComponent,
ClaimedTaskSearchResultDetailElementComponent,
PoolSearchResultDetailElementComponent
PoolSearchResultDetailElementComponent,
ItemSearchResultListElementSubmissionComponent
]
})

View File

@@ -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>

View File

@@ -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
*/

View File

@@ -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');
}
}

View File

@@ -51,7 +51,7 @@ export class MetadataField implements ListableObject {
return key;
}
getRenderType(): string {
return this.constructor.name;
getRenderTypes(): string[] {
return [this.constructor.name];
}
}

View File

@@ -27,7 +27,7 @@ export class MetadataSchema implements ListableObject {
*/
namespace: string;
getRenderType(): string {
return this.constructor.name;
getRenderTypes(): string[] {
return [this.constructor.name];
}
}

View File

@@ -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];
}
}

View File

@@ -146,7 +146,7 @@ export class DSpaceObject implements CacheableObject, ListableObject {
});
}
getRenderType(): string {
return this.constructor.name;
getRenderTypes(): string[] {
return [this.constructor.name];
}
}

View File

@@ -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()];
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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';

View File

@@ -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'],

View File

@@ -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'],

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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.

View File

@@ -1,5 +1,5 @@
import { TypedObject } from '../../../core/cache/object-cache.reducer';
export interface ListableObject extends TypedObject {
getRenderType(): string;
getRenderTypes(): string[];
}

View File

@@ -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)
}
}

View File

@@ -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 (hasValue(typeAndMDRepMap.get(DEFAULT_CONTEXT))) {
return typeAndMDRepMap.get(DEFAULT_CONTEXT);
if (bestMatchValue < 2 && hasValue(typeModeMap.get(DEFAULT_CONTEXT))) {
bestMatchValue = 2;
bestMatch = typeModeMap.get(DEFAULT_CONTEXT);
}
}
return mapForType.get(DEFAULT_VIEW_MODE).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 listElementMap.get(DEFAULT_ITEM_TYPE).get(DEFAULT_VIEW_MODE).get(DEFAULT_CONTEXT);
}
}
console.log(bestMatch);
return bestMatch;
}

View File

@@ -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> {
/**

View File

@@ -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>

View File

@@ -1,7 +1,7 @@
@import '../../../styles/variables';
@import '../../../styles/mixins';
ds-wrapper-detail-element ::ng-deep {
:host::ng-deep {
div.thumbnail > img {
height: $card-thumbnail-height;
width: 100%;

View File

@@ -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

View File

@@ -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'],

View File

@@ -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>

View File

@@ -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%;

View File

@@ -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>>) {

View File

@@ -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>

View File

@@ -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'],

View File

@@ -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>

View File

@@ -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'

View File

@@ -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'

View File

@@ -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>>);
}

View File

@@ -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;
}

View File

@@ -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>>);
}

View File

@@ -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>> );
}

View File

@@ -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>>);
}

View File

@@ -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>

View File

@@ -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;

View File

@@ -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',

View File

@@ -1,6 +1,6 @@
<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">
<ds-truncatable [id]="dso.id" *ngIf="object !== undefined && object !== null">
<a
[routerLink]="['/items/' + dso.id]" class="lead"
[innerHTML]="firstMetadataValue('dc.title')"></a>
@@ -24,4 +24,4 @@
[innerHTML]="firstMetadataValue('dc.description.abstract')"></span>
</ds-truncatable-part>
</div>
</ds-truncatable>
</ds-truncatable>