Skip to content

Commit 13f36fb

Browse files
committed
removed custom behavior and rely on tanstack devtools for open source and uses event client for route info
1 parent 2c362c0 commit 13f36fb

File tree

13 files changed

+213
-333
lines changed

13 files changed

+213
-333
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ import { useStyles } from "../styles/use-styles.js"
22

33
interface EditorButtonProps extends React.HTMLAttributes<HTMLButtonElement> {
44
onClick: () => void
5-
name: string
65
}
76

8-
const EditorButton = ({ name, onClick, ...props }: EditorButtonProps) => {
7+
const EditorButton = ({ onClick, ...props }: EditorButtonProps) => {
98
const { styles } = useStyles()
109
return (
1110
<button onClick={onClick} type="button" className={styles.editorButton} {...props}>
12-
Open in {name}
11+
Open in Editor
1312
</button>
1413
)
1514
}

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

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import type { UIMatch } from "react-router"
22
import { parseCacheControlHeader } from "../../server/parser.js"
3-
import type { OpenSourceData } from "../../vite/editor.js"
43
import { type ServerRouteInfo, defaultServerRouteState } from "../context/rdtReducer.js"
54
import { useServerInfo, useSettingsContext } from "../context/useRDTContext.js"
6-
import { useDevServerConnection } from "../hooks/useDevServerConnection.js"
75
import { cx, useStyles } from "../styles/use-styles.js"
6+
import { openSource } from "../utils/open-source.js"
87
import { isLayoutRoute } from "../utils/routing.js"
98
import { CacheInfo } from "./CacheInfo.js"
109
import { EditorButton } from "./EditorButton.js"
@@ -72,13 +71,12 @@ const ROUTE_COLORS = {
7271
export const RouteSegmentInfo = ({ route, i }: { route: UIMatch<unknown, unknown>; i: number }) => {
7372
const { styles } = useStyles()
7473
const { server, setServerInfo } = useServerInfo()
75-
const { isConnected, sendJsonMessage } = useDevServerConnection()
74+
const isDev = typeof import.meta.hot !== "undefined"
7675
// biome-ignore lint/suspicious/noExplicitAny: we don't know or care about loader data type
7776
const loaderData = getLoaderData(route.loaderData ?? (route.data as any))
7877
const serverInfo = server?.routes?.[route.id]
7978
const isRoot = route.id === "root"
8079
const { setSettings, settings } = useSettingsContext()
81-
const editorName = settings.editorName
8280
const cacheControl = serverInfo?.lastLoader.responseHeaders
8381
? parseCacheControlHeader(new Headers(serverInfo?.lastLoader.responseHeaders))
8482
: undefined
@@ -132,15 +130,11 @@ export const RouteSegmentInfo = ({ route, i }: { route: UIMatch<unknown, unknown
132130
/>
133131
)}
134132
<div className={styles.routeSegmentInfo.actionButtons}>
135-
{isConnected && import.meta.env.DEV && (
133+
{isDev && import.meta.env.DEV && entryRoute?.module && (
136134
<EditorButton
137-
name={editorName}
138135
data-testid={`${route.id}-open-source`}
139136
onClick={() => {
140-
sendJsonMessage({
141-
type: "open-source",
142-
data: { routeID: route.id },
143-
} satisfies OpenSourceData)
137+
openSource(`${entryRoute.module}`)
144138
}}
145139
/>
146140
)}

packages/react-router-devtools/src/client/hooks/useDevServerConnection.ts

Lines changed: 0 additions & 86 deletions
This file was deleted.

packages/react-router-devtools/src/client/hooks/useOnWindowResize.ts

Lines changed: 0 additions & 28 deletions
This file was deleted.

packages/react-router-devtools/src/client/hooks/useOpenElementSource.ts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1+
import { openSource } from "../utils/open-source.js"
12
import { useAttachDocumentListener } from "./useAttachListener.js"
2-
import { useDevServerConnection } from "./useDevServerConnection.js"
33

44
const useOpenElementSource = () => {
5-
const { sendJsonMessage } = useDevServerConnection()
6-
75
// biome-ignore lint/suspicious/noExplicitAny: this should be fixed
86
useAttachDocumentListener("contextmenu", (e: any) => {
97
if (!e.shiftKey || !e) {
@@ -17,10 +15,7 @@ const useOpenElementSource = () => {
1715

1816
if (rdtSource) {
1917
const [source, line, column] = rdtSource.split(":")
20-
return sendJsonMessage({
21-
type: "open-source",
22-
data: { source, line, column },
23-
})
18+
return openSource(source, line, column)
2419
}
2520
for (const key in e.target) {
2621
if (key.startsWith("__reactFiber")) {
@@ -30,12 +25,10 @@ const useOpenElementSource = () => {
3025
const originalSource = fiberNode?._debugSource
3126
const source = fiberNode?._debugOwner?._debugSource ?? fiberNode?._debugSource
3227
const line = source?.fileName?.startsWith("/") ? originalSource?.lineNumber : source?.lineNumber
28+
3329
const fileName = source?.fileName?.startsWith("/") ? originalSource?.fileName : source?.fileName
3430
if (fileName && line) {
35-
return sendJsonMessage({
36-
type: "open-source",
37-
data: { source: fileName, line, column: 0 },
38-
})
31+
return openSource(fileName, line)
3932
}
4033
}
4134
}

packages/react-router-devtools/src/client/tabs/ErrorsTab.test.tsx

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import * as Test from "@testing-library/react"
22
import * as testSuite from "../context/useRDTContext"
33

4-
import * as devHook from "../hooks/useDevServerConnection.js"
5-
64
describe("ErrorsTab", () => {
75
it("should show no errors title if there are no errors", async ({ renderDevTools }) => {
86
const { container } = renderDevTools({
@@ -61,23 +59,16 @@ describe("ErrorsTab", () => {
6159
],
6260
setHtmlErrors: vi.fn(),
6361
})
64-
const sendOpenSource = vi.fn()
65-
vi.spyOn(devHook, "useDevServerConnection").mockReturnValue({
66-
sendJsonMessage: sendOpenSource,
67-
connectionStatus: "Open",
68-
isConnected: true,
69-
})
62+
const mockOpenSource = vi.fn()
63+
vi.mock("../utils/open-source", () => ({
64+
openSource: mockOpenSource,
65+
}))
7066
const { container } = renderDevTools({
7167
activeTab: "errors",
7268
})
7369
const parentElement = container.getByText("./src/client/context/useRDTContext.ts")
7470
Test.fireEvent.click(parentElement)
75-
expect(sendOpenSource).toHaveBeenCalledWith({
76-
data: {
77-
source: "./src/client/context/useRDTContext.ts",
78-
},
79-
type: "open-source",
80-
})
71+
expect(mockOpenSource).toHaveBeenCalledWith("./src/client/context/useRDTContext.ts")
8172
})
8273

8374
it("should send the open source request when clicked on the child element text", async ({ renderDevTools }) => {
@@ -96,23 +87,16 @@ describe("ErrorsTab", () => {
9687
],
9788
setHtmlErrors: vi.fn(),
9889
})
99-
const sendOpenSource = vi.fn()
100-
vi.spyOn(devHook, "useDevServerConnection").mockReturnValue({
101-
sendJsonMessage: sendOpenSource,
102-
connectionStatus: "Open",
103-
isConnected: true,
104-
})
90+
const mockOpenSource = vi.fn()
91+
vi.mock("../utils/open-source", () => ({
92+
openSource: mockOpenSource,
93+
}))
10594
const { container } = renderDevTools({
10695
activeTab: "errors",
10796
})
10897
const childEl = container.getByText("./src/client/tabs/ErrorsTab.test.tsx")
10998
Test.fireEvent.click(childEl)
110-
expect(sendOpenSource).toHaveBeenCalledWith({
111-
data: {
112-
source: "./src/client/tabs/ErrorsTab.test.tsx",
113-
},
114-
type: "open-source",
115-
})
99+
expect(mockOpenSource).toHaveBeenCalledWith("./src/client/tabs/ErrorsTab.test.tsx")
116100
})
117101

118102
it("should show a hydration mismatch error if the server has a mismatch", async ({ renderDevTools }) => {

packages/react-router-devtools/src/client/tabs/ErrorsTab.tsx

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { useEffect, useState } from "react"
33
import ReactDiffViewer, { DiffMethod } from "react-diff-viewer-continued"
44
import { Icon } from "../components/icon/Icon.js"
55
import { useHtmlErrors } from "../context/useRDTContext.js"
6-
import { useDevServerConnection } from "../hooks/useDevServerConnection.js"
76
import { useStyles } from "../styles/use-styles.js"
7+
import { openSource } from "../utils/open-source.js"
88
// @ts-expect-error
99
const DiffViewer: typeof ReactDiffViewer.default = ReactDiffViewer.default
1010
? // @ts-expect-error
@@ -16,7 +16,6 @@ const DiffViewer: typeof ReactDiffViewer.default = ReactDiffViewer.default
1616
const ErrorsTab = () => {
1717
const { styles } = useStyles()
1818
const { htmlErrors } = useHtmlErrors()
19-
const { sendJsonMessage } = useDevServerConnection()
2019
const [SSRHtml, setSSRHtml] = useState("")
2120
const [CSRHtml, setCSRHtml] = useState("")
2221
const [hasHydrationMismatch, setHasHydrationMismatch] = useState(false)
@@ -63,12 +62,7 @@ const ErrorsTab = () => {
6362
The parent element is located inside of the
6463
{/* biome-ignore lint/a11y/useKeyWithClickEvents: <explanation> */}
6564
<div
66-
onClick={() =>
67-
sendJsonMessage({
68-
type: "open-source",
69-
data: { source: error.parent.file },
70-
})
71-
}
65+
onClick={() => error.parent.file && openSource(error.parent.file)}
7266
className={styles.errorsTab.errorFile}
7367
>
7468
{error.parent.file}
@@ -79,12 +73,7 @@ const ErrorsTab = () => {
7973
The child element is located inside of the
8074
{/* biome-ignore lint/a11y/useKeyWithClickEvents: <explanation> */}
8175
<div
82-
onClick={() =>
83-
sendJsonMessage({
84-
type: "open-source",
85-
data: { source: error.child.file },
86-
})
87-
}
76+
onClick={() => error.child.file && openSource(error.child.file)}
8877
className={styles.errorsTab.errorFile}
8978
>
9079
{error.child.file}

packages/react-router-devtools/src/client/tabs/PageTab.test.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,12 @@ describe("PageTab", () => {
126126
it("should attempt to open the route in the editor when the open in editor button is clicked", async ({
127127
renderDevTools,
128128
}) => {
129-
const sendOpenSource = vi.fn()
129+
const mockOpenSource = vi.fn()
130+
vi.mock("../utils/open-source", () => ({
131+
openSource: mockOpenSource,
132+
}))
130133
vi.spyOn(devHook, "useDevServerConnection").mockReturnValue({
131-
sendJsonMessage: sendOpenSource,
134+
sendJsonMessage: vi.fn(),
132135
connectionStatus: "Open",
133136
isConnected: true,
134137
})
@@ -138,12 +141,7 @@ describe("PageTab", () => {
138141

139142
Test.fireEvent.click(openInEditor)
140143

141-
expect(sendOpenSource).toHaveBeenCalledWith({
142-
data: {
143-
routeID: "root",
144-
},
145-
type: "open-source",
146-
})
144+
expect(mockOpenSource).toHaveBeenCalled()
147145
})
148146

149147
it("should show the route cache information if recieved from the server and last loader timestamp is available, also should display it as private if it's private", async ({

0 commit comments

Comments
 (0)