@grafana/ui
Version:
Grafana Components Library
1 lines • 4.76 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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"}