Skip to content

Commit 9338bbf

Browse files
authored
feat(extension): display first component parent in render info (#750)
* feat(extension): display first component parent in render info * feat: show hierarchy only for text nodes * fix: allow string types in parent/child * chore: accept string components
1 parent 80e4d89 commit 9338bbf

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

packages/debug/src/devtools.ts

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { VNode } from "../../preact/src/internal";
12
import { UpdateInfo } from "./internal";
23

34
// Communication layer for Chrome DevTools Extension
@@ -18,11 +19,30 @@ export interface SignalsDevToolsAPI {
1819
sendConfig: (config: any) => void;
1920
sendUpdate: (updateInfo: UpdateInfo[]) => void;
2021
isConnected: () => boolean;
21-
enterComponent: (name: string) => void;
22+
enterComponent: (node: VNode | string) => void;
2223
exitComponent: () => void;
2324
trackSignalOwnership: (signal: any) => void;
2425
}
2526

27+
function getComponentName(vnode: VNode | string): string {
28+
let name;
29+
30+
if (typeof vnode === "string") {
31+
return vnode;
32+
}
33+
34+
if (typeof vnode.type === "string") {
35+
name = vnode.type;
36+
} else {
37+
name = vnode.type.displayName || vnode.type.name || "Unknown";
38+
}
39+
40+
if (name === "ReactiveTextNode" && vnode.__) {
41+
return `${getComponentName(vnode.__)} > ${name}`;
42+
}
43+
return name;
44+
}
45+
2646
class DevToolsCommunicator {
2747
public listeners: Map<string, Set<Function>> = new Map();
2848
public isExtensionConnected = false;
@@ -153,8 +173,8 @@ class DevToolsCommunicator {
153173
};
154174
}
155175

156-
public enterComponent(name: string) {
157-
this.componentName = name;
176+
public enterComponent(node: VNode | string) {
177+
this.componentName = getComponentName(node);
158178
}
159179

160180
public exitComponent() {
@@ -220,8 +240,8 @@ if (typeof window !== "undefined") {
220240
isConnected: () => getDevToolsCommunicator().isConnected(),
221241
trackSignalOwnership: signal =>
222242
getDevToolsCommunicator().trackSignalOwnership(signal),
223-
enterComponent: name => {
224-
getDevToolsCommunicator().enterComponent(name);
243+
enterComponent: node => {
244+
getDevToolsCommunicator().enterComponent(node);
225245
},
226246
exitComponent: () => {
227247
getDevToolsCommunicator().exitComponent();

packages/preact/src/index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,7 @@ hook(OptionsTypes.RENDER, (old, vnode) => {
206206
typeof window !== "undefined" &&
207207
window.__PREACT_SIGNALS_DEVTOOLS__
208208
) {
209-
window.__PREACT_SIGNALS_DEVTOOLS__.enterComponent(
210-
vnode.type.displayName || vnode.type.name || "Unknown"
211-
);
209+
window.__PREACT_SIGNALS_DEVTOOLS__.enterComponent(vnode);
212210
}
213211

214212
// Ignore the Fragment inserted by preact.createElement().

0 commit comments

Comments
 (0)