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