Skip to content

Commit 0397dfe

Browse files
committed
Support for iframes from devpanel
Related to #209.
1 parent ddea18b commit 0397dfe

File tree

7 files changed

+57
-55
lines changed

7 files changed

+57
-55
lines changed

src/app/middlewares/api.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -142,26 +142,35 @@ function onConnect(port) {
142142
};
143143
port.onMessage.addListener(listener);
144144
port.onDisconnect.addListener(disconnect);
145+
} else if (port.name === 'monitor') {
146+
id = getId(port.sender);
147+
connections.monitor[id] = port;
148+
monitorInstances(true);
149+
monitors++;
150+
disconnect = () => {
151+
monitors--;
152+
connections.monitor[id].onDisconnect.removeListener(disconnect);
153+
delete connections.monitor[id];
154+
if (!monitors) monitorInstances(false);
155+
};
156+
port.onDisconnect.addListener(disconnect);
145157
} else {
146-
let type;
147-
if (port.name === 'monitor') {
148-
id = getId(port.sender);
149-
type = 'monitor';
150-
} else {
151-
id = port.name;
152-
type = 'panel';
153-
}
154-
connections[type][id] = port;
155-
monitorInstances(true, type === 'panel' && id);
158+
id = port.name;
159+
connections.panel[id] = port;
160+
monitorInstances(true, id);
156161
monitors++;
162+
listener = msg => {
163+
window.store.dispatch(msg);
164+
};
157165
disconnect = () => {
158166
monitors--;
159-
connections[type][id].onDisconnect.removeListener(disconnect);
160-
delete connections[type][id];
161-
if (!monitors) {
162-
monitorInstances(false);
163-
}
167+
const p = connections.panel[id];
168+
p.onMessage.removeListener(listener);
169+
p.onDisconnect.removeListener(disconnect);
170+
delete connections.panel[id];
171+
if (!monitors) monitorInstances(false);
164172
};
173+
port.onMessage.addListener(listener);
165174
port.onDisconnect.addListener(disconnect);
166175
}
167176
}

src/app/middlewares/panelDispatcher.js

Lines changed: 0 additions & 35 deletions
This file was deleted.

src/app/middlewares/panelSync.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { LIFTED_ACTION, SELECT_INSTANCE } from 'remotedev-app/lib/constants/actionTypes';
2+
import { getActiveInstance } from 'remotedev-app/lib/reducers/instances';
3+
4+
function panelDispatcher(bgConnection) {
5+
let autoselected = false;
6+
const tabId = chrome.devtools.inspectedWindow.tabId;
7+
8+
return store => next => action => {
9+
const result = next(action);
10+
if (!autoselected) {
11+
autoselected = true;
12+
const connections = store.getState()
13+
.instances.connections[tabId];
14+
if (connections && connections.length === 1) {
15+
next({ type: SELECT_INSTANCE, selected: connections[0] });
16+
}
17+
}
18+
if (action.type === LIFTED_ACTION) {
19+
const instances = store.getState().instances;
20+
const instanceId = getActiveInstance(instances);
21+
bgConnection.postMessage({ ...action, instanceId, id: tabId });
22+
}
23+
return result;
24+
};
25+
}
26+
27+
export default panelDispatcher;
File renamed without changes.

src/app/stores/panelStore.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { createStore, applyMiddleware } from 'redux';
22
import persist from 'remotedev-app/lib/middlewares/persist';
3-
import panelDispatcher from '../middlewares/panelDispatcher';
3+
import panelDispatcher from '../middlewares/panelSync';
44
import rootReducer from '../reducers/panel';
55

6-
export default function configureStore(position, preloadedState) {
7-
return createStore(rootReducer, preloadedState, applyMiddleware(persist(position), panelDispatcher));
6+
export default function configureStore(position, bgConnection, preloadedState) {
7+
const enhancer = applyMiddleware(persist(position), panelDispatcher(bgConnection));
8+
return createStore(rootReducer, preloadedState, enhancer);
89
}

src/app/stores/windowStore.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createStore, compose, applyMiddleware } from 'redux';
22
import persist from 'remotedev-app/lib/middlewares/persist';
3-
import syncStores from '../middlewares/syncStores';
3+
import syncStores from '../middlewares/windowSync';
44
import popupSelector from '../middlewares/popupSelector';
55
import rootReducer from '../reducers/window';
66

src/browser/extension/devpanel/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ function renderDevTools() {
1717
const node = document.getElementById('root');
1818
unmountComponentAtNode(node);
1919
clearTimeout(naTimeout);
20-
store = configureStore(position, preloadedState);
20+
store = configureStore(position, bgConnection, preloadedState);
2121
render(
2222
<Provider store={store}>
2323
<App position={position} />

0 commit comments

Comments
 (0)