From 00532db76441469995686d5c917be719a06e2df8 Mon Sep 17 00:00:00 2001 From: "rowa.audil" Date: Wed, 3 Mar 2021 09:57:22 +0000 Subject: [PATCH] fix(filter-field): Fixes freeTexts set as defaultSearch and unique. --- apps/dev/src/filter-field/testdata.ts | 1 + .../filter-field/src/filter-field.spec.ts | 33 +++++++++++++++++++ .../filter-field/src/filter-field.ts | 19 +++++++---- .../src/testing/filter-field-test-data.ts | 15 +++++++++ 4 files changed, 62 insertions(+), 6 deletions(-) diff --git a/apps/dev/src/filter-field/testdata.ts b/apps/dev/src/filter-field/testdata.ts index d4026e9044..425fbf873c 100644 --- a/apps/dev/src/filter-field/testdata.ts +++ b/apps/dev/src/filter-field/testdata.ts @@ -24,6 +24,7 @@ export const TEST_DATA = { name: 'DE', defaultSearch: true, suggestions: [{ name: 'Berlin' }, { name: 'Bremen' }, { name: 'Munich' }], + unique: true, validators: [ { validatorFn: Validators.minLength(2), diff --git a/libs/barista-components/filter-field/src/filter-field.spec.ts b/libs/barista-components/filter-field/src/filter-field.spec.ts index fa0f1b5af1..1efb2f3982 100644 --- a/libs/barista-components/filter-field/src/filter-field.spec.ts +++ b/libs/barista-components/filter-field/src/filter-field.spec.ts @@ -58,6 +58,7 @@ import { TEST_DATA_RANGE, TEST_DATA_PLACEHOLDER, TEST_DATA_KEYBOARD_NAVIGATION, + TEST_DEFAULT_SEARCH_UNIQUE, } from './testing/filter-field-test-data'; import { TestApp, @@ -1213,6 +1214,38 @@ describe('DtFilterField', () => { }); }); + describe('default search', () => { + it('should not show the default search option when it is unique and used', fakeAsync(() => { + fixture.componentInstance.dataSource.data = TEST_DEFAULT_SEARCH_UNIQUE; + fixture.detectChanges(); + advanceFilterfieldCycle(); + + filterField.focus(); + advanceFilterfieldCycle(); + + let options = getOptions(overlayContainerElement); + expect(options[0].innerHTML.includes('DE')).toBeTruthy(); + + options[0].click(); + advanceFilterfieldCycle(); + + options = getOptions(overlayContainerElement); + + zone.simulateZoneExit(); + + options[0].click(); + advanceFilterfieldCycle(); + + expect(filterField.filters.length).toBe(1); + + options = getOptions(overlayContainerElement); + + zone.simulateZoneExit(); + + expect(options[0].innerHTML.includes('DE')).toBeFalsy(); + })); + }); + describe('programmatic setting', () => { beforeEach(() => { fixture.componentInstance.dataSource.data = TEST_DATA_EDITMODE; diff --git a/libs/barista-components/filter-field/src/filter-field.ts b/libs/barista-components/filter-field/src/filter-field.ts index 312a1c5d7c..29d7159f5b 100644 --- a/libs/barista-components/filter-field/src/filter-field.ts +++ b/libs/barista-components/filter-field/src/filter-field.ts @@ -113,6 +113,7 @@ import { DtFilterFieldRangeTrigger } from './filter-field-range/filter-field-ran import { DtFilterFieldTag } from './filter-field-tag/filter-field-tag'; import { applyDtOptionIds, + defUniquePredicate, filterAutocompleteDef, filterFreeTextDef, filterMultiSelectDef, @@ -1727,12 +1728,18 @@ export class DtFilterField !isAsyncDtAutocompleteDef(currentDef) && this._inputValue.length ) { - if (this._defaultSearchDef === null) { - this._defaultSearchDef = findDefaultSearch(currentDef); - this._updateControl(); - this._writeControlValue(this._inputValue); - } else { - this._defaultSearchDef = findDefaultSearch(currentDef); + const defaultSearchDef = findDefaultSearch(currentDef); + if ( + defaultSearchDef && + defUniquePredicate(defaultSearchDef, this._getSelectedOptionIds()) + ) { + if (this._defaultSearchDef === null) { + this._defaultSearchDef = defaultSearchDef; + this._updateControl(); + this._writeControlValue(this._inputValue); + } else { + this._defaultSearchDef = findDefaultSearch(currentDef); + } } if (this._defaultSearchDef) this._defaultSearchDef = filterFreeTextDef( diff --git a/libs/barista-components/filter-field/src/testing/filter-field-test-data.ts b/libs/barista-components/filter-field/src/testing/filter-field-test-data.ts index 1680f3f756..c034a41611 100644 --- a/libs/barista-components/filter-field/src/testing/filter-field-test-data.ts +++ b/libs/barista-components/filter-field/src/testing/filter-field-test-data.ts @@ -129,6 +129,21 @@ export const TEST_DATA_EDITMODE = { ], }; +export const TEST_DEFAULT_SEARCH_UNIQUE = { + autocomplete: [ + { + name: 'DE', + defaultSearch: true, + autocomplete: [{ name: 'Berlin' }], + unique: true, + }, + { + name: 'AUT', + autocomplete: [{ name: 'Vienna' }], + }, + ], +}; + export const TEST_DATA_KEYBOARD_NAVIGATION = { autocomplete: [ {