Skip to content

Commit 9be44dc

Browse files
committed
Expose ReactDevToolsViewBase configs and wire up bridge
1 parent 8e5f860 commit 9be44dc

4 files changed

Lines changed: 69 additions & 24 deletions

File tree

front_end/panels/livemate/BUILD.gn

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@ generate_css("css_files") {
1515
devtools_module("livemate") {
1616
sources = [ "LivematePanel.ts" ]
1717

18-
deps = [ "../../ui/legacy:bundle" ]
18+
deps = [
19+
"../../ui/legacy:bundle",
20+
"../react_devtools:bundle",
21+
]
1922
}
2023

2124
devtools_entrypoint("bundle") {
2225
entrypoint = "livemate.ts"
2326

2427
deps = [
2528
":css_files",
29+
"../react_devtools:bundle",
2630
":livemate",
2731
]
2832

@@ -39,6 +43,7 @@ devtools_entrypoint("meta") {
3943

4044
deps = [
4145
":bundle",
46+
4247
"../../core/i18n:bundle",
4348
"../../ui/legacy:bundle",
4449
]

front_end/panels/livemate/LivematePanel.ts

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,71 @@
55

66
import * as UI from '../../ui/legacy/legacy.js';
77
import livematePanelStyles from './livematePanel.css.js';
8+
import * as SDK from '../../core/sdk/sdk.js';
9+
import { ReactDevToolsViewBase } from '../react_devtools/ReactDevToolsViewBase.js';
10+
import * as i18n from '../../core/i18n/i18n.js';
811

912
let livematePanelInstance: LivematePanel;
1013

11-
export class LivematePanel extends UI.Widget.VBox {
14+
const UIStrings = {
15+
/**
16+
*@description Title of the React DevTools view
17+
*/
18+
title: '⚛️ Livemate',
19+
} as const;
20+
const str_ = i18n.i18n.registerUIStrings('panels/livemate/LivematePanel.ts', UIStrings);
21+
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
22+
23+
export class LivematePanel extends ReactDevToolsViewBase {
1224
static instance(): LivematePanel {
1325
if (!livematePanelInstance) {
1426
livematePanelInstance = new LivematePanel();
1527
}
1628
return livematePanelInstance;
1729
}
1830

19-
private constructor() {
20-
super(true, true);
21-
this.registerRequiredCSS(livematePanelStyles);
22-
this.contentElement.classList.add('livemate-panel');
31+
constructor() {
32+
super('components', i18nString(UIStrings.title));
2333
}
2434

25-
override wasShown(): void {
26-
super.wasShown();
27-
this.renderContent();
28-
}
35+
override renderDevToolsView(): void {
36+
this.clearView();
37+
38+
const model = this.model;
39+
if (model === null) {
40+
throw new Error('Attempted to render React DevTools panel, but the model was null');
41+
}
42+
43+
const bridge = model.getBridgeOrThrow();
44+
45+
const button = document.createElement('button');
46+
button.textContent = 'Start Inspecting Host';
47+
48+
bridge.addListener('selectElement', (element: any) => {console.log(element)});
2949

30-
private renderContent(): void {
31-
this.contentElement.removeChildren();
50+
let inspecting = false;
3251

33-
const header = this.contentElement.createChild('div', 'livemate-header');
34-
header.textContent = 'Livemate Panel';
52+
button.onclick = () => {
53+
if (inspecting) {
54+
(bridge as any).send('stopInspectingHost');
55+
button.textContent= 'Start Inspecting Host';
56+
inspecting = false;
57+
} else {
58+
(bridge as any).send('startInspectingHost', false);
59+
button.textContent= 'Stop Inspecting Host';
60+
inspecting = true;
61+
}
62+
}
63+
64+
this.contentElement.appendChild(button);
65+
66+
67+
68+
// bridge.send('stopInspectingHost');
3569
}
70+
71+
// this.contentElement.removeChildren();
72+
73+
// const header = this.contentElement.createChild('div', 'livemate-header');
74+
// header.textContent = 'Livemate Panel';
3675
}

front_end/panels/react_devtools/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ devtools_entrypoint("bundle") {
3838
visibility = [
3939
":*",
4040
"../../entrypoints/*",
41+
"../livemate/*",
4142
]
4243

4344
visibility += devtools_panels_visibility

front_end/panels/react_devtools/ReactDevToolsViewBase.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ function viewElementSourceFunction(source: ReactDevToolsTypes.Source, symbolicat
7575
export class ReactDevToolsViewBase extends UI.View.SimpleView implements
7676
SDK.TargetManager.SDKModelObserver<ReactDevToolsModel> {
7777
readonly #tab: string;
78-
#model: ReactDevToolsModel | null = null;
78+
model: ReactDevToolsModel | null = null;
7979

8080
constructor(
8181
tab: 'components' | 'profiler',
@@ -92,7 +92,7 @@ export class ReactDevToolsViewBase extends UI.View.SimpleView implements
9292
}
9393

9494
modelAdded(model: ReactDevToolsModel): void {
95-
this.#model = model;
95+
this.model = model;
9696

9797
model.addEventListener(
9898
ReactDevToolsModelEvents.INITIALIZATION_COMPLETED,
@@ -113,7 +113,7 @@ export class ReactDevToolsViewBase extends UI.View.SimpleView implements
113113
if (model.isInitialized()) {
114114
// Already initialized from another rendered React DevTools panel - render
115115
// from initialized state
116-
this.#renderDevToolsView();
116+
this.renderDevToolsView();
117117
} else {
118118
// Once initialized, it will emit InitializationCompleted event
119119
model.ensureInitialized();
@@ -139,7 +139,7 @@ export class ReactDevToolsViewBase extends UI.View.SimpleView implements
139139
}
140140

141141
#handleInitializationCompleted(): void {
142-
this.#renderDevToolsView();
142+
this.renderDevToolsView();
143143
}
144144

145145
#handleInitializationFailed({data: errorMessage}: ReactDevToolsInitializationFailedEvent): void {
@@ -150,10 +150,10 @@ export class ReactDevToolsViewBase extends UI.View.SimpleView implements
150150
this.#renderLoader();
151151
}
152152

153-
#renderDevToolsView(): void {
154-
this.#clearView();
153+
renderDevToolsView(): void {
154+
this.clearView();
155155

156-
const model = this.#model;
156+
const model = this.model;
157157
if (model === null) {
158158
throw new Error('Attempted to render React DevTools panel, but the model was null');
159159
}
@@ -171,7 +171,7 @@ export class ReactDevToolsViewBase extends UI.View.SimpleView implements
171171
}
172172

173173
#renderLoader(): void {
174-
this.#clearView();
174+
this.clearView();
175175

176176
const loaderContainer = document.createElement('div');
177177
loaderContainer.setAttribute('style', 'display: flex; flex: 1; justify-content: center; align-items: center');
@@ -184,7 +184,7 @@ export class ReactDevToolsViewBase extends UI.View.SimpleView implements
184184
}
185185

186186
#renderErrorView(errorMessage: string): void {
187-
this.#clearView();
187+
this.clearView();
188188

189189
const errorContainer = document.createElement('div');
190190
errorContainer.setAttribute('style', 'display: flex; flex: 1; flex-direction: column; justify-content: center; align-items: center');
@@ -210,7 +210,7 @@ export class ReactDevToolsViewBase extends UI.View.SimpleView implements
210210
}
211211
}
212212

213-
#clearView(): void {
213+
clearView(): void {
214214
this.contentElement.removeChildren();
215215
}
216216
}

0 commit comments

Comments
 (0)