use iced::Element; use crate::{ gui::components::navigation::{ navigation_select_option::SelectOptionResult, navigation_set_options::SetOptionsResult, }, traits::{Component, Focusable, Navigable, NavigationResult}, }; use super::{Action, Message, Navigation}; impl<'a, TOption> Component<'a, Message, Action> for Navigation where TOption: Clone + Focusable + PartialEq + 'a, Element<'a, Message>: From<&'a TOption>, { fn update(&mut self, message: Message) -> Action { match message { Message::SelectOption(option) => match self.select_option(option) { SelectOptionResult::SelectedExistingOption(option) | SelectOptionResult::SelectedNewOption(option) => Action::SelectOption(option), SelectOptionResult::AlreadySelected => Action::None, }, Message::SetOptions(mut options) => match self.set_options(&mut options) { SetOptionsResult::SetOptionsAndKeptSelection => Action::None, SetOptionsResult::SetOptionsAndSetSelectedOption(option) => { Action::SelectOption(option) } }, Message::SelectNext => match self.move_next() { NavigationResult::Moved(option) => Action::SelectOption(option), NavigationResult::LastOption => Action::None, }, Message::SelectPrev => match self.move_prev() { NavigationResult::Moved(option) => Action::SelectOption(option), NavigationResult::LastOption => Action::None, }, Message::ActivateOption(option) => Action::ActivateOption(option), } } }