leptos-leaflet 0.10.2

Leaflet components to use in Leptos.
Documentation
use crate::leaflet_event;
use leaflet::MouseEvent;
use std::cell::RefCell;
use std::rc::Rc;

#[derive(Clone, Default)]
pub struct MouseEvents {
    inner: Rc<RefCell<InnerMouseEvents>>,
}

#[derive(Default)]
struct InnerMouseEvents {
    on_click: Option<Box<dyn Fn(MouseEvent)>>,
    on_double_click: Option<Box<dyn Fn(MouseEvent)>>,
    on_mouse_down: Option<Box<dyn Fn(MouseEvent)>>,
    on_mouse_up: Option<Box<dyn Fn(MouseEvent)>>,
    on_mouse_over: Option<Box<dyn Fn(MouseEvent)>>,
    on_mouse_out: Option<Box<dyn Fn(MouseEvent)>>,
    on_context_menu: Option<Box<dyn Fn(MouseEvent)>>,
}

impl MouseEvents {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn setup(&self, evented: &impl leaflet::MouseEvents) {
        if let Some(on_click) = self.inner.borrow_mut().on_click.take() {
            evented.on_click(on_click);
        }
        if let Some(on_double_click) = self.inner.borrow_mut().on_double_click.take() {
            evented.on_double_click(on_double_click);
        }
        if let Some(on_mouse_down) = self.inner.borrow_mut().on_mouse_down.take() {
            evented.on_mouse_down(on_mouse_down);
        }
        if let Some(on_mouse_up) = self.inner.borrow_mut().on_mouse_up.take() {
            evented.on_mouse_up(on_mouse_up);
        }
        if let Some(on_mouse_over) = self.inner.borrow_mut().on_mouse_over.take() {
            evented.on_mouse_over(on_mouse_over);
        }
        if let Some(on_mouse_out) = self.inner.borrow_mut().on_mouse_out.take() {
            evented.on_mouse_out(on_mouse_out);
        }
        if let Some(on_context_menu) = self.inner.borrow_mut().on_context_menu.take() {
            evented.on_context_menu(on_context_menu);
        }
    }
}

leaflet_event!(MouseEvents, on_click, MouseEvent);
leaflet_event!(MouseEvents, on_double_click, MouseEvent);
leaflet_event!(MouseEvents, on_mouse_down, MouseEvent);
leaflet_event!(MouseEvents, on_mouse_up, MouseEvent);
leaflet_event!(MouseEvents, on_mouse_over, MouseEvent);
leaflet_event!(MouseEvents, on_mouse_out, MouseEvent);
leaflet_event!(MouseEvents, on_context_menu, MouseEvent);