Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DS-4107 Metadata as map updates for Angular #347

Merged
merged 6 commits into from Feb 21, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -18,42 +18,38 @@ describe('SubCommunityList Component', () => {

const subcommunities = [Object.assign(new Community(), {
id: '123456789-1',
metadata: [
{
key: 'dc.title',
language: 'en_US',
value: 'SubCommunity 1'
}]
metadata: {
'dc.title': [
{ language: 'en_US', value: 'SubCommunity 1' }
]
}
}),
Object.assign(new Community(), {
id: '123456789-2',
metadata: [
{
key: 'dc.title',
language: 'en_US',
value: 'SubCommunity 2'
}]
metadata: {
'dc.title': [
{ language: 'en_US', value: 'SubCommunity 2' }
]
}
})
];

const emptySubCommunitiesCommunity = Object.assign(new Community(), {
metadata: [
{
key: 'dc.title',
language: 'en_US',
value: 'Test title'
}],
metadata: {
'dc.title': [
{ language: 'en_US', value: 'Test title' }
]
},
subcommunities: observableOf(new RemoteData(true, true, true,
undefined, new PaginatedList(new PageInfo(), [])))
});

const mockCommunity = Object.assign(new Community(), {
metadata: [
{
key: 'dc.title',
language: 'en_US',
value: 'Test title'
}],
metadata: {
'dc.title': [
{ language: 'en_US', value: 'Test title' }
]
},
subcommunities: observableOf(new RemoteData(true, true, true,
undefined, new PaginatedList(new PageInfo(), subcommunities)))
})
Expand Down
Expand Up @@ -7,10 +7,12 @@
</tr>
</thead>
<tbody>
<tr *ngFor="let metadatum of metadata" class="metadata-row">
<td>{{metadatum.key}}</td>
<td>{{metadatum.value}}</td>
<td>{{metadatum.language}}</td>
</tr>
<ng-container *ngFor="let mdEntry of metadata | keyvalue">
<tr *ngFor="let mdValue of mdEntry.value" class="metadata-row">
<td>{{mdEntry.key}}</td>
<td>{{mdValue.value}}</td>
<td>{{mdValue.language}}</td>
</tr>
</ng-container>
</tbody>
</table>
</table>
Expand Up @@ -11,10 +11,14 @@ const mockItem = Object.assign(new Item(), {
id: 'fake-id',
handle: 'fake/handle',
lastModified: '2018',
metadata: [
{key: 'dc.title', value: 'Mock item title', language: 'en'},
{key: 'dc.contributor.author', value: 'Mayer, Ed', language: ''}
]
metadata: {
'dc.title': [
{ value: 'Mock item title', language: 'en' }
],
'dc.contributor.author': [
{ value: 'Mayer, Ed', language: '' }
]
}
});

describe('ModifyItemOverviewComponent', () => {
Expand All @@ -37,19 +41,19 @@ describe('ModifyItemOverviewComponent', () => {
const metadataRows = fixture.debugElement.queryAll(By.css('tr.metadata-row'));
expect(metadataRows.length).toEqual(2);

const titleRow = metadataRows[0].queryAll(By.css('td'));
expect(titleRow.length).toEqual(3);

expect(titleRow[0].nativeElement.innerHTML).toContain('dc.title');
expect(titleRow[1].nativeElement.innerHTML).toContain('Mock item title');
expect(titleRow[2].nativeElement.innerHTML).toContain('en');

const authorRow = metadataRows[1].queryAll(By.css('td'));
const authorRow = metadataRows[0].queryAll(By.css('td'));
expect(authorRow.length).toEqual(3);

expect(authorRow[0].nativeElement.innerHTML).toContain('dc.contributor.author');
expect(authorRow[1].nativeElement.innerHTML).toContain('Mayer, Ed');
expect(authorRow[2].nativeElement.innerHTML).toEqual('');

const titleRow = metadataRows[1].queryAll(By.css('td'));
expect(titleRow.length).toEqual(3);

expect(titleRow[0].nativeElement.innerHTML).toContain('dc.title');
expect(titleRow[1].nativeElement.innerHTML).toContain('Mock item title');
expect(titleRow[2].nativeElement.innerHTML).toContain('en');

});
});
@@ -1,6 +1,6 @@
import {Component, Input, OnInit} from '@angular/core';
import {Item} from '../../../core/shared/item.model';
import {Metadatum} from '../../../core/shared/metadatum.model';
import {MetadataMap} from '../../../core/shared/metadata.interfaces';

@Component({
selector: 'ds-modify-item-overview',
Expand All @@ -12,7 +12,7 @@ import {Metadatum} from '../../../core/shared/metadatum.model';
export class ModifyItemOverviewComponent implements OnInit {

@Input() item: Item;
metadata: Metadatum[];
metadata: MetadataMap;

ngOnInit(): void {
this.metadata = this.item.metadata;
Expand Down
Expand Up @@ -14,12 +14,14 @@ let collectionsComponent: CollectionsComponent;
let fixture: ComponentFixture<CollectionsComponent>;

const mockCollection1: Collection = Object.assign(new Collection(), {
metadata: [
{
key: 'dc.description.abstract',
language: 'en_US',
value: 'Short description'
}]
metadata: {
'dc.description.abstract': [
{
language: 'en_US',
value: 'Short description'
}
]
}
});

const succeededMockItem: Item = Object.assign(new Item(), {owningCollection: observableOf(new RemoteData(false, false, true, null, mockCollection1))});
Expand Down
@@ -1,5 +1,5 @@
<ds-metadata-field-wrapper [label]="label | translate">
<a *ngFor="let metadatum of values; let last=last;" [href]="metadatum.value">
{{ linktext || metadatum.value }}<span *ngIf="!last" [innerHTML]="separator"></span>
<a *ngFor="let mdValue of mdValues; let last=last;" [href]="mdValue.value">
{{ linktext || mdValue.value }}<span *ngIf="!last" [innerHTML]="separator"></span>
</a>
</ds-metadata-field-wrapper>
@@ -1,6 +1,7 @@
import { Component, Input } from '@angular/core';

import { MetadataValuesComponent } from '../metadata-values/metadata-values.component';
import { MetadataValue } from '../../../core/shared/metadata.interfaces';

/**
* This component renders the configured 'values' into the ds-metadata-field-wrapper component as a link.
Expand All @@ -18,7 +19,7 @@ export class MetadataUriValuesComponent extends MetadataValuesComponent {

@Input() linktext: any;

@Input() values: any;
@Input() mdValues: MetadataValue[];

@Input() separator: string;

Expand Down
@@ -1,5 +1,5 @@
<ds-metadata-field-wrapper [label]="label | translate">
<span *ngFor="let metadatum of values; let last=last;">
{{metadatum.value}}<span *ngIf="!last" [innerHTML]="separator"></span>
<span *ngFor="let mdValue of mdValues; let last=last;">
{{mdValue.value}}<span *ngIf="!last" [innerHTML]="separator"></span>
</span>
</ds-metadata-field-wrapper>
@@ -1,5 +1,5 @@
import { Component, Input } from '@angular/core';
import { Metadatum } from '../../../core/shared/metadatum.model';
import { MetadataValue } from '../../../core/shared/metadata.interfaces';

/**
* This component renders the configured 'values' into the ds-metadata-field-wrapper component.
Expand All @@ -12,7 +12,7 @@ import { Metadatum } from '../../../core/shared/metadatum.model';
})
export class MetadataValuesComponent {

@Input() values: Metadatum[];
@Input() mdValues: MetadataValue[];

@Input() separator: string;

Expand Down
Expand Up @@ -17,7 +17,7 @@


<dt class="col-md-4">{{"item.page.filesection.description" | translate}}</dt>
<dd class="col-md-8">{{file.findMetadata("dc.description")}}</dd>
<dd class="col-md-8">{{file.firstMetadataValue("dc.description")}}</dd>
</dl>
</div>
<div class="col-2">
Expand Down
12 changes: 7 additions & 5 deletions src/app/+item-page/full/full-item-page.component.html
Expand Up @@ -9,11 +9,13 @@
</div>
<table class="table table-responsive table-striped">
<tbody>
<tr *ngFor="let metadatum of (metadata$ | async)">
<td>{{metadatum.key}}</td>
<td>{{metadatum.value}}</td>
<td>{{metadatum.language}}</td>
</tr>
<ng-container *ngFor="let mdEntry of (metadata$ | async) | keyvalue">
<tr *ngFor="let mdValue of mdEntry.value">
<td>{{mdEntry.key}}</td>
<td>{{mdValue.value}}</td>
<td>{{mdValue.language}}</td>
</tr>
</ng-container>
</tbody>
</table>
<ds-item-page-full-file-section [item]="item"></ds-item-page-full-file-section>
Expand Down
4 changes: 2 additions & 2 deletions src/app/+item-page/full/full-item-page.component.ts
Expand Up @@ -6,7 +6,7 @@ import { ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs';

import { ItemPageComponent } from '../simple/item-page.component';
import { Metadatum } from '../../core/shared/metadatum.model';
import { MetadataMap } from '../../core/shared/metadata.interfaces';
import { ItemDataService } from '../../core/data/item-data.service';

import { RemoteData } from '../../core/data/remote-data';
Expand Down Expand Up @@ -34,7 +34,7 @@ export class FullItemPageComponent extends ItemPageComponent implements OnInit {

itemRD$: Observable<RemoteData<Item>>;

metadata$: Observable<Metadatum[]>;
metadata$: Observable<MetadataMap>;

constructor(route: ActivatedRoute, items: ItemDataService, metadataService: MetadataService) {
super(route, items, metadataService);
Expand Down
@@ -1,3 +1,3 @@
<div class="item-page-specific-field">
<ds-metadata-values [values]="item?.filterMetadata(fields)" [separator]="separator" [label]="label"></ds-metadata-values>
<ds-metadata-values [mdValues]="item?.allMetadata(fields)" [separator]="separator" [label]="label"></ds-metadata-values>
</div>
@@ -1,3 +1,3 @@
<h2 class="item-page-title-field">
<ds-metadata-values [values]="item?.filterMetadata(fields)"></ds-metadata-values>
<ds-metadata-values [mdValues]="item?.allMetadata(fields)"></ds-metadata-values>
</h2>
@@ -1,3 +1,3 @@
<div class="item-page-specific-field">
<ds-metadata-uri-values [values]="item?.filterMetadata(fields)" [separator]="separator" [label]="label"></ds-metadata-uri-values>
<ds-metadata-uri-values [mdValues]="item?.allMetadata(fields)" [separator]="separator" [label]="label"></ds-metadata-uri-values>
</div>
4 changes: 2 additions & 2 deletions src/app/+search-page/normalized-search-result.model.ts
@@ -1,5 +1,5 @@
import { autoserialize } from 'cerialize';
import { Metadatum } from '../core/shared/metadatum.model';
import { MetadataMap } from '../core/shared/metadata.interfaces';
import { ListableObject } from '../shared/object-collection/shared/listable-object.model';

/**
Expand All @@ -16,6 +16,6 @@ export class NormalizedSearchResult implements ListableObject {
* The metadata that was used to find this item, hithighlighted
*/
@autoserialize
hitHighlights: Metadatum[];
hitHighlights: MetadataMap;

}
4 changes: 2 additions & 2 deletions src/app/+search-page/search-result.model.ts
@@ -1,5 +1,5 @@
import { DSpaceObject } from '../core/shared/dspace-object.model';
import { Metadatum } from '../core/shared/metadatum.model';
import { MetadataMap } from '../core/shared/metadata.interfaces';
import { ListableObject } from '../shared/object-collection/shared/listable-object.model';

/**
Expand All @@ -14,6 +14,6 @@ export class SearchResult<T extends DSpaceObject> implements ListableObject {
/**
* The metadata that was used to find this item, hithighlighted
*/
hitHighlights: Metadatum[];
hitHighlights: MetadataMap;

}