Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions config/config.example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -285,3 +285,13 @@ mediaViewer:
info:
enableEndUserAgreement: true
enablePrivacyStatement: true

# MyDSpace Config
myDSpace:
# Add additional metadata fields to display at the end of the item component. By default, this is an empty list.
additionalMetadataFields: []
# Replace the empty list by some values here.
# additionalMetadataFields:
# - metadata.1
# - metadata.2
# - ...
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@
<div>
<ng-content></ng-content>
</div>
<div *ngIf="additionalMetadataFields" class="item-list-additional">
<ng-container *ngFor="let meta of item.allMetadataValues(additionalMetadataFields)">
<span class='text-muted item-additional' [innerHTML]="meta"></span>
</ng-container>
</div>
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ import { ItemDetailPreviewFieldComponent } from './item-detail-preview-field/ite
import { ItemDetailPreviewComponent } from './item-detail-preview.component';
import { createPaginatedList } from '../../../testing/utils.test';
import { FindListOptions } from '../../../../core/data/find-list-options.model';
import { environment } from 'src/environments/environment';
import { By } from '@angular/platform-browser';

function getMockFileService(): FileService {
return jasmine.createSpyObj('FileService', {
Expand Down Expand Up @@ -69,6 +71,12 @@ const mockItem: Item = Object.assign(new Item(), {
language: null,
value: 'Article'
}
],
'dc.description.additional': [
{
language: null,
value: 'This is an additional description metadata.'
}
]
}
});
Expand Down Expand Up @@ -122,14 +130,62 @@ describe('ItemDetailPreviewComponent', () => {
component.item = mockItem;
component.separator = ', ';
// spyOn(component.item, 'getFiles').and.returnValue(mockItem.bundles as any);
fixture.detectChanges();

}));

it('should get item bitstreams', (done) => {
component.getFiles().subscribe((bitstreams) => {
expect(bitstreams).toBeDefined();
done();
afterEach(() => {
environment.myDSpace.additionalMetadataFields = [];
});

describe('When the component is initialized', () => {
beforeEach(() => {
fixture.detectChanges();
});

it('should get item bitstreams', (done) => {
component.getFiles().subscribe((bitstreams) => {
expect(bitstreams).toBeDefined();
done();
});
});
});

describe('When the config has no additional metadata', () => {
beforeEach(() => {
fixture.detectChanges();
});

it('should not show the additional section', () => {
const additionalSection = fixture.debugElement.query(By.css('div.item-list-additional'));
expect(additionalSection).toBeNull();
});
});

describe('When the config has one additional metadata with no match', () => {
beforeEach(() => {
environment.myDSpace.additionalMetadataFields = ['fake'];
fixture.detectChanges();
});

it('should show the additional section', () => {
const additionalSection = fixture.debugElement.query(By.css('div.item-list-additional'));
expect(additionalSection).not.toBeNull();
});

it('should not show the additional metadata span', () => {
const additionalSpan = fixture.debugElement.query(By.css('span.item-additional'));
expect(additionalSpan).toBeNull();
});
});

describe('When the config has one additional metadata with a match', () => {
beforeEach(() => {
environment.myDSpace.additionalMetadataFields = ['dc.description.additional'];
fixture.detectChanges();
});

it('should show the additional metadata span', () => {
const additionalSpan = fixture.debugElement.query(By.css('span.item-additional'));
expect(additionalSpan).not.toBeNull();
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import { Bitstream } from '../../../../core/shared/bitstream.model';
import { FileService } from '../../../../core/shared/file.service';
import { HALEndpointService } from '../../../../core/shared/hal-endpoint.service';
import { SearchResult } from '../../../search/models/search-result.model';
import { environment } from 'src/environments/environment';
import { hasValue, isNotEmpty } from 'src/app/shared/empty.util';

/**
* This component show metadata for the given item object in the detail view.
Expand Down Expand Up @@ -44,6 +46,11 @@ export class ItemDetailPreviewComponent {
*/
@Input() showSubmitter = false;

/**
* A list of additional metadata fields to display
*/
public additionalMetadataFields: string[];

/**
* The item's thumbnail
*/
Expand All @@ -66,6 +73,12 @@ export class ItemDetailPreviewComponent {
private bitstreamDataService: BitstreamDataService) {
}

ngOnInit() {
if (hasValue(environment.myDSpace) && isNotEmpty(environment.myDSpace.additionalMetadataFields)) {
this.additionalMetadataFields = environment.myDSpace.additionalMetadataFields;
}
}

/**
* Perform bitstream download
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,18 @@ <h3 [innerHTML]="dsoTitle" [ngClass]="{'lead': true,'text-muted': !item.firstMet
<span *ngIf="!last">; </span>
</span>
</span>

</ds-truncatable-part>
</ds-truncatable-part>
</span>

<ds-truncatable-part [id]="item.id" [minLines]="1" class="item-list-abstract">
<span [ngClass]="{'text-muted': !item.firstMetadataValue('dc.description.abstract')}"
[innerHTML]="(item.firstMetadataValue('dc.description.abstract')) || ('mydspace.results.no-abstract' | translate)"></span>
</ds-truncatable-part>

<div *ngIf="additionalMetadataFields" class="item-list-additional">
<ds-truncatable-part *ngFor="let meta of item.allMetadataValues(additionalMetadataFields)" [id]="item.id" [minLines]="1">
<span class='text-muted item-additional' [innerHTML]="meta"></span>
</ds-truncatable-part>
</div>
</div>
</ds-truncatable>
<ds-item-submitter *ngIf="showSubmitter" [object]="object.indexableObject"></ds-item-submitter>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateLoaderMock } from '../../../mocks/translate-loader.mock';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { APP_CONFIG } from '../../../../../config/app-config.interface';
import { environment } from 'src/environments/environment';

let component: ItemListPreviewComponent;
let fixture: ComponentFixture<ItemListPreviewComponent>;
Expand Down Expand Up @@ -66,6 +67,23 @@ const mockItemWithEntityType: Item = Object.assign(new Item(), {
]
}
});
const mockItemWithAdditionalMeta: Item = Object.assign(new Item(), {
bundles: observableOf({}),
metadata: {
'dc.title': [
{
language: 'en_US',
value: 'This is just another title'
}
],
'dspace.description.additional': [
{
language: null,
value: 'This is an additional description metadata.'
}
]
}
});

const environmentUseThumbs = {
browseBy: {
Expand Down Expand Up @@ -113,6 +131,10 @@ describe('ItemListPreviewComponent', () => {
component.object = { hitHighlights: {} } as any;
});

afterEach(() => {
environment.myDSpace.additionalMetadataFields = [];
});

describe('When showThumbnails is true', () => {
beforeEach(() => {
component.item = mockItemWithAuthorAndDate;
Expand Down Expand Up @@ -183,6 +205,49 @@ describe('ItemListPreviewComponent', () => {
expect(entityField).not.toBeNull();
});
});

describe('When the config has no additional metadata', () => {
beforeEach(() => {
component.item = mockItemWithAdditionalMeta;
fixture.detectChanges();
});

it('should not show the additional section', () => {
const additionalSection = fixture.debugElement.query(By.css('div.item-list-additional'));
expect(additionalSection).toBeNull();
});
});

describe('When the config has one additional metadata with no match', () => {
beforeEach(() => {
environment.myDSpace.additionalMetadataFields = ['fake'];
component.item = mockItemWithAdditionalMeta;
fixture.detectChanges();
});

it('should show the additional section', () => {
const additionalSection = fixture.debugElement.query(By.css('div.item-list-additional'));
expect(additionalSection).not.toBeNull();
});

it('should not show the additional metadata span', () => {
const additionalSpan = fixture.debugElement.query(By.css('span.item-additional'));
expect(additionalSpan).toBeNull();
});
});

describe('When the config has one additional metadata with a match', () => {
beforeEach(() => {
environment.myDSpace.additionalMetadataFields = ['dspace.description.additional'];
component.item = mockItemWithAdditionalMeta;
fixture.detectChanges();
});

it('should show the additional metadata span', () => {
const additionalSpan = fixture.debugElement.query(By.css('span.item-additional'));
expect(additionalSpan).not.toBeNull();
});
});
});

describe('ItemListPreviewComponent', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Component, Inject, Input, OnInit } from '@angular/core';

import { hasValue, isNotEmpty } from 'src/app/shared/empty.util';
import { environment } from 'src/environments/environment';
import { Item } from '../../../../core/shared/item.model';
import { fadeInOut } from '../../../animations/fade';
import {
Expand Down Expand Up @@ -40,6 +41,11 @@ export class ItemListPreviewComponent implements OnInit {
*/
@Input() showSubmitter = false;

/**
* A list of additional metadata fields to display
*/
public additionalMetadataFields: string[];

/**
* Display thumbnails if required by configuration
*/
Expand All @@ -56,6 +62,9 @@ export class ItemListPreviewComponent implements OnInit {
ngOnInit(): void {
this.showThumbnails = this.appConfig.browseBy.showThumbnails;
this.dsoTitle = this.dsoNameService.getName(this.item);
if (hasValue(environment.myDSpace) && isNotEmpty(environment.myDSpace.additionalMetadataFields)) {
this.additionalMetadataFields = environment.myDSpace.additionalMetadataFields;
}
}


Expand Down
2 changes: 2 additions & 0 deletions src/config/app-config.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { ActuatorsConfig } from './actuators.config';
import { InfoConfig } from './info-config.interface';
import { CommunityListConfig } from './community-list-config.interface';
import { HomeConfig } from './homepage-config.interface';
import { MyDSpaceConfig } from './my-dspace.interface';

interface AppConfig extends Config {
ui: UIServerConfig;
Expand All @@ -42,6 +43,7 @@ interface AppConfig extends Config {
bundle: BundleConfig;
actuators: ActuatorsConfig
info: InfoConfig;
myDSpace: MyDSpaceConfig;
}

/**
Expand Down
5 changes: 5 additions & 0 deletions src/config/default-app-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { FormConfig } from './form-config.interfaces';
import { ItemConfig } from './item-config.interface';
import { LangConfig } from './lang-config.interface';
import { MediaViewerConfig } from './media-viewer-config.interface';
import { MyDSpaceConfig } from './my-dspace.interface';
import { INotificationBoardOptions } from './notifications-config.interfaces';
import { ServerConfig } from './server-config.interface';
import { SubmissionConfig } from './submission-config.interface';
Expand Down Expand Up @@ -364,4 +365,8 @@ export class DefaultAppConfig implements AppConfig {
enableEndUserAgreement: true,
enablePrivacyStatement: true
};
// The default MyDSpace Config
myDSpace: MyDSpaceConfig = {
additionalMetadataFields: []
};
}
12 changes: 12 additions & 0 deletions src/config/my-dspace.interface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Config } from './config.interface';

/**
* Config that determines some aspects of the MyDSpace section
*/
export interface MyDSpaceConfig extends Config {
/**
* The list of additional metadata fields to display at the end of the item component
*/
additionalMetadataFields: string[]
}

3 changes: 3 additions & 0 deletions src/environments/environment.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -271,4 +271,7 @@ export const environment: BuildConfig = {
enableEndUserAgreement: true,
enablePrivacyStatement: true,
},
myDSpace: {
additionalMetadataFields: []
}
};