mirror of
https://github.com/SamyRai/turash.git
synced 2025-12-26 23:01:33 +00:00
- 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.
42 lines
978 B
TypeScript
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);
|
|
}
|