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 edbd5710d2..3c6abaa851 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
@@ -55,6 +55,7 @@ export class DsDynamicInputModel extends DynamicInputModel {
this.metadataFields = config.metadataFields;
this.hint = config.hint;
this.readOnly = config.readOnly;
+ this.disabled = config.readOnly;
this.value = config.value;
this.relationship = config.relationship;
this.submissionId = config.submissionId;
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html
index e6b0cf508f..3c19ecda13 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html
@@ -39,6 +39,7 @@
[ngbTypeahead]="search"
[placeholder]="model.placeholder"
[readonly]="model.readOnly"
+ [disabled]="model.readOnly"
[resultTemplate]="rt"
[type]="model.inputType"
[(ngModel)]="currentValue"
@@ -63,6 +64,7 @@
[name]="model.name"
[placeholder]="model.placeholder"
[readonly]="true"
+ [disabled]="model.readOnly"
[type]="model.inputType"
[value]="currentValue?.display"
(focus)="onFocus($event)"
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts
index db278716e1..2ff4256404 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts
@@ -216,6 +216,9 @@ export class DsDynamicOneboxComponent extends DsDynamicVocabularyComponent imple
* @param event The click event fired
*/
openTree(event) {
+ if (this.model.readOnly) {
+ return;
+ }
event.preventDefault();
event.stopImmediatePropagation();
this.subs.push(this.vocabulary$.pipe(
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html
index 8a4d502287..3a75fe1037 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html
@@ -3,8 +3,10 @@
role="combobox"
[attr.aria-label]="model.label"
[attr.aria-owns]="'combobox_' + id + '_listbox'">
-
+
+
= this.initModel(newId + QUALDROP_METADATA_SUFFIX, label, false, false);
selectModelConfig.hint = null;
this.setOptions(selectModelConfig);
if (isNotEmpty(fieldValue)) {
selectModelConfig.value = fieldValue.metadata;
}
- inputSelectGroup.group.push(new DynamicSelectModel(selectModelConfig, clsSelect));
-
- const inputModelConfig: DsDynamicInputModelConfig = this.initModel(newId + QUALDROP_VALUE_SUFFIX, label, false, false);
- inputModelConfig.hint = null;
- this.setValues(inputModelConfig, fieldValue);
+ selectModelConfig.disabled = inputModelConfig.readOnly;
inputSelectGroup.readOnly = selectModelConfig.disabled && inputModelConfig.readOnly;
+ inputSelectGroup.group.push(new DynamicSelectModel(selectModelConfig, clsSelect));
inputSelectGroup.group.push(new DsDynamicInputModel(inputModelConfig, clsInput));
return new DynamicQualdropModel(inputSelectGroup, clsGroup);
diff --git a/src/app/shared/form/builder/parsers/row-parser.ts b/src/app/shared/form/builder/parsers/row-parser.ts
index 2818e37b25..6602e53714 100644
--- a/src/app/shared/form/builder/parsers/row-parser.ts
+++ b/src/app/shared/form/builder/parsers/row-parser.ts
@@ -1,9 +1,10 @@
+import { SectionVisibility } from './../../../../submission/objects/section-visibility.model';
import { Injectable, Injector } from '@angular/core';
import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DynamicFormGroupModelConfig } from '@ng-dynamic-forms/core';
import uniqueId from 'lodash/uniqueId';
-import { isEmpty } from '../../../empty.util';
+import { isEmpty, isNotEmpty } from '../../../empty.util';
import { DynamicRowGroupModel } from '../ds-dynamic-form-ui/models/ds-dynamic-row-group-model';
import { FormFieldModel } from '../models/form-field.model';
import { CONFIG_DATA, FieldParser, INIT_FORM_VALUES, PARSER_OPTIONS, SUBMISSION_ID } from './field-parser';
@@ -12,6 +13,7 @@ import { ParserOptions } from './parser-options';
import { ParserType } from './parser-type';
import { setLayout } from './parser.utils';
import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from '../ds-dynamic-form-ui/ds-dynamic-form-constants';
+import { VisibilityType } from '../../../../submission/sections/visibility-type';
export const ROW_ID_PREFIX = 'df-row-group-config-';
@@ -118,15 +120,30 @@ export class RowParser {
return parsedResult;
}
- checksFieldScope(fieldScope, submissionScope) {
- return (isEmpty(fieldScope) || isEmpty(submissionScope) || fieldScope === submissionScope);
+ checksFieldScope(fieldScope, submissionScope, visibility: SectionVisibility) {
+ return (isEmpty(fieldScope) || !this.isHidden(visibility, fieldScope, submissionScope));
+ }
+
+ /**
+ * Check if the field is hidden or not, based on the visibility and the submission scope
+ * @param visibility The visibility of the field
+ * @param scope the scope of the field
+ * @param submissionScope the scope of the submission
+ * @returns If the field is hidden or not
+ */
+ private isHidden(visibility: SectionVisibility, scope: string, submissionScope: string): boolean {
+ return isEmpty(visibility)
+ || (isNotEmpty(visibility) && visibility.main !== VisibilityType.READONLY)
+ && isNotEmpty(submissionScope)
+ && (isNotEmpty(scope)
+ && scope !== submissionScope);
}
filterScopedFields(fields: FormFieldModel[], submissionScope): FormFieldModel[] {
const filteredFields: FormFieldModel[] = [];
fields.forEach((field: FormFieldModel) => {
// Whether field scope doesn't match the submission scope, skip it
- if (this.checksFieldScope(field.scope, submissionScope)) {
+ if (this.checksFieldScope(field.scope, submissionScope, field.visibility)) {
filteredFields.push(field);
}
});