Skip to content

Commit 42a88e6

Browse files
committed
feat: Use useOverlayRectInteractions in bars and columns overlays
1 parent 3f853e4 commit 42a88e6

2 files changed

Lines changed: 18 additions & 46 deletions

File tree

app/charts/bar/overlay-bars.tsx

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,16 @@
11
import { BarsState } from "@/charts/bar/bars-state";
2+
import { useOverlayRectInteractions } from "@/charts/shared/annotation-utils";
23
import { useChartState } from "@/charts/shared/chart-state";
3-
import { useInteraction } from "@/charts/shared/use-interaction";
4-
import { Observation } from "@/domain/data";
54

65
export const InteractionBars = () => {
7-
const [, dispatch] = useInteraction();
6+
const {
7+
chartData,
8+
bounds: { chartWidth, margins },
9+
getY,
10+
yScaleInteraction,
11+
} = useChartState() as BarsState;
12+
const { onClick, onHover, onHoverOut } = useOverlayRectInteractions();
813

9-
const { chartData, bounds, getY, yScaleInteraction } =
10-
useChartState() as BarsState;
11-
const { margins, chartWidth } = bounds;
12-
13-
const showTooltip = (d: Observation) => {
14-
dispatch({
15-
type: "INTERACTION_UPDATE",
16-
value: {
17-
type: "tooltip",
18-
visible: true,
19-
observation: d,
20-
},
21-
});
22-
};
23-
const hideTooltip = () => {
24-
dispatch({
25-
type: "INTERACTION_HIDE",
26-
});
27-
};
2814
return (
2915
<g transform={`translate(${margins.left} ${margins.top})`}>
3016
{chartData.map((d, i) => (
@@ -34,11 +20,12 @@ export const InteractionBars = () => {
3420
y={yScaleInteraction(getY(d)) as number}
3521
height={yScaleInteraction.bandwidth()}
3622
width={Math.max(0, chartWidth)}
23+
stroke="none"
3724
fill="hotpink"
3825
fillOpacity={0}
39-
stroke="none"
40-
onMouseOut={hideTooltip}
41-
onMouseOver={() => showTooltip(d)}
26+
onMouseOver={() => onHover(d)}
27+
onMouseOut={onHoverOut}
28+
onClick={() => onClick(d)}
4229
/>
4330
))}
4431
</g>

app/charts/column/overlay-columns.tsx

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,20 @@ import { useCallback } from "react";
22

33
import { ColumnsState } from "@/charts/column/columns-state";
44
import { ComboLineColumnState } from "@/charts/combo/combo-line-column-state";
5+
import { useOverlayRectInteractions } from "@/charts/shared/annotation-utils";
56
import { useChartState } from "@/charts/shared/chart-state";
6-
import { useInteraction } from "@/charts/shared/use-interaction";
77
import { Observation } from "@/domain/data";
8-
import { useEvent } from "@/utils/use-event";
98

109
export const InteractionColumns = ({ temporal }: { temporal?: boolean }) => {
11-
const [, dispatch] = useInteraction();
1210
const {
1311
chartData,
14-
bounds: { margins, chartHeight },
12+
bounds: { chartHeight, margins },
1513
getX,
1614
getXAsDate,
1715
formatXDate,
1816
xScaleInteraction,
1917
} = useChartState() as ColumnsState | ComboLineColumnState;
20-
const showTooltip = useEvent((d: Observation) => {
21-
dispatch({
22-
type: "INTERACTION_UPDATE",
23-
value: {
24-
type: "tooltip",
25-
visible: true,
26-
observation: d,
27-
},
28-
});
29-
});
30-
const hideTooltip = useEvent(() => {
31-
dispatch({
32-
type: "INTERACTION_HIDE",
33-
});
34-
});
18+
const { onClick, onHover, onHoverOut } = useOverlayRectInteractions();
3519
const getXValue = useCallback(
3620
(d: Observation) => {
3721
return temporal ? formatXDate(getXAsDate(d)) : getX(d);
@@ -56,8 +40,9 @@ export const InteractionColumns = ({ temporal }: { temporal?: boolean }) => {
5640
fill="hotpink"
5741
fillOpacity={0}
5842
stroke="none"
59-
onMouseOut={hideTooltip}
60-
onMouseOver={() => showTooltip(d)}
43+
onMouseOver={() => onHover(d)}
44+
onMouseOut={onHoverOut}
45+
onClick={() => onClick(d)}
6146
/>
6247
);
6348
})}

0 commit comments

Comments
 (0)