diff --git a/src/app/core/dspace-rest-v2/mocks/mock-submission-response.json b/src/app/core/dspace-rest-v2/mocks/mock-submission-response.json
index 4848ede023..50231bdcbf 100644
--- a/src/app/core/dspace-rest-v2/mocks/mock-submission-response.json
+++ b/src/app/core/dspace-rest-v2/mocks/mock-submission-response.json
@@ -6,20 +6,17 @@
"fields": [
{
"input": {
- "type": "lookup-relation"
},
"label": "Author",
"mandatory": true,
"repeatable": true,
"mandatoryMessage": "At least one author (plain text or relationship) is required",
"hints": "Add an author",
- "selectableRelationships": [
- {
- "relationshipType": "isAuthorOfPublication",
- "filter": null,
- "searchConfiguration": "personConfiguration"
- }
- ],
+ "selectableRelationship": {
+ "relationshipType": "isAuthorOfPublication",
+ "filter": null,
+ "searchConfiguration": "personConfiguration"
+ },
"selectableMetadata": [
{
"metadata": "dc.contributor.author",
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.html
index cead04f797..f204ff856d 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.html
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.html
@@ -41,4 +41,13 @@
+
+
+
+
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts
index 37e83c7657..cc6bb65824 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts
@@ -6,6 +6,7 @@ import {
EventEmitter,
Input,
OnChanges,
+ OnInit,
Output,
QueryList,
SimpleChanges,
@@ -55,7 +56,7 @@ import { DYNAMIC_FORM_CONTROL_TYPE_DSDATEPICKER } from './models/date-picker/dat
import { DYNAMIC_FORM_CONTROL_TYPE_LOOKUP } from './models/lookup/dynamic-lookup.model';
import { DynamicListCheckboxGroupModel } from './models/list/dynamic-list-checkbox-group.model';
import { DynamicListRadioGroupModel } from './models/list/dynamic-list-radio-group.model';
-import { isNotEmpty, isNotUndefined } from '../../../empty.util';
+import { hasValue, isNotEmpty, isNotUndefined } from '../../../empty.util';
import { DYNAMIC_FORM_CONTROL_TYPE_LOOKUP_NAME } from './models/lookup/dynamic-lookup-name.model';
import { DsDynamicTagComponent } from './models/tag/dynamic-tag.component';
import { DsDatePickerComponent } from './models/date-picker/date-picker.component';
@@ -68,8 +69,17 @@ import { DsDynamicFormArrayComponent } from './models/array-group/dynamic-form-a
import { DsDynamicRelationGroupComponent } from './models/relation-group/dynamic-relation-group.components';
import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from './models/relation-group/dynamic-relation-group.model';
import { DsDatePickerInlineComponent } from './models/date-picker-inline/dynamic-date-picker-inline.component';
-import { DYNAMIC_FORM_CONTROL_TYPE_LOOKUP_RELATION } from './models/lookup-relation/dynamic-lookup-relation.model';
-import { DsDynamicLookupRelationComponent } from './models/lookup-relation/dynamic-lookup-relation.component';
+import { map } from 'rxjs/operators';
+import { SelectableListState } from '../../../object-list/selectable-list/selectable-list.reducer';
+import { Observable } from 'rxjs';
+import { SearchResult } from '../../../search/search-result.model';
+import { DSpaceObject } from '../../../../core/shared/dspace-object.model';
+import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
+import { RelationshipService } from '../../../../core/data/relationship.service';
+import { SelectableListService } from '../../../object-list/selectable-list/selectable-list.service';
+import { DsDynamicEmptyComponent } from './models/empty/dynamic-empty.component';
+import { DYNAMIC_FORM_CONTROL_TYPE_EMPTY } from './models/empty/dynamic-empty.model';
+import { DsDynamicLookupRelationModalComponent } from './models/empty/dynamic-lookup-relation-modal.component';
export function dsDynamicFormControlMapFn(model: DynamicFormControlModel): Type | null {
switch (model.type) {
@@ -126,8 +136,8 @@ export function dsDynamicFormControlMapFn(model: DynamicFormControlModel): Type<
case DYNAMIC_FORM_CONTROL_TYPE_LOOKUP_NAME:
return DsDynamicLookupComponent;
- case DYNAMIC_FORM_CONTROL_TYPE_LOOKUP_RELATION:
- return DsDynamicLookupRelationComponent;
+ case DYNAMIC_FORM_CONTROL_TYPE_EMPTY:
+ return DsDynamicEmptyComponent;
default:
return null;
@@ -140,7 +150,7 @@ export function dsDynamicFormControlMapFn(model: DynamicFormControlModel): Type<
templateUrl: './ds-dynamic-form-control-container.component.html',
changeDetection: ChangeDetectionStrategy.Default
})
-export class DsDynamicFormControlContainerComponent extends DynamicFormControlContainerComponent implements OnChanges {
+export class DsDynamicFormControlContainerComponent extends DynamicFormControlContainerComponent implements OnInit, OnChanges {
@ContentChildren(DynamicTemplateDirective) contentTemplateList: QueryList;
// tslint:disable-next-line:no-input-rename
@@ -155,6 +165,13 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo
@Input() layout = null as DynamicFormLayout;
@Input() model: any;
+ hasRelationLookup: boolean;
+ modalRef: NgbModalRef;
+ modalValuesString = '';
+ listId: string;
+ filter: string;
+ searchConfig: string;
+
/* tslint:disable:no-output-rename */
@Output('dfBlur') blur: EventEmitter = new EventEmitter();
@Output('dfChange') change: EventEmitter = new EventEmitter();
@@ -169,18 +186,31 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo
return this.layoutService.getCustomComponentType(this.model) || dsDynamicFormControlMapFn(this.model);
}
- protected test: boolean;
-
constructor(
protected componentFactoryResolver: ComponentFactoryResolver,
protected layoutService: DynamicFormLayoutService,
protected validationService: DynamicFormValidationService,
- protected translateService: TranslateService
+ protected translateService: TranslateService,
+ private modalService: NgbModal,
+ private relationService: RelationshipService,
+ private selectableListService: SelectableListService
) {
super(componentFactoryResolver, layoutService, validationService);
}
+ ngOnInit(): void {
+ this.hasRelationLookup = hasValue(this.model.relationship);
+ if (this.hasRelationLookup) {
+ this.filter = this.model.relationship.filter;
+ this.searchConfig = this.model.relationship.searchConfiguration;
+ this.listId = 'list-' + this.model.relationship.relationshipType;
+ this.model.value = this.selectableListService.getSelectableList(this.listId).pipe(
+ map((listState: SelectableListState) => hasValue(listState) && hasValue(listState.selection) ? listState.selection : []),
+ );
+ }
+ }
+
ngOnChanges(changes: SimpleChanges) {
if (changes) {
super.ngOnChanges(changes);
@@ -217,4 +247,27 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo
this.onChange(event);
}
}
+
+ public hasResultsSelected(): Observable {
+ return this.model.value.pipe(map((list: SearchResult[]) => isNotEmpty(list)));
+ }
+
+ openLookup() {
+ this.modalRef = this.modalService.open(DsDynamicLookupRelationModalComponent, { size: 'lg' });
+ const modalComp = this.modalRef.componentInstance;
+ modalComp.repeatable = this.model.repeatable;
+ modalComp.relationKey = this.model.name;
+ modalComp.listId = this.listId;
+ modalComp.filter = this.filter;
+ modalComp.fieldName = this.searchConfig;
+ modalComp.label = this.model.label;
+
+ this.modalRef.result.then((resultString = '') => {
+ this.modalValuesString = resultString;
+ });
+ }
+
+ removeSelection(object: SearchResult) {
+ this.selectableListService.deselectSingle(this.listId, object);
+ }
}
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts
index d334e3ef19..58f4deba81 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts
@@ -11,6 +11,8 @@ import { AuthorityOptions } from '../../../../../core/integration/models/authori
import { hasValue } from '../../../../empty.util';
import { FormFieldMetadataValueObject } from '../../models/form-field-metadata-value.model';
import { Workspaceitem } from '../../../../../core/submission/models/workspaceitem.model';
+import { RelationshipOptions } from './empty/model/relationship-options.model';
+import { Item } from '../../../../../core/shared/item.model';
export interface DsDynamicInputModelConfig extends DynamicInputModelConfig {
workspaceItem: Workspaceitem;
@@ -18,6 +20,7 @@ export interface DsDynamicInputModelConfig extends DynamicInputModelConfig {
languageCodes?: LanguageCode[];
language?: string;
value?: any;
+ relationship?: RelationshipOptions;
}
export class DsDynamicInputModel extends DynamicInputModel {
@@ -27,12 +30,14 @@ export class DsDynamicInputModel extends DynamicInputModel {
@serializable() private _language: string;
@serializable() languageUpdates: Subject;
@serializable() workspaceItem: Workspaceitem;
+ @serializable() relationship?: RelationshipOptions;
constructor(config: DsDynamicInputModelConfig, layout?: DynamicFormControlLayout) {
super(config, layout);
this.readOnly = config.readOnly;
this.value = config.value;
+ this.relationship = config.relationship;
this.workspaceItem = config.workspaceItem;
this.language = config.language;
if (!this.language) {
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.component.html
new file mode 100644
index 0000000000..9791b32023
--- /dev/null
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.component.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.component.ts
new file mode 100644
index 0000000000..d0e1944938
--- /dev/null
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.component.ts
@@ -0,0 +1,32 @@
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+
+import { DynamicFormControlComponent, DynamicFormLayoutService, DynamicFormValidationService } from '@ng-dynamic-forms/core';
+import { FormGroup } from '@angular/forms';
+import { DynamicEmptyModel } from './dynamic-empty.model';
+
+/* TODO take a look at this when the REST entities submission is finished: we will probably need to get the fixed filter from the REST instead of filtering is out from the metadata field */
+const RELATION_TYPE_METADATA_PREFIX = 'relation.isPublicationOf';
+
+@Component({
+ selector: 'ds-dynamic-empty',
+ templateUrl: './dynamic-empty.component.html'
+})
+export class DsDynamicEmptyComponent extends DynamicFormControlComponent {
+
+ @Input() formId: string;
+ @Input() group: FormGroup;
+ @Input() model: DynamicEmptyModel;
+
+ @Output() blur: EventEmitter = new EventEmitter();
+ @Output() change: EventEmitter = new EventEmitter();
+ @Output() focus: EventEmitter = new EventEmitter();
+
+
+ constructor(protected layoutService: DynamicFormLayoutService,
+ protected validationService: DynamicFormValidationService
+ ) {
+ super(layoutService, validationService);
+ }
+
+
+}
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.model.ts
new file mode 100644
index 0000000000..aab05acbdc
--- /dev/null
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.model.ts
@@ -0,0 +1,26 @@
+import { DynamicFormControlLayout, serializable } from '@ng-dynamic-forms/core';
+import { DsDynamicInputModel, DsDynamicInputModelConfig } from '../ds-dynamic-input.model';
+
+export const DYNAMIC_FORM_CONTROL_TYPE_EMPTY = 'EMPTY';
+
+export interface DsDynamicEmptyModelConfig extends DsDynamicInputModelConfig {
+ value?: any;
+ repeatable: boolean;
+}
+
+export class DynamicEmptyModel extends DsDynamicInputModel {
+
+ @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_EMPTY;
+ @serializable() value: any;
+ @serializable() repeatable: boolean;
+
+ constructor(config: DsDynamicEmptyModelConfig, layout?: DynamicFormControlLayout) {
+
+ super(config, layout);
+
+ this.readOnly = true;
+ this.disabled = true;
+ this.repeatable = config.repeatable;
+ this.valueUpdates.next(config.value);
+ }
+}
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation-modal.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-lookup-relation-modal.component.html
similarity index 100%
rename from src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation-modal.component.html
rename to src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-lookup-relation-modal.component.html
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation-modal.component.scss b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-lookup-relation-modal.component.scss
similarity index 100%
rename from src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation-modal.component.scss
rename to src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-lookup-relation-modal.component.scss
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation-modal.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-lookup-relation-modal.component.ts
similarity index 100%
rename from src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation-modal.component.ts
rename to src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/dynamic-lookup-relation-modal.component.ts
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/model/relationship-options.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/model/relationship-options.model.ts
similarity index 100%
rename from src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/model/relationship-options.model.ts
rename to src/app/shared/form/builder/ds-dynamic-form-ui/models/empty/model/relationship-options.model.ts
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.component.html
deleted file mode 100644
index 4445b0452c..0000000000
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.component.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
0)" class="form-row align-items-center">
-
-
-
-
-
-
-
-
-
- -
-
-
- {{value.name}}
-
-
-
-
-
-
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.component.ts
deleted file mode 100644
index b1d69ea2f6..0000000000
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.component.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-
-import { DynamicFormControlComponent, DynamicFormLayoutService, DynamicFormValidationService } from '@ng-dynamic-forms/core';
-import { FormGroup } from '@angular/forms';
-import { hasValue, isNotEmpty } from '../../../../../empty.util';
-import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
-import { DsDynamicLookupRelationModalComponent } from './dynamic-lookup-relation-modal.component';
-import { DynamicLookupRelationModel } from './dynamic-lookup-relation.model';
-import { DSpaceObject } from '../../../../../../core/shared/dspace-object.model';
-import { RelationshipService } from '../../../../../../core/data/relationship.service';
-import { SelectableListService } from '../../../../../object-list/selectable-list/selectable-list.service';
-import { SelectableListState } from '../../../../../object-list/selectable-list/selectable-list.reducer';
-import { Observable } from 'rxjs';
-import { map } from 'rxjs/operators';
-import { SearchResult } from '../../../../../search/search-result.model';
-
-/* TODO take a look at this when the REST entities submission is finished: we will probably need to get the fixed filter from the REST instead of filtering is out from the metadata field */
-const RELATION_TYPE_METADATA_PREFIX = 'relation.isPublicationOf';
-
-@Component({
- selector: 'ds-dynamic-lookup-relation',
- templateUrl: './dynamic-lookup-relation.component.html'
-})
-export class DsDynamicLookupRelationComponent extends DynamicFormControlComponent implements OnInit {
-
- @Input() formId: string;
- @Input() group: FormGroup;
- @Input() model: DynamicLookupRelationModel;
-
- @Output() blur: EventEmitter = new EventEmitter();
- @Output() change: EventEmitter = new EventEmitter();
- @Output() focus: EventEmitter = new EventEmitter();
-
- modalRef: NgbModalRef;
- modalValuesString = '';
- listId: string;
- filter: string;
- searchConfig: string;
-
-
- constructor(private modalService: NgbModal,
- protected layoutService: DynamicFormLayoutService,
- protected validationService: DynamicFormValidationService,
- private relationService: RelationshipService,
- private selectableListService: SelectableListService
- ) {
- super(layoutService, validationService);
- }
-
- ngOnInit(): void {
- this.filter = this.model.relationship.filter;
- this.searchConfig = this.model.relationship.searchConfiguration;
- this.listId = 'list-' + this.model.relationship.relationshipType;
- this.model.value = this.selectableListService.getSelectableList(this.listId).pipe(
- map((listState: SelectableListState) => hasValue(listState) && hasValue(listState.selection) ? listState.selection : []),
- );
- }
-
- public hasResultsSelected(): Observable {
- return this.model.value.pipe(map((list: SearchResult[]) => isNotEmpty(list)));
- }
-
- openLookup() {
- this.modalRef = this.modalService.open(DsDynamicLookupRelationModalComponent, { size: 'lg' });
- const modalComp = this.modalRef.componentInstance;
- modalComp.repeatable = this.model.repeatable;
- modalComp.relationKey = this.model.name;
- modalComp.listId = this.listId;
- modalComp.filter = this.filter;
- modalComp.fieldName = this.searchConfig;
- modalComp.label = this.model.label;
-
- this.modalRef.result.then((resultString = '') => {
- this.modalValuesString = resultString;
- });
- }
-
- removeSelection(object: SearchResult) {
- this.selectableListService.deselectSingle(this.listId, object);
- }
-}
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.model.ts
deleted file mode 100644
index fd015d9a90..0000000000
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.model.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { DynamicFormControlLayout, serializable } from '@ng-dynamic-forms/core';
-import { DsDynamicInputModel, DsDynamicInputModelConfig } from '../ds-dynamic-input.model';
-import { Item } from '../../../../../../core/shared/item.model';
-import { RelationshipOptions } from './model/relationship-options.model';
-
-export const DYNAMIC_FORM_CONTROL_TYPE_LOOKUP_RELATION = 'LOOKUP_RELATION';
-
-export interface DynamicLookupRelationModelConfig extends DsDynamicInputModelConfig {
- value?: any;
- repeatable: boolean;
- item: Item;
- relationship: RelationshipOptions;
-}
-
-export class DynamicLookupRelationModel extends DsDynamicInputModel {
-
- @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_LOOKUP_RELATION;
- @serializable() value: any;
- @serializable() repeatable: boolean;
- relationship: RelationshipOptions;
- item: Item;
-
- constructor(config: DynamicLookupRelationModelConfig, layout?: DynamicFormControlLayout) {
-
- super(config, layout);
-
- this.readOnly = true;
- this.disabled = true;
- this.repeatable = config.repeatable;
- this.item = config.item;
- this.relationship = config.relationship;
- this.valueUpdates.next(config.value);
- }
-}
diff --git a/src/app/shared/form/builder/form-builder.service.ts b/src/app/shared/form/builder/form-builder.service.ts
index 66048b0883..4bbabdd941 100644
--- a/src/app/shared/form/builder/form-builder.service.ts
+++ b/src/app/shared/form/builder/form-builder.service.ts
@@ -21,15 +21,11 @@ import { DynamicQualdropModel } from './ds-dynamic-form-ui/models/ds-dynamic-qua
import { SubmissionFormsModel } from '../../../core/config/models/config-submission-forms.model';
import { DYNAMIC_FORM_CONTROL_TYPE_TAG } from './ds-dynamic-form-ui/models/tag/dynamic-tag.model';
import { RowParser } from './parsers/row-parser';
-import {
- DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP,
- DynamicRelationGroupModel
-} from './ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model';
+import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP, DynamicRelationGroupModel } from './ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model';
import { DynamicRowArrayModel } from './ds-dynamic-form-ui/models/ds-dynamic-row-array-model';
import { DsDynamicInputModel } from './ds-dynamic-form-ui/models/ds-dynamic-input.model';
import { FormFieldMetadataValueObject } from './models/form-field-metadata-value.model';
import { isNgbDateStruct } from '../../date.util';
-import { WorkspaceitemSectionFormObject } from '../../../core/submission/models/workspaceitem-section-form.model';
import { Workspaceitem } from '../../../core/submission/models/workspaceitem.model';
@Injectable()
diff --git a/src/app/shared/form/builder/models/form-field.model.ts b/src/app/shared/form/builder/models/form-field.model.ts
index e86bc2791a..28eef7c215 100644
--- a/src/app/shared/form/builder/models/form-field.model.ts
+++ b/src/app/shared/form/builder/models/form-field.model.ts
@@ -2,7 +2,7 @@ import { autoserialize } from 'cerialize';
import { FormRowModel } from '../../../../core/config/models/config-submission-forms.model';
import { LanguageCode } from './form-field-language-value.model';
import { FormFieldMetadataValueObject } from './form-field-metadata-value.model';
-import { RelationshipOptions } from '../ds-dynamic-form-ui/models/lookup-relation/model/relationship-options.model';
+import { RelationshipOptions } from '../ds-dynamic-form-ui/models/empty/model/relationship-options.model';
export class FormFieldModel {
diff --git a/src/app/shared/form/builder/parsers/empty-field-parser.ts b/src/app/shared/form/builder/parsers/empty-field-parser.ts
new file mode 100644
index 0000000000..2716eac25d
--- /dev/null
+++ b/src/app/shared/form/builder/parsers/empty-field-parser.ts
@@ -0,0 +1,11 @@
+import { FieldParser } from './field-parser';
+import { FormFieldMetadataValueObject } from '../models/form-field-metadata-value.model';
+import { DsDynamicEmptyModelConfig, DynamicEmptyModel } from '../ds-dynamic-form-ui/models/empty/dynamic-empty.model';
+
+export class EmptyFieldParser extends FieldParser {
+
+ public modelFactory(fieldValue?: FormFieldMetadataValueObject | any, label?: boolean): any {
+ const emptyModelConfig: DsDynamicEmptyModelConfig = this.initModel(null, label);
+ return new DynamicEmptyModel(emptyModelConfig)
+ }
+}
diff --git a/src/app/shared/form/builder/parsers/field-parser.ts b/src/app/shared/form/builder/parsers/field-parser.ts
index 16626b0cfe..e4060aeec1 100644
--- a/src/app/shared/form/builder/parsers/field-parser.ts
+++ b/src/app/shared/form/builder/parsers/field-parser.ts
@@ -27,7 +27,6 @@ export abstract class FieldParser {
&& (this.configData.input.type !== 'list')
&& (this.configData.input.type !== 'tag')
&& (this.configData.input.type !== 'group')
- && (this.configData.input.type !== 'lookup-relation')
) {
let arrayCounter = 0;
let fieldArrayCounter = 0;
@@ -186,6 +185,7 @@ export abstract class FieldParser {
controlModel.readOnly = this.parserOptions.readOnly;
controlModel.disabled = this.parserOptions.readOnly;
controlModel.workspaceItem = this.workspaceItem;
+ controlModel.relationship = this.configData.selectableRelationships;
// Set label
this.setLabel(controlModel, label, labelEmpty);
diff --git a/src/app/shared/form/builder/parsers/lookup-relation-field-parser.ts b/src/app/shared/form/builder/parsers/lookup-relation-field-parser.ts
deleted file mode 100644
index ddd2449de8..0000000000
--- a/src/app/shared/form/builder/parsers/lookup-relation-field-parser.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { FieldParser } from './field-parser';
-import { FormFieldMetadataValueObject } from '../models/form-field-metadata-value.model';
-import { DynamicLookupRelationModel, DynamicLookupRelationModelConfig } from '../ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.model';
-
-export class LookupRelationFieldParser extends FieldParser {
-
- public modelFactory(fieldValue?: FormFieldMetadataValueObject | any, label?: boolean): any {
- const lookupModelConfig: DynamicLookupRelationModelConfig = this.initModel(null, label);
- lookupModelConfig.repeatable = this.configData.repeatable;
- /* TODO what to do with multiple relationships? */
- lookupModelConfig.relationship = this.configData.selectableRelationships[0];
- return new DynamicLookupRelationModel(lookupModelConfig);
- }
-}
diff --git a/src/app/shared/form/builder/parsers/parser-factory.ts b/src/app/shared/form/builder/parsers/parser-factory.ts
index 646b6410d2..ae38179b21 100644
--- a/src/app/shared/form/builder/parsers/parser-factory.ts
+++ b/src/app/shared/form/builder/parsers/parser-factory.ts
@@ -12,7 +12,7 @@ import { NameFieldParser } from './name-field-parser';
import { SeriesFieldParser } from './series-field-parser';
import { TagFieldParser } from './tag-field-parser';
import { TextareaFieldParser } from './textarea-field-parser';
-import { LookupRelationFieldParser } from './lookup-relation-field-parser';
+import { EmptyFieldParser } from './empty-field-parser';
export class ParserFactory {
public static getConstructor(type: ParserType): GenericConstructor {
@@ -35,9 +35,6 @@ export class ParserFactory {
case ParserType.LookupName: {
return LookupNameFieldParser
}
- case ParserType.LookupRelation: {
- return LookupRelationFieldParser
- }
case ParserType.Onebox: {
return OneboxFieldParser
}
@@ -53,7 +50,9 @@ export class ParserFactory {
case ParserType.Textarea: {
return TextareaFieldParser
}
-
+ case undefined: {
+ return EmptyFieldParser
+ }
default: {
return undefined;
}
diff --git a/src/app/shared/mocks/mock-form-models.ts b/src/app/shared/mocks/mock-form-models.ts
index a17d2e81af..fb9cbf1051 100644
--- a/src/app/shared/mocks/mock-form-models.ts
+++ b/src/app/shared/mocks/mock-form-models.ts
@@ -14,6 +14,7 @@ import { AuthorityValue } from '../../core/integration/models/authority.value';
import { FormFieldMetadataValueObject } from '../form/builder/models/form-field-metadata-value.model';
import { DynamicRowGroupModel } from '../form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model';
import { Workspaceitem } from '../../core/submission/models/workspaceitem.model';
+import { Item } from '../../core/shared/item.model';
export const qualdropSelectConfig = {
name: 'dc.identifier_QUALDROP_METADATA',
diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts
index 96dfb87321..da911d4fd3 100644
--- a/src/app/shared/shared.module.ts
+++ b/src/app/shared/shared.module.ts
@@ -78,7 +78,6 @@ import { SortablejsModule } from 'angular-sortablejs';
import { NumberPickerComponent } from './number-picker/number-picker.component';
import { DsDatePickerComponent } from './form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component';
import { DsDynamicLookupComponent } from './form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component';
-import { DsDynamicLookupRelationComponent } from './form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation.component';
import { MockAdminGuard } from './mocks/mock-admin-guard.service';
import { AlertComponent } from './alert/alert.component';
import { MyDSpaceResultListElementComponent } from './object-list/my-dspace-result-list-element/my-dspace-result-list-element.component';
@@ -139,7 +138,7 @@ import { RoleDirective } from './roles/role.directive';
import { UserMenuComponent } from './auth-nav-menu/user-menu/user-menu.component';
import { ClaimedTaskActionsReturnToPoolComponent } from './mydspace-actions/claimed-task/return-to-pool/claimed-task-actions-return-to-pool.component';
import { ItemDetailPreviewFieldComponent } from './object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview-field/item-detail-preview-field.component';
-import { DsDynamicLookupRelationModalComponent } from './form/builder/ds-dynamic-form-ui/models/lookup-relation/dynamic-lookup-relation-modal.component';
+import { DsDynamicLookupRelationModalComponent } from './form/builder/ds-dynamic-form-ui/models/empty/dynamic-lookup-relation-modal.component';
import { SearchResultsComponent } from './search/search-results/search-results.component';
import { SearchSidebarComponent } from './search/search-sidebar/search-sidebar.component';
import { SearchSettingsComponent } from './search/search-settings/search-settings.component';
@@ -160,6 +159,7 @@ import { SearchFacetSelectedOptionComponent } from './search/search-filters/sear
import { SearchFacetRangeOptionComponent } from './search/search-filters/search-filter/search-facet-filter-options/search-facet-range-option/search-facet-range-option.component';
import { SearchSwitchConfigurationComponent } from './search/search-switch-configuration/search-switch-configuration.component';
import { SearchAuthorityFilterComponent } from './search/search-filters/search-filter/search-authority-filter/search-authority-filter.component';
+import { DsDynamicEmptyComponent } from './form/builder/ds-dynamic-form-ui/models/empty/dynamic-empty.component';
const MODULES = [
// Do NOT include UniversalModule, HttpModule, or JsonpModule here
@@ -220,7 +220,7 @@ const COMPONENTS = [
DsDynamicFormControlContainerComponent,
DsDynamicListComponent,
DsDynamicLookupComponent,
- DsDynamicLookupRelationComponent,
+ DsDynamicEmptyComponent,
DsDynamicLookupRelationModalComponent,
DsDynamicScrollableDropdownComponent,
DsDynamicTagComponent,
@@ -325,7 +325,7 @@ const ENTRY_COMPONENTS = [
SearchResultGridElementComponent,
DsDynamicListComponent,
DsDynamicLookupComponent,
- DsDynamicLookupRelationComponent,
+ DsDynamicEmptyComponent,
DsDynamicLookupRelationModalComponent,
DsDynamicScrollableDropdownComponent,
DsDynamicTagComponent,