mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-13 21:13:07 +00:00
metadata representation
This commit is contained in:
@@ -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'],
|
||||
|
@@ -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>
|
||||
|
@@ -58,7 +58,8 @@ import { PoolSearchResultDetailElementComponent } from '../shared/object-detail/
|
||||
WorkspaceItemSearchResultDetailElementComponent,
|
||||
WorkflowItemSearchResultDetailElementComponent,
|
||||
ClaimedTaskSearchResultDetailElementComponent,
|
||||
PoolSearchResultDetailElementComponent
|
||||
PoolSearchResultDetailElementComponent,
|
||||
ItemSearchResultListElementSubmissionComponent
|
||||
]
|
||||
})
|
||||
|
||||
|
@@ -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>
|
||||
|
@@ -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
|
||||
*/
|
||||
|
@@ -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');
|
||||
}
|
||||
}
|
||||
|
@@ -51,7 +51,7 @@ export class MetadataField implements ListableObject {
|
||||
return key;
|
||||
}
|
||||
|
||||
getRenderType(): string {
|
||||
return this.constructor.name;
|
||||
getRenderTypes(): string[] {
|
||||
return [this.constructor.name];
|
||||
}
|
||||
}
|
||||
|
@@ -27,7 +27,7 @@ export class MetadataSchema implements ListableObject {
|
||||
*/
|
||||
namespace: string;
|
||||
|
||||
getRenderType(): string {
|
||||
return this.constructor.name;
|
||||
getRenderTypes(): string[] {
|
||||
return [this.constructor.name];
|
||||
}
|
||||
}
|
||||
|
@@ -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];
|
||||
}
|
||||
}
|
||||
|
@@ -146,7 +146,7 @@ export class DSpaceObject implements CacheableObject, ListableObject {
|
||||
});
|
||||
}
|
||||
|
||||
getRenderType(): string {
|
||||
return this.constructor.name;
|
||||
getRenderTypes(): string[] {
|
||||
return [this.constructor.name];
|
||||
}
|
||||
}
|
||||
|
@@ -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()];
|
||||
}
|
||||
}
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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';
|
||||
|
@@ -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'],
|
||||
|
@@ -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'],
|
||||
|
@@ -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);
|
||||
}
|
@@ -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>
|
||||
|
||||
|
@@ -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.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import { TypedObject } from '../../../core/cache/object-cache.reducer';
|
||||
|
||||
export interface ListableObject extends TypedObject {
|
||||
getRenderType(): string;
|
||||
getRenderTypes(): string[];
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
@@ -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> {
|
||||
|
||||
/**
|
||||
|
@@ -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>
|
||||
|
@@ -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%;
|
||||
|
@@ -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
|
||||
|
@@ -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'],
|
||||
|
@@ -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>
|
||||
|
||||
|
@@ -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%;
|
||||
|
@@ -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>>) {
|
||||
|
@@ -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>
|
||||
|
@@ -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'],
|
||||
|
@@ -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>
|
||||
|
@@ -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'
|
||||
|
@@ -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'
|
||||
|
@@ -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>>);
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
}
|
||||
|
@@ -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>>);
|
||||
}
|
||||
|
||||
|
@@ -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>> );
|
||||
}
|
||||
|
||||
|
@@ -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>>);
|
||||
}
|
||||
|
||||
|
@@ -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>
|
||||
|
@@ -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;
|
||||
|
@@ -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',
|
||||
|
@@ -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>
|
||||
|
Reference in New Issue
Block a user