-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathReact Reloader.jsx
More file actions
48 lines (37 loc) · 1.15 KB
/
React Reloader.jsx
File metadata and controls
48 lines (37 loc) · 1.15 KB
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
45
46
47
48
import React from 'react';
import { createRoot } from 'react-dom/client';
// Automatically reload this view if certain other fragments change
const WATCHED_FRAGMENTS = [
'#Spatialstrates [data-type="text/javascript+babel"]'
];
async function render() {
if (!window.cachedAppRoot) {
const element = document.createElement('transient');
element.id = 'app-root';
document.body.appendChild(element);
window.cachedAppRoot = createRoot(element);
}
const content = await Fragment.one("#Spatialstrates .spatialstrates").require();
window.cachedAppRoot.render(React.createElement(content.App));
};
let reloadTimer;
const reload = () => {
clearTimeout(reloadTimer);
reloadTimer = setTimeout(render, 1000);
};
WATCHED_FRAGMENTS.forEach(frag => {
const lookedUpFragments = Fragment.find(frag);
lookedUpFragments.forEach((lookedUpFragment) => {
lookedUpFragment.registerOnFragmentChangedHandler(() => {
reload();
});
});
});
if (VarvEngine) {
VarvEngine.registerEventCallback('engineReloaded', () => {
reload();
});
}
window.reloadApp = () => {
reload();
};