new project metadata representation component

This commit is contained in:
Paulo Graça
2023-05-30 11:46:59 +01:00
parent d2fa8cda6a
commit d9ed91df05
3 changed files with 73 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
<ng-template #descTemplate>
<span class="text-muted">
<span class="item-list-job-title">
<span [innerHTML]="metadataRepresentation.firstMetadataValue(['dc.title'])"></span>
</span>
</span>
</ng-template>
<ds-truncatable [id]="metadataRepresentation.id">
<a [routerLink]="[itemPageRoute]"
[innerHTML]="metadataRepresentation.getValue()"
[ngbTooltip]="metadataRepresentation.allMetadata(['dc.title']).length > 0 ? descTemplate : null"></a>
</ds-truncatable>

View File

@@ -0,0 +1,46 @@
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { By } from '@angular/platform-browser';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model';
import { Item } from '../../../../core/shared/item.model';
import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component';
import { MetadataValue } from '../../../../core/shared/metadata.models';
const projectTitle = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.';
const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } });
const virtMD = Object.assign(new MetadataValue(), { value: projectTitle });
const mockItemMetadataRepresentation = Object.assign(new ItemMetadataRepresentation(virtMD), mockItem);
describe('ProjectItemMetadataListElementComponent', () => {
let comp: ProjectItemMetadataListElementComponent;
let fixture: ComponentFixture<ProjectItemMetadataListElementComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports:[
NgbModule
],
declarations: [ProjectItemMetadataListElementComponent],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ProjectItemMetadataListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ProjectItemMetadataListElementComponent);
comp = fixture.componentInstance;
comp.metadataRepresentation = mockItemMetadataRepresentation;
fixture.detectChanges();
});
it('should show the project\'s name as a link', () => {
const linkText = fixture.debugElement.query(By.css('a')).nativeElement.textContent;
expect(linkText).toBe(projectTitle);
});
});

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
import { ItemMetadataRepresentationListElementComponent } from '../../../../shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component';
@metadataRepresentationComponent('Project', MetadataRepresentationType.Item)
@Component({
selector: 'ds-project-item-metadata-list-element',
templateUrl: './project-item-metadata-list-element.component.html'
})
/**
* The component for displaying an item of the type Project as a metadata field
*/
export class ProjectItemMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent {
}