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)
}
}