mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-09 18:03:21 +00:00
[AAE-12065] add optional isDefault flag to formOptions interface
This commit is contained in:
@@ -20,4 +20,5 @@
|
||||
export interface FormFieldOption {
|
||||
id: string;
|
||||
name: string;
|
||||
isDefault?: boolean;
|
||||
}
|
||||
|
||||
+27
-40
@@ -18,6 +18,7 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { of, throwError } from 'rxjs';
|
||||
import { DropdownCloudWidgetComponent } from './dropdown-cloud.widget';
|
||||
import {
|
||||
FormFieldModel,
|
||||
FormModel,
|
||||
@@ -26,7 +27,6 @@ import {
|
||||
FormFieldTypes,
|
||||
LogService
|
||||
} from '@alfresco/adf-core';
|
||||
import { DropdownCloudWidgetComponent, DropdownFormFieldOption } from './dropdown-cloud.widget';
|
||||
import { FormCloudService } from '../../../services/form-cloud.service';
|
||||
import { ProcessServiceCloudTestingModule } from '../../../../testing/process-service-cloud.testing.module';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
@@ -91,7 +91,7 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
readOnly: false,
|
||||
restUrl: 'https://fake-rest-url'
|
||||
});
|
||||
widget.field.emptyOption = { id: 'empty', name: 'Choose one...', isDefault: true } as DropdownFormFieldOption;
|
||||
widget.field.emptyOption = { id: 'empty', name: 'Choose one...' };
|
||||
widget.field.isVisible = true;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
@@ -184,20 +184,17 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
widget.field.optionType = 'rest';
|
||||
widget.field.value = {
|
||||
id: 'opt1',
|
||||
name: 'default1_value',
|
||||
isDefault: false
|
||||
name: 'default1_value'
|
||||
};
|
||||
|
||||
spyOn(formCloudService, 'getRestWidgetData').and.returnValue(of([
|
||||
{
|
||||
id: 'opt1',
|
||||
name: 'default1_value',
|
||||
isDefault: false
|
||||
name: 'default1_value'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: 'default2_value',
|
||||
isDefault: false
|
||||
name: 'default2_value'
|
||||
}
|
||||
] as any));
|
||||
|
||||
@@ -218,13 +215,11 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
spyOn(formCloudService, 'getRestWidgetData').and.returnValue(of([
|
||||
{
|
||||
id: 'opt1',
|
||||
name: 'default1_value',
|
||||
isDefault: false
|
||||
name: 'default1_value'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: 'default2_value',
|
||||
isDefault: false
|
||||
name: 'default2_value'
|
||||
}
|
||||
] as any));
|
||||
|
||||
@@ -234,12 +229,12 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
await openSelect();
|
||||
const options = fixture.debugElement.queryAll(By.css('.mat-option-text'));
|
||||
expect(options[0].nativeElement.innerText).toBe('default1_value');
|
||||
expect(widget.field.form.values['dropdown-id']).toEqual({ id: 'opt1', name: 'default1_value', isDefault: false });
|
||||
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 () => {
|
||||
widget.field.options = [
|
||||
{ id: 'empty', name: 'Choose empty', isDefault: true },
|
||||
{ id: 'empty', name: 'Choose empty' },
|
||||
...fakeOptionList
|
||||
];
|
||||
|
||||
@@ -259,7 +254,7 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
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', isDefault: true },
|
||||
{ id: 'empty', name: 'Choose empty' },
|
||||
...fakeOptionList
|
||||
];
|
||||
|
||||
@@ -278,7 +273,7 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
|
||||
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', isDefault: true },
|
||||
{ id: 'empty', name: 'This is a mock none option' },
|
||||
...fakeOptionList
|
||||
];
|
||||
|
||||
@@ -444,8 +439,8 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
options: fakeOptionList,
|
||||
selectionType: 'multiple',
|
||||
value: [
|
||||
{ id: 'opt_1', name: 'option_1', isDefault: false },
|
||||
{ id: 'opt_2', name: 'option_2', isDefault: false }
|
||||
{ id: 'opt_1', name: 'option_1' },
|
||||
{ id: 'opt_2', name: 'option_2' }
|
||||
]
|
||||
});
|
||||
fixture.detectChanges();
|
||||
@@ -479,8 +474,8 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
optionOne.triggerEventHandler('click', null);
|
||||
optionTwo.triggerEventHandler('click', null);
|
||||
expect(widget.field.value).toEqual([
|
||||
{ id: 'opt_1', name: 'option_1', isDefault: false },
|
||||
{ id: 'opt_2', name: 'option_2', isDefault: false }
|
||||
{ id: 'opt_1', name: 'option_1' },
|
||||
{ id: 'opt_2', name: 'option_2' }
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -494,30 +489,26 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
optionType : 'rest',
|
||||
selectionType: 'multiple',
|
||||
value: [
|
||||
{ id: 'opt_3', name: 'option_3', isDefault: false },
|
||||
{ id: 'opt_4', name: 'option_4', isDefault: false }
|
||||
{ id: 'opt_3', name: 'option_3' },
|
||||
{ id: 'opt_4', name: 'option_4' }
|
||||
]
|
||||
});
|
||||
spyOn(formCloudService, 'getRestWidgetData').and.returnValue(of([
|
||||
{
|
||||
id: 'opt_1',
|
||||
name: 'option_1',
|
||||
isDefault: false
|
||||
name: 'option_1'
|
||||
},
|
||||
{
|
||||
id: 'opt_2',
|
||||
name: 'option_2',
|
||||
isDefault: false
|
||||
name: 'option_2'
|
||||
},
|
||||
{
|
||||
id: 'opt_3',
|
||||
name: 'option_3',
|
||||
isDefault: false
|
||||
name: 'option_3'
|
||||
},
|
||||
{
|
||||
id: 'opt_4',
|
||||
name: 'option_4',
|
||||
isDefault: false
|
||||
name: 'option_4'
|
||||
}
|
||||
] as any));
|
||||
|
||||
@@ -549,23 +540,19 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
spyOn(formCloudService, 'getRestWidgetData').and.returnValue(of([
|
||||
{
|
||||
id: 'opt_1',
|
||||
name: 'option_1',
|
||||
isDefault: false
|
||||
name: 'option_1'
|
||||
},
|
||||
{
|
||||
id: 'opt_2',
|
||||
name: 'option_2',
|
||||
isDefault: false
|
||||
name: 'option_2'
|
||||
},
|
||||
{
|
||||
id: 'opt_3',
|
||||
name: 'option_3',
|
||||
isDefault: false
|
||||
name: 'option_3'
|
||||
},
|
||||
{
|
||||
id: 'opt_4',
|
||||
name: 'option_4',
|
||||
isDefault: false
|
||||
name: 'option_4'
|
||||
}
|
||||
] as any));
|
||||
|
||||
@@ -577,8 +564,8 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
optionOne.triggerEventHandler('click', null);
|
||||
optionTwo.triggerEventHandler('click', null);
|
||||
expect(widget.field.value).toEqual([
|
||||
{ id: 'opt_2', name: 'option_2', isDefault: false },
|
||||
{ id: 'opt_4', name: 'option_4', isDefault: false }
|
||||
{ id: 'opt_2', name: 'option_2' },
|
||||
{ id: 'opt_4', name: 'option_4' }
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
+7
-11
@@ -38,10 +38,6 @@ export const DEFAULT_OPTION = {
|
||||
};
|
||||
export const HIDE_FILTER_LIMIT = 5;
|
||||
|
||||
export interface DropdownFormFieldOption extends FormFieldOption {
|
||||
isDefault: boolean;
|
||||
}
|
||||
|
||||
/* eslint-disable @angular-eslint/component-selector */
|
||||
|
||||
@Component({
|
||||
@@ -68,7 +64,7 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
|
||||
variableOptionsFailed = false;
|
||||
previewState = false;
|
||||
restApiHostName: string;
|
||||
list$: Observable<DropdownFormFieldOption[]>;
|
||||
list$: Observable<FormFieldOption[]>;
|
||||
filter$ = new BehaviorSubject<string>('');
|
||||
|
||||
private readonly defaultVariableOptionId = 'id';
|
||||
@@ -199,7 +195,7 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
|
||||
const bodyParam = this.buildBodyParam();
|
||||
this.formCloudService.getRestWidgetData(this.field.form.id, this.field.id, bodyParam)
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe((result: DropdownFormFieldOption[]) => {
|
||||
.subscribe((result: FormFieldOption[]) => {
|
||||
this.resetRestApiErrorMessage();
|
||||
this.field.options = result;
|
||||
this.updateOptions();
|
||||
@@ -338,7 +334,7 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
|
||||
return this.field?.rule?.ruleOn;
|
||||
}
|
||||
|
||||
compareDropdownValues(opt1: DropdownFormFieldOption | string, opt2: DropdownFormFieldOption | string): boolean {
|
||||
compareDropdownValues(opt1: FormFieldOption | string, opt2: FormFieldOption | string): boolean {
|
||||
if (!opt1 || !opt2) {
|
||||
return false;
|
||||
}
|
||||
@@ -358,7 +354,7 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
|
||||
return opt1 === opt2;
|
||||
}
|
||||
|
||||
getOptionValue(option: DropdownFormFieldOption, fieldValue: string): string | DropdownFormFieldOption {
|
||||
getOptionValue(option: FormFieldOption, fieldValue: string): string | FormFieldOption {
|
||||
if (this.field.hasMultipleValues) {
|
||||
return option;
|
||||
}
|
||||
@@ -399,7 +395,7 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
|
||||
|
||||
updateOptions(): void {
|
||||
this.showInputFilter = this.field.options.length > this.appConfig.get<number>('form.dropDownFilterLimit', HIDE_FILTER_LIMIT);
|
||||
this.list$ = combineLatest([of(this.field.options as DropdownFormFieldOption[]), this.filter$])
|
||||
this.list$ = combineLatest([of(this.field.options), this.filter$])
|
||||
.pipe(
|
||||
map(([items, search]) => {
|
||||
if (!search) {
|
||||
@@ -438,7 +434,7 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
|
||||
!this.variableOptionsFailed;
|
||||
}
|
||||
|
||||
getDefaultOption(options: DropdownFormFieldOption[]): DropdownFormFieldOption {
|
||||
return options.find((option: DropdownFormFieldOption) => option.isDefault);
|
||||
getDefaultOption(options: FormFieldOption[]): FormFieldOption {
|
||||
return options.find((option: FormFieldOption) => option.isDefault === undefined ? option.id === DEFAULT_OPTION.id : option.isDefault);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { DropdownFormFieldOption } from '../components/widgets/dropdown/dropdown-cloud.widget';
|
||||
import { FormFieldOption } from '@alfresco/adf-core';
|
||||
import { TaskVariableCloud } from '../models/task-variable-cloud.model';
|
||||
|
||||
export const mockConditionalEntries = [
|
||||
@@ -24,18 +24,15 @@ export const mockConditionalEntries = [
|
||||
options: [
|
||||
{
|
||||
id: 'empty',
|
||||
name: 'Choose one...',
|
||||
isDefault: true
|
||||
name: 'Choose one...'
|
||||
},
|
||||
{
|
||||
id: 'ATH',
|
||||
name: 'Athens',
|
||||
isDefault: false
|
||||
name: 'Athens'
|
||||
},
|
||||
{
|
||||
id: 'SKG',
|
||||
name: 'Thessaloniki',
|
||||
isDefault: false
|
||||
name: 'Thessaloniki'
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -44,18 +41,15 @@ export const mockConditionalEntries = [
|
||||
options: [
|
||||
{
|
||||
id: 'empty',
|
||||
name: 'Choose one...',
|
||||
isDefault: true
|
||||
name: 'Choose one...'
|
||||
},
|
||||
{
|
||||
id: 'MI',
|
||||
name: 'MILAN',
|
||||
isDefault: false
|
||||
name: 'MILAN'
|
||||
},
|
||||
{
|
||||
id: 'RM',
|
||||
name: 'ROME',
|
||||
isDefault: false
|
||||
name: 'ROME'
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -64,56 +58,51 @@ export const mockConditionalEntries = [
|
||||
options: [
|
||||
{
|
||||
id: 'empty',
|
||||
name: 'Choose one...',
|
||||
isDefault: true
|
||||
name: 'Choose one...'
|
||||
},
|
||||
{
|
||||
id: 'LDN',
|
||||
name: 'London',
|
||||
isDefault: false
|
||||
name: 'London'
|
||||
},
|
||||
{
|
||||
id: 'MAN',
|
||||
name: 'Manchester',
|
||||
isDefault: false
|
||||
name: 'Manchester'
|
||||
},
|
||||
{
|
||||
id: 'SHE',
|
||||
name: 'Sheffield',
|
||||
isDefault: false
|
||||
name: 'Sheffield'
|
||||
},
|
||||
{
|
||||
id: 'LEE',
|
||||
name: 'Leeds',
|
||||
isDefault: false
|
||||
name: 'Leeds'
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
export const mockRestDropdownOptions: DropdownFormFieldOption[] = [
|
||||
{ id: 'LO', name: 'LONDON', isDefault: false },
|
||||
{ id: 'MA', name: 'MANCHESTER', isDefault: false }
|
||||
export const mockRestDropdownOptions: FormFieldOption[] = [
|
||||
{ id: 'LO', name: 'LONDON' },
|
||||
{ id: 'MA', name: 'MANCHESTER' }
|
||||
];
|
||||
|
||||
export const mockSecondRestDropdownOptions: DropdownFormFieldOption[] = [
|
||||
{ id: 'MI', name: 'MILAN', isDefault: false },
|
||||
{ id: 'RM', name: 'ROME', isDefault: false }
|
||||
export const mockSecondRestDropdownOptions: FormFieldOption[] = [
|
||||
{ id: 'MI', name: 'MILAN' },
|
||||
{ id: 'RM', name: 'ROME' }
|
||||
];
|
||||
|
||||
export const fakeOptionList: DropdownFormFieldOption[] = [
|
||||
{ id: 'opt_1', name: 'option_1', isDefault: false },
|
||||
{ id: 'opt_2', name: 'option_2', isDefault: false },
|
||||
{ id: 'opt_3', name: 'option_3', isDefault: false }
|
||||
export const fakeOptionList: FormFieldOption[] = [
|
||||
{ id: 'opt_1', name: 'option_1' },
|
||||
{ id: 'opt_2', name: 'option_2' },
|
||||
{ id: 'opt_3', name: 'option_3' }
|
||||
];
|
||||
|
||||
export const filterOptionList: DropdownFormFieldOption[] = [
|
||||
{ id: 'opt_1', name: 'option_1', isDefault: false },
|
||||
{ id: 'opt_2', name: 'option_2', isDefault: false },
|
||||
{ id: 'opt_3', name: 'option_3', isDefault: false },
|
||||
{ id: 'opt_4', name: 'option_4', isDefault: false },
|
||||
{ id: 'opt_5', name: 'option_5', isDefault: false },
|
||||
{ id: 'opt_6', name: 'option_6', isDefault: false }
|
||||
export const filterOptionList = [
|
||||
{ id: 'opt_1', name: 'option_1' },
|
||||
{ id: 'opt_2', name: 'option_2' },
|
||||
{ id: 'opt_3', name: 'option_3' },
|
||||
{ id: 'opt_4', name: 'option_4' },
|
||||
{ id: 'opt_5', name: 'option_5' },
|
||||
{ id: 'opt_6', name: 'option_6' }
|
||||
];
|
||||
|
||||
export const mockPlayersResponse = {
|
||||
@@ -149,18 +138,15 @@ export const mockDefaultResponse = {
|
||||
[
|
||||
{
|
||||
id: 'default-pet-1',
|
||||
name: 'Dog',
|
||||
isDefault: false
|
||||
name: 'Dog'
|
||||
},
|
||||
{
|
||||
id: 'default-pet-2',
|
||||
name: 'Cat',
|
||||
isDefault: false
|
||||
name: 'Cat'
|
||||
},
|
||||
{
|
||||
id: 'default-pet-3',
|
||||
name: 'Parrot',
|
||||
isDefault: false
|
||||
name: 'Parrot'
|
||||
}
|
||||
]
|
||||
};
|
||||
@@ -169,18 +155,15 @@ export const mockCountriesResponse = {
|
||||
countries: [
|
||||
{
|
||||
id: 'PL',
|
||||
name: 'Poland',
|
||||
isDefault: false
|
||||
name: 'Poland'
|
||||
},
|
||||
{
|
||||
id: 'UK',
|
||||
name: 'United Kingdom',
|
||||
isDefault: false
|
||||
name: 'United Kingdom'
|
||||
},
|
||||
{
|
||||
id: 'GR',
|
||||
name: 'Greece',
|
||||
isDefault: false
|
||||
name: 'Greece'
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user