dioxus_leaflet/components/
popup.rs

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