rtlibs-tui 0.1.5

rtools library: ratatui widgets
Documentation
use crossterm::event::KeyCode;
use crossterm::event::KeyModifiers;

use crate::widgets::KeyEventHandler;
use crate::Result;

use super::ModalContainerState;

impl<RESPONSE, EVENT> KeyEventHandler<'_, Option<RESPONSE>> for ModalContainerState<RESPONSE, EVENT>
where
    EVENT: Clone,
    RESPONSE: Default + Eq,
{
    fn handle_key_event(
        &mut self,
        code: KeyCode,
        modifiers: KeyModifiers,
    ) -> Result<Option<RESPONSE>>
    {
        if let Some(modal) = self
            .modal
            .as_mut()
        {
            if let Some(event) = self
                .modal_event
                .as_ref()
            {
                let response = modal.handle_key_event(
                    code,
                    modifiers,
                    event.clone(),
                )?;

                if !response.eq(&RESPONSE::default())
                {
                    self.modal
                        .take();
                    self.modal_event
                        .take();
                }

                return Ok(Some(response));
            }

            return Ok(Some(RESPONSE::default()));
        }

        Ok(None)
    }
}