Skip to content

Commit 1aa6c4f

Browse files
authored
Fix remounting root for devpanel (#1302)
* Fix remounting root for devpanel * Create seven-turkeys-battle.md
1 parent 76c6b2d commit 1aa6c4f

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

.changeset/seven-turkeys-battle.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'remotedev-redux-devtools-extension': patch
3+
---
4+
5+
Fix remounting root for devpanel

extension/src/devpanel/index.tsx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { CSSProperties } from 'react';
1+
import React, { CSSProperties, ReactNode } from 'react';
22
import { createRoot, Root } from 'react-dom/client';
33
import { Provider } from 'react-redux';
44
import { Persistor } from 'redux-persist';
@@ -20,18 +20,24 @@ const messageStyle: CSSProperties = {
2020
};
2121

2222
let rendered: boolean | undefined;
23+
let currentRoot: Root | undefined;
2324
let store: Store<StoreStateWithoutSocket, StoreAction> | undefined;
2425
let persistor: Persistor | undefined;
2526
let bgConnection: chrome.runtime.Port;
2627
let naTimeout: NodeJS.Timeout;
2728

2829
const isChrome = navigator.userAgent.indexOf('Firefox') === -1;
2930

30-
function renderDevTools(root: Root) {
31-
root.unmount();
31+
function renderNodeAtRoot(node: ReactNode) {
32+
if (currentRoot) currentRoot.unmount();
33+
currentRoot = createRoot(document.getElementById('root')!);
34+
currentRoot.render(node);
35+
}
36+
37+
function renderDevTools() {
3238
clearTimeout(naTimeout);
3339
({ store, persistor } = configureStore(position, bgConnection));
34-
root.render(
40+
renderNodeAtRoot(
3541
<Provider store={store}>
3642
<PersistGate loading={null} persistor={persistor}>
3743
<App position={position} />
@@ -41,7 +47,7 @@ function renderDevTools(root: Root) {
4147
rendered = true;
4248
}
4349

44-
function renderNA(root: Root) {
50+
function renderNA() {
4551
if (rendered === false) return;
4652
rendered = false;
4753
naTimeout = setTimeout(() => {
@@ -74,31 +80,28 @@ function renderNA(root: Root) {
7480
);
7581
}
7682

77-
root.unmount();
78-
root.render(message);
83+
renderNodeAtRoot(message);
7984
store = undefined;
8085
});
8186
} else {
82-
root.unmount();
83-
root.render(message);
87+
renderNodeAtRoot(message);
8488
store = undefined;
8589
}
8690
}, 3500);
8791
}
8892

8993
function init(id: number) {
90-
const root = createRoot(document.getElementById('root')!);
91-
renderNA(root);
94+
renderNA();
9295
bgConnection = chrome.runtime.connect({
9396
name: id ? id.toString() : undefined,
9497
});
9598
bgConnection.onMessage.addListener(
9699
<S, A extends Action<unknown>>(message: PanelMessage<S, A>) => {
97100
if (message.type === 'NA') {
98-
if (message.id === id) renderNA(root);
101+
if (message.id === id) renderNA();
99102
else store!.dispatch({ type: REMOVE_INSTANCE, id: message.id });
100103
} else {
101-
if (!rendered) renderDevTools(root);
104+
if (!rendered) renderDevTools();
102105
store!.dispatch(message);
103106
}
104107
}

0 commit comments

Comments
 (0)