devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
100 lines (81 loc) • 3.17 kB
JavaScript
"use strict";
var registerComponent = require("../../core/component_registrator"),
searchBoxMixin = require("../widget/ui.search_box_mixin"),
extend = require("../../core/utils/extend").extend,
TreeViewBase = require("./ui.tree_view.base");
var NODE_CONTAINER_CLASS = "dx-treeview-node-container";
var TreeViewSearch = TreeViewBase.inherit(searchBoxMixin).inherit({
_addWidgetPrefix: function _addWidgetPrefix(className) {
return "dx-treeview-" + className;
},
_optionChanged: function _optionChanged(args) {
var name = args.name,
value = args.value,
previousValue = args.previousValue;
switch (name) {
case "searchValue":
var isDeleting = !value.length || value < previousValue;
if (isDeleting && this.option("showCheckBoxesMode") !== "none" && this._isRecursiveSelection()) {
this._removeSelection();
}
this._initDataAdapter();
this._updateSearch();
this._repaintContainer();
break;
case "searchExpr":
this._initDataAdapter();
this.repaint();
break;
case "searchMode":
this.option("expandNodesRecursive") ? this._updateDataAdapter() : this._initDataAdapter();
this.repaint();
break;
default:
this.callBase(args);
}
},
_updateDataAdapter: function _updateDataAdapter() {
this._setOptionSilent("expandNodesRecursive", false);
this._initDataAdapter();
this._setOptionSilent("expandNodesRecursive", true);
},
_getDataAdapterOptions: function _getDataAdapterOptions() {
return extend(this.callBase(), {
searchValue: this.option("searchValue"),
searchMode: this.option("searchMode") || "contains",
searchExpr: this.option("searchExpr")
});
},
_updateSearch: function _updateSearch() {
if (this._searchEditor) {
var editorOptions = this._getSearchEditorOptions();
this._searchEditor.option(editorOptions);
}
},
_repaintContainer: function _repaintContainer() {
var $container = this.$element().find("." + NODE_CONTAINER_CLASS).first(),
rootNodes;
if ($container.length) {
$container.empty();
rootNodes = this._dataAdapter.getRootNodes();
this._renderEmptyMessage(rootNodes);
this._renderItems($container, rootNodes);
this._fireContentReadyAction();
}
},
_focusTarget: function _focusTarget() {
if (this.option("searchEnabled")) {
return this._scrollableContainer.$element();
}
return this.callBase();
},
_addWidgetClass: function _addWidgetClass() {
this.$element().addClass(this._widgetClass());
},
_clean: function _clean() {
this.callBase();
this._removeSearchBox();
}
});
registerComponent("dxTreeView", TreeViewSearch);
module.exports = TreeViewSearch;