From 2a5ecb1015a407522e531571a9f5f08e2816f731 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Sun, 6 Oct 2019 11:32:06 +0200 Subject: [PATCH] Performance Improvements / Refactorings of TreeView --- .../src/Visualizers/TreeVisualizer/Views.tsx | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/extension/ui/src/Visualizers/TreeVisualizer/Views.tsx b/extension/ui/src/Visualizers/TreeVisualizer/Views.tsx index fa507e1..697413a 100644 --- a/extension/ui/src/Visualizers/TreeVisualizer/Views.tsx +++ b/extension/ui/src/Visualizers/TreeVisualizer/Views.tsx @@ -61,6 +61,9 @@ export class TreeViewModel { @observable selected: TreeNodeViewModel | undefined = undefined; @action public select(current: TreeNodeViewModel | undefined) { + if (this.selected === current) { + return; + } if (this.selected) { this.selected.isSelected = false; } @@ -83,7 +86,9 @@ export class TreeViewModel { | TreeNodeViewModel | undefined = undefined; - @action public hover(current: TreeNodeViewModel | undefined) { + @action public handleHoverEvent( + current: TreeNodeViewModel | undefined + ) { if (this.selectOnHoverEnabled) { if (current) { this.select(current); @@ -93,7 +98,7 @@ export class TreeViewModel { } } - selectOnHover(enable: boolean) { + setSelectOnHover(enable: boolean) { if (this.selectOnHoverEnabled === enable) { return; } @@ -295,7 +300,7 @@ export class TreeView extends React.Component<{ model: TreeViewModel }> { // alt e.preventDefault(); e.stopPropagation(); - model.selectOnHover(true); + model.setSelectOnHover(true); } }} onKeyUp={e => { @@ -303,7 +308,7 @@ export class TreeView extends React.Component<{ model: TreeViewModel }> { // alt e.preventDefault(); e.stopPropagation(); - model.selectOnHover(false); + model.setSelectOnHover(false); } }} > @@ -423,8 +428,8 @@ export class TreeNodeView extends React.Component<{ this.props.model.treeViewModel.toggleSelect(this.props.model); } - private mouseEnterOrLeaveHandler(enter: boolean) { - this.props.model.treeViewModel.hover( + private handleMouseEnterOrLeave(enter: boolean) { + this.props.model.treeViewModel.handleHoverEvent( enter ? this.props.model : undefined ); } @@ -454,7 +459,7 @@ export class TreeNodeView extends React.Component<{ public render(): JSX.Element { const model = this.props.model; const collapsed = model.expanded; - + console.log("render"); return (
{ - this.mouseEnterOrLeaveHandler(true); - e.stopPropagation(); - }} - onMouseOut={e => { - this.mouseEnterOrLeaveHandler(false); - e.stopPropagation(); - }} > -
+
{ + this.handleMouseEnterOrLeave(true); + e.stopPropagation(); + }} + onMouseOut={e => { + this.handleMouseEnterOrLeave(false); + e.stopPropagation(); + }} + >
model.toggleExpanded()}