@workday/canvas-kit-react
Version:
The parent module that contains all Workday Canvas Kit React components
38 lines (37 loc) • 1.7 kB
JavaScript
import { createElemPropsHook } from '@workday/canvas-kit-react/common';
import { useSelectionListModel } from './useSelectionListModel';
import { focusOnCurrentCursor } from './focusOnCurrentCursor';
import { listItemRemove } from './listItemRemove';
/**
* This elemProps hook is used when a menu item is expected to be removed. It will advance the cursor to
* another item.
* This elemProps hook is used for cursor navigation by using [Roving
* Tabindex](https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex). Only a single item in the
* collection has a tab stop. Pressing an arrow key moves the tab stop to a different item in the
* corresponding direction. See the [Roving Tabindex](#roving-tabindex) example. This elemProps hook
* should be applied to an `*.Item` component.
*
* ```ts
* const useMyItem = composeHooks(
* useListItemRovingFocus, // adds the roving tabindex support
* useListItemRegister
* );
* ```
*/
export const useListItemRemoveOnDeleteKey = createElemPropsHook(useSelectionListModel)(model => {
return {
onKeyDown(event) {
if (event.key === 'Backspace' || event.key === 'Delete') {
const id = event.currentTarget.dataset.id || '';
const nextId = listItemRemove(id, model);
model.events.remove({ id, nextId, event });
if (nextId) {
// use an animation frame to wait for any other model changes that may happen
requestAnimationFrame(() => {
focusOnCurrentCursor(model, nextId, event.currentTarget);
});
}
}
},
};
});