devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
169 lines (167 loc) • 6.01 kB
JavaScript
/**
* DevExtreme (cjs/__internal/ui/collection/m_search_box_mixin.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _message = _interopRequireDefault(require("../../../common/core/localization/message"));
var _renderer = _interopRequireDefault(require("../../../core/renderer"));
var _deferred = require("../../../core/utils/deferred");
var _extend = require("../../../core/utils/extend");
var _stubs = require("../../../core/utils/stubs");
var _ui = _interopRequireDefault(require("../../../ui/widget/ui.errors"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
let EditorClass = (0, _stubs.stubComponent)("TextBox");
var _default = exports.default = {
_getDefaultOptions() {
return (0, _extend.extend)(this.callBase(), {
searchMode: "",
searchExpr: null,
searchValue: "",
searchEnabled: false,
searchEditorOptions: {}
})
},
_initMarkup() {
this._renderSearch();
this.callBase()
},
_renderSearch() {
const $element = this.$element();
const searchEnabled = this.option("searchEnabled");
const searchBoxClassName = this._addWidgetPrefix("search");
const rootElementClassName = this._addWidgetPrefix("with-search");
if (!searchEnabled) {
$element.removeClass(rootElementClassName);
this._removeSearchBox();
return
}
const editorOptions = this._getSearchEditorOptions();
if (this._searchEditor) {
this._searchEditor.option(editorOptions)
} else {
$element.addClass(rootElementClassName);
this._$searchEditorElement = (0, _renderer.default)("<div>").addClass(searchBoxClassName).prependTo($element);
this._searchEditor = this._createComponent(this._$searchEditorElement, EditorClass, editorOptions)
}
},
_removeSearchBox() {
this._$searchEditorElement && this._$searchEditorElement.remove();
delete this._$searchEditorElement;
delete this._searchEditor
},
_getSearchEditorOptions() {
const that = this;
const userEditorOptions = that.option("searchEditorOptions");
const searchText = _message.default.format("Search");
return (0, _extend.extend)({
mode: "search",
placeholder: searchText,
tabIndex: that.option("tabIndex"),
value: that.option("searchValue"),
valueChangeEvent: "input",
inputAttr: {
"aria-label": searchText
},
onValueChanged(e) {
const searchTimeout = that.option("searchTimeout");
that._valueChangeDeferred = (0, _deferred.Deferred)();
clearTimeout(that._valueChangeTimeout);
that._valueChangeDeferred.done(function() {
this.option("searchValue", e.value)
}.bind(that));
if (e.event && "input" === e.event.type && searchTimeout) {
that._valueChangeTimeout = setTimeout((() => {
that._valueChangeDeferred.resolve()
}), searchTimeout)
} else {
that._valueChangeDeferred.resolve()
}
}
}, userEditorOptions)
},
_getAriaTarget() {
if (this.option("searchEnabled")) {
return this._itemContainer(true)
}
return this.callBase()
},
_focusTarget() {
if (this.option("searchEnabled")) {
return this._itemContainer(true)
}
return this.callBase()
},
_updateFocusState(e, isFocused) {
if (this.option("searchEnabled")) {
this._toggleFocusClass(isFocused, this.$element())
}
this.callBase(e, isFocused)
},
getOperationBySearchMode: searchMode => "equals" === searchMode ? "=" : searchMode,
_optionChanged(args) {
switch (args.name) {
case "searchEnabled":
case "searchEditorOptions":
this._invalidate();
break;
case "searchExpr":
case "searchMode":
case "searchValue":
if (!this._dataSource) {
_ui.default.log("W1009");
return
}
if ("searchMode" === args.name) {
this._dataSource.searchOperation(this.getOperationBySearchMode(args.value))
} else {
this._dataSource[args.name](args.value)
}
this._dataSource.load();
break;
case "searchTimeout":
break;
default:
this.callBase(args)
}
},
focus() {
if (!this.option("focusedElement") && this.option("searchEnabled")) {
this._searchEditor && this._searchEditor.focus();
return
}
this.callBase()
},
_cleanAria() {
const $element = this.$element();
this.setAria({
role: null,
activedescendant: null
}, $element);
$element.attr("tabIndex", null)
},
_clean() {
this.callBase();
this._cleanAria()
},
_refresh() {
if (this._valueChangeDeferred) {
this._valueChangeDeferred.resolve()
}
this.callBase()
},
setEditorClass(value) {
EditorClass = value
}
};