Skip to content

Commit 9d3d030

Browse files
Reattachment of the splash page event listeners (#22558) (#22560)
1 parent 23b7dfe commit 9d3d030

File tree

2 files changed

+38
-22
lines changed

2 files changed

+38
-22
lines changed

packages/react-devtools-core/src/standalone.js

+10
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,13 @@ import type {InspectedElement} from 'react-devtools-shared/src/devtools/views/Co
4242
installHook(window);
4343

4444
export type StatusListener = (message: string) => void;
45+
export type OnDisconnectedCallback = () => void;
4546

4647
let node: HTMLElement = ((null: any): HTMLElement);
4748
let nodeWaitingToConnectHTML: string = '';
4849
let projectRoots: Array<string> = [];
4950
let statusListener: StatusListener = (message: string) => {};
51+
let disconnectedCallback: OnDisconnectedCallback = () => {};
5052

5153
// TODO (Webpack 5) Hopefully we can remove this prop after the Webpack 5 migration.
5254
function hookNamesModuleLoaderFunction() {
@@ -73,6 +75,11 @@ function setStatusListener(value: StatusListener) {
7375
return DevtoolsUI;
7476
}
7577

78+
function setDisconnectedCallback(value: OnDisconnectedCallback) {
79+
disconnectedCallback = value;
80+
return DevtoolsUI;
81+
}
82+
7683
let bridge: FrontendBridge | null = null;
7784
let store: Store | null = null;
7885
let root = null;
@@ -153,6 +160,8 @@ function onDisconnected() {
153160
safeUnmount();
154161

155162
node.innerHTML = nodeWaitingToConnectHTML;
163+
164+
disconnectedCallback();
156165
}
157166

158167
function onError({code, message}) {
@@ -389,6 +398,7 @@ const DevtoolsUI = {
389398
setContentDOMNode,
390399
setProjectRoots,
391400
setStatusListener,
401+
setDisconnectedCallback,
392402
startServer,
393403
openProfiler,
394404
};

packages/react-devtools/app.html

+28-22
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,9 @@
182182
const server = defaultPort ? `${protocol}://${host}` : `${protocol}://${host}:${port}`;
183183
const serverIp = defaultPort ? `${protocol}://${localIp}` : `${protocol}://${localIp}:${port}`;
184184
const $ = document.querySelector.bind(document);
185-
const $promptDiv = $("#box-content-prompt");
186-
const $confirmationDiv = $("#box-content-confirmation");
187-
185+
188186
let timeoutID;
189-
187+
190188
function selectAllAndCopy(event) {
191189
const element = event.target;
192190
if (window.getSelection) {
@@ -196,7 +194,9 @@
196194
selection.removeAllRanges();
197195
selection.addRange(range);
198196
clipboard.writeText(event.target.textContent);
199-
197+
198+
const $promptDiv = $("#box-content-prompt");
199+
const $confirmationDiv = $("#box-content-confirmation");
200200
$promptDiv.classList.add('hidden');
201201
$confirmationDiv.classList.remove('hidden');
202202

@@ -217,24 +217,29 @@
217217
.openProfiler();
218218
}
219219

220-
const link = $('#rn-help-link');
221-
link.addEventListener('click', event => {
222-
event.preventDefault();
223-
require('electron').shell.openExternal(link.href);
224-
});
225-
226-
const $localhost = $("#localhost");
227-
$localhost.innerText = `<script src="${server}"></` + 'script>';
228-
$localhost.addEventListener('click', selectAllAndCopy);
229-
$localhost.addEventListener('focus', selectAllAndCopy);
230-
231-
const $byIp = $("#byip");
232-
$byIp.innerText = `<script src="${serverIp}"></` + 'script>';
233-
$byIp.addEventListener('click', selectAllAndCopy);
234-
$byIp.addEventListener('focus', selectAllAndCopy);
220+
function attachListeners() {
221+
const link = $('#rn-help-link');
222+
link.addEventListener('click', event => {
223+
event.preventDefault();
224+
require('electron').shell.openExternal(link.href);
225+
});
226+
227+
const $localhost = $("#localhost");
228+
$localhost.innerText = `<script src="${server}"></` + 'script>';
229+
$localhost.addEventListener('click', selectAllAndCopy);
230+
$localhost.addEventListener('focus', selectAllAndCopy);
231+
232+
const $byIp = $("#byip");
233+
$byIp.innerText = `<script src="${serverIp}"></` + 'script>';
234+
$byIp.addEventListener('click', selectAllAndCopy);
235+
$byIp.addEventListener('focus', selectAllAndCopy);
236+
237+
const $profiler = $("#profiler");
238+
$profiler.addEventListener('click', openProfiler);
239+
};
235240

236-
const $profiler = $("#profiler");
237-
$profiler.addEventListener('click', openProfiler);
241+
// Initially attach the listeners
242+
attachListeners();
238243

239244
let devtools;
240245
try {
@@ -248,6 +253,7 @@
248253
window.devtools = devtools;
249254
window.server = devtools
250255
.setContentDOMNode(document.getElementById("container"))
256+
.setDisconnectedCallback(attachListeners)
251257
.setStatusListener(function(status) {
252258
const element = document.getElementById("loading-status");
253259
if (element) {

0 commit comments

Comments
 (0)