@grafana/ui
Version:
Grafana Components Library
1 lines • 4.81 kB
Source Map (JSON)
{"version":3,"file":"hooks.mjs","sources":["../../../../../src/components/DateTimePickers/TimeRangePicker/hooks.ts"],"sourcesContent":["import { RefObject, useEffect, useState } from 'react';\n\nimport { TimeOption } from '@grafana/data';\n\nconst modulo = (a: number, n: number) => ((a % n) + n) % n;\nconst CAUGHT_KEYS = ['ArrowUp', 'ArrowDown', 'Home', 'End', 'Enter', 'Tab'];\n\n/** @internal */\nexport interface UseListFocusProps {\n localRef: RefObject<HTMLUListElement>;\n options: TimeOption[];\n}\n\n/** @internal */\nexport type UseListFocusReturn = [(event: React.KeyboardEvent) => void];\n\n/** @internal */\nexport const useListFocus = ({ localRef, options }: UseListFocusProps): UseListFocusReturn => {\n const [focusedItem, setFocusedItem] = useState(0);\n\n useEffect(() => {\n const items = localRef.current?.querySelectorAll<HTMLInputElement>('[data-role=\"item\"]') || [];\n const checkedIndex = Array.from(items).findIndex((item) => item.checked);\n const newFocusedIndex = checkedIndex >= 0 ? checkedIndex : 0;\n items.forEach((item, i) => {\n item.tabIndex = i === newFocusedIndex ? 0 : -1;\n });\n // Reset focused item when options have changed\n setFocusedItem(newFocusedIndex);\n }, [localRef, options]);\n\n const handleKeys = (event: React.KeyboardEvent) => {\n const items = localRef?.current?.querySelectorAll<HTMLInputElement>('[data-role=\"item\"]');\n const itemsCount = items?.length ?? 0;\n\n if (CAUGHT_KEYS.indexOf(event.key) > -1) {\n event.preventDefault();\n if (event.key !== 'Tab') {\n event.stopPropagation();\n }\n }\n\n let newFocusedIndex = null;\n\n switch (event.key) {\n case 'ArrowUp':\n newFocusedIndex = modulo(focusedItem - 1, itemsCount);\n break;\n case 'ArrowDown':\n newFocusedIndex = modulo(focusedItem + 1, itemsCount);\n break;\n case 'Home':\n newFocusedIndex = 0;\n break;\n case 'End':\n newFocusedIndex = itemsCount - 1;\n break;\n case 'Enter':\n items?.[focusedItem]?.click();\n break;\n default:\n break;\n }\n\n if (newFocusedIndex !== null) {\n setFocusedItem(newFocusedIndex);\n items?.[newFocusedIndex]?.focus();\n items?.forEach((item, i) => {\n item.tabIndex = i === newFocusedIndex ? 0 : -1;\n });\n }\n };\n\n return [handleKeys];\n};\n"],"names":[],"mappings":"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"}