69 lines
1.7 KiB
TypeScript
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);
|
|
};
|
|
}, []);
|
|
};
|