-
Notifications
You must be signed in to change notification settings - Fork 640
/
index.js
44 lines (36 loc) · 1.25 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import ReactDOM from 'react-dom';
import React from 'react';
import {observable} from 'mobx';
import {observer} from 'mobx-react';
import {connectReduxDevtools} from 'mobx-state-tree';
import store from './stores/domain-state';
import Canvas from './components/canvas';
import syncStoreWithBackend from './stores/socket';
const socket = new WebSocket("ws://localhost:3001");
// To support HMR of store, this ref holds the latest loaded store.
const storeInstance = observable.box(null);
prepareStore(store)
const App = observer(() => <Canvas store={storeInstance.get()} />)
ReactDOM.render(
<App />,
document.getElementById('root')
);
function prepareStore(newStore) {
storeInstance.set(newStore)
connectReduxDevtools(require("remotedev"), newStore)
syncStoreWithBackend(socket, newStore)
}
/**
Replace the storeInstance if a new domain-state is available
*/
if (module.hot) {
// accept update of dependency
module.hot.accept("./stores/domain-state", function() {
// obtain new store
prepareStore(require("./stores/domain-state").default)
});
module.hot.accept("./stores/socket", function() {
// new socket sync implementation
require("./stores/socket").default(socket, storeInstance.get())
});
}