From 6eaf3c0c01b906f75c1cdc5d55d896902a7a47b4 Mon Sep 17 00:00:00 2001 From: Anna Shakhova <68295572+anna-shakhova@users.noreply.github.com> Date: Fri, 24 Jan 2025 17:02:35 +0100 Subject: [PATCH] Lookup: Fix load indicator when minSearchLength specified (T1215813) (#28833) --- .../devextreme/js/__internal/ui/m_lookup.ts | 14 +++++++ .../lookup.tests.js | 39 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/packages/devextreme/js/__internal/ui/m_lookup.ts b/packages/devextreme/js/__internal/ui/m_lookup.ts index 66d75c8d67d1..2e47a7d6b017 100644 --- a/packages/devextreme/js/__internal/ui/m_lookup.ts +++ b/packages/devextreme/js/__internal/ui/m_lookup.ts @@ -783,6 +783,20 @@ const Lookup = DropDownList.inherit({ } }, + _filterDataSource(...args) { + if (this._list && !this._list._dataSource && this._isMinSearchLengthExceeded()) { + this._list?._scrollView.startLoading(); + } + + this.callBase(...args); + }, + + _dataSourceFiltered(...args) { + this.callBase(...args); + + this._list?._scrollView.finishLoading(); + }, + _updateActiveDescendant() { this.callBase(); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.editors/lookup.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.editors/lookup.tests.js index 1e5d869d0504..aa6203e40d24 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.editors/lookup.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.editors/lookup.tests.js @@ -3267,6 +3267,45 @@ QUnit.module('dataSource integration', { assert.ok($loadPanel.is(':visible'), 'load panel is visible'); }); + + QUnit.test('load panel should be displayed if search value length exceed minSearchLength and showDataBeforeSearch=false, (T1215813)', function(assert) { + const loadDelay = 1000; + const timeoutDelay = 100; + const instance = this.$element.dxLookup({ + dataSource: { + load: () => { + const d = new $.Deferred(); + + setTimeout(() => { + d.resolve([]); + }, loadDelay); + + return d; + } + }, + searchEnabled: true, + showDataBeforeSearch: false, + minSearchLength: 3, + searchTimeout: timeoutDelay, + useNativeScrolling: false, + opened: true + }).dxLookup('instance'); + + const $content = $(instance.content()); + const $input = $content.find(`.${LOOKUP_SEARCH_CLASS} .${TEXTEDITOR_INPUT_CLASS}`); + const $loadPanel = $content.find(`.${SCROLL_VIEW_LOAD_PANEL_CLASS}`); + const keyboard = keyboardMock($input); + + keyboard.type('abc'); + this.clock.tick(timeoutDelay + loadDelay / 2); + assert.ok($loadPanel.is(':visible'), 'load panel is visible'); + this.clock.tick(loadDelay / 2); + assert.ok($loadPanel.is(':hidden'), 'load panel is not visible when loading has been finished'); + + keyboard.press('backspace'); + this.clock.tick(loadDelay / 2); + assert.ok($loadPanel.is(':hidden'), 'load panel is not visible if value length less than minSearchLength)'); + }); });