dioxus_leaflet/components/
polygon.rs1use dioxus::{core::use_drop, prelude::*};
2use dioxus_logger::tracing::error;
3use std::rc::Rc;
4
5use crate::{LatLng, PathOptions, interop, types::Id};
6
7#[component]
8pub fn Polygon(
9 coordinates: ReadSignal<Vec<Vec<Vec<LatLng>>>>,
10
11 #[props(default = PathOptions::default())] options: ReadSignal<PathOptions>,
12
13 children: Element,
14) -> Element {
15 let id: Rc<Id> = use_context();
16 let id = use_context_provider(|| Rc::new(Id::polygon(&id, dioxus_core::current_scope_id().0)));
17
18 let id2 = id.clone();
19 use_effect(move || {
20 let id = id2.clone();
21 let coords = coordinates();
22 let opts = options();
23 spawn(async move {
24 if let Err(e) = interop::update_polygon(&id, &coords, &opts).await {
25 error!("{e}");
26 }
27 });
28 });
29
30 let id2 = id.clone();
31 use_drop(move || {
32 let id = id2.clone();
33 spawn(async move {
34 if let Err(e) = interop::delete_polygon(&id).await {
35 error!("{e}");
36 }
37 });
38 });
39
40 rsx!({ children })
41}