-
-
Notifications
You must be signed in to change notification settings - Fork 1k
/
interactivity.js
55 lines (51 loc) · 1.21 KB
/
interactivity.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import React from 'react'
import { BasicTooltip } from '@nivo/tooltip'
export const getNodeHandlers = (
node,
{
isInteractive,
onClick,
showTooltip,
hideTooltip,
isZoomable,
zoomToNode,
theme,
tooltipFormat,
tooltip,
}
) => {
if (!isInteractive) return {}
const handleTooltip = e => {
showTooltip(
<BasicTooltip
id={node.id}
value={node.value}
enableChip={true}
color={node.color}
theme={theme}
format={tooltipFormat}
renderContent={
typeof tooltip === 'function' ? tooltip.bind(null, { node, ...node }) : null
}
/>,
e
)
}
let clickHandler = onClick
if (isZoomable) {
clickHandler = event => {
onClick(node, event)
zoomToNode(node.path)
}
} else {
clickHandler = event => {
onClick(node, event)
}
}
return {
onMouseEnter: handleTooltip,
onMouseMove: handleTooltip,
onMouseLeave: hideTooltip,
onClick: clickHandler,
}
}