Skip to content
Snippets Groups Projects
Commit 17491941 authored by Ben Bosman's avatar Ben Bosman
Browse files

Merge branch 'w2p-52212_Item-display-relations' into 'entities-or2018'

W2p 52212 item display relations

See merge request contributions/dspace-angular!1
parents 8423261c 34dbc24b
No related branches found
No related tags found
No related merge requests found
Showing
with 344 additions and 3 deletions
......@@ -50,7 +50,12 @@
"isProjectOf": "Projects",
"isOrgUnitOf": "Org Units",
"isAuthorOf": "Authors",
"isPersonOf": "Authors"
"isPersonOf": "Authors",
"isJournalOf": "Journals",
"isSingleJournalOf": "Journal",
"isVolumeOf": "Volumes",
"isSingleVolumeOf": "Volume",
"isIssueOf": "Issues"
},
"person": {
"page": {
......@@ -84,6 +89,28 @@
"description": "Description"
}
},
"journal": {
"page": {
"issn": "ISSN",
"publisher": "Publisher",
"description": "Description"
}
},
"journalvolume": {
"page": {
"volume": "Volume",
"issuedate": "Issue Date",
"description": "Description"
}
},
"journalissue": {
"page": {
"number": "Number",
"issuedate": "Issue Date",
"description": "Description",
"keyword": "Keywords"
}
},
"nav": {
"home": "Home"
},
......
......@@ -25,6 +25,9 @@ import { OrgUnitPageFieldsComponent } from './simple/entity-types/orgunit/orguni
import { PersonPageFieldsComponent } from './simple/entity-types/person/person-page-fields.component';
import { ProjectPageFieldsComponent } from './simple/entity-types/project/project-page-fields.component';
import { RelatedEntitiesComponent } from './simple/related-entities/related-entities-component';
import { JournalPageFieldsComponent } from './simple/entity-types/journal/journal-page-fields.component';
import { JournalIssuePageFieldsComponent } from './simple/entity-types/journal-issue/journal-issue-page-fields.component';
import { JournalVolumePageFieldsComponent } from './simple/entity-types/journal-volume/journal-volume-page-fields.component';
@NgModule({
imports: [
......@@ -53,13 +56,19 @@ import { RelatedEntitiesComponent } from './simple/related-entities/related-enti
PersonPageFieldsComponent,
RelatedEntitiesComponent,
EntityPageFieldsComponent,
GenericItemPageFieldComponent
GenericItemPageFieldComponent,
JournalPageFieldsComponent,
JournalIssuePageFieldsComponent,
JournalVolumePageFieldsComponent
],
entryComponents: [
PublicationPageFieldsComponent,
ProjectPageFieldsComponent,
OrgUnitPageFieldsComponent,
PersonPageFieldsComponent
PersonPageFieldsComponent,
JournalPageFieldsComponent,
JournalIssuePageFieldsComponent,
JournalVolumePageFieldsComponent
]
})
export class ItemPageModule {
......
<h2 class="item-page-title-field">
<ds-metadata-values [values]="item?.filterMetadata(['dc.title'])"></ds-metadata-values>
</h2>
<div class="row">
<div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper>
<ds-thumbnail [thumbnail]="this.item.getThumbnail() | async"></ds-thumbnail>
</ds-metadata-field-wrapper>
<ds-generic-item-page-field [item]="item"
[fields]="['journalissue.identifier.number']"
[label]="'journalissue.page.number'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
[fields]="['journalissue.issuedate']"
[label]="'journalissue.page.issuedate'">
</ds-generic-item-page-field>
</div>
<div class="col-xs-12 col-md-6">
<ds-related-entities
[entities]="volumes$ | async"
[label]="'relationships.isSingleVolumeOf' | translate">
</ds-related-entities>
<ds-generic-item-page-field [item]="item"
[fields]="['journalissue.identifier.description']"
[label]="'journalissue.page.description'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
[fields]="['journalissue.identifier.keyword']"
[label]="'journalissue.page.keyword'">
</ds-generic-item-page-field>
</div>
</div>
@import '../../../../../styles/variables.scss';
import { Component, Inject } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { ItemDataService } from '../../../../core/data/item-data.service';
import { Item } from '../../../../core/shared/item.model';
import { rendersEntityType } from '../../../../shared/entities/entity-type-decorator';
import { ITEM } from '../../../../shared/entities/switcher/entity-type-switcher.component';
import { ElementViewMode } from '../../../../shared/view-mode';
import {
EntityPageFieldsComponent, filterRelationsByTypeLabel,
relationsToItems
} from '../shared/entity-page-fields.component';
@rendersEntityType('JournalIssue', ElementViewMode.Full)
@Component({
selector: 'ds-journal-issue-page-fields',
styleUrls: ['./journal-issue-page-fields.component.scss'],
templateUrl: './journal-issue-page-fields.component.html'
})
export class JournalIssuePageFieldsComponent extends EntityPageFieldsComponent {
volumes$: Observable<Item[]>;
constructor(
@Inject(ITEM) public item: Item,
private ids: ItemDataService
) {
super(item);
}
ngOnInit(): void {
super.ngOnInit();
this.volumes$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isJournalVolumeOfIssue'),
relationsToItems(this.item.id, this.ids)
);
}
}
<h2 class="item-page-title-field">
<ds-metadata-values [values]="item?.filterMetadata(['dc.title'])"></ds-metadata-values>
</h2>
<div class="row">
<div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper>
<ds-thumbnail [thumbnail]="this.item.getThumbnail() | async"></ds-thumbnail>
</ds-metadata-field-wrapper>
<ds-generic-item-page-field [item]="item"
[fields]="['journalvolume.identifier.volume']"
[label]="'journalvolume.page.volume'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
[fields]="['journalvolume.issuedate']"
[label]="'journalvolume.page.issuedate'">
</ds-generic-item-page-field>
</div>
<div class="col-xs-12 col-md-6">
<ds-related-entities
[entities]="journals$ | async"
[label]="'relationships.isSingleJournalOf' | translate">
</ds-related-entities>
<ds-related-entities
[entities]="issues$ | async"
[label]="'relationships.isIssueOf' | translate">
</ds-related-entities>
<ds-generic-item-page-field [item]="item"
[fields]="['journalvolume.identifier.description']"
[label]="'journalvolume.page.description'">
</ds-generic-item-page-field>
</div>
</div>
@import '../../../../../styles/variables.scss';
import { Component, Inject } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { ItemDataService } from '../../../../core/data/item-data.service';
import { Item } from '../../../../core/shared/item.model';
import { rendersEntityType } from '../../../../shared/entities/entity-type-decorator';
import { ITEM } from '../../../../shared/entities/switcher/entity-type-switcher.component';
import { ElementViewMode } from '../../../../shared/view-mode';
import {
EntityPageFieldsComponent, filterRelationsByTypeLabel,
relationsToItems
} from '../shared/entity-page-fields.component';
@rendersEntityType('JournalVolume', ElementViewMode.Full)
@Component({
selector: 'ds-journal-volume-page-fields',
styleUrls: ['./journal-volume-page-fields.component.scss'],
templateUrl: './journal-volume-page-fields.component.html'
})
export class JournalVolumePageFieldsComponent extends EntityPageFieldsComponent {
journals$: Observable<Item[]>;
issues$: Observable<Item[]>;
constructor(
@Inject(ITEM) public item: Item,
private ids: ItemDataService
) {
super(item);
}
ngOnInit(): void {
super.ngOnInit();
this.journals$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isJournalOfVolume'),
relationsToItems(this.item.id, this.ids)
);
this.issues$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isIssueOfJournalVolume'),
relationsToItems(this.item.id, this.ids)
);
}
}
<h2 class="item-page-title-field">
<ds-metadata-values [values]="item?.filterMetadata(['dc.title'])"></ds-metadata-values>
</h2>
<div class="row">
<div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper>
<ds-thumbnail [thumbnail]="this.item.getThumbnail() | async"></ds-thumbnail>
</ds-metadata-field-wrapper>
<ds-generic-item-page-field [item]="item"
[fields]="['journal.identifier.issn']"
[label]="'journal.page.issn'">
</ds-generic-item-page-field>
<ds-generic-item-page-field [item]="item"
[fields]="['journal.publisher']"
[label]="'journal.page.publisher'">
</ds-generic-item-page-field>
</div>
<div class="col-xs-12 col-md-6">
<ds-related-entities
[entities]="volumes$ | async"
[label]="'relationships.isVolumeOf' | translate">
</ds-related-entities>
<ds-generic-item-page-field [item]="item"
[fields]="['journal.identifier.description']"
[label]="'journal.page.description'">
</ds-generic-item-page-field>
</div>
</div>
@import '../../../../../styles/variables.scss';
import { Component, Inject } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { ItemDataService } from '../../../../core/data/item-data.service';
import { Item } from '../../../../core/shared/item.model';
import { rendersEntityType } from '../../../../shared/entities/entity-type-decorator';
import { ITEM } from '../../../../shared/entities/switcher/entity-type-switcher.component';
import { ElementViewMode } from '../../../../shared/view-mode';
import {
EntityPageFieldsComponent, filterRelationsByTypeLabel,
relationsToItems
} from '../shared/entity-page-fields.component';
@rendersEntityType('Journal', ElementViewMode.Full)
@Component({
selector: 'ds-journal-page-fields',
styleUrls: ['./journal-page-fields.component.scss'],
templateUrl: './journal-page-fields.component.html'
})
export class JournalPageFieldsComponent extends EntityPageFieldsComponent {
volumes$: Observable<Item[]>;
constructor(
@Inject(ITEM) public item: Item,
private ids: ItemDataService
) {
super(item);
}
ngOnInit(): void {
super.ngOnInit();
this.volumes$ = this.resolvedRelsAndTypes$.pipe(
filterRelationsByTypeLabel('isVolumeOfJournal'),
relationsToItems(this.item.id, this.ids)
);
}
}
<ds-truncatable [id]="item.id">
<a
[routerLink]="['/items/' + item.id]" class="lead"
[innerHTML]="getFirstValue('dc.title')"></a>
<span class="text-muted">
<ds-truncatable-part [id]="item.id" [minLines]="1">
<span *ngIf="item.filterMetadata(['journalvolume.identifier.volume']).length > 0"
class="item-list-journal-issues">
<span *ngFor="let value of getValues(['journalvolume.identifier.volume']); let last=last;">
<span [innerHTML]="value"><span [innerHTML]="value"></span></span>
</span>
<span *ngIf="item.filterMetadata(['journalissue.identifier.number']).length > 0">
<span *ngFor="let value of getValues(['journalissue.identifier.number']); let last=last;">
<span> - </span><span [innerHTML]="value"><span [innerHTML]="value"></span></span>
</span>
</span>
</span>
</ds-truncatable-part>
</span>
</ds-truncatable>
import { Component } from '@angular/core';
import { rendersEntityType } from '../../../../entities/entity-type-decorator';
import { ElementViewMode } from '../../../../view-mode';
import { EntitySearchResultComponent } from '../entity-search-result-component';
@rendersEntityType('JournalIssue', ElementViewMode.SetElement)
@Component({
selector: 'ds-journal-issue-list-element',
styleUrls: ['./journal-issue-list-element.component.scss'],
templateUrl: './journal-issue-list-element.component.html'
})
export class JournalIssueListElementComponent extends EntitySearchResultComponent {
}
<ds-truncatable [id]="item.id">
<a
[routerLink]="['/items/' + item.id]" class="lead"
[innerHTML]="getFirstValue('dc.title')"></a>
<span class="text-muted">
<ds-truncatable-part [id]="item.id" [minLines]="1">
<span *ngIf="item.filterMetadata(['journal.title']).length > 0"
class="item-list-journal-volumes">
<span *ngFor="let value of getValues(['journal.title']); let last=last;">
<span [innerHTML]="value"><span [innerHTML]="value"></span></span>
</span>
</span>
<span *ngIf="item.filterMetadata(['journalvolume.identifier.volume']).length > 0">
<span *ngFor="let value of getValues(['journalvolume.identifier.volume']); let last=last;">
<span> (</span><span [innerHTML]="value"><span [innerHTML]="value"></span></span><span>)</span>
</span>
</span>
</ds-truncatable-part>
</span>
</ds-truncatable>
import { Component } from '@angular/core';
import { rendersEntityType } from '../../../../entities/entity-type-decorator';
import { ElementViewMode } from '../../../../view-mode';
import { EntitySearchResultComponent } from '../entity-search-result-component';
@rendersEntityType('JournalVolume', ElementViewMode.SetElement)
@Component({
selector: 'ds-journal-volume-list-element',
styleUrls: ['./journal-volume-list-element.component.scss'],
templateUrl: './journal-volume-list-element.component.html'
})
export class JournalVolumeListElementComponent extends EntitySearchResultComponent {
}
<ds-truncatable [id]="item.id">
<a
[routerLink]="['/items/' + item.id]" class="lead"
[innerHTML]="getFirstValue('dc.title')"></a>
<span class="text-muted">
<ds-truncatable-part [id]="item.id" [minLines]="1">
<span *ngIf="item.filterMetadata(['journal.identifier.issn']).length > 0"
class="item-list-journals">
<span *ngFor="let value of getValues(['journal.identifier.issn']); let last=last;">
<span [innerHTML]="value"><span [innerHTML]="value"></span></span>
</span>
</span>
</ds-truncatable-part>
</span>
</ds-truncatable>
import { Component } from '@angular/core';
import { rendersEntityType } from '../../../../entities/entity-type-decorator';
import { ElementViewMode } from '../../../../view-mode';
import { EntitySearchResultComponent } from '../entity-search-result-component';
@rendersEntityType('Journal', ElementViewMode.SetElement)
@Component({
selector: 'ds-journal-list-element',
styleUrls: ['./journal-list-element.component.scss'],
templateUrl: './journal-list-element.component.html'
})
export class JournalListElementComponent extends EntitySearchResultComponent {
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment