From d61b9ec258c3bf9f41980eb6a4c52ff104ed0e0b Mon Sep 17 00:00:00 2001 From: Marcin Czarkowski Date: Mon, 22 Sep 2025 14:24:52 +0200 Subject: [PATCH] test: cover useKeyboardActivation hook --- src/components/rule-builder/LibraryItem.tsx | 11 +-- src/components/rule-builder/SearchInput.tsx | 15 ++-- src/components/rule-builder/SelectedRules.tsx | 18 +++-- .../rule-collections/CollectionListEntry.tsx | 45 +++++++---- src/components/ui/Accordion.tsx | 11 +-- src/hooks/useKeyboardActivation.ts | 46 +++++++++++ tests/hooks/useKeyboardActivation.test.tsx | 76 +++++++++++++++++++ tests/setup/types.d.ts | 2 +- tests/setup/vitest.setup.ts | 2 +- 9 files changed, 179 insertions(+), 47 deletions(-) create mode 100644 src/hooks/useKeyboardActivation.ts create mode 100644 tests/hooks/useKeyboardActivation.test.tsx diff --git a/src/components/rule-builder/LibraryItem.tsx b/src/components/rule-builder/LibraryItem.tsx index d4df935..dffa651 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,9 @@ 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 handleKeyDown = useKeyboardActivation(() => { + onToggle(library); + }); return (