refactor(web): list navigation with keyboard (#7987)

This commit is contained in:
Michel Heusschen 2024-03-15 21:00:53 +01:00 committed by GitHub
parent e21c586cc5
commit 997e9c5877
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 76 additions and 125 deletions

View file

@ -10,6 +10,7 @@ export type Shortcut = {
export type ShortcutOptions<T = HTMLElement> = {
shortcut: Shortcut;
ignoreInputFields?: boolean;
onShortcut: (event: KeyboardEvent & { currentTarget: T }) => unknown;
};
@ -50,11 +51,13 @@ export const shortcuts = <T extends HTMLElement>(
options: ShortcutOptions<T>[],
): ActionReturn<ShortcutOptions<T>[]> => {
function onKeydown(event: KeyboardEvent) {
if (shouldIgnoreShortcut(event)) {
return;
}
const ignoreShortcut = shouldIgnoreShortcut(event);
for (const { shortcut, onShortcut, ignoreInputFields = true } of options) {
if (ignoreInputFields && ignoreShortcut) {
continue;
}
for (const { shortcut, onShortcut } of options) {
if (matchesShortcut(event, shortcut)) {
event.preventDefault();
onShortcut(event as KeyboardEvent & { currentTarget: T });