mirror of
https://github.com/YuzuZensai/Pien-Studio.git
synced 2026-09-02 14:18:35 +00:00
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import React from "react";
|
|
|
|
type UseEditorShortcutsOptions = {
|
|
onSave: () => void;
|
|
onCopy: () => void;
|
|
onCut: () => void;
|
|
onPaste: () => void;
|
|
onDelete: () => void;
|
|
};
|
|
|
|
export function useEditorShortcuts(options: UseEditorShortcutsOptions) {
|
|
const { onSave, onCopy, onCut, onPaste, onDelete } = options;
|
|
|
|
React.useEffect(() => {
|
|
function handleKeyDown(e: KeyboardEvent) {
|
|
if (e.ctrlKey || e.metaKey) {
|
|
if (e.key.toLowerCase() === "s") {
|
|
e.preventDefault();
|
|
onSave();
|
|
return;
|
|
}
|
|
if (e.key.toLowerCase() === "c") {
|
|
e.preventDefault();
|
|
onCopy();
|
|
return;
|
|
}
|
|
if (e.key.toLowerCase() === "x") {
|
|
e.preventDefault();
|
|
onCut();
|
|
return;
|
|
}
|
|
if (e.key.toLowerCase() === "v") {
|
|
e.preventDefault();
|
|
onPaste();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (e.key === "Delete" || e.key === "Backspace") {
|
|
if (!(e.target instanceof HTMLElement) || /^(input|textarea|select)$/i.test(e.target.tagName)) return;
|
|
e.preventDefault();
|
|
onDelete();
|
|
}
|
|
}
|
|
|
|
window.addEventListener("keydown", handleKeyDown);
|
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
}, [onCopy, onCut, onDelete, onPaste, onSave]);
|
|
}
|