diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.html index f2416b7700..77dfc9e853 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.html @@ -1,11 +1,10 @@
+ [class.typeahead-widget__invalid]="!field.isValid" id="typehead-div"> diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.spec.ts index 5cb375a497..94d4a3637e 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.spec.ts @@ -21,6 +21,10 @@ import { FormService } from '../../../services/form.service'; import { FormModel } from '../core/form.model'; import { FormFieldModel } from '../core/form-field.model'; import { FormFieldOption } from '../core/form-field-option'; +import { ComponentFixture, TestBed, async } from '@angular/core/testing'; +import { FakeFormService } from './assets/formService.service.mock'; +import { CoreModule } from 'ng2-alfresco-core'; +// import { fakeFormJson } from '../../../services/assets/widget-visibility.service.mock'; describe('TypeaheadWidget', () => { @@ -152,8 +156,8 @@ describe('TypeaheadWidget', () => { it('should setup initial value', () => { spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => { observer.next([ - { id: '1', name: 'One' }, - { id: '2', name: 'Two' } + {id: '1', name: 'One'}, + {id: '2', name: 'Two'} ]); observer.complete(); })); @@ -168,8 +172,8 @@ describe('TypeaheadWidget', () => { it('should not setup initial value due to missing option', () => { spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => { observer.next([ - { id: '1', name: 'One' }, - { id: '2', name: 'Two' } + {id: '1', name: 'One'}, + {id: '2', name: 'Two'} ]); observer.complete(); })); @@ -183,8 +187,8 @@ describe('TypeaheadWidget', () => { it('should setup field options on load', () => { let options: FormFieldOption[] = [ - { id: '1', name: 'One' }, - { id: '2', name: 'Two' } + {id: '1', name: 'One'}, + {id: '2', name: 'Two'} ]; spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => { @@ -209,8 +213,8 @@ describe('TypeaheadWidget', () => { it('should get filtered options', () => { let options: FormFieldOption[] = [ - { id: '1', name: 'Item one' }, - { id: '2', name: 'Item two'} + {id: '1', name: 'Item one'}, + {id: '2', name: 'Item two'} ]; widget.field.options = options; widget.value = 'tw'; @@ -222,8 +226,8 @@ describe('TypeaheadWidget', () => { it('should be case insensitive when filtering options', () => { let options: FormFieldOption[] = [ - { id: '1', name: 'Item one' }, - { id: '2', name: 'iTEM TWo' } + {id: '1', name: 'Item one'}, + {id: '2', name: 'iTEM TWo'} ]; widget.field.options = options; widget.value = 'tW'; @@ -247,8 +251,8 @@ describe('TypeaheadWidget', () => { it('should flush selected value', () => { let options: FormFieldOption[] = [ - { id: '1', name: 'Item one' }, - { id: '2', name: 'Item Two' } + {id: '1', name: 'Item one'}, + {id: '2', name: 'Item Two'} ]; widget.field.options = options; @@ -261,8 +265,8 @@ describe('TypeaheadWidget', () => { it('should be case insensitive when flushing value', () => { let options: FormFieldOption[] = [ - { id: '1', name: 'Item one' }, - { id: '2', name: 'iTEM TWo' } + {id: '1', name: 'Item one'}, + {id: '2', name: 'iTEM TWo'} ]; widget.field.options = options; @@ -308,4 +312,33 @@ describe('TypeaheadWidget', () => { expect(widget.field.value).toBeNull(); }); + it('should emit field change event on item click', () => { + let event = jasmine.createSpyObj('event', ['preventDefault']); + let fakeField = new FormFieldModel(new FormModel(), {id: 'fakeField', value: 'fakeValue'}); + widget.field = fakeField; + let item = {id: 'fake-id-opt', name: 'fake-name-opt'}; + widget.onItemClick(item, event); + + widget.fieldChanged.subscribe((field) => { + expect(field).toBeDefined(); + expect(field.id).toEqual('fakeField'); + expect(field.value).toEqual('fake-id-opt'); + }); + }); + + it('should emit field change event on blur', (done) => { + spyOn(widget, 'flushValue').and.stub(); + let fakeField = new FormFieldModel(new FormModel(), {id: 'fakeField', value: 'fakeValue'}); + widget.field = fakeField; + widget.onBlur(); + + setTimeout(() => { + widget.fieldChanged.subscribe((field) => { + expect(field).toBeDefined(); + expect(field.id).toEqual('field-id'); + expect(field.value).toEqual('field-value'); + }); + done(); + }, 200); + }); }); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.ts index 8bdbca48b9..8b7cc36048 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.ts @@ -81,6 +81,7 @@ export class TypeaheadWidget extends WidgetComponent implements OnInit { onBlur() { setTimeout(() => { this.flushValue(); + this.checkVisibility(this.field); }, 200); } @@ -108,6 +109,7 @@ export class TypeaheadWidget extends WidgetComponent implements OnInit { if (item) { this.field.value = item.id; this.value = item.name; + this.checkVisibility(this.field); } if (event) { event.preventDefault();