Skip to main content

orbital_base_components/collection/state/
keyboard.rs

1use leptos::ev;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum CollectionKeyboardAction {
5    None,
6    Next,
7    Previous,
8    Expand,
9    Collapse,
10    Select,
11    Home,
12    End,
13    TypeAhead,
14}
15
16pub fn collection_keyboard_action(event: &ev::KeyboardEvent) -> CollectionKeyboardAction {
17    let key = event.key();
18    match key.as_str() {
19        "ArrowDown" => CollectionKeyboardAction::Next,
20        "ArrowUp" => CollectionKeyboardAction::Previous,
21        "ArrowRight" => CollectionKeyboardAction::Expand,
22        "ArrowLeft" => CollectionKeyboardAction::Collapse,
23        "Enter" | " " => CollectionKeyboardAction::Select,
24        "Home" => CollectionKeyboardAction::Home,
25        "End" => CollectionKeyboardAction::End,
26        text if text.len() == 1 && !event.ctrl_key() && !event.meta_key() && !event.alt_key() => {
27            CollectionKeyboardAction::TypeAhead
28        }
29        _ => CollectionKeyboardAction::None,
30    }
31}