mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 18:14:17 +00:00
rename getPrimaryValue to getValue, improve doccomments and move virtual metadata code to the Metadatum model
This commit is contained in:
@@ -411,10 +411,10 @@ describe('ItemComponent', () => {
|
||||
|
||||
it('should have all the representations in the correct order', () => {
|
||||
representations.subscribe((reps: MetadataRepresentation[]) => {
|
||||
expect(reps[0].getPrimaryValue()).toEqual('First value');
|
||||
expect(reps[1].getPrimaryValue()).toEqual('Second value');
|
||||
expect(reps[2].getPrimaryValue()).toEqual('related item');
|
||||
expect(reps[3].getPrimaryValue()).toEqual('Fourth value');
|
||||
expect(reps[0].getValue()).toEqual('First value');
|
||||
expect(reps[1].getValue()).toEqual('Second value');
|
||||
expect(reps[2].getValue()).toEqual('related item');
|
||||
expect(reps[3].getValue()).toEqual('Fourth value');
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -99,10 +99,11 @@ export const relationsToRepresentations = (thisId: string, itemType: string, met
|
||||
source.pipe(
|
||||
flatMap((rels: Relationship[]) =>
|
||||
observableZip(
|
||||
...metadata.map((metadatum: Metadatum) => {
|
||||
const prefix = 'virtual::';
|
||||
if (hasValue(metadatum.authority) && metadatum.authority.startsWith(prefix)) {
|
||||
const matchingRels = rels.filter((rel: Relationship) => ('' + rel.id) === metadatum.authority.substring(metadatum.authority.indexOf(prefix) + prefix.length));
|
||||
...metadata
|
||||
.map((metadatum: any) => Object.assign(new Metadatum(), metadatum))
|
||||
.map((metadatum: Metadatum) => {
|
||||
if (metadatum.isVirtual) {
|
||||
const matchingRels = rels.filter((rel: Relationship) => ('' + rel.id) === metadatum.virtualValue);
|
||||
if (matchingRels.length > 0) {
|
||||
const matchingRel = matchingRels[0];
|
||||
let queryId = matchingRel.leftId;
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import { MetadataRepresentationType } from '../metadata-representation.model';
|
||||
import { ItemMetadataRepresentation, ItemTypeToPrimaryValue } from './item-metadata-representation.model';
|
||||
import { ItemMetadataRepresentation, ItemTypeToValue } from './item-metadata-representation.model';
|
||||
import { Item } from '../../item.model';
|
||||
import { Metadatum } from '../../metadatum.model';
|
||||
|
||||
@@ -7,14 +7,14 @@ describe('ItemMetadataRepresentation', () => {
|
||||
const valuePrefix = 'Test value for ';
|
||||
const item = new Item();
|
||||
let itemMetadataRepresentation: ItemMetadataRepresentation;
|
||||
item.metadata = Object.keys(ItemTypeToPrimaryValue).map((key: string) => {
|
||||
item.metadata = Object.keys(ItemTypeToValue).map((key: string) => {
|
||||
return Object.assign(new Metadatum(), {
|
||||
key: ItemTypeToPrimaryValue[key],
|
||||
value: `${valuePrefix}${ItemTypeToPrimaryValue[key]}`
|
||||
key: ItemTypeToValue[key],
|
||||
value: `${valuePrefix}${ItemTypeToValue[key]}`
|
||||
});
|
||||
});
|
||||
|
||||
for (const itemType of Object.keys(ItemTypeToPrimaryValue)) {
|
||||
for (const itemType of Object.keys(ItemTypeToValue)) {
|
||||
describe(`when creating an ItemMetadataRepresentation with item-type "${itemType}"`, () => {
|
||||
beforeEach(() => {
|
||||
itemMetadataRepresentation = Object.assign(new ItemMetadataRepresentation(itemType), item);
|
||||
@@ -24,8 +24,8 @@ describe('ItemMetadataRepresentation', () => {
|
||||
expect(itemMetadataRepresentation.representationType).toEqual(MetadataRepresentationType.Item);
|
||||
});
|
||||
|
||||
it('should return the correct value when calling getPrimaryValue', () => {
|
||||
expect(itemMetadataRepresentation.getPrimaryValue()).toEqual(`${valuePrefix}${ItemTypeToPrimaryValue[itemType]}`);
|
||||
it('should return the correct value when calling getValue', () => {
|
||||
expect(itemMetadataRepresentation.getValue()).toEqual(`${valuePrefix}${ItemTypeToValue[itemType]}`);
|
||||
});
|
||||
|
||||
it('should return the correct item type', () => {
|
||||
|
@@ -3,15 +3,15 @@ import { MetadataRepresentation, MetadataRepresentationType } from '../metadata-
|
||||
import { hasValue } from '../../../../shared/empty.util';
|
||||
|
||||
/**
|
||||
* An object to convert item types into the metadata field it should render for the item's primary value
|
||||
* An object to convert item types into the metadata field it should render for the item's value
|
||||
*/
|
||||
export const ItemTypeToPrimaryValue = {
|
||||
export const ItemTypeToValue = {
|
||||
Default: 'dc.title',
|
||||
Person: 'dc.contributor.author'
|
||||
};
|
||||
|
||||
/**
|
||||
* This class defines the way the item it extends should be represented as metadata
|
||||
* This class determines which fields to use when rendering an Item as a metadata value.
|
||||
*/
|
||||
export class ItemMetadataRepresentation extends Item implements MetadataRepresentation {
|
||||
|
||||
@@ -35,12 +35,12 @@ export class ItemMetadataRepresentation extends Item implements MetadataRepresen
|
||||
/**
|
||||
* Get the value to display, depending on the itemType
|
||||
*/
|
||||
getPrimaryValue(): string {
|
||||
getValue(): string {
|
||||
let metadata;
|
||||
if (hasValue(ItemTypeToPrimaryValue[this.itemType])) {
|
||||
metadata = ItemTypeToPrimaryValue[this.itemType];
|
||||
if (hasValue(ItemTypeToValue[this.itemType])) {
|
||||
metadata = ItemTypeToValue[this.itemType];
|
||||
} else {
|
||||
metadata = ItemTypeToPrimaryValue.Default;
|
||||
metadata = ItemTypeToValue.Default;
|
||||
}
|
||||
return this.findMetadata(metadata);
|
||||
}
|
||||
|
@@ -25,7 +25,7 @@ export interface MetadataRepresentation {
|
||||
representationType: MetadataRepresentationType,
|
||||
|
||||
/**
|
||||
* Fetches the primary value to be displayed
|
||||
* Fetches the value to be displayed
|
||||
*/
|
||||
getPrimaryValue(): string
|
||||
getValue(): string
|
||||
}
|
||||
|
@@ -26,7 +26,7 @@ describe('MetadatumRepresentation', () => {
|
||||
});
|
||||
|
||||
it('should return the correct value when calling getPrimaryValue', () => {
|
||||
expect(metadatumRepresentation.getPrimaryValue()).toEqual(normalMetadatum.value);
|
||||
expect(metadatumRepresentation.getValue()).toEqual(normalMetadatum.value);
|
||||
});
|
||||
|
||||
it('should return the correct item type', () => {
|
||||
@@ -43,8 +43,8 @@ describe('MetadatumRepresentation', () => {
|
||||
expect(metadatumRepresentation.representationType).toEqual(MetadataRepresentationType.AuthorityControlled);
|
||||
});
|
||||
|
||||
it('should return the correct value when calling getPrimaryValue', () => {
|
||||
expect(metadatumRepresentation.getPrimaryValue()).toEqual(authorityMetadatum.value);
|
||||
it('should return the correct value when calling getValue', () => {
|
||||
expect(metadatumRepresentation.getValue()).toEqual(authorityMetadatum.value);
|
||||
});
|
||||
|
||||
it('should return the correct item type', () => {
|
||||
|
@@ -31,7 +31,7 @@ export class MetadatumRepresentation extends Metadatum implements MetadataRepres
|
||||
/**
|
||||
* Get the value to display
|
||||
*/
|
||||
getPrimaryValue(): string {
|
||||
getValue(): string {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
|
67
src/app/core/shared/metadatum.model.spec.ts
Normal file
67
src/app/core/shared/metadatum.model.spec.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import { Metadatum } from './metadatum.model';
|
||||
|
||||
describe('Metadatum', () => {
|
||||
let metadatum: Metadatum ;
|
||||
|
||||
beforeEach(() => {
|
||||
metadatum = new Metadatum();
|
||||
});
|
||||
|
||||
describe('isVirtual', () => {
|
||||
describe('when the metadatum has no authority key', () => {
|
||||
beforeEach(() => {
|
||||
metadatum.authority = undefined;
|
||||
});
|
||||
|
||||
it('should return false', () => {
|
||||
expect(metadatum.isVirtual).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when the metadatum has an authority key', () => {
|
||||
describe('but it doesn\'t start with the virtual prefix', () => {
|
||||
beforeEach(() => {
|
||||
metadatum.authority = 'value';
|
||||
});
|
||||
|
||||
it('should return false', () => {
|
||||
expect(metadatum.isVirtual).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('and it starts with the virtual prefix', () => {
|
||||
beforeEach(() => {
|
||||
metadatum.authority = 'virtual::value';
|
||||
});
|
||||
|
||||
it('should return true', () => {
|
||||
expect(metadatum.isVirtual).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('virtualValue', () => {
|
||||
describe('when the metadatum isn\'t virtual', () => {
|
||||
beforeEach(() => {
|
||||
metadatum.authority = 'value';
|
||||
});
|
||||
|
||||
it('should return undefined', () => {
|
||||
expect(metadatum.virtualValue).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('when the metadatum is virtual', () => {
|
||||
beforeEach(() => {
|
||||
metadatum.authority = 'virtual::value';
|
||||
});
|
||||
|
||||
it('should return everything in the authority key after virtual::', () => {
|
||||
expect(metadatum.virtualValue).toBe('value');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
@@ -1,4 +1,7 @@
|
||||
import { autoserialize } from 'cerialize';
|
||||
import { hasValue } from '../../shared/empty.util';
|
||||
|
||||
const VIRTUAL_METADATA_PREFIX = 'virtual::';
|
||||
|
||||
export class Metadatum {
|
||||
|
||||
@@ -33,4 +36,29 @@ export class Metadatum {
|
||||
@autoserialize
|
||||
authority: string;
|
||||
|
||||
/**
|
||||
* The authority confidence value
|
||||
*/
|
||||
@autoserialize
|
||||
confidence: number;
|
||||
|
||||
/**
|
||||
* Returns true if this Metadatum's authority key starts with 'virtual::'
|
||||
*/
|
||||
get isVirtual(): boolean {
|
||||
return hasValue(this.authority) && this.authority.startsWith(VIRTUAL_METADATA_PREFIX);
|
||||
}
|
||||
|
||||
/**
|
||||
* If this is a virtual Metadatum, it returns everything in the authority key after 'virtual::'.
|
||||
* Returns undefined otherwise.
|
||||
*/
|
||||
get virtualValue(): string {
|
||||
if (this.isVirtual) {
|
||||
return this.authority.substring(this.authority.indexOf(VIRTUAL_METADATA_PREFIX) + VIRTUAL_METADATA_PREFIX.length);
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,3 +1,3 @@
|
||||
<div>
|
||||
<span>{{metadataRepresentation.getPrimaryValue()}}</span>
|
||||
<span>{{metadataRepresentation.getValue()}}</span>
|
||||
</div>
|
||||
|
@@ -13,7 +13,7 @@ import { VIEW_MODE_METADATA } from '../../../../+item-page/simple/metadata-repre
|
||||
})
|
||||
/**
|
||||
* A component for displaying MetadataRepresentation objects in the form of plain text
|
||||
* It will simply use the value retrieved from MetadataRepresentation.getPrimaryValue() to display as plain text
|
||||
* It will simply use the value retrieved from MetadataRepresentation.getValue() to display as plain text
|
||||
*/
|
||||
export class PlainTextMetadataListElementComponent extends MetadataRepresentationListElementComponent {
|
||||
}
|
||||
|
Reference in New Issue
Block a user