fix page-reload
This commit is contained in:
parent
c1a82b2a9f
commit
820e9b1e46
|
|
@ -0,0 +1,52 @@
|
||||||
|
import { compress } from "lz-string";
|
||||||
|
import { syncronize } from "y-pojo";
|
||||||
|
import * as Y from "yjs";
|
||||||
|
import { MPage } from "../../web/src/utils/types/general";
|
||||||
|
import { WS_MSG_SET_PAGE, WS_MSG_SV_LOCAL } from "../../web/src/utils/types/ws";
|
||||||
|
import { eg } from "../ws/edit/edit-global";
|
||||||
|
import { loadPage } from "../ws/edit/tools/load-page";
|
||||||
|
|
||||||
|
export const _ = {
|
||||||
|
url: "/page-reload/:page_id",
|
||||||
|
async api(page_id: string) {
|
||||||
|
if (eg.edit.page[page_id]) {
|
||||||
|
const rawPage = await loadPage(page_id);
|
||||||
|
|
||||||
|
if (rawPage) {
|
||||||
|
const ydoc = new Y.Doc() as MPage;
|
||||||
|
let root = ydoc.getMap("map");
|
||||||
|
syncronize(root as any, rawPage);
|
||||||
|
const um = new Y.UndoManager(root, { ignoreRemoteMapChanges: true });
|
||||||
|
const broadcast = () => {
|
||||||
|
const sv_local = compress(
|
||||||
|
Y.encodeStateVector(ydoc as any).toString()
|
||||||
|
);
|
||||||
|
const broadcast: WS_MSG_SV_LOCAL = {
|
||||||
|
type: "sv_local",
|
||||||
|
sv_local,
|
||||||
|
mode: "page",
|
||||||
|
id: page_id,
|
||||||
|
};
|
||||||
|
eg.edit.page[page_id].ws.forEach((w) =>
|
||||||
|
w.send(JSON.stringify(broadcast))
|
||||||
|
);
|
||||||
|
};
|
||||||
|
um.on("stack-item-added", broadcast);
|
||||||
|
um.on("stack-item-updated", broadcast);
|
||||||
|
|
||||||
|
eg.edit.page[page_id].doc = ydoc;
|
||||||
|
eg.edit.page[page_id].undoManager = um;
|
||||||
|
|
||||||
|
eg.edit.page[page_id].ws.forEach((w) => {
|
||||||
|
const sent: WS_MSG_SET_PAGE = {
|
||||||
|
type: "set_page",
|
||||||
|
changes: compress(Y.encodeStateAsUpdate(ydoc as any).toString()),
|
||||||
|
};
|
||||||
|
w.send(JSON.stringify(sent));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "ok";
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
@ -20,22 +20,13 @@ export const routeEditor = (p: PG, page_id: string) => {
|
||||||
p.render();
|
p.render();
|
||||||
|
|
||||||
if (!p.mpage || p.mpage.getMap("map").get("id") !== page_id) {
|
if (!p.mpage || p.mpage.getMap("map").get("id") !== page_id) {
|
||||||
if (!loadingCounter[page_id]) {
|
p.status = "reload";
|
||||||
loadingCounter[page_id] = 1;
|
await api.page_reload(page_id);
|
||||||
} else {
|
p.mpageLoaded = () => {
|
||||||
loadingCounter[page_id]++;
|
p.status = "ready";
|
||||||
}
|
|
||||||
|
|
||||||
if (loadingCounter[page_id] > 2) {
|
|
||||||
p.status = "reload";
|
|
||||||
p.render();
|
p.render();
|
||||||
p.mpageLoaded = () => {
|
};
|
||||||
p.status = "ready";
|
p.render();
|
||||||
p.render();
|
|
||||||
};
|
|
||||||
|
|
||||||
await api.page_reload(page_id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue