@sinchsmb/ui-kit
Version:
UI kit for SinchSMB frontend
38 lines (33 loc) • 1 kB
text/typescript
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],
);
}