Skip to content

Commit a70ac3d

Browse files
authored
Refactor InteractiveGraphics filter hooks to named params (#96)
1 parent 8ea7a84 commit a70ac3d

File tree

7 files changed

+100
-60
lines changed

7 files changed

+100
-60
lines changed

site/components/InteractiveGraphics/InteractiveGraphics.tsx

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,40 @@
1+
import useResizeObserver from "@react-hook/resize-observer"
2+
import { useCallback, useEffect, useMemo, useState } from "react"
3+
import { SuperGrid } from "react-supergrid"
4+
import { getGraphicsBounds } from "site/utils/getGraphicsBounds"
5+
import { getMaxStep } from "site/utils/getMaxStep"
6+
import { sortRectsByArea } from "site/utils/sortRectsByArea"
17
import {
8+
applyToPoint,
29
compose,
10+
inverse,
311
scale,
412
translate,
5-
inverse,
6-
applyToPoint,
713
} from "transformation-matrix"
8-
import { GraphicsObject } from "../../../lib"
9-
import { useMemo, useState, useEffect, useCallback } from "react"
1014
import useMouseMatrixTransform from "use-mouse-matrix-transform"
15+
import { GraphicsObject } from "../../../lib"
16+
import { DimensionOverlay } from "../DimensionOverlay"
17+
import { Arrow } from "./Arrow"
18+
import { Circle } from "./Circle"
19+
import { ContextMenu } from "./ContextMenu"
1120
import { InteractiveState } from "./InteractiveState"
12-
import { SuperGrid } from "react-supergrid"
13-
import useResizeObserver from "@react-hook/resize-observer"
1421
import { Line } from "./Line"
22+
import { Marker, MarkerPoint } from "./Marker"
1523
import { Point } from "./Point"
24+
import { Polygon } from "./Polygon"
1625
import { Rect } from "./Rect"
17-
import { Circle } from "./Circle"
1826
import { Text } from "./Text"
19-
import { Arrow } from "./Arrow"
20-
import { getGraphicsBounds } from "site/utils/getGraphicsBounds"
21-
import { sortRectsByArea } from "site/utils/sortRectsByArea"
2227
import {
23-
useIsPointOnScreen,
2428
useDoesLineIntersectViewport,
29+
useFilterArrows,
30+
useFilterCircles,
2531
useFilterLines,
2632
useFilterPoints,
33+
useFilterPolygons,
2734
useFilterRects,
28-
useFilterCircles,
2935
useFilterTexts,
30-
useFilterArrows,
31-
useFilterPolygons,
36+
useIsPointOnScreen,
3237
} from "./hooks"
33-
import { DimensionOverlay } from "../DimensionOverlay"
34-
import { getMaxStep } from "site/utils/getMaxStep"
35-
import { ContextMenu } from "./ContextMenu"
36-
import { Marker, MarkerPoint } from "./Marker"
37-
import { Polygon } from "./Polygon"
3838

3939
export type GraphicsObjectClickEvent = {
4040
type: "point" | "line" | "rect" | "circle" | "text" | "arrow" | "polygon"
@@ -315,31 +315,37 @@ export const InteractiveGraphics = ({
315315
return true
316316
}
317317

318-
const filterLines = useFilterLines(
318+
const filterLines = useFilterLines({
319319
isPointOnScreen,
320320
doesLineIntersectViewport,
321321
filterLayerAndStep,
322-
)
322+
})
323323

324-
const filterPoints = useFilterPoints(isPointOnScreen, filterLayerAndStep)
324+
const filterPoints = useFilterPoints({
325+
isPointOnScreen,
326+
filterLayerAndStep,
327+
})
325328

326-
const filterRects = useFilterRects(
329+
const filterRects = useFilterRects({
327330
isPointOnScreen,
328331
doesLineIntersectViewport,
329332
filterLayerAndStep,
330-
)
333+
})
331334

332-
const filterCircles = useFilterCircles(
335+
const filterCircles = useFilterCircles({
333336
isPointOnScreen,
334337
filterLayerAndStep,
335338
realToScreen,
336339
size,
337-
)
338-
const filterTexts = useFilterTexts(isPointOnScreen, filterLayerAndStep)
339-
const filterArrows = useFilterArrows(
340+
})
341+
const filterTexts = useFilterTexts({
342+
isPointOnScreen,
343+
filterLayerAndStep,
344+
})
345+
const filterArrows = useFilterArrows({
340346
isPointOnScreen,
341347
doesLineIntersectViewport,
342-
)
348+
})
343349
const filterPolygons = useFilterPolygons({
344350
isPointOnScreen,
345351
doesLineIntersectViewport,

site/components/InteractiveGraphics/hooks/useFilterArrows.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
1-
import { useMemo } from "react"
2-
import type { Arrow } from "lib/types"
31
import { getArrowGeometry } from "lib/arrowHelpers"
2+
import type { Arrow } from "lib/types"
3+
import { useMemo } from "react"
44

55
type Point = { x: number; y: number }
66

77
type LineCheck = (p1: Point, p2: Point) => boolean
88

99
type PointCheck = (point: Point) => boolean
1010

11-
export const useFilterArrows = (
12-
isPointOnScreen: PointCheck,
13-
doesLineIntersectViewport: LineCheck,
14-
) => {
11+
type UseFilterArrowsParams = {
12+
isPointOnScreen: PointCheck
13+
doesLineIntersectViewport: LineCheck
14+
}
15+
16+
export const useFilterArrows = ({
17+
isPointOnScreen,
18+
doesLineIntersectViewport,
19+
}: UseFilterArrowsParams) => {
1520
return useMemo(() => {
1621
return (arrow: Arrow) => {
1722
const geometry = getArrowGeometry(arrow)

site/components/InteractiveGraphics/hooks/useFilterCircles.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { applyToPoint, type Matrix } from "transformation-matrix"
21
import { useMemo } from "react"
2+
import { type Matrix, applyToPoint } from "transformation-matrix"
33
import { OFFSCREEN_MARGIN } from "./useDoesLineIntersectViewport"
44

55
type Circle = {
@@ -9,12 +9,19 @@ type Circle = {
99
step?: number
1010
}
1111

12-
export const useFilterCircles = (
13-
isPointOnScreen: (point: { x: number; y: number }) => boolean,
14-
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean,
15-
realToScreen: Matrix,
16-
size: { width: number; height: number },
17-
) => {
12+
type UseFilterCirclesParams = {
13+
isPointOnScreen: (point: { x: number; y: number }) => boolean
14+
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean
15+
realToScreen: Matrix
16+
size: { width: number; height: number }
17+
}
18+
19+
export const useFilterCircles = ({
20+
isPointOnScreen,
21+
filterLayerAndStep,
22+
realToScreen,
23+
size,
24+
}: UseFilterCirclesParams) => {
1825
return useMemo(() => {
1926
return (circle: Circle) => {
2027
// First apply layer and step filters

site/components/InteractiveGraphics/hooks/useFilterLines.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,20 @@ type Line = {
77
closed?: boolean
88
}
99

10-
export const useFilterLines = (
11-
isPointOnScreen: (point: { x: number; y: number }) => boolean,
10+
type UseFilterLinesParams = {
11+
isPointOnScreen: (point: { x: number; y: number }) => boolean
1212
doesLineIntersectViewport: (
1313
p1: { x: number; y: number },
1414
p2: { x: number; y: number },
15-
) => boolean,
16-
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean,
17-
) => {
15+
) => boolean
16+
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean
17+
}
18+
19+
export const useFilterLines = ({
20+
isPointOnScreen,
21+
doesLineIntersectViewport,
22+
filterLayerAndStep,
23+
}: UseFilterLinesParams) => {
1824
return useMemo(() => {
1925
return (line: Line) => {
2026
// First apply layer and step filters

site/components/InteractiveGraphics/hooks/useFilterPoints.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@ type Point = {
77
step?: number
88
}
99

10-
export const useFilterPoints = (
11-
isPointOnScreen: (point: { x: number; y: number }) => boolean,
12-
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean,
13-
) => {
10+
type UseFilterPointsParams = {
11+
isPointOnScreen: (point: { x: number; y: number }) => boolean
12+
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean
13+
}
14+
15+
export const useFilterPoints = ({
16+
isPointOnScreen,
17+
filterLayerAndStep,
18+
}: UseFilterPointsParams) => {
1419
return useMemo(() => {
1520
return (point: Point) => {
1621
// First apply layer and step filters

site/components/InteractiveGraphics/hooks/useFilterRects.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,20 @@ type Rect = {
88
step?: number
99
}
1010

11-
export const useFilterRects = (
12-
isPointOnScreen: (point: { x: number; y: number }) => boolean,
11+
type UseFilterRectsParams = {
12+
isPointOnScreen: (point: { x: number; y: number }) => boolean
1313
doesLineIntersectViewport: (
1414
p1: { x: number; y: number },
1515
p2: { x: number; y: number },
16-
) => boolean,
17-
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean,
18-
) => {
16+
) => boolean
17+
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean
18+
}
19+
20+
export const useFilterRects = ({
21+
isPointOnScreen,
22+
doesLineIntersectViewport,
23+
filterLayerAndStep,
24+
}: UseFilterRectsParams) => {
1925
return useMemo(() => {
2026
return (rect: Rect) => {
2127
// First apply layer and step filters

site/components/InteractiveGraphics/hooks/useFilterTexts.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@ interface Text {
77
step?: number
88
}
99

10-
export const useFilterTexts = (
11-
isPointOnScreen: (point: { x: number; y: number }) => boolean,
12-
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean,
13-
) => {
10+
type UseFilterTextsParams = {
11+
isPointOnScreen: (point: { x: number; y: number }) => boolean
12+
filterLayerAndStep: (obj: { layer?: string; step?: number }) => boolean
13+
}
14+
15+
export const useFilterTexts = ({
16+
isPointOnScreen,
17+
filterLayerAndStep,
18+
}: UseFilterTextsParams) => {
1419
return useMemo(() => {
1520
return (text: Text) => {
1621
if (!filterLayerAndStep(text)) return false

0 commit comments

Comments
 (0)