turash/bugulma/frontend/hooks/useKeyboard.ts
Damir Mukimov 6347f42e20
Consolidate repositories: Remove nested frontend .git and merge into main repository
- Remove nested git repository from bugulma/frontend/.git
- Add all frontend files to main repository tracking
- Convert from separate frontend/backend repos to unified monorepo
- Preserve all frontend code and development history as tracked files
- Eliminate nested repository complexity for simpler development workflow

This creates a proper monorepo structure with frontend and backend
coexisting in the same repository for easier development and deployment.
2025-11-25 06:02:57 +01:00

42 lines
978 B
TypeScript

import { useCallback, useEffect } from 'react';
interface UseKeyboardOptions {
enabled?: boolean;
target?: EventTarget;
}
/**
* Hook for handling keyboard events with automatic cleanup
*/
export function useKeyboard(
handler: (event: KeyboardEvent) => void,
options: UseKeyboardOptions = {}
) {
const { enabled = true, target = document } = options;
const memoizedHandler = useCallback(handler, [handler]);
useEffect(() => {
if (!enabled) return;
target.addEventListener('keydown', memoizedHandler);
return () => target.removeEventListener('keydown', memoizedHandler);
}, [enabled, target, memoizedHandler]);
}
/**
* Hook for handling escape key with a callback
*/
export function useEscapeKey(
onEscape: () => void,
options: UseKeyboardOptions = {}
) {
const handleKeyDown = useCallback((event: KeyboardEvent) => {
if (event.key === 'Escape') {
onEscape();
}
}, [onEscape]);
useKeyboard(handleKeyDown, options);
}