44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import {
|
|
WS_MSG_SVDIFF_REMOTE,
|
|
WS_MSG_SV_LOCAL,
|
|
} from "../../../../web/src/utils/types/ws";
|
|
import { eg } from "../edit-global";
|
|
import { getComp } from "./get-comp";
|
|
import { getPage } from "./get-page";
|
|
import { sendWS } from "../send";
|
|
|
|
export const svLocal = async (ws: any, msg: WS_MSG_SV_LOCAL) => {
|
|
const changes = Uint8Array.from(
|
|
(msg.sv_local || '').split(",").map((x) => parseInt(x, 10))
|
|
);
|
|
let doc = null as any;
|
|
if (msg.mode === "page") {
|
|
if (!eg.edit.page[msg.id]) {
|
|
await getPage(ws, { type: "get_page", page_id: msg.id });
|
|
}
|
|
|
|
doc = eg.edit.page[msg.id].doc;
|
|
} else if (msg.mode === "comp") {
|
|
if (!eg.edit.comp[msg.id]) {
|
|
await getComp(ws, { comp_id: msg.id, type: "get_comp" });
|
|
}
|
|
|
|
doc = eg.edit.comp[msg.id].doc;
|
|
} else if (msg.mode === "site") {
|
|
doc = eg.edit.site[msg.id].doc;
|
|
}
|
|
|
|
if (doc) {
|
|
const diff_remote = Y.encodeStateAsUpdate(doc, changes);
|
|
const sv_remote = Y.encodeStateVector(doc);
|
|
const sendmsg: WS_MSG_SVDIFF_REMOTE = {
|
|
diff_remote: diff_remote.toString(),
|
|
sv_remote: sv_remote.toString(),
|
|
id: msg.id,
|
|
mode: msg.mode,
|
|
type: "svd_remote",
|
|
};
|
|
sendWS(ws,JSON.stringify(sendmsg));
|
|
}
|
|
};
|