diff --git a/src/app/entity-groups/journal-entities/item-pages/journal-volume/journal-volume.component.ts b/src/app/entity-groups/journal-entities/item-pages/journal-volume/journal-volume.component.ts
index 83ef925e02..4219609aab 100644
--- a/src/app/entity-groups/journal-entities/item-pages/journal-volume/journal-volume.component.ts
+++ b/src/app/entity-groups/journal-entities/item-pages/journal-volume/journal-volume.component.ts
@@ -1,8 +1,9 @@
import { Component } from '@angular/core';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
-@rendersItemType('JournalVolume', ItemViewMode.Full)
+@listableObjectComponent('JournalVolume', ViewMode.StandalonePage)
@Component({
selector: 'ds-journal-volume',
styleUrls: ['./journal-volume.component.scss'],
diff --git a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.html b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.html
index d22933a657..ae6c3a8914 100644
--- a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.html
+++ b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.html
@@ -1,42 +1,42 @@
-
+
-
-
-
-
diff --git a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.spec.ts b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.spec.ts
index c66c3a2462..10fdd3bf93 100644
--- a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.spec.ts
+++ b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.spec.ts
@@ -1,19 +1,16 @@
import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
-import { ITEM } from '../../../../shared/items/switcher/item-type-switcher.component';
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
import { ItemDataService } from '../../../../core/data/item-data.service';
import { Item } from '../../../../core/shared/item.model';
import { By } from '@angular/platform-browser';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader';
-import { RemoteData } from '../../../../core/data/remote-data';
import { PaginatedList } from '../../../../core/data/paginated-list';
import { PageInfo } from '../../../../core/shared/page-info.model';
import { isNotEmpty } from '../../../../shared/empty.util';
import { JournalComponent } from './journal.component';
-import { of as observableOf } from 'rxjs';
import { GenericItemPageFieldComponent } from '../../../../+item-page/simple/field-components/specific-field/generic/generic-item-page-field.component';
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
@@ -55,7 +52,6 @@ describe('JournalComponent', () => {
})],
declarations: [JournalComponent, GenericItemPageFieldComponent, TruncatePipe],
providers: [
- {provide: ITEM, useValue: mockItem},
{provide: ItemDataService, useValue: {}},
{provide: TruncatableService, useValue: {}}
],
@@ -69,6 +65,7 @@ describe('JournalComponent', () => {
beforeEach(async(() => {
fixture = TestBed.createComponent(JournalComponent);
comp = fixture.componentInstance;
+ comp.object = mockItem;
fixture.detectChanges();
}));
diff --git a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.ts b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.ts
index d03adf8487..dbbeb81662 100644
--- a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.ts
+++ b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.ts
@@ -1,8 +1,9 @@
import { Component } from '@angular/core';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
-@rendersItemType('Journal', ItemViewMode.Full)
+@listableObjectComponent('Journal', ViewMode.StandalonePage)
@Component({
selector: 'ds-journal',
styleUrls: ['./journal.component.scss'],
diff --git a/src/app/entity-groups/journal-entities/journal-entities.module.ts b/src/app/entity-groups/journal-entities/journal-entities.module.ts
index 4033645e1b..d00eae1e54 100644
--- a/src/app/entity-groups/journal-entities/journal-entities.module.ts
+++ b/src/app/entity-groups/journal-entities/journal-entities.module.ts
@@ -12,6 +12,12 @@ import { TooltipModule } from 'ngx-bootstrap';
import { JournalIssueGridElementComponent } from './item-grid-elements/journal-issue/journal-issue-grid-element.component';
import { JournalVolumeGridElementComponent } from './item-grid-elements/journal-volume/journal-volume-grid-element.component';
import { JournalGridElementComponent } from './item-grid-elements/journal/journal-grid-element.component';
+import { JournalSearchResultListElementComponent } from './item-list-elements/search-result-list-elements/journal/journal-search-result-list-element.component';
+import { JournalSearchResultGridElementComponent } from './item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component';
+import { JournalIssueSearchResultListElementComponent } from './item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component';
+import { JournalVolumeSearchResultListElementComponent } from './item-list-elements/search-result-list-elements/journal-volume/journal-volume-search-result-list-element.component';
+import { JournalIssueSearchResultGridElementComponent } from './item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component';
+import { JournalVolumeSearchResultGridElementComponent } from './item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component';
const ENTRY_COMPONENTS = [
JournalComponent,
@@ -22,7 +28,13 @@ const ENTRY_COMPONENTS = [
JournalVolumeListElementComponent,
JournalIssueGridElementComponent,
JournalVolumeGridElementComponent,
- JournalGridElementComponent
+ JournalGridElementComponent,
+ JournalSearchResultListElementComponent,
+ JournalIssueSearchResultListElementComponent,
+ JournalVolumeSearchResultListElementComponent,
+ JournalIssueSearchResultGridElementComponent,
+ JournalVolumeSearchResultGridElementComponent,
+ JournalSearchResultGridElementComponent
];
@NgModule({
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.html
new file mode 100644
index 0000000000..e4522398a6
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.html
@@ -0,0 +1 @@
+
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.scss b/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.spec.ts b/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.spec.ts
new file mode 100644
index 0000000000..953cc78535
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.spec.ts
@@ -0,0 +1,81 @@
+import { Item } from '../../../../core/shared/item.model';
+import { of as observableOf } from 'rxjs/internal/observable/of';
+import { OrgUnitGridElementComponent } from './org-unit-grid-element.component';
+import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
+import { PaginatedList } from '../../../../core/data/paginated-list';
+import { PageInfo } from '../../../../core/shared/page-info.model';
+import { async, TestBed } from '@angular/core/testing';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
+import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { By } from '@angular/platform-browser';
+
+const mockItem = Object.assign(new Item(), {
+ bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ],
+ 'organization.foundingDate': [
+ {
+ language: null,
+ value: '2015-06-26'
+ }
+ ],
+ 'organization.address.addressCountry': [
+ {
+ language: 'en_US',
+ value: 'Belgium'
+ }
+ ],
+ 'organization.address.addressLocality': [
+ {
+ language: 'en_US',
+ value: 'Brussels'
+ }
+ ]
+ }
+});
+
+describe('OrgUnitGridElementComponent', () => {
+ let comp;
+ let fixture;
+
+ const truncatableServiceStub: any = {
+ isCollapsed: (id: number) => observableOf(true),
+ };
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [NoopAnimationsModule],
+ declarations: [OrgUnitGridElementComponent, TruncatePipe],
+ providers: [
+ { provide: TruncatableService, useValue: truncatableServiceStub },
+ ],
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(OrgUnitGridElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(OrgUnitGridElementComponent);
+ comp = fixture.componentInstance;
+ }));
+
+ describe(`when the org unit is rendered`, () => {
+ beforeEach(() => {
+ comp.object = mockItem;
+ fixture.detectChanges();
+ });
+
+ it(`should contain a OrgUnitGridElementComponent`, () => {
+ const orgUnitGridElement = fixture.debugElement.query(By.css(`ds-org-unit-search-result-grid-element`));
+ expect(orgUnitGridElement).not.toBeNull();
+ });
+ });
+});
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.ts b/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.ts
new file mode 100644
index 0000000000..05a7f6c8c5
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.ts
@@ -0,0 +1,17 @@
+import { Component } from '@angular/core';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
+import { Item } from '../../../../core/shared/item.model';
+
+@listableObjectComponent('OrgUnit', ViewMode.GridElement)
+@Component({
+ selector: 'ds-org-unit-grid-element',
+ styleUrls: ['./org-unit-grid-element.component.scss'],
+ templateUrl: './org-unit-grid-element.component.html',
+})
+/**
+ * The component for displaying a grid element for an item of the type Organisation Unit
+ */
+export class OrgUnitGridElementComponent extends AbstractListableElementComponent
- {
+}
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/orgunit/orgunit-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/orgunit/orgunit-grid-element.component.html
deleted file mode 100644
index a4765c4e8f..0000000000
--- a/src/app/entity-groups/research-entities/item-grid-elements/orgunit/orgunit-grid-element.component.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{dso.firstMetadataValue('organization.address.addressCountry')}}
-
- ,
- {{dso.firstMetadataValue('organization.address.addressLocality')}}
-
-
-
-
-
-
-
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/orgunit/orgunit-grid-element.component.ts b/src/app/entity-groups/research-entities/item-grid-elements/orgunit/orgunit-grid-element.component.ts
deleted file mode 100644
index 0effc22027..0000000000
--- a/src/app/entity-groups/research-entities/item-grid-elements/orgunit/orgunit-grid-element.component.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
-import { Component } from '@angular/core';
-import { focusShadow } from '../../../../shared/animations/focus';
-import { TypedItemSearchResultGridElementComponent } from '../../../../shared/object-grid/item-grid-element/item-types/typed-item-search-result-grid-element.component';
-
-@rendersItemType('OrgUnit', ItemViewMode.Card)
-@Component({
- selector: 'ds-orgunit-grid-element',
- styleUrls: ['./orgunit-grid-element.component.scss'],
- templateUrl: './orgunit-grid-element.component.html',
- animations: [focusShadow]
-})
-/**
- * The component for displaying a grid element for an item of the type Organisation Unit
- */
-export class OrgunitGridElementComponent extends TypedItemSearchResultGridElementComponent {
-}
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.html
index 331c2bd520..a431f5979f 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.html
+++ b/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.html
@@ -1,30 +1 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.spec.ts b/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.spec.ts
index 25268261e1..3edb0fdea7 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.spec.ts
+++ b/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.spec.ts
@@ -1,15 +1,17 @@
-import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
import { Item } from '../../../../core/shared/item.model';
import { of as observableOf } from 'rxjs/internal/observable/of';
-import { getEntityGridElementTestComponent } from '../../../../shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.spec';
import { PersonGridElementComponent } from './person-grid-element.component';
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
import { PaginatedList } from '../../../../core/data/paginated-list';
import { PageInfo } from '../../../../core/shared/page-info.model';
+import { async, TestBed } from '@angular/core/testing';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
+import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { By } from '@angular/platform-browser';
-const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
-mockItemWithMetadata.hitHighlights = {};
-mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
+const mockItem = Object.assign(new Item(), {
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
metadata: {
'dc.title': [
@@ -33,18 +35,41 @@ mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
}
});
-const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
-mockItemWithoutMetadata.hitHighlights = {};
-mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
- bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
- metadata: {
- 'dc.title': [
- {
- language: 'en_US',
- value: 'This is just another title'
- }
- ]
- }
-});
+describe('PersonGridElementComponent', () => {
+ let comp;
+ let fixture;
-describe('PersonGridElementComponent', getEntityGridElementTestComponent(PersonGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['email', 'jobtitle']));
+ const truncatableServiceStub: any = {
+ isCollapsed: (id: number) => observableOf(true),
+ };
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [NoopAnimationsModule],
+ declarations: [PersonGridElementComponent, TruncatePipe],
+ providers: [
+ { provide: TruncatableService, useValue: truncatableServiceStub },
+ ],
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(PersonGridElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(PersonGridElementComponent);
+ comp = fixture.componentInstance;
+ }));
+
+ describe(`when the person is rendered`, () => {
+ beforeEach(() => {
+ comp.object = mockItem;
+ fixture.detectChanges();
+ });
+
+ it(`should contain a PersonGridElementComponent`, () => {
+ const personGridElement = fixture.debugElement.query(By.css(`ds-person-search-result-grid-element`));
+ expect(personGridElement).not.toBeNull();
+ });
+ });
+});
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.ts b/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.ts
index bf7b8aa119..2e3ce5804e 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.ts
+++ b/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.ts
@@ -1,17 +1,17 @@
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
import { Component } from '@angular/core';
-import { TypedItemSearchResultGridElementComponent } from '../../../../shared/object-grid/item-grid-element/item-types/typed-item-search-result-grid-element.component';
-import { focusShadow } from '../../../../shared/animations/focus';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
+import { Item } from '../../../../core/shared/item.model';
-@rendersItemType('Person', ItemViewMode.Card)
+@listableObjectComponent('Person', ViewMode.GridElement)
@Component({
selector: 'ds-person-grid-element',
styleUrls: ['./person-grid-element.component.scss'],
templateUrl: './person-grid-element.component.html',
- animations: [focusShadow]
})
/**
* The component for displaying a grid element for an item of the type Person
*/
-export class PersonGridElementComponent extends TypedItemSearchResultGridElementComponent {
+export class PersonGridElementComponent extends AbstractListableElementComponent- {
}
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.html
index 889276b29b..0c87599399 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.html
+++ b/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.html
@@ -1,25 +1 @@
-
-
-
+
\ No newline at end of file
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.spec.ts b/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.spec.ts
index 969912976c..8bd462b0e6 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.spec.ts
+++ b/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.spec.ts
@@ -1,15 +1,17 @@
-import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
import { Item } from '../../../../core/shared/item.model';
import { of as observableOf } from 'rxjs/internal/observable/of';
-import { getEntityGridElementTestComponent } from '../../../../shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.spec';
import { ProjectGridElementComponent } from './project-grid-element.component';
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
import { PaginatedList } from '../../../../core/data/paginated-list';
import { PageInfo } from '../../../../core/shared/page-info.model';
+import { async, TestBed } from '@angular/core/testing';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
+import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { By } from '@angular/platform-browser';
-const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
-mockItemWithMetadata.hitHighlights = {};
-mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
+const mockItem = Object.assign(new Item(), {
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
metadata: {
'dc.title': [
@@ -27,18 +29,41 @@ mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
}
});
-const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
-mockItemWithoutMetadata.hitHighlights = {};
-mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
- bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
- metadata: {
- 'dc.title': [
- {
- language: 'en_US',
- value: 'This is just another title'
- }
- ]
- }
-});
+describe('ProjectGridElementComponent', () => {
+ let comp;
+ let fixture;
-describe('ProjectGridElementComponent', getEntityGridElementTestComponent(ProjectGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['description']));
+ const truncatableServiceStub: any = {
+ isCollapsed: (id: number) => observableOf(true),
+ };
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [NoopAnimationsModule],
+ declarations: [ProjectGridElementComponent, TruncatePipe],
+ providers: [
+ { provide: TruncatableService, useValue: truncatableServiceStub },
+ ],
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(ProjectGridElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(ProjectGridElementComponent);
+ comp = fixture.componentInstance;
+ }));
+
+ describe(`when the project is rendered`, () => {
+ beforeEach(() => {
+ comp.object = mockItem;
+ fixture.detectChanges();
+ });
+
+ it(`should contain a ProjectGridElementComponent`, () => {
+ const projectGridElement = fixture.debugElement.query(By.css(`ds-project-search-result-grid-element`));
+ expect(projectGridElement).not.toBeNull();
+ });
+ });
+});
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.ts b/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.ts
index 15d525fcf2..58547960cf 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.ts
+++ b/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.ts
@@ -1,17 +1,17 @@
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
import { Component } from '@angular/core';
-import { focusShadow } from '../../../../shared/animations/focus';
-import { TypedItemSearchResultGridElementComponent } from '../../../../shared/object-grid/item-grid-element/item-types/typed-item-search-result-grid-element.component';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
+import { Item } from '../../../../core/shared/item.model';
-@rendersItemType('Project', ItemViewMode.Card)
+@listableObjectComponent('Project', ViewMode.GridElement)
@Component({
selector: 'ds-project-grid-element',
styleUrls: ['./project-grid-element.component.scss'],
templateUrl: './project-grid-element.component.html',
- animations: [focusShadow]
})
/**
* The component for displaying a grid element for an item of the type Project
*/
-export class ProjectGridElementComponent extends TypedItemSearchResultGridElementComponent {
+export class ProjectGridElementComponent extends AbstractListableElementComponent
- {
}
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.html
new file mode 100644
index 0000000000..5c42be2b24
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{firstMetadataValue('organization.address.addressCountry')}}
+
+ ,
+ {{firstMetadataValue('organization.address.addressLocality')}}
+
+
+
+
+
+
+
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.scss b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/orgunit/orgunit-grid-element.component.spec.ts b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.spec.ts
similarity index 56%
rename from src/app/entity-groups/research-entities/item-grid-elements/orgunit/orgunit-grid-element.component.spec.ts
rename to src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.spec.ts
index 15c7b75bf5..36324ad627 100644
--- a/src/app/entity-groups/research-entities/item-grid-elements/orgunit/orgunit-grid-element.component.spec.ts
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.spec.ts
@@ -1,11 +1,10 @@
-import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
-import { Item } from '../../../../core/shared/item.model';
-import { of as observableOf } from 'rxjs/internal/observable/of';
-import { getEntityGridElementTestComponent } from '../../../../shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.spec';
-import { OrgunitGridElementComponent } from './orgunit-grid-element.component';
-import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
-import { PaginatedList } from '../../../../core/data/paginated-list';
-import { PageInfo } from '../../../../core/shared/page-info.model';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { Item } from '../../../../../core/shared/item.model';
+import { createSuccessfulRemoteDataObject$ } from '../../../../../shared/testing/utils';
+import { PaginatedList } from '../../../../../core/data/paginated-list';
+import { PageInfo } from '../../../../../core/shared/page-info.model';
+import { OrgUnitSearchResultGridElementComponent } from './org-unit-search-result-grid-element.component';
+import { getEntityGridElementTestComponent } from '../../../../../shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.spec';
const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
mockItemWithMetadata.hitHighlights = {};
@@ -53,4 +52,4 @@ mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
}
});
-describe('OrgunitGridElementComponent', getEntityGridElementTestComponent(OrgunitGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'country', 'city']));
+describe('OrgUnitSearchResultGridElementComponent', getEntityGridElementTestComponent(OrgUnitSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'country', 'city']));
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.ts b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.ts
new file mode 100644
index 0000000000..64b4be4a11
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component.ts
@@ -0,0 +1,20 @@
+import { Component } from '@angular/core';
+import { listableObjectComponent } from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../../core/shared/view-mode.model';
+import { focusShadow } from '../../../../../shared/animations/focus';
+import { SearchResultGridElementComponent } from '../../../../../shared/object-grid/search-result-grid-element/search-result-grid-element.component';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { Item } from '../../../../../core/shared/item.model';
+
+@listableObjectComponent('OrgUnitSearchResult', ViewMode.GridElement)
+@Component({
+ selector: 'ds-org-unit-search-result-grid-element',
+ styleUrls: ['./org-unit-search-result-grid-element.component.scss'],
+ templateUrl: './org-unit-search-result-grid-element.component.html',
+ animations: [focusShadow]
+})
+/**
+ * The component for displaying a grid element for an item search result of the type Organisation Unit
+ */
+export class OrgUnitSearchResultGridElementComponent extends SearchResultGridElementComponent {
+}
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html
new file mode 100644
index 0000000000..b7eed7c8b4
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.scss b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.spec.ts b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.spec.ts
new file mode 100644
index 0000000000..05baa7a63f
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.spec.ts
@@ -0,0 +1,49 @@
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { Item } from '../../../../../core/shared/item.model';
+import { createSuccessfulRemoteDataObject$ } from '../../../../../shared/testing/utils';
+import { PaginatedList } from '../../../../../core/data/paginated-list';
+import { PageInfo } from '../../../../../core/shared/page-info.model';
+import { getEntityGridElementTestComponent } from '../../../../../shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.spec';
+import { PersonSearchResultGridElementComponent } from './person-search-result-grid-element.component';
+
+const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
+mockItemWithMetadata.hitHighlights = {};
+mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
+ bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ],
+ 'person.email': [
+ {
+ language: 'en_US',
+ value: 'Smith-Donald@gmail.com'
+ }
+ ],
+ 'person.jobTitle': [
+ {
+ language: 'en_US',
+ value: 'Web Developer'
+ }
+ ]
+ }
+});
+
+const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
+mockItemWithoutMetadata.hitHighlights = {};
+mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
+ bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ]
+ }
+});
+
+describe('PersonSearchResultGridElementComponent', getEntityGridElementTestComponent(PersonSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['email', 'jobtitle']));
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.ts b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.ts
new file mode 100644
index 0000000000..55bc4f5a0d
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.ts
@@ -0,0 +1,20 @@
+import { Component } from '@angular/core';
+import { listableObjectComponent } from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../../core/shared/view-mode.model';
+import { focusShadow } from '../../../../../shared/animations/focus';
+import { SearchResultGridElementComponent } from '../../../../../shared/object-grid/search-result-grid-element/search-result-grid-element.component';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { Item } from '../../../../../core/shared/item.model';
+
+@listableObjectComponent('PersonSearchResult', ViewMode.GridElement)
+@Component({
+ selector: 'ds-person-search-result-grid-element',
+ styleUrls: ['./person-search-result-grid-element.component.scss'],
+ templateUrl: './person-search-result-grid-element.component.html',
+ animations: [focusShadow]
+})
+/**
+ * The component for displaying a grid element for an item search result of the type Person
+ */
+export class PersonSearchResultGridElementComponent extends SearchResultGridElementComponent {
+}
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html
new file mode 100644
index 0000000000..f3a0dea81f
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html
@@ -0,0 +1,31 @@
+
+
+
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.scss b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.spec.ts b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.spec.ts
new file mode 100644
index 0000000000..15e7432b65
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.spec.ts
@@ -0,0 +1,43 @@
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { Item } from '../../../../../core/shared/item.model';
+import { createSuccessfulRemoteDataObject$ } from '../../../../../shared/testing/utils';
+import { PaginatedList } from '../../../../../core/data/paginated-list';
+import { PageInfo } from '../../../../../core/shared/page-info.model';
+import { ProjectSearchResultGridElementComponent } from './project-search-result-grid-element.component';
+import { getEntityGridElementTestComponent } from '../../../../../shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.spec';
+
+const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
+mockItemWithMetadata.hitHighlights = {};
+mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
+ bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ],
+ 'dc.description': [
+ {
+ language: 'en_US',
+ value: 'The project description'
+ }
+ ]
+ }
+});
+
+const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
+mockItemWithoutMetadata.hitHighlights = {};
+mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
+ bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ]
+ }
+});
+
+describe('ProjectSearchResultGridElementComponent', getEntityGridElementTestComponent(ProjectSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['description']));
diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.ts b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.ts
new file mode 100644
index 0000000000..a352d2dcb0
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.ts
@@ -0,0 +1,20 @@
+import { Component } from '@angular/core';
+import { SearchResultGridElementComponent } from '../../../../../shared/object-grid/search-result-grid-element/search-result-grid-element.component';
+import { Item } from '../../../../../core/shared/item.model';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { listableObjectComponent } from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../../core/shared/view-mode.model';
+import { focusShadow } from '../../../../../shared/animations/focus';
+
+@listableObjectComponent('ProjectSearchResult', ViewMode.GridElement)
+@Component({
+ selector: 'ds-project-search-result-grid-element',
+ styleUrls: ['./project-search-result-grid-element.component.scss'],
+ templateUrl: './project-search-result-grid-element.component.html',
+ animations: [focusShadow]
+})
+/**
+ * The component for displaying a grid element for an item search result of the type Project
+ */
+export class ProjectSearchResultGridElementComponent extends SearchResultGridElementComponent {
+}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.html
new file mode 100644
index 0000000000..03ef45c7a4
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.scss b/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.scss
similarity index 100%
rename from src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.scss
rename to src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.scss
diff --git a/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.spec.ts
new file mode 100644
index 0000000000..43ed9b0ec5
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.spec.ts
@@ -0,0 +1,64 @@
+import { async, TestBed } from '@angular/core/testing';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { By } from '@angular/platform-browser';
+import { OrgUnitListElementComponent } from './org-unit-list-element.component';
+import { of as observableOf } from 'rxjs';
+import { Item } from '../../../../core/shared/item.model';
+import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
+import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
+
+const mockItem: Item = Object.assign(new Item(), {
+ bitstreams: observableOf({}),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ],
+ 'dc.description': [
+ {
+ language: 'en_US',
+ value: 'A description about the OrgUnit'
+ }
+ ]
+ }
+});
+
+describe('OrgUnitListElementComponent', () => {
+ let comp;
+ let fixture;
+
+ const truncatableServiceStub: any = {
+ isCollapsed: (id: number) => observableOf(true),
+ };
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [OrgUnitListElementComponent, TruncatePipe],
+ providers: [
+ { provide: TruncatableService, useValue: truncatableServiceStub },
+ ],
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(OrgUnitListElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(OrgUnitListElementComponent);
+ comp = fixture.componentInstance;
+ }));
+
+ describe(`when the org unit is rendered`, () => {
+ beforeEach(() => {
+ comp.object = mockItem;
+ fixture.detectChanges();
+ });
+
+ it(`should contain a OrgUnitListElementComponent`, () => {
+ const orgUnitListElement = fixture.debugElement.query(By.css(`ds-org-unit-search-result-list-element`));
+ expect(orgUnitListElement).not.toBeNull();
+ });
+ });
+});
diff --git a/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.ts
new file mode 100644
index 0000000000..32254595aa
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.ts
@@ -0,0 +1,17 @@
+import { Component } from '@angular/core';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
+import { Item } from '../../../../core/shared/item.model';
+
+@listableObjectComponent('OrgUnit', ViewMode.ListElement)
+@Component({
+ selector: 'ds-org-unit-list-element',
+ styleUrls: ['./org-unit-list-element.component.scss'],
+ templateUrl: './org-unit-list-element.component.html'
+})
+/**
+ * The component for displaying a list element for an item of the type Organisation Unit
+ */
+export class OrgUnitListElementComponent extends AbstractListableElementComponent- {
+}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.html
deleted file mode 100644
index 8d312fb7c0..0000000000
--- a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- 0"
- class="item-list-orgunit-description">
-
-
-
-
-
-
-
diff --git a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.spec.ts
deleted file mode 100644
index dd2b138abb..0000000000
--- a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.spec.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
-import { By } from '@angular/platform-browser';
-import { OrgUnitListElementComponent } from './orgunit-list-element.component';
-import { of as observableOf } from 'rxjs';
-import { Item } from '../../../../core/shared/item.model';
-import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
-import { ITEM } from '../../../../shared/items/switcher/item-type-switcher.component';
-import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
-
-let orgUnitListElementComponent: OrgUnitListElementComponent;
-let fixture: ComponentFixture;
-
-const mockItemWithMetadata: Item = Object.assign(new Item(), {
- bitstreams: observableOf({}),
- metadata: {
- 'dc.title': [
- {
- language: 'en_US',
- value: 'This is just another title'
- }
- ],
- 'dc.description': [
- {
- language: 'en_US',
- value: 'A description about the OrgUnit'
- }
- ]
- }
-});
-const mockItemWithoutMetadata: Item = Object.assign(new Item(), {
- bitstreams: observableOf({}),
- metadata: {
- 'dc.title': [
- {
- language: 'en_US',
- value: 'This is just another title'
- }
- ]
- }
-});
-
-describe('OrgUnitListElementComponent', () => {
- beforeEach(async(() => {
- TestBed.configureTestingModule({
- declarations: [ OrgUnitListElementComponent , TruncatePipe],
- providers: [
- { provide: ITEM, useValue: mockItemWithMetadata},
- { provide: TruncatableService, useValue: {} }
- ],
-
- schemas: [ NO_ERRORS_SCHEMA ]
- }).overrideComponent(OrgUnitListElementComponent, {
- set: { changeDetection: ChangeDetectionStrategy.Default }
- }).compileComponents();
- }));
-
- beforeEach(async(() => {
- fixture = TestBed.createComponent(OrgUnitListElementComponent);
- orgUnitListElementComponent = fixture.componentInstance;
-
- }));
-
- describe('When the item has an orgunit description', () => {
- beforeEach(() => {
- orgUnitListElementComponent.item = mockItemWithMetadata;
- fixture.detectChanges();
- });
-
- it('should show the description span', () => {
- const orgunitDescriptionField = fixture.debugElement.query(By.css('span.item-list-orgunit-description'));
- expect(orgunitDescriptionField).not.toBeNull();
- });
- });
-
- describe('When the item has no orgunit description', () => {
- beforeEach(() => {
- orgUnitListElementComponent.item = mockItemWithoutMetadata;
- fixture.detectChanges();
- });
-
- it('should not show the description span', () => {
- const orgunitDescriptionField = fixture.debugElement.query(By.css('span.item-list-orgunit-description'));
- expect(orgunitDescriptionField).toBeNull();
- });
- });
-});
diff --git a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.ts
deleted file mode 100644
index 9a56bb6d03..0000000000
--- a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-list-element.component.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component } from '@angular/core';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
-import { TypedItemSearchResultListElementComponent } from '../../../../shared/object-list/item-list-element/item-types/typed-item-search-result-list-element.component';
-
-@rendersItemType('OrgUnit', ItemViewMode.Element)
-@Component({
- selector: 'ds-orgunit-list-element',
- styleUrls: ['./orgunit-list-element.component.scss'],
- templateUrl: './orgunit-list-element.component.html'
-})
-/**
- * The component for displaying a list element for an item of the type Organisation Unit
- */
-export class OrgUnitListElementComponent extends TypedItemSearchResultListElementComponent {
-}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-metadata-list-element.component.ts
deleted file mode 100644
index 21d0d9f86b..0000000000
--- a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-metadata-list-element.component.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component } from '@angular/core';
-import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
-import { ItemMetadataRepresentationListElementComponent } from '../../../../shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component';
-
-@rendersItemType('OrgUnit', ItemViewMode.Element, MetadataRepresentationType.Item)
-@Component({
- selector: 'ds-orgunit-metadata-list-element',
- templateUrl: './orgunit-metadata-list-element.component.html'
-})
-/**
- * The component for displaying a list element for an item of the type OrgUnit
- */
-export class OrgUnitMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent {
-}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.html
index c88b77083d..dbc3a42a05 100644
--- a/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.html
+++ b/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.html
@@ -1,15 +1 @@
-
-
-
-
- 0"
- class="item-list-job-title">
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.spec.ts
index 3b6aeae45b..6366ba5735 100644
--- a/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.spec.ts
+++ b/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.spec.ts
@@ -5,13 +5,9 @@ import { PersonListElementComponent } from './person-list-element.component';
import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model';
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
-import { ITEM } from '../../../../shared/items/switcher/item-type-switcher.component';
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
-let personListElementComponent: PersonListElementComponent;
-let fixture: ComponentFixture;
-
-const mockItemWithMetadata: Item = Object.assign(new Item(), {
+const mockItem: Item = Object.assign(new Item(), {
bitstreams: observableOf({}),
metadata: {
'dc.title': [
@@ -28,28 +24,22 @@ const mockItemWithMetadata: Item = Object.assign(new Item(), {
]
}
});
-const mockItemWithoutMetadata: Item = Object.assign(new Item(), {
- bitstreams: observableOf({}),
- metadata: {
- 'dc.title': [
- {
- language: 'en_US',
- value: 'This is just another title'
- }
- ]
- }
-});
describe('PersonListElementComponent', () => {
+ let comp;
+ let fixture;
+
+ const truncatableServiceStub: any = {
+ isCollapsed: (id: number) => observableOf(true),
+ };
+
beforeEach(async(() => {
TestBed.configureTestingModule({
- declarations: [ PersonListElementComponent , TruncatePipe],
+ declarations: [PersonListElementComponent, TruncatePipe],
providers: [
- { provide: ITEM, useValue: mockItemWithMetadata},
- { provide: TruncatableService, useValue: {} }
+ { provide: TruncatableService, useValue: truncatableServiceStub },
],
-
- schemas: [ NO_ERRORS_SCHEMA ]
+ schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(PersonListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
@@ -57,31 +47,18 @@ describe('PersonListElementComponent', () => {
beforeEach(async(() => {
fixture = TestBed.createComponent(PersonListElementComponent);
- personListElementComponent = fixture.componentInstance;
-
+ comp = fixture.componentInstance;
}));
- describe('When the item has a job title', () => {
+ describe(`when the person is rendered`, () => {
beforeEach(() => {
- personListElementComponent.item = mockItemWithMetadata;
+ comp.object = mockItem;
fixture.detectChanges();
});
- it('should show the job title span', () => {
- const jobTitleField = fixture.debugElement.query(By.css('span.item-list-job-title'));
- expect(jobTitleField).not.toBeNull();
- });
- });
-
- describe('When the item has no job title', () => {
- beforeEach(() => {
- personListElementComponent.item = mockItemWithoutMetadata;
- fixture.detectChanges();
- });
-
- it('should not show the job title span', () => {
- const jobTitleField = fixture.debugElement.query(By.css('span.item-list-job-title'));
- expect(jobTitleField).toBeNull();
+ it(`should contain a PersonListElementComponent`, () => {
+ const personListElement = fixture.debugElement.query(By.css(`ds-person-search-result-list-element`));
+ expect(personListElement).not.toBeNull();
});
});
});
diff --git a/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.ts
index 46d90a6f2d..f35ed90c58 100644
--- a/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.ts
+++ b/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.ts
@@ -1,8 +1,10 @@
import { Component } from '@angular/core';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
-import { TypedItemSearchResultListElementComponent } from '../../../../shared/object-list/item-list-element/item-types/typed-item-search-result-list-element.component';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
+import { Item } from '../../../../core/shared/item.model';
-@rendersItemType('Person', ItemViewMode.Element)
+@listableObjectComponent('Person', ViewMode.ListElement)
@Component({
selector: 'ds-person-list-element',
styleUrls: ['./person-list-element.component.scss'],
@@ -11,5 +13,5 @@ import { TypedItemSearchResultListElementComponent } from '../../../../shared/ob
/**
* The component for displaying a list element for an item of the type Person
*/
-export class PersonListElementComponent extends TypedItemSearchResultListElementComponent {
+export class PersonListElementComponent extends AbstractListableElementComponent
- {
}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/person/person-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/person/person-metadata-list-element.component.ts
deleted file mode 100644
index 35fbcd1173..0000000000
--- a/src/app/entity-groups/research-entities/item-list-elements/person/person-metadata-list-element.component.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component } from '@angular/core';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-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';
-
-@rendersItemType('Person', ItemViewMode.Element, MetadataRepresentationType.Item)
-@Component({
- selector: 'ds-person-metadata-list-element',
- templateUrl: './person-metadata-list-element.component.html'
-})
-/**
- * The component for displaying a list element for an item of the type Person
- */
-export class PersonMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent {
-}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.html
index 3e979b4e4d..8f74452eaa 100644
--- a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.html
+++ b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.html
@@ -1,16 +1 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.spec.ts
index 02dc3f6d73..dfa2f2506c 100644
--- a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.spec.ts
+++ b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.spec.ts
@@ -1,17 +1,13 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { async, TestBed } from '@angular/core/testing';
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { By } from '@angular/platform-browser';
-import { ProjectListElementComponent } from './project-list-element.component';
import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model';
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
-import { ITEM } from '../../../../shared/items/switcher/item-type-switcher.component';
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
+import { ProjectListElementComponent } from './project-list-element.component';
-let projectListElementComponent: ProjectListElementComponent;
-let fixture: ComponentFixture;
-
-const mockItemWithMetadata: Item = Object.assign(new Item(), {
+const mockItem: Item = Object.assign(new Item(), {
bitstreams: observableOf({}),
metadata: {
'dc.title': [
@@ -28,28 +24,22 @@ const mockItemWithMetadata: Item = Object.assign(new Item(), {
// ]
}
});
-const mockItemWithoutMetadata: Item = Object.assign(new Item(), {
- bitstreams: observableOf({}),
- metadata: {
- 'dc.title': [
- {
- language: 'en_US',
- value: 'This is just another title'
- }
- ]
- }
-});
describe('ProjectListElementComponent', () => {
+ let comp;
+ let fixture;
+
+ const truncatableServiceStub: any = {
+ isCollapsed: (id: number) => observableOf(true),
+ };
+
beforeEach(async(() => {
TestBed.configureTestingModule({
- declarations: [ ProjectListElementComponent , TruncatePipe],
+ declarations: [ProjectListElementComponent, TruncatePipe],
providers: [
- { provide: ITEM, useValue: mockItemWithMetadata},
- { provide: TruncatableService, useValue: {} }
+ { provide: TruncatableService, useValue: truncatableServiceStub },
],
-
- schemas: [ NO_ERRORS_SCHEMA ]
+ schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ProjectListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
@@ -57,31 +47,18 @@ describe('ProjectListElementComponent', () => {
beforeEach(async(() => {
fixture = TestBed.createComponent(ProjectListElementComponent);
- projectListElementComponent = fixture.componentInstance;
-
+ comp = fixture.componentInstance;
}));
- // describe('When the item has a status', () => {
- // beforeEach(() => {
- // projectListElementComponent.item = mockItemWithMetadata;
- // fixture.detectChanges();
- // });
- //
- // it('should show the status span', () => {
- // const statusField = fixture.debugElement.query(By.css('span.item-list-status'));
- // expect(statusField).not.toBeNull();
- // });
- // });
- //
- // describe('When the item has no status', () => {
- // beforeEach(() => {
- // projectListElementComponent.item = mockItemWithoutMetadata;
- // fixture.detectChanges();
- // });
- //
- // it('should not show the status span', () => {
- // const statusField = fixture.debugElement.query(By.css('span.item-list-status'));
- // expect(statusField).toBeNull();
- // });
- // });
+ describe(`when the project is rendered`, () => {
+ beforeEach(() => {
+ comp.object = mockItem;
+ fixture.detectChanges();
+ });
+
+ it(`should contain a ProjectListElementComponent`, () => {
+ const projectListElement = fixture.debugElement.query(By.css(`ds-project-search-result-list-element`));
+ expect(projectListElement).not.toBeNull();
+ });
+ });
});
diff --git a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.ts
index 2d3e716ff4..5f158158d8 100644
--- a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.ts
+++ b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.ts
@@ -1,8 +1,10 @@
import { Component } from '@angular/core';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
-import { TypedItemSearchResultListElementComponent } from '../../../../shared/object-list/item-list-element/item-types/typed-item-search-result-list-element.component';
+import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
+import { Item } from '../../../../core/shared/item.model';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
-@rendersItemType('Project', ItemViewMode.Element)
+@listableObjectComponent('Project', ViewMode.ListElement)
@Component({
selector: 'ds-project-list-element',
styleUrls: ['./project-list-element.component.scss'],
@@ -11,5 +13,5 @@ import { TypedItemSearchResultListElementComponent } from '../../../../shared/ob
/**
* The component for displaying a list element for an item of the type Project
*/
-export class ProjectListElementComponent extends TypedItemSearchResultListElementComponent {
+export class ProjectListElementComponent extends AbstractListableElementComponent
- {
}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html
new file mode 100644
index 0000000000..f08d0fdc11
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ 0"
+ class="item-list-org-unit-description">
+
+
+
+
+
+
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.scss b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts
new file mode 100644
index 0000000000..0597c0032d
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts
@@ -0,0 +1,94 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { By } from '@angular/platform-browser';
+import { of as observableOf } from 'rxjs';
+import { OrgUnitSearchResultListElementComponent } from './org-unit-search-result-list-element.component';
+import { Item } from '../../../../../core/shared/item.model';
+import { TruncatePipe } from '../../../../../shared/utils/truncate.pipe';
+import { TruncatableService } from '../../../../../shared/truncatable/truncatable.service';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+
+let orgUnitListElementComponent: OrgUnitSearchResultListElementComponent;
+let fixture: ComponentFixture;
+
+const mockItemWithMetadata: ItemSearchResult = Object.assign(
+ new ItemSearchResult(),
+ {
+ indexableObject: Object.assign(new Item(), {
+ bitstreams: observableOf({}),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ],
+ 'dc.description': [
+ {
+ language: 'en_US',
+ value: 'A description about the OrgUnit'
+ }
+ ]
+ }
+ })
+ });
+const mockItemWithoutMetadata: ItemSearchResult = Object.assign(
+ new ItemSearchResult(),
+ {
+ indexableObject: Object.assign(new Item(), {
+ bitstreams: observableOf({}),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ]
+ }
+ })
+ });
+
+describe('OrgUnitSearchResultListElementComponent', () => {
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ OrgUnitSearchResultListElementComponent , TruncatePipe],
+ providers: [
+ { provide: TruncatableService, useValue: {} }
+ ],
+
+ schemas: [ NO_ERRORS_SCHEMA ]
+ }).overrideComponent(OrgUnitSearchResultListElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(OrgUnitSearchResultListElementComponent);
+ orgUnitListElementComponent = fixture.componentInstance;
+
+ }));
+
+ describe('When the item has an org unit description', () => {
+ beforeEach(() => {
+ orgUnitListElementComponent.object = mockItemWithMetadata;
+ fixture.detectChanges();
+ });
+
+ it('should show the description span', () => {
+ const orgUnitDescriptionField = fixture.debugElement.query(By.css('span.item-list-org-unit-description'));
+ expect(orgUnitDescriptionField).not.toBeNull();
+ });
+ });
+
+ describe('When the item has no org unit description', () => {
+ beforeEach(() => {
+ orgUnitListElementComponent.object = mockItemWithoutMetadata;
+ fixture.detectChanges();
+ });
+
+ it('should not show the description span', () => {
+ const orgUnitDescriptionField = fixture.debugElement.query(By.css('span.item-list-org-unit-description'));
+ expect(orgUnitDescriptionField).toBeNull();
+ });
+ });
+});
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.ts
new file mode 100644
index 0000000000..5b50e5a78c
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.ts
@@ -0,0 +1,18 @@
+import { Component } from '@angular/core';
+import { ViewMode } from '../../../../../core/shared/view-mode.model';
+import { listableObjectComponent } from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { SearchResultListElementComponent } from '../../../../../shared/object-list/search-result-list-element/search-result-list-element.component';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { Item } from '../../../../../core/shared/item.model';
+
+@listableObjectComponent('OrgUnitSearchResult', ViewMode.ListElement)
+@Component({
+ selector: 'ds-org-unit-search-result-list-element',
+ styleUrls: ['./org-unit-search-result-list-element.component.scss'],
+ templateUrl: './org-unit-search-result-list-element.component.html'
+})
+/**
+ * The component for displaying a list element for an item search result of the type Organisation Unit
+ */
+export class OrgUnitSearchResultListElementComponent extends SearchResultListElementComponent {
+}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.html
new file mode 100644
index 0000000000..b2791c4891
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ 0"
+ class="item-list-job-title">
+
+
+
+
+
+
+
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.scss b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts
new file mode 100644
index 0000000000..a240d31bec
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts
@@ -0,0 +1,94 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { By } from '@angular/platform-browser';
+import { of as observableOf } from 'rxjs';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { PersonSearchResultListElementComponent } from './person-search-result-list-element.component';
+import { Item } from '../../../../../core/shared/item.model';
+import { TruncatePipe } from '../../../../../shared/utils/truncate.pipe';
+import { TruncatableService } from '../../../../../shared/truncatable/truncatable.service';
+
+let personListElementComponent: PersonSearchResultListElementComponent;
+let fixture: ComponentFixture;
+
+const mockItemWithMetadata: ItemSearchResult = Object.assign(
+ new ItemSearchResult(),
+ {
+ indexableObject: Object.assign(new Item(), {
+ bitstreams: observableOf({}),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ],
+ 'person.jobTitle': [
+ {
+ language: 'en_US',
+ value: 'Developer'
+ }
+ ]
+ }
+ })
+ });
+const mockItemWithoutMetadata: ItemSearchResult = Object.assign(
+ new ItemSearchResult(),
+ {
+ indexableObject: Object.assign(new Item(), {
+ bitstreams: observableOf({}),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ]
+ }
+ })
+ });
+
+describe('PersonSearchResultListElementComponent', () => {
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [PersonSearchResultListElementComponent, TruncatePipe],
+ providers: [
+ { provide: TruncatableService, useValue: {} }
+ ],
+
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(PersonSearchResultListElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(PersonSearchResultListElementComponent);
+ personListElementComponent = fixture.componentInstance;
+
+ }));
+
+ describe('When the item has a job title', () => {
+ beforeEach(() => {
+ personListElementComponent.object = mockItemWithMetadata;
+ fixture.detectChanges();
+ });
+
+ it('should show the job title span', () => {
+ const jobTitleField = fixture.debugElement.query(By.css('span.item-list-job-title'));
+ expect(jobTitleField).not.toBeNull();
+ });
+ });
+
+ describe('When the item has no job title', () => {
+ beforeEach(() => {
+ personListElementComponent.object = mockItemWithoutMetadata;
+ fixture.detectChanges();
+ });
+
+ it('should not show the job title span', () => {
+ const jobTitleField = fixture.debugElement.query(By.css('span.item-list-job-title'));
+ expect(jobTitleField).toBeNull();
+ });
+ });
+});
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.ts
new file mode 100644
index 0000000000..b4b4621261
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.ts
@@ -0,0 +1,18 @@
+import { Component } from '@angular/core';
+import { SearchResultListElementComponent } from '../../../../../shared/object-list/search-result-list-element/search-result-list-element.component';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { listableObjectComponent } from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../../core/shared/view-mode.model';
+import { Item } from '../../../../../core/shared/item.model';
+
+@listableObjectComponent('PersonSearchResult', ViewMode.ListElement)
+@Component({
+ selector: 'ds-person-search-result-list-element',
+ styleUrls: ['./person-search-result-list-element.component.scss'],
+ templateUrl: './person-search-result-list-element.component.html'
+})
+/**
+ * The component for displaying a list element for an item search result of the type Person
+ */
+export class PersonSearchResultListElementComponent extends SearchResultListElementComponent {
+}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.html
new file mode 100644
index 0000000000..95bff99e7e
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.scss b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts
new file mode 100644
index 0000000000..128190a88b
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts
@@ -0,0 +1,94 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { of as observableOf } from 'rxjs';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { ProjectSearchResultListElementComponent } from './project-search-result-list-element.component';
+import { Item } from '../../../../../core/shared/item.model';
+import { TruncatePipe } from '../../../../../shared/utils/truncate.pipe';
+import { TruncatableService } from '../../../../../shared/truncatable/truncatable.service';
+
+let projectListElementComponent: ProjectSearchResultListElementComponent;
+let fixture: ComponentFixture;
+
+const mockItemWithMetadata: ItemSearchResult = Object.assign(
+ new ItemSearchResult(),
+ {
+ indexableObject: Object.assign(new Item(), {
+ bitstreams: observableOf({}),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ],
+ // 'project.identifier.status': [
+ // {
+ // language: 'en_US',
+ // value: 'A status about the project'
+ // }
+ // ]
+ }
+ })
+ });
+
+const mockItemWithoutMetadata: ItemSearchResult = Object.assign(
+ new ItemSearchResult(),
+ {
+ indexableObject: Object.assign(new Item(), {
+ bitstreams: observableOf({}),
+ metadata: {
+ 'dc.title': [
+ {
+ language: 'en_US',
+ value: 'This is just another title'
+ }
+ ]
+ }
+ })
+ });
+
+describe('ProjectSearchResultListElementComponent', () => {
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ProjectSearchResultListElementComponent, TruncatePipe],
+ providers: [
+ { provide: TruncatableService, useValue: {} }
+ ],
+
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(ProjectSearchResultListElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(ProjectSearchResultListElementComponent);
+ projectListElementComponent = fixture.componentInstance;
+
+ }));
+
+ // describe('When the item has a status', () => {
+ // beforeEach(() => {
+ // projectListElementComponent.item = mockItemWithMetadata;
+ // fixture.detectChanges();
+ // });
+ //
+ // it('should show the status span', () => {
+ // const statusField = fixture.debugElement.query(By.css('span.item-list-status'));
+ // expect(statusField).not.toBeNull();
+ // });
+ // });
+ //
+ // describe('When the item has no status', () => {
+ // beforeEach(() => {
+ // projectListElementComponent.item = mockItemWithoutMetadata;
+ // fixture.detectChanges();
+ // });
+ //
+ // it('should not show the status span', () => {
+ // const statusField = fixture.debugElement.query(By.css('span.item-list-status'));
+ // expect(statusField).toBeNull();
+ // });
+ // });
+});
diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.ts
new file mode 100644
index 0000000000..faa15add31
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.ts
@@ -0,0 +1,18 @@
+import { Component } from '@angular/core';
+import { SearchResultListElementComponent } from '../../../../../shared/object-list/search-result-list-element/search-result-list-element.component';
+import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model';
+import { Item } from '../../../../../core/shared/item.model';
+import { listableObjectComponent } from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../../core/shared/view-mode.model';
+
+@listableObjectComponent('ProjectSearchResult', ViewMode.ListElement)
+@Component({
+ selector: 'ds-project-search-result-list-element',
+ styleUrls: ['./project-search-result-list-element.component.scss'],
+ templateUrl: './project-search-result-list-element.component.html'
+})
+/**
+ * The component for displaying a list element for an item search result of the type Project
+ */
+export class ProjectSearchResultListElementComponent extends SearchResultListElementComponent {
+}
diff --git a/src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.html b/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.html
similarity index 72%
rename from src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.html
rename to src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.html
index a3d2fedb10..4d97868b58 100644
--- a/src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.html
+++ b/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.html
@@ -1,50 +1,50 @@
- {{'orgunit.page.titleprefix' | translate}}
+ {{'orgunit.page.titleprefix' | translate}}
-
+
-
-
-
-
-
diff --git a/src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.scss b/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.scss
similarity index 100%
rename from src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.scss
rename to src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.scss
diff --git a/src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.spec.ts b/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.spec.ts
similarity index 94%
rename from src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.spec.ts
rename to src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.spec.ts
index a49105b2e3..28b014ddba 100644
--- a/src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.spec.ts
+++ b/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.spec.ts
@@ -2,7 +2,7 @@ import { Item } from '../../../../core/shared/item.model';
import { RemoteData } from '../../../../core/data/remote-data';
import { PaginatedList } from '../../../../core/data/paginated-list';
import { PageInfo } from '../../../../core/shared/page-info.model';
-import { OrgunitComponent } from './orgunit.component';
+import { OrgUnitComponent } from './org-unit.component';
import { of as observableOf } from 'rxjs';
import {
createRelationshipsObservable,
@@ -47,4 +47,4 @@ const mockItem: Item = Object.assign(new Item(), {
relationships: createRelationshipsObservable()
});
-describe('OrgUnitComponent', getItemPageFieldsTest(mockItem, OrgunitComponent));
+describe('OrgUnitComponent', getItemPageFieldsTest(mockItem, OrgUnitComponent));
diff --git a/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.ts b/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.ts
new file mode 100644
index 0000000000..d9d4461bfa
--- /dev/null
+++ b/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.ts
@@ -0,0 +1,16 @@
+import { Component } from '@angular/core';
+import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+
+@listableObjectComponent('OrgUnit', ViewMode.StandalonePage)
+@Component({
+ selector: 'ds-org-unit',
+ styleUrls: ['./org-unit.component.scss'],
+ templateUrl: './org-unit.component.html'
+})
+/**
+ * The component for displaying metadata and relations of an item of the type Organisation Unit
+ */
+export class OrgUnitComponent extends ItemComponent {
+}
diff --git a/src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.ts b/src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.ts
deleted file mode 100644
index 804288b1dc..0000000000
--- a/src/app/entity-groups/research-entities/item-pages/orgunit/orgunit.component.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component } from '@angular/core';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
-import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
-
-@rendersItemType('OrgUnit', ItemViewMode.Full)
-@Component({
- selector: 'ds-orgunit',
- styleUrls: ['./orgunit.component.scss'],
- templateUrl: './orgunit.component.html'
-})
-/**
- * The component for displaying metadata and relations of an item of the type Organisation Unit
- */
-export class OrgunitComponent extends ItemComponent {
-}
diff --git a/src/app/entity-groups/research-entities/item-pages/person/person.component.html b/src/app/entity-groups/research-entities/item-pages/person/person.component.html
index 3f0ca90368..ff675ab057 100644
--- a/src/app/entity-groups/research-entities/item-pages/person/person.component.html
+++ b/src/app/entity-groups/research-entities/item-pages/person/person.component.html
@@ -1,59 +1,59 @@
- {{'person.page.titleprefix' | translate}}
+ {{'person.page.titleprefix' | translate}}
-
+
-
-
+
-
-
+
-
diff --git a/src/app/entity-groups/research-entities/item-pages/person/person.component.ts b/src/app/entity-groups/research-entities/item-pages/person/person.component.ts
index b85b85ef7c..15c7184702 100644
--- a/src/app/entity-groups/research-entities/item-pages/person/person.component.ts
+++ b/src/app/entity-groups/research-entities/item-pages/person/person.component.ts
@@ -1,8 +1,9 @@
import { Component } from '@angular/core';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
-@rendersItemType('Person', ItemViewMode.Full)
+@listableObjectComponent('Person', ViewMode.StandalonePage)
@Component({
selector: 'ds-person',
styleUrls: ['./person.component.scss'],
diff --git a/src/app/entity-groups/research-entities/item-pages/project/project.component.html b/src/app/entity-groups/research-entities/item-pages/project/project.component.html
index 9ea0676f23..bb6ce21cd1 100644
--- a/src/app/entity-groups/research-entities/item-pages/project/project.component.html
+++ b/src/app/entity-groups/research-entities/item-pages/project/project.component.html
@@ -1,60 +1,60 @@
- {{'project.page.titleprefix' | translate}}
+ {{'project.page.titleprefix' | translate}}
-
+
-
+
-
-
-
+
-
-
diff --git a/src/app/entity-groups/research-entities/item-pages/project/project.component.ts b/src/app/entity-groups/research-entities/item-pages/project/project.component.ts
index 5a45ac2829..8ac424af5b 100644
--- a/src/app/entity-groups/research-entities/item-pages/project/project.component.ts
+++ b/src/app/entity-groups/research-entities/item-pages/project/project.component.ts
@@ -1,8 +1,9 @@
import { Component } from '@angular/core';
-import { ItemViewMode, rendersItemType } from '../../../../shared/items/item-type-decorator';
import { ItemComponent } from '../../../../+item-page/simple/item-types/shared/item.component';
+import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
-@rendersItemType('Project', ItemViewMode.Full)
+@listableObjectComponent('Project', ViewMode.StandalonePage)
@Component({
selector: 'ds-project',
styleUrls: ['./project.component.scss'],
diff --git a/src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-metadata-list-element.component.html b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.html
similarity index 100%
rename from src/app/entity-groups/research-entities/item-list-elements/orgunit/orgunit-metadata-list-element.component.html
rename to src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.html
diff --git a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts
new file mode 100644
index 0000000000..7d27b605ec
--- /dev/null
+++ b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts
@@ -0,0 +1,49 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { By } from '@angular/platform-browser';
+import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model';
+import { OrgUnitItemMetadataListElementComponent } from './org-unit-item-metadata-list-element.component';
+import { Item } from '../../../../core/shared/item.model';
+import { TooltipModule } from 'ngx-bootstrap';
+import { MetadataValue } from '../../../../core/shared/metadata.models';
+
+const description = '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 organisation = 'Anonymous';
+const mockItem = Object.assign(new Item(), { metadata: { 'dc.description': [{ value: description }], 'organization.legalName': [{ value: organisation }] } });
+const virtMD = Object.assign(new MetadataValue(), { value: organisation });
+const mockItemMetadataRepresentation = Object.assign(new ItemMetadataRepresentation(virtMD), mockItem);
+
+describe('OrgUnitItemMetadataListElementComponent', () => {
+ let comp: OrgUnitItemMetadataListElementComponent;
+ let fixture: ComponentFixture
;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [TooltipModule.forRoot()],
+ declarations: [OrgUnitItemMetadataListElementComponent],
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(OrgUnitItemMetadataListElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(OrgUnitItemMetadataListElementComponent);
+ comp = fixture.componentInstance;
+ comp.metadataRepresentation = mockItemMetadataRepresentation;
+ fixture.detectChanges();
+ }));
+
+ it('should show the name of the organisation as a link', () => {
+ const linkText = fixture.debugElement.query(By.css('a')).nativeElement.textContent;
+ expect(linkText).toBe(organisation);
+ });
+
+ it('should show the description on hover over the link in a tooltip', () => {
+ const link = fixture.debugElement.query(By.css('a'));
+ link.triggerEventHandler('mouseover', null);
+ fixture.detectChanges();
+ const tooltip = fixture.debugElement.query(By.css('.item-list-job-title')).nativeElement.textContent;
+ expect(tooltip).toBe(description);
+ });
+});
diff --git a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.ts
new file mode 100644
index 0000000000..183bebe10c
--- /dev/null
+++ b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.ts
@@ -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('OrgUnit', MetadataRepresentationType.Item)
+@Component({
+ selector: 'ds-org-unit-item-metadata-list-element',
+ templateUrl: './org-unit-item-metadata-list-element.component.html'
+})
+/**
+ * The component for displaying an item of the type OrgUnit as a metadata field
+ */
+export class OrgUnitItemMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent {
+}
diff --git a/src/app/entity-groups/research-entities/item-list-elements/person/person-metadata-list-element.component.html b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.html
similarity index 100%
rename from src/app/entity-groups/research-entities/item-list-elements/person/person-metadata-list-element.component.html
rename to src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.html
diff --git a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts
new file mode 100644
index 0000000000..1081e45884
--- /dev/null
+++ b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts
@@ -0,0 +1,51 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { By } from '@angular/platform-browser';
+import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model';
+import { Item } from '../../../../core/shared/item.model';
+import { PersonItemMetadataListElementComponent } from './person-item-metadata-list-element.component';
+import { TooltipModule } from 'ngx-bootstrap';
+import { MetadataValue } from '../../../../core/shared/metadata.models';
+
+const jobTitle ='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 firstName = 'Joe';
+const lastName = 'Anonymous';
+const mockItem = Object.assign(new Item(), { metadata: { 'person.jobTitle': [{ value: jobTitle }], 'person.givenName': [{ value: firstName }], 'person.familyName': [{ value: lastName }] } });
+const virtMD = Object.assign(new MetadataValue(), { value: lastName + ', ' + firstName });
+
+const mockItemMetadataRepresentation = Object.assign(new ItemMetadataRepresentation(virtMD), mockItem);
+
+describe('PersonItemMetadataListElementComponent', () => {
+ let comp: PersonItemMetadataListElementComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [TooltipModule.forRoot()],
+ declarations: [PersonItemMetadataListElementComponent],
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(PersonItemMetadataListElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(PersonItemMetadataListElementComponent);
+ comp = fixture.componentInstance;
+ comp.metadataRepresentation = mockItemMetadataRepresentation;
+ fixture.detectChanges();
+ }));
+
+ it('should show the person\'s name as a link', () => {
+ const linkText = fixture.debugElement.query(By.css('a')).nativeElement.textContent;
+ expect(linkText).toBe(lastName + ', ' + firstName);
+ });
+
+ it('should show the description on hover over the link in a tooltip', () => {
+ const link = fixture.debugElement.query(By.css('a'));
+ link.triggerEventHandler('mouseover', null);
+ fixture.detectChanges();
+ const tooltip = fixture.debugElement.query(By.css('.item-list-job-title')).nativeElement.textContent;
+ expect(tooltip).toBe(jobTitle);
+ });
+});
diff --git a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.ts
new file mode 100644
index 0000000000..f3d0a28fda
--- /dev/null
+++ b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.ts
@@ -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('Person', MetadataRepresentationType.Item)
+@Component({
+ selector: 'ds-person-item-metadata-list-element',
+ templateUrl: './person-item-metadata-list-element.component.html'
+})
+/**
+ * The component for displaying an item of the type Person as a metadata field
+ */
+export class PersonItemMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent {
+}
diff --git a/src/app/entity-groups/research-entities/research-entities.module.ts b/src/app/entity-groups/research-entities/research-entities.module.ts
index 099fa2a6a3..8829318f34 100644
--- a/src/app/entity-groups/research-entities/research-entities.module.ts
+++ b/src/app/entity-groups/research-entities/research-entities.module.ts
@@ -2,31 +2,43 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SharedModule } from '../../shared/shared.module';
import { ItemPageModule } from '../../+item-page/item-page.module';
-import { OrgunitComponent } from './item-pages/orgunit/orgunit.component';
+import { OrgUnitComponent } from './item-pages/org-unit/org-unit.component';
import { PersonComponent } from './item-pages/person/person.component';
import { ProjectComponent } from './item-pages/project/project.component';
-import { OrgUnitListElementComponent } from './item-list-elements/orgunit/orgunit-list-element.component';
-import { OrgUnitMetadataListElementComponent } from './item-list-elements/orgunit/orgunit-metadata-list-element.component';
-import { PersonMetadataListElementComponent } from './item-list-elements/person/person-metadata-list-element.component';
+import { OrgUnitListElementComponent } from './item-list-elements/org-unit/org-unit-list-element.component';
import { PersonListElementComponent } from './item-list-elements/person/person-list-element.component';
import { ProjectListElementComponent } from './item-list-elements/project/project-list-element.component';
import { TooltipModule } from 'ngx-bootstrap';
import { PersonGridElementComponent } from './item-grid-elements/person/person-grid-element.component';
-import { OrgunitGridElementComponent } from './item-grid-elements/orgunit/orgunit-grid-element.component';
+import { OrgUnitGridElementComponent } from './item-grid-elements/org-unit/org-unit-grid-element.component';
import { ProjectGridElementComponent } from './item-grid-elements/project/project-grid-element.component';
+import { OrgUnitSearchResultListElementComponent } from './item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component';
+import { PersonSearchResultListElementComponent } from './item-list-elements/search-result-list-elements/person/person-search-result-list-element.component';
+import { ProjectSearchResultListElementComponent } from './item-list-elements/search-result-list-elements/project/project-search-result-list-element.component';
+import { PersonSearchResultGridElementComponent } from './item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component';
+import { OrgUnitSearchResultGridElementComponent } from './item-grid-elements/search-result-grid-elements/org-unit/org-unit-search-result-grid-element.component';
+import { ProjectSearchResultGridElementComponent } from './item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component';
+import { PersonItemMetadataListElementComponent } from './metadata-representations/person/person-item-metadata-list-element.component';
+import { OrgUnitItemMetadataListElementComponent } from './metadata-representations/org-unit/org-unit-item-metadata-list-element.component';
const ENTRY_COMPONENTS = [
- OrgunitComponent,
+ OrgUnitComponent,
PersonComponent,
ProjectComponent,
OrgUnitListElementComponent,
- OrgUnitMetadataListElementComponent,
+ OrgUnitItemMetadataListElementComponent,
PersonListElementComponent,
- PersonMetadataListElementComponent,
+ PersonItemMetadataListElementComponent,
ProjectListElementComponent,
PersonGridElementComponent,
- OrgunitGridElementComponent,
- ProjectGridElementComponent
+ OrgUnitGridElementComponent,
+ ProjectGridElementComponent,
+ OrgUnitSearchResultListElementComponent,
+ PersonSearchResultListElementComponent,
+ ProjectSearchResultListElementComponent,
+ PersonSearchResultGridElementComponent,
+ OrgUnitSearchResultGridElementComponent,
+ ProjectSearchResultGridElementComponent
];
@NgModule({
diff --git a/src/app/shared/browse-by/browse-by.component.html b/src/app/shared/browse-by/browse-by.component.html
index c4b235f277..09d3cd3d60 100644
--- a/src/app/shared/browse-by/browse-by.component.html
+++ b/src/app/shared/browse-by/browse-by.component.html
@@ -25,7 +25,7 @@
diff --git a/src/app/shared/dso-selector/dso-selector/dso-selector.component.html b/src/app/shared/dso-selector/dso-selector/dso-selector.component.html
index 662144823d..e2eda4dcfd 100644
--- a/src/app/shared/dso-selector/dso-selector/dso-selector.component.html
+++ b/src/app/shared/dso-selector/dso-selector/dso-selector.component.html
@@ -15,6 +15,6 @@
class="list-group-item list-group-item-action border-0 list-entry"
title="{{ listEntry.indexableObject.name }}"
(click)="onSelect.emit(listEntry.indexableObject)" #listEntryElement>
-
+
diff --git a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts
index 04501e4923..af26f3f04f 100644
--- a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts
+++ b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts
@@ -19,6 +19,7 @@ import { RemoteData } from '../../../core/data/remote-data';
import { PaginatedList } from '../../../core/data/paginated-list';
import { SearchResult } from '../../../+search-page/search-result.model';
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
+import { ViewMode } from '../../../core/shared/view-mode.model';
@Component({
selector: 'ds-dso-selector',
@@ -31,7 +32,10 @@ import { DSpaceObject } from '../../../core/shared/dspace-object.model';
* The user can search the list by using the input field
*/
export class DSOSelectorComponent implements OnInit {
-
+ /**
+ * The view mode of the listed objects
+ */
+ viewMode = ViewMode.ListElement;
/**
* The initially selected DSO's uuid
*/
diff --git a/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.html b/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.html
index 2b605ccdc6..7515b830b9 100644
--- a/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.html
+++ b/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.html
@@ -1,5 +1,5 @@