Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

useKeyboardEvents.ts 1022B

123456789101112131415161718192021222324252627282930313233343536
  1. import { useEffect } from "react"
  2. import state from "state"
  3. import { getKeyboardEventInfo, isDarwin } from "utils/utils"
  4. export default function useKeyboardEvents() {
  5. useEffect(() => {
  6. function handleKeyDown(e: KeyboardEvent) {
  7. if (e.key === "Escape") {
  8. state.send("CANCELLED")
  9. } else if (e.key === "z" && (isDarwin() ? e.metaKey : e.ctrlKey)) {
  10. if (e.shiftKey) {
  11. state.send("REDO")
  12. } else {
  13. state.send("UNDO")
  14. }
  15. }
  16. state.send("PRESSED_KEY", getKeyboardEventInfo(e))
  17. }
  18. function handleKeyUp(e: KeyboardEvent) {
  19. if (e.key === "Escape") {
  20. state.send("CANCELLED")
  21. }
  22. state.send("RELEASED_KEY", getKeyboardEventInfo(e))
  23. }
  24. document.body.addEventListener("keydown", handleKeyDown)
  25. document.body.addEventListener("keyup", handleKeyUp)
  26. return () => {
  27. document.body.removeEventListener("keydown", handleKeyDown)
  28. document.body.removeEventListener("keyup", handleKeyUp)
  29. }
  30. }, [])
  31. }