prasi-bun/app/web/src/nova/ed/logic/ed-undo.ts

69 lines
1.7 KiB
TypeScript

import { useEffect } from "react";
import { PG, active } from "./ed-global";
import { treeRebuild } from "./tree/build";
export const edUndoManager = async (p: PG) => {
useEffect(() => {
const keyDown = async (evt: KeyboardEvent) => {
if (
(evt.key === "s" || evt.key === "s") &&
(evt.ctrlKey || evt.metaKey)
) {
evt.preventDefault();
evt.stopPropagation();
}
if (
(evt.key === "Y" || evt.key === "y") &&
(evt.ctrlKey || evt.metaKey) &&
!evt.shiftKey
) {
if (active.comp_id) {
p.sync.yjs.um("comp", "redo", active.comp_id);
} else {
p.sync.yjs.um("page", "redo", p.page.cur.id);
}
return;
}
if (
(evt.key === "Z" || evt.key === "z") &&
(evt.ctrlKey || evt.metaKey) &&
evt.shiftKey
) {
if (active.comp_id) {
p.sync.yjs.um("comp", "redo", active.comp_id);
} else {
p.sync.yjs.um("page", "redo", p.page.cur.id);
}
return;
}
if (
(evt.key === "Z" || evt.key === "z") &&
(evt.ctrlKey || evt.metaKey) &&
!evt.shiftKey
) {
if (active.comp_id) {
p.sync.yjs.um("comp", "undo", active.comp_id);
} else {
p.sync.yjs.um("page", "undo", p.page.cur.id);
}
}
if (
(evt.key === "r" || evt.key === "R" || evt.key === "®") &&
evt.altKey
) {
evt.preventDefault();
evt.stopPropagation();
await treeRebuild(p, { note: "reload" });
}
};
window.addEventListener("keydown", keyDown, true);
return () => {
window.removeEventListener("keydown", keyDown, true);
};
}, []);
};