dioxus_leaflet/components/
popup.rs

1use dioxus::prelude::*;
2use dioxus_logger::tracing::error;
3use crate::{interop, PopupOptions};
4
5#[derive(Debug, Clone, Copy)]
6pub struct PopupContext(pub usize);
7
8#[component]
9pub fn Popup(
10    #[props(default = PopupOptions::default())]
11    options: PopupOptions,
12
13    children: Element,
14) -> Element {
15    let marker: PopupContext = use_context();
16    let popup_id = dioxus_core::current_scope_id().unwrap().0;
17    let class = options.class_name.clone();
18
19    use_effect(move || {
20        let opts = options.clone();
21        spawn(async move {
22            if let Err(e) = interop::update_popup(marker.0, popup_id, &opts).await {
23                error!("{e}");
24            }
25        });
26    });
27
28    rsx!(
29        div {
30            id: "dioxus-leaflet-popup-{popup_id}",
31            class: "leaflet-popup-content {class.as_ref().map(|c| c.as_str()).unwrap_or(\"\")}",
32            {children}
33        }
34    )
35}
36