devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
902 lines (900 loc) • 37.3 kB
JavaScript
/**
* DevExtreme (cjs/ui/lookup.js)
* Version: 23.2.6
* Build date: Wed May 01 2024
*
* Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
exports.default = void 0;
var _size = require("../core/utils/size");
var _renderer = _interopRequireDefault(require("../core/renderer"));
var _events_engine = _interopRequireDefault(require("../events/core/events_engine"));
var _window = require("../core/utils/window");
var _support = require("../core/utils/support");
var _common = require("../core/utils/common");
var _element = require("../core/element");
var _iterator = require("../core/utils/iterator");
var _extend = require("../core/utils/extend");
var _utils = require("../core/options/utils");
var _message = _interopRequireDefault(require("../localization/message"));
var _devices = _interopRequireDefault(require("../core/devices"));
var _component_registrator = _interopRequireDefault(require("../core/component_registrator"));
var _ui = _interopRequireDefault(require("./drop_down_editor/ui.drop_down_list"));
var _themes = require("./themes");
var _ui2 = _interopRequireDefault(require("./popover/ui.popover"));
var _text_box = _interopRequireDefault(require("./text_box"));
var _child_default_template = require("../core/templates/child_default_template");
var _translator = require("../animation/translator");
var _type = require("../core/utils/type");
var _utils2 = require("./drop_down_editor/utils");
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
}
}
const window = (0, _window.getWindow)();
const LOOKUP_CLASS = "dx-lookup";
const LOOKUP_SEARCH_CLASS = "dx-lookup-search";
const LOOKUP_SEARCH_WRAPPER_CLASS = "dx-lookup-search-wrapper";
const LOOKUP_FIELD_CLASS = "dx-lookup-field";
const LOOKUP_ARROW_CLASS = "dx-lookup-arrow";
const LOOKUP_FIELD_WRAPPER_CLASS = "dx-lookup-field-wrapper";
const LOOKUP_POPUP_CLASS = "dx-lookup-popup";
const LOOKUP_POPUP_WRAPPER_CLASS = "dx-lookup-popup-wrapper";
const LOOKUP_POPUP_SEARCH_CLASS = "dx-lookup-popup-search";
const LOOKUP_POPOVER_MODE = "dx-lookup-popover-mode";
const LOOKUP_EMPTY_CLASS = "dx-lookup-empty";
const LOOKUP_POPOVER_FLIP_VERTICAL_CLASS = "dx-popover-flipped-vertical";
const TEXTEDITOR_INPUT_CLASS = "dx-texteditor-input";
const TEXTEDITOR_EMPTY_CLASS = "dx-texteditor-empty";
const LIST_ITEM_CLASS = "dx-list-item";
const LIST_ITEM_SELECTED_CLASS = "dx-list-item-selected";
const GROUP_LIST_HEADER_CLASS = "dx-list-group-header";
const MATERIAL_LOOKUP_LIST_ITEMS_COUNT = 5;
const MATERIAL_LOOKUP_LIST_PADDING = 8;
const WINDOW_RATIO = .8;
const Lookup = _ui.default.inherit({
_supportedKeys: function() {
return (0, _extend.extend)(this.callBase(), {
space: function(e) {
e.preventDefault();
this._validatedOpening()
},
enter: function() {
this._validatedOpening()
}
})
},
_getDefaultOptions: function() {
const getSize = side => {
let size;
if ("phone" === _devices.default.real().deviceType && window.visualViewport) {
size = window.visualViewport[side]
} else {
size = "width" === side ? (0, _size.getWidth)(window) : (0, _size.getHeight)(window)
}
return .8 * size
};
return (0, _extend.extend)(this.callBase(), {
placeholder: _message.default.format("Select"),
searchPlaceholder: _message.default.format("Search"),
searchEnabled: true,
searchStartEvent: "input change keyup",
cleanSearchOnOpening: true,
showCancelButton: true,
showClearButton: false,
clearButtonText: _message.default.format("Clear"),
applyButtonText: _message.default.format("OK"),
pullRefreshEnabled: false,
useNativeScrolling: true,
pullingDownText: _message.default.format("dxList-pullingDownText"),
pulledDownText: _message.default.format("dxList-pulledDownText"),
refreshingText: _message.default.format("dxList-refreshingText"),
pageLoadingText: _message.default.format("dxList-pageLoadingText"),
onScroll: null,
onPullRefresh: null,
onPageLoading: null,
pageLoadMode: "scrollBottom",
nextButtonText: _message.default.format("dxList-nextButtonText"),
grouped: false,
groupTemplate: "group",
usePopover: false,
openOnFieldClick: true,
showDropDownButton: false,
focusStateEnabled: false,
dropDownOptions: {
showTitle: true,
width: function() {
return getSize("width")
},
height: function() {
return getSize("height")
},
shading: true,
hideOnOutsideClick: false,
position: void 0,
animation: {},
title: "",
titleTemplate: "title",
onTitleRendered: null,
fullScreen: false
},
dropDownCentered: false,
_scrollToSelectedItemEnabled: false,
useHiddenSubmitElement: true
})
},
_setDeprecatedOptions() {
this.callBase();
(0, _extend.extend)(this._deprecatedOptions, {
valueChangeEvent: {
since: "22.1",
alias: "searchStartEvent"
}
})
},
_defaultOptionsRules: function() {
const themeName = (0, _themes.current)();
return this.callBase().concat([{
device: function() {
return !_support.nativeScrolling
},
options: {
useNativeScrolling: false
}
}, {
device: function(device) {
return !_devices.default.isSimulator() && "desktop" === _devices.default.real().deviceType && "generic" === device.platform
},
options: {
usePopover: true,
dropDownOptions: {
height: "auto"
}
}
}, {
device: {
platform: "ios",
phone: true
},
options: {
dropDownOptions: {
fullScreen: true
}
}
}, {
device: {
platform: "ios",
tablet: true
},
options: {
dropDownOptions: {
width: function() {
return .4 * Math.min((0, _size.getWidth)(window), (0, _size.getHeight)(window))
},
height: "auto"
},
usePopover: true
}
}, {
device: function() {
return "desktop" === _devices.default.real().deviceType && !_devices.default.isSimulator()
},
options: {
focusStateEnabled: true
}
}, {
device: function() {
return (0, _themes.isMaterial)(themeName)
},
options: {
usePopover: false,
searchEnabled: false,
showCancelButton: false,
dropDownCentered: true,
_scrollToSelectedItemEnabled: true,
dropDownOptions: {
hideOnOutsideClick: true,
_ignoreFunctionValueDeprecation: true,
width: () => (0, _utils2.getElementWidth)(this.$element()),
height: function() {
return this._getPopupHeight()
}.bind(this),
showTitle: false,
shading: false
}
}
}])
},
_init: function() {
this.callBase();
this._initActions()
},
_initActions() {
this.callBase();
this._initScrollAction();
this._initPageLoadingAction();
this._initPullRefreshAction()
},
_initPageLoadingAction: function() {
this._pageLoadingAction = this._createActionByOption("onPageLoading")
},
_initPullRefreshAction: function() {
this._pullRefreshAction = this._createActionByOption("onPullRefresh")
},
_initScrollAction: function() {
this._scrollAction = this._createActionByOption("onScroll")
},
_scrollHandler: function(e) {
this._scrollAction(e)
},
_pullRefreshHandler: function(e) {
this._pullRefreshAction(e)
},
_pageLoadingHandler: function(e) {
this._pageLoadingAction(e)
},
_initTemplates: function() {
this.callBase();
this._templateManager.addDefaultTemplates({
group: new _child_default_template.ChildDefaultTemplate("group"),
title: new _child_default_template.ChildDefaultTemplate("title")
})
},
_initMarkup: function() {
this.$element().addClass("dx-lookup").toggleClass(LOOKUP_POPOVER_MODE, this.option("usePopover"));
this.callBase()
},
_inputWrapper: function() {
return this.$element().find(".dx-lookup-field-wrapper")
},
_dataSourceOptions: function() {
return (0, _extend.extend)(this.callBase(), {
paginate: true
})
},
_fireContentReadyAction: _common.noop,
_popupWrapperClass: function() {
return ""
},
_renderInput: function() {
this._$field = (0, _renderer.default)("<div>").addClass("dx-lookup-field");
this._applyInputAttributes(this.option("inputAttr"));
const $arrow = (0, _renderer.default)("<div>").addClass("dx-lookup-arrow");
this._$fieldWrapper = (0, _renderer.default)("<div>").addClass("dx-lookup-field-wrapper").append(this._$field).append($arrow).appendTo(this.$element())
},
_applyInputAttributes(attributes) {
this._$field.attr(attributes)
},
_getInputContainer() {
return this._$fieldWrapper
},
_renderField: function() {
const fieldTemplate = this._getTemplateByOption("fieldTemplate");
if (fieldTemplate && this.option("fieldTemplate")) {
this._renderFieldTemplate(fieldTemplate);
return
}
const displayValue = this.option("displayValue");
this._updateField(displayValue);
const isFieldEmpty = !this.option("selectedItem");
this.$element().toggleClass("dx-lookup-empty", isFieldEmpty).toggleClass("dx-texteditor-empty", isFieldEmpty)
},
_getLabelContainer: function() {
return this._$field
},
_renderDisplayText: function(text) {
if (this._input().length) {
this.callBase(text)
} else {
this._updateField(text)
}
},
_updateField: function(text) {
text = (0, _type.isDefined)(text) && String(text);
this._$field.empty();
if (text) {
this._$field.text(text)
} else {
const $placeholder = (0, _renderer.default)("<div>").attr({
"data-dx_placeholder": this.option("placeholder")
});
this._$field.append($placeholder);
$placeholder.addClass("dx-placeholder")
}
},
_renderFieldTemplate: function(template) {
this._$field.empty();
const data = this._fieldRenderData();
template.render({
model: data,
container: (0, _element.getPublicElement)(this._$field)
})
},
_fieldRenderData: function() {
return this.option("selectedItem")
},
_popupShowingHandler: function() {
this.callBase.apply(this, arguments);
if (this.option("cleanSearchOnOpening")) {
if (this.option("searchEnabled") && this._searchBox.option("value")) {
this._searchBox.option("value", "");
this._searchCanceled()
}
this._list && this._list.option("focusedElement", null)
}
if (this.option("dropDownOptions.fullScreen") && this.option("_scrollToSelectedItemEnabled")) {
this._popup.option("position").of = (0, _renderer.default)(window)
}
},
_popupShownHandler: function() {
const scrollToSelectedItemEnabled = this.option("_scrollToSelectedItemEnabled");
const fullScreen = this.option("dropDownOptions.fullScreen");
if (!fullScreen && scrollToSelectedItemEnabled) {
this._setPopupPosition()
}
this.callBase()
},
_scrollToSelectedItem: function() {
const selectedIndex = this._list.option("selectedIndex");
const listItems = this._list.option("items");
const itemsCount = listItems.length;
if (0 !== itemsCount) {
if (this._list.option("grouped")) {
this._list.scrollToItem({
group: itemsCount - 1,
item: listItems[itemsCount - 1].items.length - 1
})
} else {
this._list.scrollToItem(itemsCount - 1)
}
this._list.scrollToItem(selectedIndex)
}
},
_getDifferenceOffsets: function(selectedListItem) {
return selectedListItem.offset().top - (0, _renderer.default)(this.element()).offset().top
},
_isCenteringEnabled: (index, count) => 1 < index && index < count - 2,
_getPopupOffset: function() {
const listItemsCount = this._listItemElements().length;
if (0 === listItemsCount) {
return
}
const selectedListItem = (0, _renderer.default)(this._list.element()).find(".dx-list-item-selected");
const selectedIndex = this._listItemElements().index(selectedListItem);
const differenceOfHeights = ((0, _size.getHeight)(selectedListItem) - (0, _size.getHeight)(this.element())) / 2;
const lookupOffset = (0, _renderer.default)(this._list.element()).offset().top;
const dropDownHeightOption = this.option("dropDownOptions.height");
const popupHeight = "function" === typeof dropDownHeightOption ? dropDownHeightOption() : dropDownHeightOption;
const windowHeight = (0, _size.getHeight)(window);
let offsetTop = 0;
if (-1 !== selectedIndex) {
if (this._isCenteringEnabled(selectedIndex, listItemsCount)) {
this._scrollToSelectedItem();
const scrollOffsetTop = (popupHeight - (0, _size.getHeight)(selectedListItem)) / 2 - this._getDifferenceOffsets(selectedListItem);
this._list.scrollTo(this._list.scrollTop() + 4 - scrollOffsetTop);
offsetTop = differenceOfHeights + this._getDifferenceOffsets(selectedListItem);
if (lookupOffset < offsetTop && selectedIndex !== listItemsCount - 3) {
this._list.scrollTo(this._list.scrollTop() + this._getDifferenceOffsets(selectedListItem) / 2);
offsetTop = differenceOfHeights + this._getDifferenceOffsets(selectedListItem)
}
} else if (selectedIndex <= 1) {
this._list.scrollTo(0);
offsetTop = differenceOfHeights + this._getDifferenceOffsets(selectedListItem)
} else if (selectedIndex >= listItemsCount - 2) {
this._scrollToSelectedItem();
offsetTop = differenceOfHeights + this._getDifferenceOffsets(selectedListItem)
}
if (lookupOffset < offsetTop) {
this._scrollToSelectedItem();
offsetTop = differenceOfHeights + 8
}
}
const offsetBottom = popupHeight - offsetTop - (0, _size.getHeight)(this.element());
if (windowHeight - lookupOffset < offsetBottom) {
this._list.scrollTo(this._list.scrollTop() + differenceOfHeights - offsetBottom);
offsetTop = popupHeight - (0, _size.getHeight)(this.element()) - 8
}
return offsetTop
},
_setPopupPosition: function() {
if (!this.option("dropDownCentered")) {
return
}
const flipped = this._popup.$wrapper().hasClass("dx-popover-flipped-vertical");
if (flipped) {
return
}
const popupContentParent = (0, _renderer.default)(this._popup.$content()).parent();
const popupOffset = this._getPopupOffset();
const position = (0, _translator.locate)(popupContentParent);
(0, _translator.move)(popupContentParent, {
top: position.top - popupOffset
})
},
_listItemGroupedElements: function() {
const groups = this._list._getItemsContainer().children();
const items = [];
groups.each((_, group) => {
items.push((0, _renderer.default)(group).find(".dx-list-group-header")[0]);
const groupedItems = (0, _renderer.default)(group).find(".dx-list-item");
groupedItems.each((_, item) => {
items.push(item)
})
});
return (0, _renderer.default)(items)
},
_calculateListHeight: function(grouped) {
const listItems = grouped ? this._listItemGroupedElements() : this._listItemElements();
const selectedListItem = (0, _renderer.default)(".dx-list-item-selected");
const selectedIndex = listItems.index(selectedListItem);
let listHeight = 0;
let requireListItems = [];
if (0 === listItems.length) {
listHeight += 8
} else if (listItems.length < 5) {
listItems.each((_, item) => {
listHeight += (0, _size.getOuterHeight)(item)
})
} else {
if (selectedIndex <= 1) {
requireListItems = listItems.slice(0, 5)
} else if (this._isCenteringEnabled(selectedIndex, listItems.length)) {
requireListItems = listItems.slice(selectedIndex - 2, selectedIndex + 3)
} else {
requireListItems = listItems.slice(listItems.length - 5, listItems.length)
}
requireListItems.each((_, item) => {
listHeight += (0, _size.getOuterHeight)(item)
})
}
return listHeight + (grouped ? 8 : 16)
},
_getPopupHeight: function() {
var _this$_list;
if (null !== (_this$_list = this._list) && void 0 !== _this$_list && _this$_list.itemElements().length) {
return this._calculateListHeight(this.option("grouped")) + (this._$searchWrapper ? (0, _size.getOuterHeight)(this._$searchWrapper) : 0) + (this._popup._$bottom ? (0, _size.getOuterHeight)(this._popup._$bottom) : 0) + (this._popup._$title ? (0, _size.getOuterHeight)(this._popup._$title) : 0)
} else {
return "auto"
}
},
_popupTabHandler: _common.noop,
_renderPopup: function() {
if (this.option("usePopover") && !this.option("dropDownOptions.fullScreen")) {
if (this.option("_scrollToSelectedItemEnabled")) {
this.callBase()
} else {
this._renderPopover();
this._attachPopupKeyHandler()
}
} else {
this.callBase()
}
this._$popup.addClass("dx-lookup-popup");
this._popup.$wrapper().addClass("dx-lookup-popup-wrapper")
},
_renderPopover: function() {
this._popup = this._createComponent(this._$popup, _ui2.default, (0, _extend.extend)(this._popupConfig(), this._options.cache("dropDownOptions"), {
showEvent: null,
hideEvent: null,
target: this.$element(),
fullScreen: false,
shading: false,
hideOnParentScroll: true,
_fixWrapperPosition: false,
width: this._isInitialOptionValue("dropDownOptions.width") ? function() {
return (0, _size.getOuterWidth)(this.$element())
}.bind(this) : this._popupConfig().width
}));
this._popup.$overlayContent().attr("role", "dialog");
this._popup.on({
showing: this._popupShowingHandler.bind(this),
shown: this._popupShownHandler.bind(this),
hiding: this._popupHidingHandler.bind(this),
hidden: this._popupHiddenHandler.bind(this),
contentReady: this._contentReadyHandler.bind(this)
});
if (this.option("_scrollToSelectedItemEnabled")) {
this._popup._$arrow.remove()
}
this._setPopupContentId(this._popup.$content());
this._contentReadyHandler()
},
_popupHidingHandler: function() {
this.callBase();
this.option("focusStateEnabled") && this.focus()
},
_popupHiddenHandler: function() {
this.callBase();
if (this.option("_scrollToSelectedItemEnabled")) {
(0, _translator.resetPosition)((0, _renderer.default)(this._popup.content()).parent())
}
},
_preventFocusOnPopup: _common.noop,
_popupConfig: function() {
const result = (0, _extend.extend)(this.callBase(), {
toolbarItems: this._getPopupToolbarItems(),
hideOnParentScroll: false,
onPositioned: null,
maxHeight: "100vh",
showTitle: this.option("dropDownOptions.showTitle"),
title: this.option("dropDownOptions.title"),
titleTemplate: this._getTemplateByOption("dropDownOptions.titleTemplate"),
onTitleRendered: this.option("dropDownOptions.onTitleRendered"),
fullScreen: this.option("dropDownOptions.fullScreen"),
shading: this.option("dropDownOptions.shading"),
hideOnOutsideClick: this.option("dropDownOptions.hideOnOutsideClick") || this.option("dropDownOptions.closeOnOutsideClick")
});
delete result.animation;
delete result.position;
if (this.option("_scrollToSelectedItemEnabled")) {
result.position = this.option("dropDownCentered") ? {
my: "left top",
at: "left top",
of: this.element()
} : {
my: "left top",
at: "left bottom",
of: this.element()
};
result.hideOnParentScroll = true
}(0, _iterator.each)(["position", "animation", "width", "height"], (_, optionName) => {
const popupOptionValue = this.option("dropDownOptions.".concat(optionName));
if (void 0 !== popupOptionValue) {
result[optionName] = popupOptionValue
}
});
return result
},
_getPopupToolbarItems: function() {
const buttonsConfig = "useButtons" === this.option("applyValueMode") ? this._popupToolbarItemsConfig() : [];
const cancelButton = this._getCancelButtonConfig();
if (cancelButton) {
buttonsConfig.push(cancelButton)
}
const clearButton = this._getClearButtonConfig();
if (clearButton) {
buttonsConfig.push(clearButton)
}
return this._applyButtonsLocation(buttonsConfig)
},
_popupToolbarItemsConfig: function() {
return [{
shortcut: "done",
options: {
onClick: this._applyButtonHandler.bind(this),
text: this.option("applyButtonText")
}
}]
},
_getCancelButtonConfig: function() {
return this.option("showCancelButton") ? {
shortcut: "cancel",
onClick: this._cancelButtonHandler.bind(this),
options: {
text: this.option("cancelButtonText")
}
} : null
},
_getClearButtonConfig: function() {
return this.option("showClearButton") ? {
shortcut: "clear",
onClick: this._resetValue.bind(this),
options: {
text: this.option("clearButtonText")
}
} : null
},
_applyButtonHandler: function(args) {
if (args) {
this._saveValueChangeEvent(args.event)
}
this.option("value", this._valueGetter(this._currentSelectedItem()));
this.callBase()
},
_cancelButtonHandler: function() {
this._refreshSelected();
this.callBase()
},
_refreshPopupVisibility: function() {
if (this.option("opened")) {
this._updateListDimensions()
}
},
_dimensionChanged: function() {
if (this.option("usePopover") && !this.option("dropDownOptions.width")) {
this.option("dropDownOptions.width", (0, _size.getWidth)(this.$element()))
}
this._updateListDimensions()
},
_input: function() {
return this._$searchBox || this.callBase()
},
_renderPopupContent: function() {
this.callBase();
this._renderSearch()
},
_renderValueChangeEvent: _common.noop,
_renderSearch: function() {
const isSearchEnabled = this.option("searchEnabled");
this._toggleSearchClass(isSearchEnabled);
if (isSearchEnabled) {
const $searchWrapper = this._$searchWrapper = (0, _renderer.default)("<div>").addClass("dx-lookup-search-wrapper");
const $searchBox = this._$searchBox = (0, _renderer.default)("<div>").addClass("dx-lookup-search").appendTo($searchWrapper);
const currentDevice = _devices.default.current();
const searchMode = currentDevice.android ? "text" : "search";
let isKeyboardListeningEnabled = false;
const textBoxOptions = {
mode: searchMode,
showClearButton: true,
valueChangeEvent: this.option("searchStartEvent"),
inputAttr: {
"aria-label": "Search"
},
onDisposing: () => isKeyboardListeningEnabled = false,
onFocusIn: () => isKeyboardListeningEnabled = true,
onFocusOut: () => isKeyboardListeningEnabled = false,
onKeyboardHandled: opts => isKeyboardListeningEnabled && this._list._keyboardHandler(opts),
onValueChanged: e => this._searchHandler(e)
};
this._searchBox = this._createComponent($searchBox, _text_box.default, textBoxOptions);
this._registerSearchKeyHandlers();
$searchWrapper.insertBefore(this._$list);
this._setSearchPlaceholder()
}
},
_updateActiveDescendant() {
this.callBase();
if (!this._$searchBox) {
return
}
const $input = this._$searchBox.find("input");
this.callBase($input)
},
_removeSearch: function() {
this._$searchWrapper && this._$searchWrapper.remove();
delete this._$searchWrapper;
this._$searchBox && this._$searchBox.remove();
delete this._$searchBox;
delete this._searchBox
},
_selectListItemHandler: function(e) {
const $itemElement = (0, _renderer.default)(this._list.option("focusedElement"));
if (!$itemElement.length) {
return
}
e.preventDefault();
e.target = $itemElement.get(0);
this._saveValueChangeEvent(e);
this._selectListItem(e.itemData, $itemElement)
},
_registerSearchKeyHandlers: function() {
this._searchBox.registerKeyHandler("enter", this._selectListItemHandler.bind(this));
this._searchBox.registerKeyHandler("space", this._selectListItemHandler.bind(this));
this._searchBox.registerKeyHandler("end", _common.noop);
this._searchBox.registerKeyHandler("home", _common.noop)
},
_toggleSearchClass: function(isSearchEnabled) {
if (this._popup) {
this._popup.$wrapper().toggleClass("dx-lookup-popup-search", isSearchEnabled)
}
},
_setSearchPlaceholder: function() {
if (!this._$searchBox) {
return
}
const minSearchLength = this.option("minSearchLength");
let placeholder = this.option("searchPlaceholder");
if (minSearchLength && placeholder === _message.default.format("Search")) {
placeholder = _message.default.getFormatter("dxLookup-searchPlaceholder")(minSearchLength)
}
this._searchBox.option("placeholder", placeholder)
},
_setAriaTargetForList: _common.noop,
_listConfig: function() {
return (0, _extend.extend)(this.callBase(), {
tabIndex: 0,
grouped: this.option("grouped"),
groupTemplate: this._getTemplateByOption("groupTemplate"),
pullRefreshEnabled: this.option("pullRefreshEnabled"),
useNativeScrolling: this.option("useNativeScrolling"),
pullingDownText: this.option("pullingDownText"),
pulledDownText: this.option("pulledDownText"),
refreshingText: this.option("refreshingText"),
pageLoadingText: this.option("pageLoadingText"),
onScroll: this._scrollHandler.bind(this),
onPullRefresh: this._pullRefreshHandler.bind(this),
onPageLoading: this._pageLoadingHandler.bind(this),
pageLoadMode: this.option("pageLoadMode"),
nextButtonText: this.option("nextButtonText"),
indicateLoading: this.option("searchEnabled"),
onSelectionChanged: this._getSelectionChangedHandler()
})
},
_getSelectionChangedHandler: function() {
return this.option("showSelectionControls") ? this._selectionChangeHandler.bind(this) : _common.noop
},
_listContentReadyHandler: function() {
this.callBase(...arguments);
this._refreshSelected()
},
_runWithoutCloseOnScroll: function(callback) {
const {
_scrollToSelectedItemEnabled: _scrollToSelectedItemEnabled
} = this.option();
const hideOnParentScroll = this._popup.option("hideOnParentScroll");
if (!_scrollToSelectedItemEnabled) {
callback()
} else {
this._popup.option("hideOnParentScroll", false);
callback();
this._hideOnParentScrollTimer = setTimeout(() => {
this._popup.option("hideOnParentScroll", hideOnParentScroll)
})
}
},
_setFocusPolicy: function() {
if (!this.option("focusStateEnabled")) {
return
}
this._runWithoutCloseOnScroll(() => {
if (this.option("searchEnabled")) {
this._searchBox.focus()
} else {
this._list.focus()
}
})
},
_focusTarget: function() {
return this._$field
},
_keyboardEventBindingTarget: function() {
return this._$field
},
_listItemClickHandler: function(e) {
this._saveValueChangeEvent(e.event);
this._selectListItem(e.itemData, e.event.currentTarget)
},
_selectListItem: function(itemData, target) {
this._list.selectItem(target);
if ("instantly" === this.option("applyValueMode")) {
this._applyButtonHandler()
}
},
_currentSelectedItem: function() {
return this.option("grouped") ? this._list.option("selectedItems[0]").items[0] : this._list.option("selectedItems[0]")
},
_resetValue: function(e) {
this._saveValueChangeEvent(e.event);
this.option("value", null);
this.option("opened", false)
},
_searchValue: function() {
return this.option("searchEnabled") && this._searchBox ? this._searchBox.option("value") : ""
},
_renderInputValue: function() {
return this.callBase().always(() => {
this._refreshSelected()
})
},
_renderPlaceholder: function() {
if (0 === this.$element().find(".dx-texteditor-input").length) {
return
}
this.callBase()
},
_clean: function() {
this._$fieldWrapper.remove();
clearTimeout(this._hideOnParentScrollTimer);
this._hideOnParentScrollTimer = null;
this._$searchBox = null;
this.callBase()
},
_optionChanged: function(args) {
var _this$_searchBox;
const {
name: name,
fullName: fullName,
value: value
} = args;
switch (name) {
case "dataSource":
this.callBase(...arguments);
this._renderField();
break;
case "searchEnabled":
if (this._popup) {
this._removeSearch();
this._renderSearch()
}
break;
case "searchPlaceholder":
this._setSearchPlaceholder();
break;
case "minSearchLength":
this._setSearchPlaceholder();
this.callBase(...arguments);
break;
case "inputAttr":
this._applyInputAttributes(value);
break;
case "usePopover":
case "placeholder":
this._invalidate();
break;
case "clearButtonText":
case "showClearButton":
case "showCancelButton":
this._setPopupOption("toolbarItems", this._getPopupToolbarItems());
break;
case "applyValueMode":
this.callBase(...arguments);
break;
case "onPageLoading":
this._initPageLoadingAction();
break;
case "onPullRefresh":
this._initPullRefreshAction();
break;
case "pullRefreshEnabled":
case "useNativeScrolling":
case "pullingDownText":
case "pulledDownText":
case "refreshingText":
case "pageLoadingText":
case "nextButtonText":
case "grouped":
case "groupTemplate":
this._setListOption(name);
break;
case "searchStartEvent":
null === (_this$_searchBox = this._searchBox) || void 0 === _this$_searchBox ? void 0 : _this$_searchBox.option("valueChangeEvent", value);
break;
case "onScroll":
this._initScrollAction();
break;
case "pageLoadMode":
this._setListOption("pageLoadMode", this.option("pageLoadMode"));
break;
case "cleanSearchOnOpening":
case "_scrollToSelectedItemEnabled":
break;
case "dropDownOptions":
switch (fullName) {
case "dropDownOptions.width":
case "dropDownOptions.height":
this._popupOptionChanged({
name: name,
fullName: fullName,
value: "auto" === value ? this.initialOption("dropDownOptions")[(0, _utils.getFieldName)(fullName)] : value
});
this._options.cache("dropDownOptions", this.option("dropDownOptions"));
break;
default:
this.callBase(...arguments)
}
break;
case "dropDownCentered":
if (this.option("_scrollToSelectedItemEnabled")) {
this.option("dropDownOptions.position", void 0);
this._renderPopup()
}
break;
default:
this.callBase(...arguments)
}
},
focus: function() {
this.option("opened") ? this._setFocusPolicy() : _events_engine.default.trigger(this._focusTarget(), "focus")
},
field: function() {
return this._$field
}
});
(0, _component_registrator.default)("dxLookup", Lookup);
var _default = Lookup;
exports.default = _default;
module.exports = exports.default;
module.exports.default = exports.default;