dioxus_leaflet/components/
marker.rs1use dioxus::prelude::*;
2use std::collections::HashMap;
3use dioxus_logger::tracing::error;
4
5use crate::{
6 components::map::MapContext,
7 components::popup::PopupContext,
8 LatLng,
9 MarkerIcon,
10 interop,
11};
12
13#[component]
14pub fn Marker(
15 coordinate: ReadOnlySignal<LatLng>,
16
17 #[props(default = None)]
18 icon: ReadOnlySignal<Option<MarkerIcon>>,
19
20 #[props(default = None)]
21 custom_data: ReadOnlySignal<Option<HashMap<String, String>>>,
22
23 on_click: Option<EventHandler>,
24
25 children: Option<Element>,
26) -> Element {
27 let map: MapContext = use_context();
28 let context = use_context_provider(|| PopupContext(dioxus_core::current_scope_id().unwrap().0));
29
30 use_effect(move || {
31 let coord = coordinate();
32 let icon = icon();
33 spawn(async move {
34 if let Err(e) = interop::update_marker(map.0, context.0, &coord, &icon).await {
35 error!("Error rendering marker: {e}");
36 }
37 });
38 });
39
40 rsx!({children})
41}