export function getActionFromKey()

in src/shared/utils.ts [72:119]


export function getActionFromKey(event: KeyboardEvent, menuOpen: boolean): MenuActions {
  const { key, altKey, ctrlKey, metaKey } = event;
  const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ', 'Home', 'End']; // all keys that will open the combo

  // handle opening when closed
  if (!menuOpen && openKeys.includes(key)) {
    return MenuActions.Open;
  }

  // handle typing characters when open or closed
  if (key === Keys.Backspace || key === Keys.Clear || (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)) {
    return MenuActions.Type;
  }

  // handle keys when open
  if (menuOpen) {
    if (key === Keys.Down && !altKey || key === Keys.Right) {
      return MenuActions.Next;
    }
    else if (key === Keys.Up && altKey) {
      return MenuActions.CloseSelect;
    }
    else if (key === Keys.Up || key === Keys.Left) {
      return MenuActions.Previous;
    }
    else if (key === Keys.Home) {
      return MenuActions.First;
    }
    else if (key === Keys.End) {
      return MenuActions.Last;
    }
    else if (key === Keys.PageUp) {
      return MenuActions.PageUp;
    }
    else if (key === Keys.PageDown) {
      return MenuActions.PageDown;
    }
    else if (key === Keys.Escape) {
      return MenuActions.Close;
    }
    else if (key === Keys.Enter) {
      return MenuActions.CloseSelect;
    }
    else if (key === Keys.Space) {
      return MenuActions.Space;
    }
  }
}