Skip to content

Commit d4a63da

Browse files
committed
add memo for better perf, hide until open
1 parent 78c52bf commit d4a63da

File tree

5 files changed

+23
-11
lines changed

5 files changed

+23
-11
lines changed

packages/react-router-devtools/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@
131131
"@babel/traverse": "^7.28.5",
132132
"@babel/types": "^7.28.5",
133133
"@radix-ui/react-accordion": "^1.2.12",
134+
"@tanstack/devtools-client": "^0.0.5",
134135
"@tanstack/devtools-event-client": "^0.4.0",
135136
"@tanstack/devtools-vite": "^0.4.1",
136137
"@tanstack/react-devtools": "^0.9.1",

packages/react-router-devtools/src/client/components/Tag.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ReactNode } from "react"
1+
import { type ReactNode, memo } from "react"
22
import { cx, useStyles } from "../styles/use-styles.js"
33

44
export const TAG_COLORS = {
@@ -16,7 +16,7 @@ interface TagProps {
1616
size?: "small" | "default"
1717
}
1818

19-
const Tag = ({ color, children, className, size = "default" }: TagProps) => {
19+
const Tag = memo(({ color, children, className, size = "default" }: TagProps) => {
2020
const { styles } = useStyles()
2121
return (
2222
<span
@@ -30,6 +30,6 @@ const Tag = ({ color, children, className, size = "default" }: TagProps) => {
3030
{children}
3131
</span>
3232
)
33-
}
33+
})
3434

3535
export { Tag }

packages/react-router-devtools/src/client/components/icon/Icon.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { SVGProps } from "react"
1+
import { type SVGProps, memo } from "react"
22
import { cx } from "../../styles/use-styles.js"
33
import { useStyles } from "../../styles/use-styles.js"
44
import type { IconName } from "./icons/types.js"
@@ -30,7 +30,7 @@ const strokeIcon: Partial<IconName>[] = []
3030
* Icon component wrapper for SVG icons.
3131
* @returns SVG icon as a react component
3232
*/
33-
export const Icon = ({ name, title, testId, className, size = "sm", ...props }: IconProps) => {
33+
export const Icon = memo(({ name, title, testId, className, size = "sm", ...props }: IconProps) => {
3434
const { styles } = useStyles()
3535
const iconSize = IconSize[size]
3636
const isEmptyFill = emptyFill.includes(name)
@@ -316,4 +316,4 @@ export const Icon = ({ name, title, testId, className, size = "sm", ...props }:
316316
<use href={`#${name}`} />
317317
</svg>
318318
)
319-
}
319+
})

packages/react-router-devtools/src/client/embedded-dev-tools.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import { Tabs } from "./layout/Tabs.js"
1010
import type { ReactRouterDevtoolsProps } from "./react-router-dev-tools.js"
1111
// Import to ensure global reset styles are injected
1212
import "./styles/use-styles.js"
13+
import { devtoolsEventClient } from "@tanstack/devtools-client"
1314
import { REACT_ROUTER_DEV_TOOLS } from "./utils/storage.js"
14-
1515
export interface EmbeddedDevToolsProps extends ReactRouterDevtoolsProps {
1616
mainPanelClassName?: string
1717
className?: string
@@ -21,6 +21,12 @@ const Embedded = ({ mainPanelClassName, className }: EmbeddedDevToolsProps) => {
2121
useFindRouteOutlets()
2222
useSetRouteBoundaries()
2323

24+
const [isOpen, setIsOpen] = useState(true)
25+
useEffect(() => {
26+
devtoolsEventClient.on("trigger-toggled", (e) => {
27+
setIsOpen(e.payload.isOpen)
28+
})
29+
}, [])
2430
return (
2531
<div
2632
id={REACT_ROUTER_DEV_TOOLS}
@@ -29,10 +35,12 @@ const Embedded = ({ mainPanelClassName, className }: EmbeddedDevToolsProps) => {
2935
}}
3036
className={clsx("react-router-dev-tools", "h-full flex-row w-full", className)}
3137
>
32-
<MainPanel className={mainPanelClassName} isEmbedded isOpen={true}>
33-
<Tabs />
34-
<ContentPanel />
35-
</MainPanel>
38+
{isOpen ? (
39+
<MainPanel className={mainPanelClassName} isEmbedded isOpen={true}>
40+
<Tabs />
41+
<ContentPanel />
42+
</MainPanel>
43+
) : null}
3644
</div>
3745
)
3846
}

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)