From 600ebe8a9b9c8c572e92229269bca82b7fa760a1 Mon Sep 17 00:00:00 2001 From: Marcin Czarkowski Date: Tue, 23 Sep 2025 11:49:03 +0200 Subject: [PATCH 1/2] refactor: centralize keyboard activation handling --- src/components/rule-builder/LibraryItem.tsx | 11 ++-- src/components/rule-builder/SearchInput.tsx | 17 +++---- src/components/rule-builder/SelectedRules.tsx | 11 ++-- .../rule-collections/CollectionListEntry.tsx | 41 +++++++++------ src/components/ui/Accordion.tsx | 15 +++--- src/hooks/useKeyboardActivation.ts | 50 +++++++++++++++++++ 6 files changed, 96 insertions(+), 49 deletions(-) create mode 100644 src/hooks/useKeyboardActivation.ts diff --git a/src/components/rule-builder/LibraryItem.tsx b/src/components/rule-builder/LibraryItem.tsx index d4df935..b74e8f2 100644 --- a/src/components/rule-builder/LibraryItem.tsx +++ b/src/components/rule-builder/LibraryItem.tsx @@ -1,11 +1,11 @@ import { Check } from 'lucide-react'; -import type { KeyboardEvent } from 'react'; import React from 'react'; import { Library } from '../../data/dictionaries'; import { getLibraryTranslation } from '../../i18n/translations'; import type { LayerType } from '../../styles/theme'; import { getLayerClasses } from '../../styles/theme'; import { useAccordionContentOpen } from '../ui/Accordion'; +import { useKeyboardActivation } from '../../hooks/useKeyboardActivation'; interface LibraryItemProps { library: Library; @@ -19,12 +19,7 @@ export const LibraryItem: React.FC = React.memo( const isParentAccordionOpen = useAccordionContentOpen(); const itemClasses = getLayerClasses.libraryItem(layerType, isSelected); - const handleKeyDown = (e: KeyboardEvent) => { - if (e.key === 'Enter' || e.key === ' ') { - e.preventDefault(); - onToggle(library); - } - }; + const createKeyboardActivationHandler = useKeyboardActivation(); return (