leptos_leaflet/components/
mod.rs1mod bounds;
2mod circle;
3mod context;
4mod control;
5mod events;
6mod image_overlay;
7mod map_container;
8mod marker;
9mod path_options;
10mod polygon;
11mod polyline;
12mod popup;
13mod position;
14mod quad_tile_layer;
15mod tile_layer;
16mod tile_layer_wms;
17mod tooltip;
18mod video_overlay;
19mod zoom;
20
21pub use bounds::Bounds;
22pub use circle::Circle;
23pub use context::*;
24pub use control::Control;
25pub use events::{
26 DragEvents, LayerEvents, MapEvents, MouseEvents, MoveEvents, PopupEvents, TooltipEvents,
27};
28pub use image_overlay::ImageOverlay;
29pub use leaflet::{CircleOptions, PathOptions, PolylineOptions};
30pub use map_container::{LeafletMap, MapContainer};
31pub use marker::Marker;
32pub use path_options::*;
33pub use polygon::Polygon;
34pub use polyline::Polyline;
35pub use popup::Popup;
36pub use position::*;
37pub use quad_tile_layer::QuadTileLayer;
38pub use tile_layer::TileLayer;
39pub use tile_layer_wms::{TileLayerWms, TileLayerWmsEvents};
40pub use tooltip::Tooltip;
41pub use video_overlay::VideoOverlay;
42pub use zoom::Zoom;
43
44#[macro_export]
45macro_rules! effect_update_on_change {
46 ($class:ty, $option_class:ty, $name:ident) => {
47 create_effect(move |_| {
48 use leaflet;
49 let overlay_context =
50 leptos::use_context::<LeafletOverlayContainerContext>().expect("overlay context");
51 if let (Some(layer), Some(setting)) = (overlay_context.container::<$class>(), $name) {
52 let mut options = <$option_class>::new();
53 options.$name(setting.get());
54 layer.setStyle(&options);
55 }
56 });
57 };
58}
59
60#[macro_export]
61macro_rules! effect_update_on_change_ref {
62 ($class:ty, $option_class:ty, $name:ident, $value:expr) => {
63 $crate::paste! {
64 create_effect(move |_| {
65 use leaflet;
66 let overlay_context =
67 leptos::use_context::<LeafletOverlayContainerContext>().expect("overlay context");
68 if let (Some(layer), Some(setting)) = (overlay_context.container::<$class>(), &$value) {
69 let mut options = <$option_class>::new();
70 options.[<set_ $name>](&setting.get());
71 layer.set_style(&options);
72 }
73 });
74 }
75 };
76}
77
78#[macro_export]
79macro_rules! setup_layer_option {
80 ($name:ident, $options:ident) => {
81 $crate::paste! {
82 if let Some($name) = $name {
83 $options.[<set_ $name>]($name.get_untracked());
84 }
85 }
86 };
87}
88
89#[macro_export]
90macro_rules! setup_layer_option_ref {
91 ($name:ident, $options:ident) => {
92 $crate::paste! {
93 if let Some($name) = &$name {
94 $options.[<set_ $name>](&$name.get_untracked());
95 }
96 }
97 };
98}
99
100#[macro_export]
101macro_rules! setup_layer_option_str {
102 ($name:ident, $options:ident) => {
103 $crate::paste! {
104 if let Some($name) = &$name {
105 $options.[<set_ $name>](&format!("{}", &$name.get_untracked()));
106 }
107 }
108 };
109}
110
111#[macro_export]
112macro_rules! setup_layer_leaflet_option {
113 ($name:ident, $options:ident) => {
114 $crate::paste! {
115 if let Some($name) = $name.get_untracked() {
116 $options.[<set_ $name>]($name);
117 }
118 }
119 };
120}
121
122#[macro_export]
123macro_rules! setup_layer_leaflet_option_ref {
124 ($name:ident, $options:ident) => {
125 $crate::paste! {
126 if let Some($name) = $name.get_untracked() {
127 $options.[<set_ $name>]($name.to_string());
128 }
129 }
130 };
131}
132
133#[macro_export]
134macro_rules! setup_layer_leaflet_string {
135 ($name:ident, $options:ident) => {
136 $crate::paste! {
137 if !$name.get_untracked().is_empty() {
138 $options.[<set_ $name>]($name.get_untracked().to_string());
139 }
140 }
141 };
142}
143
144pub trait StringEmptyOption<T> {
145 fn to_option(&self) -> Option<&T>;
146 fn to_option_owned(self) -> Option<T>;
147}
148
149impl StringEmptyOption<String> for String {
150 fn to_option(&self) -> Option<&String> {
151 if self.is_empty() {
152 None
153 } else {
154 Some(self)
155 }
156 }
157
158 fn to_option_owned(self) -> Option<String> {
159 if self.is_empty() {
160 None
161 } else {
162 Some(self)
163 }
164 }
165}