Skip to content

Commit

Permalink
fix(vite): support new render context (#142)
Browse files Browse the repository at this point in the history
  • Loading branch information
manzt committed Jun 18, 2023
1 parent fb1bf21 commit 79098be
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 13 deletions.
5 changes: 5 additions & 0 deletions .changeset/clever-ladybugs-float.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@anywidget/vite": minor
---

fix: Support new user render context
34 changes: 21 additions & 13 deletions packages/vite/index.js
Original file line number Diff line number Diff line change
@@ -1,33 +1,41 @@
/** @type {(src: string) => string} */
let template = (src) => `
let noop = () => {};
import.meta.hot.accept("${src}", (newModule) => {
import.meta.hot.data.render = newModule.render;
refresh();
});
export async function render(view) {
export async function render({ model, el } ) {
if (!import.meta.hot.data.render) {
let m = await import("${src}");
import.meta.hot.data.render = m.render;
import.meta.hot.data.cleanup = noop;
}
import.meta.hot.data.view = view;
import.meta.hot.data.model = model;
import.meta.hot.data.el = el;
refresh();
}
function emptyElement(el) {
while (el.firstChild) {
el.removeChild(el.firstChild);
}
}
async function refresh() {
let data = import.meta.hot.data;
// clear event listeners
data.view.model.off();
let views = await Promise.all(
Object.values(data.view.model.views)
);
for (let view of views) {
// clean up all child elements
while (view.el.firstChild) {
view.el.removeChild(view.el.firstChild);
}
data.render(view);
try {
await data.cleanup();
} catch (e) {
console.warn("[anywidget] error cleaning up previous module.", e);
import.meta.hot.data.cleanup = noop;
}
data.model.off();
emptyElement(data.el);
let cleanup = await data.render({ model: data.model, el: data.el });
import.meta.hot.data.cleanup = cleanup ?? noop;
}
function showErrorOverlay(err) {
Expand Down

0 comments on commit 79098be

Please sign in to comment.