diff --git a/src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.spec.ts b/src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.spec.ts
index 910ebad579..37745ec96a 100644
--- a/src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.spec.ts
+++ b/src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.spec.ts
@@ -158,7 +158,7 @@ describe('ItemRelationshipsComponent', () => {
deleteRelationship: observableOf(new RestResponse(true, 200, 'OK')),
getItemResolvedRelatedItemsAndRelationships: observableCombineLatest(observableOf([author1, author2]), observableOf([item, item]), observableOf(relationships)),
getRelationshipsByRelatedItemIds: observableOf(relationships),
- getRelationshipTypeLabelsByItem: observableOf([relationshipType.leftLabel])
+ getRelationshipTypeLabelsByItem: observableOf([relationshipType.leftwardType])
}
);
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 8829318f34..4185a1f6cd 100644
--- a/src/app/entity-groups/research-entities/research-entities.module.ts
+++ b/src/app/entity-groups/research-entities/research-entities.module.ts
@@ -20,6 +20,7 @@ import { OrgUnitSearchResultGridElementComponent } from './item-grid-elements/se
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';
+import { PersonSearchResultListSubmissionElementComponent } from './submission/item-list-elements/person/person-search-result-list-submission-element.component';
const ENTRY_COMPONENTS = [
OrgUnitComponent,
@@ -38,7 +39,8 @@ const ENTRY_COMPONENTS = [
ProjectSearchResultListElementComponent,
PersonSearchResultGridElementComponent,
OrgUnitSearchResultGridElementComponent,
- ProjectSearchResultGridElementComponent
+ ProjectSearchResultGridElementComponent,
+ PersonSearchResultListSubmissionElementComponent
];
@NgModule({
diff --git a/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.html b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.html
new file mode 100644
index 0000000000..2a53e88623
--- /dev/null
+++ b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+ 0"
+ class="item-list-job-title">
+
+
+
+
+
+
+
diff --git a/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.scss b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.spec.ts b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.spec.ts
new file mode 100644
index 0000000000..25786f7a56
--- /dev/null
+++ b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-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 { PersonSearchResultListSubmissionElementComponent } from './person-search-result-list-submission-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: PersonSearchResultListSubmissionElementComponent;
+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: [PersonSearchResultListSubmissionElementComponent, TruncatePipe],
+ providers: [
+ { provide: TruncatableService, useValue: {} }
+ ],
+
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(PersonSearchResultListSubmissionElementComponent, {
+ set: { changeDetection: ChangeDetectionStrategy.Default }
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(PersonSearchResultListSubmissionElementComponent);
+ 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/submission/item-list-elements/person/person-search-result-list-submission-element.component.ts b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.ts
new file mode 100644
index 0000000000..4ddab97669
--- /dev/null
+++ b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.ts
@@ -0,0 +1,19 @@
+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';
+import { Context } from '../../../../../core/shared/context.model';
+
+@listableObjectComponent('PersonSearchResult', ViewMode.ListElement, Context.Submission)
+@Component({
+ selector: 'ds-person-search-result-list-submission-element',
+ styleUrls: ['./person-search-result-list-submission-element.component.scss'],
+ templateUrl: './person-search-result-list-submission-element.component.html'
+})
+/**
+ * The component for displaying a list element for an item search result of the type Person
+ */
+export class PersonSearchResultListSubmissionElementComponent extends SearchResultListElementComponent {
+}
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html
index 9b4aa5372c..4e2da1f12b 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html
@@ -60,6 +60,8 @@
[searchConfig]="this.searchConfig"
[selectable]="true"
[selectionConfig]="{ repeatable: repeatable, listId: listId }"
+ [linkType]="linkTypes.ExternalLink"
+ [context]="context"
(deselectObject)="deselectObject.emit($event)"
(selectObject)="selectObject.emit($event)">
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts
index 59268992a6..ae8db45a48 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts
@@ -18,6 +18,9 @@ import { concat, map, multicast, switchMap, take, takeWhile, tap } from 'rxjs/op
import { DSpaceObject } from '../../../../../../core/shared/dspace-object.model';
import { getSucceededRemoteData } from '../../../../../../core/shared/operators';
import { RouteService } from '../../../../../../core/services/route.service';
+import { CollectionElementLinkType } from '../../../../../object-collection/collection-element-link.type';
+import { Context } from '../../../../../../core/shared/context.model';
+import { relationship } from '../../../../../../core/cache/builders/build-decorators';
@Component({
selector: 'ds-dynamic-lookup-relation-search-tab',
@@ -48,6 +51,8 @@ export class DsDynamicLookupRelationSearchTabComponent implements OnInit, OnDest
id: 'submission-relation-list',
pageSize: 5
});
+ linkTypes = CollectionElementLinkType;
+ context: Context;
constructor(
private searchService: SearchService,
@@ -62,6 +67,13 @@ export class DsDynamicLookupRelationSearchTabComponent implements OnInit, OnDest
this.resetRoute();
this.routeService.setParameter('fixedFilterQuery', this.relationship.filter);
this.routeService.setParameter('configuration', this.relationship.searchConfiguration);
+ /**
+ * TODO REMOVE NEXT LINE
+ */
+ this.relationship.nameVariants = true;
+ if (this.relationship.nameVariants) {
+ this.context = Context.Submission;
+ }
this.someSelected$ = this.selection$.pipe(map((selection) => isNotEmpty(selection)));
this.resultsRD$ = this.searchConfigService.paginatedSearchOptions.pipe(
@@ -77,8 +89,7 @@ export class DsDynamicLookupRelationSearchTabComponent implements OnInit, OnDest
() => new ReplaySubject(1),
subject => subject.pipe(
takeWhile((rd: RemoteData>>) => rd.isLoading),
- concat(subject.pipe(take(1))
- )
+ concat(subject.pipe(take(1)))
)
) as any
)
diff --git a/src/app/shared/form/builder/models/relationship-options.model.ts b/src/app/shared/form/builder/models/relationship-options.model.ts
index cd6e00e7dc..62caedb06e 100644
--- a/src/app/shared/form/builder/models/relationship-options.model.ts
+++ b/src/app/shared/form/builder/models/relationship-options.model.ts
@@ -2,4 +2,5 @@ export interface RelationshipOptions {
relationshipType: string;
filter: string;
searchConfiguration: string;
+ nameVariants: boolean;
}
diff --git a/src/app/shared/form/builder/parsers/concat-field-parser.ts b/src/app/shared/form/builder/parsers/concat-field-parser.ts
index 798f3ecaa3..57bdc8d0dc 100644
--- a/src/app/shared/form/builder/parsers/concat-field-parser.ts
+++ b/src/app/shared/form/builder/parsers/concat-field-parser.ts
@@ -52,7 +52,7 @@ export class ConcatFieldParser extends FieldParser {
concatGroup.separator = this.separator;
const input1ModelConfig: DynamicInputModelConfig = this.initModel(id + CONCAT_FIRST_INPUT_SUFFIX, false, false);
- const input2ModelConfig: DynamicInputModelConfig = this.initModel(id + CONCAT_SECOND_INPUT_SUFFIX, true, false);
+ const input2ModelConfig: DynamicInputModelConfig = this.initModel(id + CONCAT_SECOND_INPUT_SUFFIX, false, false);
input2ModelConfig.hint = ' ';
if (this.configData.mandatory) {
diff --git a/src/app/shared/search/search-results/search-results.component.html b/src/app/shared/search/search-results/search-results.component.html
index 70e527373c..ab1e96c58f 100644
--- a/src/app/shared/search/search-results/search-results.component.html
+++ b/src/app/shared/search/search-results/search-results.component.html
@@ -7,6 +7,7 @@
[hideGear]="true"
[selectable]="selectable"
[selectionConfig]="selectionConfig"
+ [context]="context"
(deselectObject)="deselectObject.emit($event)"
(selectObject)="selectObject.emit($event)"
>
diff --git a/src/app/shared/search/search-results/search-results.component.ts b/src/app/shared/search/search-results/search-results.component.ts
index 6f09e6624a..f245b5f9ae 100644
--- a/src/app/shared/search/search-results/search-results.component.ts
+++ b/src/app/shared/search/search-results/search-results.component.ts
@@ -10,6 +10,7 @@ import { SortOptions } from '../../../core/cache/models/sort-options.model';
import { ListableObject } from '../../object-collection/shared/listable-object.model';
import { CollectionElementLinkType } from '../../object-collection/collection-element-link.type';
import { ViewMode } from '../../../core/shared/view-mode.model';
+import { Context } from '../../../core/shared/context.model';
@Component({
selector: 'ds-search-results',
@@ -64,6 +65,8 @@ export class SearchResultsComponent {
@Input() selectable = false;
+ @Input() context: Context;
+
@Input() selectionConfig: {repeatable: boolean, listId: string};
@Output() deselectObject: EventEmitter = new EventEmitter();