Skip to content

Commit

Permalink
fix(scatterplot): add missing types for event handlers
Browse files Browse the repository at this point in the history
  • Loading branch information
plouc committed Apr 29, 2023
1 parent 0477454 commit 0e1a042
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 19 deletions.
10 changes: 5 additions & 5 deletions packages/scatterplot/src/Mesh.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createElement, useCallback } from 'react'
import { createElement, useCallback, MouseEvent } from 'react'
import { useTooltip } from '@nivo/tooltip'
import { Mesh as BaseMesh } from '@nivo/voronoi'
import { ScatterPlotCommonProps, ScatterPlotDatum, ScatterPlotNodeData } from './types'
Expand Down Expand Up @@ -29,31 +29,31 @@ export const Mesh = <RawDatum extends ScatterPlotDatum>({
const { showTooltipFromEvent, hideTooltip } = useTooltip()

const handleMouseEnter = useCallback(
(node: ScatterPlotNodeData<RawDatum>, event) => {
(node: ScatterPlotNodeData<RawDatum>, event: MouseEvent) => {
showTooltipFromEvent(createElement(tooltip, { node }), event)
onMouseEnter && onMouseEnter(node, event)
},
[showTooltipFromEvent, tooltip, onMouseEnter]
)

const handleMouseMove = useCallback(
(node: ScatterPlotNodeData<RawDatum>, event) => {
(node: ScatterPlotNodeData<RawDatum>, event: MouseEvent) => {
showTooltipFromEvent(createElement(tooltip, { node }), event)
onMouseMove && onMouseMove(node, event)
},
[showTooltipFromEvent, tooltip, onMouseMove]
)

const handleMouseLeave = useCallback(
(node: ScatterPlotNodeData<RawDatum>, event) => {
(node: ScatterPlotNodeData<RawDatum>, event: MouseEvent) => {
hideTooltip()
onMouseLeave && onMouseLeave(node, event)
},
[hideTooltip, onMouseLeave]
)

const handleClick = useCallback(
(node: ScatterPlotNodeData<RawDatum>, event) => {
(node: ScatterPlotNodeData<RawDatum>, event: MouseEvent) => {
onClick && onClick(node, event)
},
[onClick]
Expand Down
22 changes: 17 additions & 5 deletions packages/scatterplot/src/Node.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useCallback, MouseEvent } from 'react'
import { animated } from '@react-spring/web'
import { ScatterPlotDatum, ScatterPlotNodeProps } from './types'
import { useCallback } from 'react'

const interpolateRadius = (size: number) => size / 2

Expand All @@ -14,10 +14,22 @@ export const Node = <RawDatum extends ScatterPlotDatum>({
onMouseLeave,
onClick,
}: ScatterPlotNodeProps<RawDatum>) => {
const handleMouseEnter = useCallback(event => onMouseEnter?.(node, event), [node, onMouseEnter])
const handleMouseMove = useCallback(event => onMouseMove?.(node, event), [node, onMouseMove])
const handleMouseLeave = useCallback(event => onMouseLeave?.(node, event), [node, onMouseLeave])
const handleClick = useCallback(event => onClick?.(node, event), [node, onClick])
const handleMouseEnter = useCallback(
(event: MouseEvent<SVGCircleElement>) => onMouseEnter?.(node, event),
[node, onMouseEnter]
)
const handleMouseMove = useCallback(
(event: MouseEvent<SVGCircleElement>) => onMouseMove?.(node, event),
[node, onMouseMove]
)
const handleMouseLeave = useCallback(
(event: MouseEvent<SVGCircleElement>) => onMouseLeave?.(node, event),
[node, onMouseLeave]
)
const handleClick = useCallback(
(event: MouseEvent<SVGCircleElement>) => onClick?.(node, event),
[node, onClick]
)

return (
<animated.circle
Expand Down
13 changes: 8 additions & 5 deletions packages/scatterplot/src/Nodes.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { createElement, useCallback, MouseEvent } from 'react'
import { useTransition } from '@react-spring/web'
import { CssMixBlendMode, useMotionConfig } from '@nivo/core'
import { useTooltip } from '@nivo/tooltip'
Expand All @@ -7,7 +8,6 @@ import {
ScatterPlotNode,
ScatterPlotNodeData,
} from './types'
import { createElement, useCallback } from 'react'

interface NodesProps<RawDatum extends ScatterPlotDatum> {
nodes: ScatterPlotNodeData<RawDatum>[]
Expand Down Expand Up @@ -72,27 +72,30 @@ export const Nodes = <RawDatum extends ScatterPlotDatum>({

const { showTooltipFromEvent, hideTooltip } = useTooltip()
const handleMouseEnter = useCallback(
(node, event) => {
(node: ScatterPlotNodeData<RawDatum>, event: MouseEvent) => {
showTooltipFromEvent(createElement(tooltip, { node }), event)
onMouseEnter?.(node, event)
},
[tooltip, showTooltipFromEvent, onMouseEnter]
)
const handleMouseMove = useCallback(
(node, event) => {
(node: ScatterPlotNodeData<RawDatum>, event: MouseEvent) => {
showTooltipFromEvent(createElement(tooltip, { node }), event)
onMouseMove?.(node, event)
},
[tooltip, showTooltipFromEvent, onMouseMove]
)
const handleMouseLeave = useCallback(
(node, event) => {
(node: ScatterPlotNodeData<RawDatum>, event: MouseEvent) => {
hideTooltip()
onMouseLeave?.(node, event)
},
[hideTooltip, onMouseLeave]
)
const handleClick = useCallback((node, event) => onClick?.(node, event), [onClick])
const handleClick = useCallback(
(node: ScatterPlotNodeData<RawDatum>, event: MouseEvent) => onClick?.(node, event),
[onClick]
)

return (
<>
Expand Down
9 changes: 5 additions & 4 deletions packages/scatterplot/src/ScatterPlotCanvas.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
useMemo,
useRef,
useState,
MouseEvent
} from 'react'
import { Container, useDimensions, useTheme, getRelativeCursor, isCursorInRect } from '@nivo/core'
import { renderAnnotationsToCanvas } from '@nivo/annotations'
Expand Down Expand Up @@ -218,7 +219,7 @@ const InnerScatterPlotCanvas = <RawDatum extends ScatterPlotDatum>({
const { showTooltipFromEvent, hideTooltip } = useTooltip()

const getNodeFromMouseEvent = useCallback(
event => {
(event: MouseEvent<HTMLCanvasElement>) => {
const [x, y] = getRelativeCursor(canvasEl.current!, event)
if (!isCursorInRect(margin.left, margin.top, innerWidth, innerHeight, x, y)) return null

Expand All @@ -229,7 +230,7 @@ const InnerScatterPlotCanvas = <RawDatum extends ScatterPlotDatum>({
)

const handleMouseHover = useCallback(
event => {
(event: MouseEvent<HTMLCanvasElement>) => {
const node = getNodeFromMouseEvent(event)
setCurrentNode(node)

Expand Down Expand Up @@ -262,7 +263,7 @@ const InnerScatterPlotCanvas = <RawDatum extends ScatterPlotDatum>({
)

const handleMouseLeave = useCallback(
event => {
(event: MouseEvent<HTMLCanvasElement>) => {
hideTooltip()
setCurrentNode(null)
currentNode && onMouseLeave && onMouseLeave(currentNode, event)
Expand All @@ -271,7 +272,7 @@ const InnerScatterPlotCanvas = <RawDatum extends ScatterPlotDatum>({
)

const handleClick = useCallback(
event => {
(event: MouseEvent<HTMLCanvasElement>) => {
if (onClick) {
const node = getNodeFromMouseEvent(event)
node && onClick(node, event)
Expand Down

0 comments on commit 0e1a042

Please sign in to comment.