Skip to content

Commit 1adee6f

Browse files
author
Brian Vaughn
committed
Iterating on Replay integration
1 parent 686b635 commit 1adee6f

File tree

1 file changed

+42
-15
lines changed

1 file changed

+42
-15
lines changed

packages/react-devtools-inline/src/frontend.js

+42-15
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,47 @@ import {
1616
MESSAGE_TYPE_SAVED_PREFERENCES,
1717
} from './constants';
1818

19+
import type {Wall} from 'react-devtools-shared/src/types';
1920
import type {FrontendBridge} from 'react-devtools-shared/src/bridge';
2021
import type {Props} from 'react-devtools-shared/src/devtools/views/DevTools';
2122

23+
export function createStore(bridge: FrontendBridge): Store {
24+
return new Store(bridge, {supportsTraceUpdates: true});
25+
}
26+
27+
export function createBridge(
28+
contentWindow: window,
29+
wall?: Wall,
30+
): FrontendBridge {
31+
if (wall == null) {
32+
wall = {
33+
listen(fn) {
34+
const onMessage = ({data}) => {
35+
fn(data);
36+
};
37+
window.addEventListener('message', onMessage);
38+
return () => {
39+
window.removeEventListener('message', onMessage);
40+
};
41+
},
42+
send(event: string, payload: any, transferable?: Array<any>) {
43+
contentWindow.postMessage({event, payload}, '*', transferable);
44+
},
45+
};
46+
}
47+
48+
return (new Bridge(wall): FrontendBridge);
49+
}
50+
2251
export function initialize(
2352
contentWindow: window,
53+
{
54+
bridge,
55+
store,
56+
}: {|
57+
bridge?: FrontendBridge,
58+
store?: Store,
59+
|} = {},
2460
): React.AbstractComponent<Props, mixed> {
2561
const onGetSavedPreferencesMessage = ({data, source}) => {
2662
if (source === 'react-devtools-content-script') {
@@ -54,22 +90,13 @@ export function initialize(
5490

5591
window.addEventListener('message', onGetSavedPreferencesMessage);
5692

57-
const bridge: FrontendBridge = new Bridge({
58-
listen(fn) {
59-
const onMessage = ({data}) => {
60-
fn(data);
61-
};
62-
window.addEventListener('message', onMessage);
63-
return () => {
64-
window.removeEventListener('message', onMessage);
65-
};
66-
},
67-
send(event: string, payload: any, transferable?: Array<any>) {
68-
contentWindow.postMessage({event, payload}, '*', transferable);
69-
},
70-
});
93+
if (bridge == null) {
94+
bridge = createBridge();
95+
}
7196

72-
const store: Store = new Store(bridge, {supportsTraceUpdates: true});
97+
if (store == null) {
98+
store = createStore(bridge);
99+
}
73100

74101
const ForwardRef = forwardRef<Props, mixed>((props, ref) => (
75102
<DevTools ref={ref} bridge={bridge} store={store} {...props} />

0 commit comments

Comments
 (0)