Radish alpha
r
Radicle terminal user interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
lib: Pass view props to on_event handler
Erik Kundt committed 1 year ago
commit 517ba30300537902c6d5333170bae07b72e74501
parent e60033cc9f813a2e60ce4cc55ca3756c966d40e9
2 files changed +5 -3
modified examples/hello.rs
@@ -49,7 +49,7 @@ pub async fn main() -> Result<()> {
                .to_boxed_any()
                .into()
        })
-
        .on_event(|_, key| match key {
+
        .on_event(|key, _, _| match key {
            Key::Char('r') => Some(Message::ReverseWelcome),
            Key::Char('q') => Some(Message::Quit),
            _ => None,
modified src/ui/widget.rs
@@ -14,7 +14,7 @@ use ratatui::prelude::*;

pub type BoxedView<S, M> = Box<dyn View<State = S, Message = M>>;
pub type UpdateCallback<S> = fn(&S) -> ViewProps;
-
pub type EventCallback<M> = fn(Option<&ViewState>, Key) -> Option<M>;
+
pub type EventCallback<M> = fn(Key, Option<&ViewState>, Option<&ViewProps>) -> Option<M>;
pub type RenderCallback<M> = fn(Option<&ViewProps>, &RenderProps) -> Option<M>;

/// `ViewProps` are properties of a `View`. They define a `View`s data, configuration etc.
@@ -175,7 +175,9 @@ impl<S: 'static, M: 'static> Widget<S, M> {
        }

        if let Some(on_event) = self.on_event {
-
            if let Some(message) = (on_event)(self.view.view_state().as_ref(), key) {
+
            if let Some(message) =
+
                (on_event)(key, self.view.view_state().as_ref(), self.props.as_ref())
+
            {
                let _ = self.sender.send(message);
            }
        }