Remove mouse-over to select topics

This commit is contained in:
Thomas Nordquist
2019-02-24 11:38:00 +01:00
parent 85c6c4ebbc
commit a1b1c92648
2 changed files with 38 additions and 33 deletions

View File

@@ -29,6 +29,9 @@ const styles = (theme: Theme) => {
cursor: 'pointer', cursor: 'pointer',
marginTop: '-1px', marginTop: '-1px',
}, },
subnodes: {
marginLeft: theme.spacing(1.5),
},
selected: { selected: {
backgroundColor: 'rgba(170, 170, 170, 0.55)', backgroundColor: 'rgba(170, 170, 170, 0.55)',
}, },
@@ -187,23 +190,28 @@ class TreeNode extends React.Component<Props, State> {
const highlightClass = this.state.selected ? this.props.classes.selected : (this.state.mouseOver ? this.props.classes.hover : '') const highlightClass = this.state.selected ? this.props.classes.selected : (this.state.mouseOver ? this.props.classes.hover : '')
return ( return (
<div <div>
key={this.props.treeNode.hash()} <div
className={`${classes.node} ${this.props.className}`} key={this.props.treeNode.hash()}
onClick={this.didClickNode} className={`${classes.node} ${this.props.className}`}
onMouseOver={this.mouseOver} onMouseOver={this.mouseOver}
onMouseOut={this.mouseOut} onMouseOut={this.mouseOut}
ref={this.nodeRef} onClick={this.didClickTitle}
> ref={this.nodeRef}
<TreeNodeTitle >
style={animation} <TreeNodeTitle
collapsed={this.collapsed()} style={animation}
treeNode={this.props.treeNode} toggleCollapsed={this.toggleCollapsed}
name={this.props.name} didSelectNode={this.didSelectTopic}
didSelectNode={this.didSelectTopic} collapsed={this.collapsed()}
className={highlightClass} treeNode={this.props.treeNode}
/> name={this.props.name}
{this.renderNodes()} className={highlightClass}
/>
</div>
<div className={classes.subnodes}>
{this.renderNodes()}
</div>
</div> </div>
) )
} }
@@ -212,6 +220,12 @@ class TreeNode extends React.Component<Props, State> {
this.props.didSelectTopic(this.props.treeNode) this.props.didSelectTopic(this.props.treeNode)
} }
private didClickTitle = (event: React.MouseEvent) => {
event.preventDefault()
this.props.didSelectTopic(this.props.treeNode)
this.toggle()
}
private mouseOver = (event: React.MouseEvent) => { private mouseOver = (event: React.MouseEvent) => {
event.stopPropagation() event.stopPropagation()
this.setHover(true) this.setHover(true)
@@ -226,10 +240,9 @@ class TreeNode extends React.Component<Props, State> {
this.setState({ mouseOver: hover }) this.setState({ mouseOver: hover })
}, 45) }, 45)
private didClickNode = (event: React.MouseEvent) => { private toggleCollapsed = (event: React.MouseEvent) => {
event.stopPropagation() event.stopPropagation()
this.toggle() this.toggle()
this.didSelectTopic()
} }
private renderNodes() { private renderNodes() {

View File

@@ -11,29 +11,19 @@ export interface TreeNodeProps extends React.HTMLAttributes<HTMLElement> {
collapsed?: boolean | undefined collapsed?: boolean | undefined
classes: any classes: any
didSelectNode: any didSelectNode: any
toggleCollapsed: any
} }
class TreeNodeTitle extends React.Component<TreeNodeProps, {}> { class TreeNodeTitle extends React.Component<TreeNodeProps, {}> {
private mouseOver = (event: React.MouseEvent) => {
event.preventDefault()
this.selectTopic()
}
private selectTopic = debounce(() => {
if (this.props.treeNode.message) {
this.props.didSelectNode(this.props.treeNode)
}
}, 5)
public render() { public render() {
const { classes, treeNode, style, className } = this.props const { classes, treeNode, style, className } = this.props
return ( return (
<span <span
className={`${classes.title} ${className}`} className={`${classes.title} ${className}`}
onMouseOver={treeNode.message ? this.mouseOver : undefined}
style={style} style={style}
> >
<span className={classes.expander}>{this.renderExpander()}</span> {this.renderSourceEdge()} {this.renderCollapsedSubnodes()} {this.renderValue()} <span className={classes.expander} onClick={this.props.toggleCollapsed}>{this.renderExpander()}</span>
{this.renderSourceEdge()} {this.renderCollapsedSubnodes()} {this.renderValue()}
</span> </span>
) )
} }
@@ -81,6 +71,8 @@ const styles = (theme: Theme) => ({
}, },
expander: { expander: {
color: theme.palette.type === 'light' ? '#222' : '#eee', color: theme.palette.type === 'light' ? '#222' : '#eee',
cursor: 'pointer' as 'pointer',
paddingRight: theme.spacing(0.25),
}, },
title: { title: {
borderRadius: '4px', borderRadius: '4px',
@@ -88,7 +80,7 @@ const styles = (theme: Theme) => ({
display: 'inline-block' as 'inline-block', display: 'inline-block' as 'inline-block',
whiteSpace: 'nowrap' as 'nowrap', whiteSpace: 'nowrap' as 'nowrap',
padding: '1px 4px 0px 4px', padding: '1px 4px 0px 4px',
height: '16px', height: '14px',
margin: '1px 0px 2px 0px', margin: '1px 0px 2px 0px',
}, },
collapsedSubnodes: { collapsedSubnodes: {