-
@@ -14,48 +10,36 @@
{{ defaultOption.name }}
-
+
-
- {{opt.name}}
-
-
- {{field.value}}
+ {{opt.name}}
+ {{field.value}}
-
diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.spec.ts b/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.spec.ts
index 8e0866b7486..340dc227cb5 100644
--- a/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.spec.ts
+++ b/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.spec.ts
@@ -64,10 +64,11 @@ describe('DropdownCloudWidgetComponent', () => {
describe('Simple Dropdown', () => {
beforeEach(() => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'dropdown-id',
name: 'date-name',
type: 'dropdown',
+ readOnly: false,
restUrl: 'https://fake-rest-url',
options: [{ id: 'empty', name: 'Choose one...' }]
});
@@ -119,18 +120,6 @@ describe('DropdownCloudWidgetComponent', () => {
expect(await allOptions[2].getText()).toEqual('option_3');
});
- it('should NOT load data from restUrl when field is readonly', () => {
- spyOn(formCloudService, 'getRestWidgetData');
- widget.field.readOnly = true;
- widget.field.restUrl = 'https://fake-rest-url';
- widget.field.optionType = 'rest';
- widget.field.restIdProperty = 'name';
-
- widget.ngOnInit();
-
- expect(formCloudService.getRestWidgetData).not.toHaveBeenCalled();
- });
-
it('should show error message if the restUrl failed to fetch options', async () => {
const jsonDataSpy = spyOn(formCloudService, 'getRestWidgetData').and.returnValue(throwError('Failed to fetch options'));
const errorIcon: string = 'error_outline';
@@ -205,7 +194,7 @@ describe('DropdownCloudWidgetComponent', () => {
expect(widget.field.form.values['dropdown-id']).toEqual({ id: 'opt1', name: 'default1_value' });
});
- it('should NOT display required error for a non required dropdown when selecting the none option', async () => {
+ it('should not display required error for a non required dropdown when selecting the none option', async () => {
widget.field.options = [{ id: 'empty', name: 'Choose empty' }, ...fakeOptionList];
widget.ngOnInit();
@@ -220,7 +209,7 @@ describe('DropdownCloudWidgetComponent', () => {
expect(requiredErrorElement).toBeFalsy();
});
- it('should NOT display required error when selecting a valid option for a required dropdown', async () => {
+ it('should not display required error when selecting a valid option for a required dropdown', async () => {
widget.field.required = true;
widget.field.options = [{ id: 'empty', name: 'Choose empty' }, ...fakeOptionList];
@@ -235,7 +224,7 @@ describe('DropdownCloudWidgetComponent', () => {
expect(requiredErrorElement).toBeFalsy();
});
- it('should NOT have a value when switching from an available option to the None option', async () => {
+ it('should not have a value when switching from an available option to the None option', async () => {
widget.field.options = [{ id: 'empty', name: 'This is a mock none option' }, ...fakeOptionList];
widget.ngOnInit();
@@ -326,30 +315,15 @@ describe('DropdownCloudWidgetComponent', () => {
const requiredErrorElement = fixture.debugElement.query(By.css('.adf-dropdown-required-message .adf-error-text'));
expect(requiredErrorElement.nativeElement.innerText).toEqual('FORM.FIELD.REQUIRED');
});
-
- it('should NOT display a required error when dropdown is readonly', async () => {
- widget.field.readOnly = true;
- fixture.detectChanges();
- await fixture.whenStable();
-
- expect(element.querySelector('.adf-invalid')).toBeFalsy();
-
- const dropdownSelect = element.querySelector('.adf-select');
- dropdownSelect.dispatchEvent(new Event('blur'));
-
- fixture.detectChanges();
- await fixture.whenStable();
-
- expect(element.querySelector('.adf-invalid')).toBeFalsy();
- });
});
describe('filter', () => {
beforeEach(() => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'dropdown-id',
name: 'option list',
type: 'dropdown',
+ readOnly: false,
options: filterOptionList
});
widget.ngOnInit();
@@ -396,10 +370,11 @@ describe('DropdownCloudWidgetComponent', () => {
describe('multiple selection', () => {
it('should show preselected option', async () => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'dropdown-id',
name: 'date-name',
type: 'dropdown',
+ readOnly: 'false',
options: fakeOptionList,
selectionType: 'multiple',
value: [
@@ -414,10 +389,11 @@ describe('DropdownCloudWidgetComponent', () => {
});
it('should support multiple options', async () => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'dropdown-id',
name: 'date-name',
type: 'dropdown',
+ readOnly: 'false',
selectionType: 'multiple',
options: fakeOptionList
});
@@ -432,10 +408,11 @@ describe('DropdownCloudWidgetComponent', () => {
});
it('should show preselected option for rest options', async () => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'dropdown-id',
name: 'date-name',
type: 'dropdown',
+ readOnly: 'false',
restUrl: 'https://fake-rest-url',
optionType: 'rest',
selectionType: 'multiple',
@@ -471,10 +448,11 @@ describe('DropdownCloudWidgetComponent', () => {
});
it('should support multiple options for rest options', async () => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'dropdown-id',
name: 'date-name',
type: 'dropdown',
+ readOnly: 'false',
restUrl: 'https://fake-rest-url',
optionType: 'rest',
selectionType: 'multiple'
@@ -520,10 +498,11 @@ describe('DropdownCloudWidgetComponent', () => {
validate: () => true
});
beforeEach(() => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'child-dropdown-id',
name: 'child-dropdown',
type: 'dropdown',
+ readOnly: 'false',
optionType: 'rest',
restUrl: 'myFakeDomain.com/cities?country=${parentDropdown}',
rule: {
@@ -626,10 +605,11 @@ describe('DropdownCloudWidgetComponent', () => {
const parentDropdown = new FormFieldModel(new FormModel(), { id: 'parentDropdown', type: 'dropdown' });
beforeEach(() => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'child-dropdown-id',
name: 'child-dropdown',
type: 'dropdown',
+ readOnly: 'false',
optionType: 'manual',
rule: {
ruleOn: 'parentDropdown',
@@ -669,7 +649,7 @@ describe('DropdownCloudWidgetComponent', () => {
});
describe('Manual - On parent value changes (chain)', () => {
- it('should reset the current value when it NOT part of the available options', () => {
+ it('should reset the current value when it not part of the available options', () => {
widget.field.options = mockConditionalEntries[1].options;
widget.field.value = 'non-existent-value';
fixture.detectChanges();
@@ -682,7 +662,7 @@ describe('DropdownCloudWidgetComponent', () => {
expect(widget.fieldValue).toEqual('');
});
- it('should NOT reset the current value when it is part of the available options', () => {
+ it('should not reset the current value when it is part of the available options', () => {
widget.field.options = mockConditionalEntries[1].options;
widget.field.value = 'ATH';
fixture.detectChanges();
@@ -714,10 +694,11 @@ describe('DropdownCloudWidgetComponent', () => {
describe('Load selection for linked dropdown (i.e. saved, completed forms)', () => {
it('should load the selection of a manual type linked dropdown', () => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'child-dropdown-id',
name: 'child-dropdown',
type: 'dropdown',
+ readOnly: 'false',
optionType: 'manual',
rule: {
ruleOn: 'parentDropdown',
@@ -737,10 +718,11 @@ describe('DropdownCloudWidgetComponent', () => {
it('should load the selection of a rest type linked dropdown', () => {
const jsonDataSpy = spyOn(formCloudService, 'getRestWidgetData').and.returnValue(of(mockRestDropdownOptions));
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'child-dropdown-id',
name: 'child-dropdown',
type: 'dropdown',
+ readOnly: 'false',
restUrl: 'mock-url.com/country=${country}',
optionType: 'rest',
rule: {
@@ -762,10 +744,11 @@ describe('DropdownCloudWidgetComponent', () => {
describe('when form model has left labels', () => {
it('should have left labels classes on leftLabels true', async () => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false, leftLabels: true }), {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', leftLabels: true }), {
id: 'dropdown-id',
name: 'option list',
type: FormFieldTypes.DROPDOWN,
+ readOnly: false,
options: filterOptionList
});
@@ -779,11 +762,12 @@ describe('DropdownCloudWidgetComponent', () => {
expect(adfLeftLabel).not.toBeNull();
});
- it('should NOT have left labels classes on leftLabels false', async () => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false, leftLabels: false }), {
+ it('should not have left labels classes on leftLabels false', async () => {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', leftLabels: false }), {
id: 'dropdown-id',
name: 'option list',
type: FormFieldTypes.DROPDOWN,
+ readOnly: false,
options: filterOptionList
});
@@ -797,11 +781,12 @@ describe('DropdownCloudWidgetComponent', () => {
expect(adfLeftLabel).toBeNull();
});
- it('should NOT have left labels classes on leftLabels NOT present', async () => {
- widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false }), {
+ it('should not have left labels classes on leftLabels not present', async () => {
+ widget.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), {
id: 'dropdown-id',
name: 'option list',
type: FormFieldTypes.DROPDOWN,
+ readOnly: false,
options: filterOptionList
});
@@ -828,10 +813,11 @@ describe('DropdownCloudWidgetComponent', () => {
processVariables?: TaskVariableCloud[],
variables?: TaskVariableCloud[]
) =>
- new FormFieldModel(new FormModel({ taskId: 'fake-task-id', readOnly: false, processVariables, variables }), {
+ new FormFieldModel(new FormModel({ taskId: 'fake-task-id', processVariables, variables }), {
id: 'variable-dropdown-id',
name: 'variable-options-dropdown',
type: 'dropdown',
+ readOnly: 'false',
optionType: 'variable',
variableConfig: {
variableName,
@@ -975,20 +961,5 @@ describe('DropdownCloudWidgetComponent', () => {
const failedErrorMsgElement = fixture.debugElement.query(By.css('.adf-dropdown-failed-message'));
expect(failedErrorMsgElement).toBeNull();
});
-
- it('should NOT display errors if field is readonly', () => {
- widget.field = getVariableDropdownWidget(
- 'variables.wrong-variable-id',
- 'response.wrongPath.players',
- 'wrongId',
- 'wrongFullName',
- mockProcessVariablesWithJson
- );
- widget.field.readOnly = true;
- fixture.detectChanges();
-
- const failedErrorMsgElement = fixture.debugElement.query(By.css('.adf-dropdown-failed-message'));
- expect(failedErrorMsgElement).toBeNull();
- });
});
});
diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.ts b/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.ts
index 38dd392c7bf..57e1e1e23bc 100644
--- a/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.ts
+++ b/lib/process-services-cloud/src/lib/form/components/widgets/dropdown/dropdown-cloud.widget.ts
@@ -191,28 +191,26 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
}
private persistFieldOptionsFromRestApi() {
- if (!this.isValidRestType() || this.field.readOnly) {
- return;
+ if (this.isValidRestType()) {
+ this.resetRestApiErrorMessage();
+ const bodyParam = this.buildBodyParam();
+ this.formCloudService
+ .getRestWidgetData(this.field.form.id, this.field.id, bodyParam)
+ .pipe(takeUntil(this.onDestroy$))
+ .subscribe(
+ (result: FormFieldOption[]) => {
+ this.resetRestApiErrorMessage();
+ this.field.options = result;
+ this.updateOptions();
+ this.field.updateForm();
+ this.resetInvalidValue();
+ },
+ (err) => {
+ this.resetRestApiOptions();
+ this.handleError(err);
+ }
+ );
}
-
- this.resetRestApiErrorMessage();
- const bodyParam = this.buildBodyParam();
- this.formCloudService
- .getRestWidgetData(this.field.form.id, this.field.id, bodyParam)
- .pipe(takeUntil(this.onDestroy$))
- .subscribe(
- (result: FormFieldOption[]) => {
- this.resetRestApiErrorMessage();
- this.field.options = result;
- this.updateOptions();
- this.field.updateForm();
- this.resetInvalidValue();
- },
- (err) => {
- this.resetRestApiOptions();
- this.handleError(err);
- }
- );
}
private buildBodyParam(): any {