Skip to content

Commit 499bfe3

Browse files
authored
Merge pull request DSpace#2277 from paulo-graca/bugfix/addressing-#2276
new project metadata representation component
2 parents 5d39026 + 5c10e47 commit 499bfe3

4 files changed

Lines changed: 91 additions & 0 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<ng-template #descTemplate>
2+
<span class="text-muted">
3+
<span class="item-list-project-title">
4+
<span [innerHTML]="dsoNameService.getName(mdRepresentation)"></span>
5+
</span>
6+
</span>
7+
</ng-template>
8+
<ds-truncatable [id]="mdRepresentation.id">
9+
<a [routerLink]="[itemPageRoute]"
10+
[innerHTML]="dsoNameService.getName(mdRepresentation)"
11+
[ngbTooltip]="dsoNameService.getName(mdRepresentation).length > 0 ? descTemplate : null"></a>
12+
</ds-truncatable>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
2+
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
3+
import { By } from '@angular/platform-browser';
4+
5+
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
6+
7+
import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model';
8+
import { Item } from '../../../../core/shared/item.model';
9+
import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component';
10+
import { MetadataValue } from '../../../../core/shared/metadata.models';
11+
import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service';
12+
import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock';
13+
14+
const projectTitle = 'Lorem ipsum dolor sit amet';
15+
const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } });
16+
const virtMD = Object.assign(new MetadataValue(), { value: projectTitle });
17+
18+
const mockItemMetadataRepresentation = Object.assign(new ItemMetadataRepresentation(virtMD), mockItem);
19+
20+
describe('ProjectItemMetadataListElementComponent', () => {
21+
let comp: ProjectItemMetadataListElementComponent;
22+
let fixture: ComponentFixture<ProjectItemMetadataListElementComponent>;
23+
24+
beforeEach(waitForAsync(() => {
25+
TestBed.configureTestingModule({
26+
imports:[
27+
NgbModule
28+
],
29+
declarations: [ProjectItemMetadataListElementComponent],
30+
providers: [
31+
{ provide: DSONameService, useValue: new DSONameServiceMock() }
32+
],
33+
schemas: [NO_ERRORS_SCHEMA]
34+
}).overrideComponent(ProjectItemMetadataListElementComponent, {
35+
set: { changeDetection: ChangeDetectionStrategy.Default }
36+
}).compileComponents();
37+
}));
38+
39+
beforeEach(() => {
40+
fixture = TestBed.createComponent(ProjectItemMetadataListElementComponent);
41+
comp = fixture.componentInstance;
42+
comp.mdRepresentation = mockItemMetadataRepresentation;
43+
fixture.detectChanges();
44+
});
45+
46+
it('should show the project\'s name as a link', () => {
47+
const linkText = fixture.debugElement.query(By.css('a')).nativeElement.textContent;
48+
expect(linkText).toBe(projectTitle);
49+
});
50+
51+
});
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Component } from '@angular/core';
2+
import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
3+
import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
4+
import { ItemMetadataRepresentationListElementComponent } from '../../../../shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component';
5+
import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service';
6+
7+
@metadataRepresentationComponent('Project', MetadataRepresentationType.Item)
8+
@Component({
9+
selector: 'ds-project-item-metadata-list-element',
10+
templateUrl: './project-item-metadata-list-element.component.html'
11+
})
12+
/**
13+
* The component for displaying an item of the type Project as a metadata field
14+
*/
15+
export class ProjectItemMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent {
16+
/**
17+
* Initialize instance variables
18+
*
19+
* @param dsoNameService
20+
*/
21+
constructor(
22+
public dsoNameService: DSONameService
23+
) {
24+
super();
25+
}
26+
}

src/app/entity-groups/research-entities/research-entities.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { OrgUnitSearchResultGridElementComponent } from './item-grid-elements/se
1919
import { ProjectSearchResultGridElementComponent } from './item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component';
2020
import { PersonItemMetadataListElementComponent } from './metadata-representations/person/person-item-metadata-list-element.component';
2121
import { OrgUnitItemMetadataListElementComponent } from './metadata-representations/org-unit/org-unit-item-metadata-list-element.component';
22+
import { ProjectItemMetadataListElementComponent } from './metadata-representations/project/project-item-metadata-list-element.component';
2223
import { PersonSearchResultListSubmissionElementComponent } from './submission/item-list-elements/person/person-search-result-list-submission-element.component';
2324
import { PersonInputSuggestionsComponent } from './submission/item-list-elements/person/person-suggestions/person-input-suggestions.component';
2425
import { NameVariantModalComponent } from './submission/name-variant-modal/name-variant-modal.component';
@@ -36,6 +37,7 @@ const ENTRY_COMPONENTS = [
3637
// put only entry components that use custom decorator
3738
OrgUnitComponent,
3839
PersonComponent,
40+
ProjectItemMetadataListElementComponent,
3941
ProjectComponent,
4042
OrgUnitListElementComponent,
4143
OrgUnitItemMetadataListElementComponent,

0 commit comments

Comments
 (0)