thaw 0.4.8

An easy to use leptos component library
Documentation
use leptos::ev;

pub fn get_dropdown_action_from_key(
    e: &ev::KeyboardEvent,
    open: bool,
    multiselect: bool,
) -> DropdownAction {
    let key = e.key();
    let code = e.code();
    let alt_key = e.alt_key();
    let ctrl_key = e.ctrl_key();
    let meta_key = e.meta_key();

    if key.len() == 1 && KeyboardKey::Space != code && !alt_key && !ctrl_key && !meta_key {
        DropdownAction::Type
    } else if !open {
        if KeyboardKey::ArrowDown == code
            || KeyboardKey::ArrowUp == code
            || KeyboardKey::Enter == code
            || KeyboardKey::Space == code
        {
            DropdownAction::Open
        } else {
            DropdownAction::None
        }
    } else if (KeyboardKey::ArrowUp == code && alt_key)
        || KeyboardKey::Enter == code
        || (!multiselect && KeyboardKey::Space == code)
    {
        DropdownAction::CloseSelect
    } else if multiselect && KeyboardKey::Space == code {
        DropdownAction::Select
    } else if KeyboardKey::Escape == code {
        DropdownAction::Close
    } else if KeyboardKey::ArrowDown == code {
        DropdownAction::Next
    } else if KeyboardKey::ArrowUp == code {
        DropdownAction::Previous
    } else if KeyboardKey::Home == code {
        DropdownAction::First
    } else if KeyboardKey::End == code {
        DropdownAction::Last
    } else if KeyboardKey::PageUp == code {
        DropdownAction::PageUp
    } else if KeyboardKey::PageDown == code {
        DropdownAction::PageDown
    } else if KeyboardKey::Tab == code {
        DropdownAction::Tab
    } else {
        DropdownAction::None
    }
}

#[derive(PartialEq)]
pub enum DropdownAction {
    None,
    Type,
    Open,
    CloseSelect,
    Select,
    Close,
    Next,
    Previous,
    First,
    Last,
    PageUp,
    PageDown,
    Tab,
}

enum KeyboardKey {
    ArrowDown,
    ArrowUp,
    Enter,
    Space,
    Escape,
    Home,
    End,
    PageUp,
    PageDown,
    Tab,
}

impl PartialEq<String> for KeyboardKey {
    fn eq(&self, other: &String) -> bool {
        match self {
            Self::ArrowDown => other == "ArrowDown",
            Self::ArrowUp => other == "ArrowUp",
            Self::Enter => other == "Enter",
            Self::Space => other == "Space",
            Self::Escape => other == "Escape",
            Self::Home => other == "Home",
            Self::End => other == "End",
            Self::PageUp => other == "PageUp",
            Self::PageDown => other == "PageDown",
            Self::Tab => other == "Tab",
        }
    }
}