Skip to content

Commit c534f11

Browse files
Correct selection/filter in TreeViewItemExtension
1 parent 75f3169 commit c534f11

File tree

1 file changed

+52
-25
lines changed

1 file changed

+52
-25
lines changed

CS/AspNetCoreCustomItem/wwwroot/js/HierarchicalTreeViewItem.js

Lines changed: 52 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -73,40 +73,67 @@
7373
dataSource.push(row);
7474
});
7575

76-
let container = $element.jquery ? $element[0] : $element;
77-
while (container.firstChild)
78-
container.removeChild(container.firstChild);
79-
80-
let div = document.createElement('div');
81-
let treeView = new dxTreeView(div, {
76+
let treeViewOptions = {
8277
items: dataSource,
8378
dataStructure: "plain",
8479
parentIdExpr: "ParentID",
8580
keyExpr: "ID",
8681
displayExpr: "DisplayField",
8782
selectionMode: "multiple",
88-
selectNodesRecursive: true,
89-
showCheckBoxesMode: "normal",
90-
onSelectionChanged: (e) => {
91-
let selectedNodeKeys = e.component.getSelectedNodeKeys();
92-
let selectedRows = dataSource
93-
.filter(function (row) { return selectedNodeKeys.indexOf(row.ID) !== -1 })
94-
.map(function (row) {
95-
return [row._customData.getUniqueValue('dimensionsBinding')[0]]
96-
});
97-
let viewerApiExtension = this.dashboardControl.findExtension("viewer-api");
98-
if (this.getMasterFilterMode() === 'Multiple') {
99-
if (selectedRows.length)
100-
viewerApiExtension.setMasterFilter(this.model.componentName(), selectedRows);
101-
else
102-
viewerApiExtension.clearMasterFilter(this.model.componentName());
83+
selectNodesRecursive: false,
84+
onItemClick: e => {
85+
if (this.getMasterFilterMode() === 'Multiple' && this.allowMultiselection) {
86+
this.setMasterFilterRecursive(e.node);
87+
}
88+
else {
89+
this.setMasterFilter(e.itemData._customData);
10390
}
91+
},
92+
onContentReady: e => {
93+
this.updateTreeViewSelection();
10494
}
105-
});
106-
treeView.selectAll();
107-
container.appendChild(div);
95+
};
96+
97+
if (!changeExisting) {
98+
let container = $element.jquery ? $element[0] : $element;
99+
while (container.firstChild)
100+
container.removeChild(element.firstChild);
101+
let div = document.createElement('div');
102+
container.appendChild(div);
103+
this.dxTreeViewWidget = new dxTreeView(div, treeViewOptions);
104+
}
105+
else {
106+
this.dxTreeViewWidget.option(treeViewOptions);
107+
}
108108
};
109-
109+
110+
TreeViewViewer.prototype.setSelection = function (values) {
111+
Object.getPrototypeOf(TreeViewViewer.prototype).setSelection.call(this, values);
112+
this.updateTreeViewSelection();
113+
};
114+
115+
TreeViewViewer.prototype.clearSelection = function () {
116+
Object.getPrototypeOf(TreeViewViewer.prototype).clearSelection.call(this);
117+
this.updateTreeViewSelection();
118+
};
119+
120+
TreeViewViewer.prototype.updateTreeViewSelection = function() {
121+
if (this.dxTreeViewWidget) {
122+
this.dxTreeViewWidget.unselectAll();
123+
let nodes = this.dxTreeViewWidget.option('items');
124+
125+
nodes.forEach(item => {
126+
if (this.isSelected(item._customData))
127+
this.dxTreeViewWidget.selectItem(item.ID);
128+
});
129+
}
130+
}
131+
132+
TreeViewViewer.prototype.setMasterFilterRecursive = function(node) {
133+
this.setMasterFilter(node.itemData._customData);
134+
node.children.forEach(x => this.setMasterFilterRecursive(x));
135+
}
136+
110137
function TreeViewItem(dashboardControl) {
111138
dashboardControl.registerIcon(svgIcon);
112139
this.name = HIERARCIAL_TREE_VIEW_EXTENSION_NAME;

0 commit comments

Comments
 (0)