UNPKG

@sinchsmb/ui-kit

Version:

UI kit for SinchSMB frontend

38 lines (33 loc) 1 kB
import { KeyboardEventHandler, useCallback } from 'react'; import { useTableFastActiveItemContext } from '../contexts/TableFastActiveItemContex'; import { useTablePropsContext } from '../contexts/TablePropsContext'; /** Hook that controls table keyboard navigation. */ export function useTableKeyboardNavigation(): KeyboardEventHandler { const { loading } = useTablePropsContext(); const { changeActiveItem } = useTableFastActiveItemContext(); return useCallback( (event) => { if (loading) { return; } switch (event.key) { case 'ArrowDown': changeActiveItem(1, 0); break; case 'ArrowUp': changeActiveItem(-1, 0); break; case 'ArrowRight': changeActiveItem(0, 1); break; case 'ArrowLeft': changeActiveItem(0, -1); break; /* istanbul ignore next */ default: // no-default } }, [changeActiveItem, loading], ); }