Skip to content

Commit d93eb39

Browse files
committed
refactor: Extract useTimedPrevious
1 parent 74aeeb6 commit d93eb39

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

Diff for: app/charts/shared/use-width.tsx

+7-11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { createContext, ReactNode, useContext } from "react";
22

33
import { useTransitionStore } from "@/stores/transition";
44
import { useResizeObserver } from "@/utils/use-resize-observer";
5+
import { useTimedPrevious } from "@/utils/use-timed-previous";
56

67
export type Margins = {
78
top: number;
@@ -22,19 +23,14 @@ const INITIAL_WIDTH = 1;
2223

2324
export const Observer = ({ children }: { children: ReactNode }) => {
2425
const [ref, width] = useResizeObserver<HTMLDivElement>();
26+
const prev = useTimedPrevious(width, 500);
27+
const isResizing = prev !== width;
2528
const setEnableTransition = useTransitionStore((state) => state.setEnable);
2629

27-
// Disable transitions during resize, so we don't have a "laggy" feeling
28-
React.useEffect(() => {
29-
setEnableTransition(false);
30-
const timeout = setTimeout(() => {
31-
setEnableTransition(true);
32-
}, 500);
33-
34-
return () => {
35-
clearTimeout(timeout);
36-
};
37-
}, [width, setEnableTransition]);
30+
React.useEffect(
31+
() => setEnableTransition(!isResizing),
32+
[isResizing, setEnableTransition]
33+
);
3834

3935
return (
4036
<div ref={ref} style={{ display: "flex", minHeight: "100%" }}>

Diff for: app/utils/use-timed-previous.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import React from "react";
2+
3+
export const useTimedPrevious = <T>(value: T, duration: number): T => {
4+
const [previousValue, setPreviousValue] = React.useState<T>(value);
5+
React.useEffect(() => {
6+
const timeoutId = setTimeout(() => {
7+
setPreviousValue(value);
8+
}, duration);
9+
10+
return () => {
11+
clearTimeout(timeoutId);
12+
};
13+
}, [value, duration]);
14+
15+
return previousValue;
16+
};

0 commit comments

Comments
 (0)