Skip to main content

dioxus_maplibre/handle/
layers.rs

1//! Layer-related MapHandle methods.
2#![allow(clippy::needless_pass_by_value)]
3
4use super::MapHandle;
5use crate::options::LayerOptions;
6
7impl MapHandle {
8    /// Add a layer to the map
9    pub fn add_layer(&self, options: LayerOptions) {
10        self.fire_and_forget(|| {
11            let json = serde_json::to_string(&options).unwrap_or_default();
12            crate::interop::add_layer_js(&self.map_id, &json)
13        });
14    }
15
16    /// Remove a layer from the map
17    pub fn remove_layer(&self, id: &str) {
18        self.fire_and_forget(|| crate::interop::remove_layer_js(&self.map_id, id));
19    }
20
21    /// Set a paint property on a layer
22    pub fn set_paint_property(&self, layer_id: &str, name: &str, value: serde_json::Value) {
23        self.fire_and_forget(|| {
24            let json = serde_json::to_string(&value).unwrap_or_default();
25            crate::interop::set_paint_property_js(&self.map_id, layer_id, name, &json)
26        });
27    }
28
29    /// Set a layout property on a layer
30    pub fn set_layout_property(&self, layer_id: &str, name: &str, value: serde_json::Value) {
31        self.fire_and_forget(|| {
32            let json = serde_json::to_string(&value).unwrap_or_default();
33            crate::interop::set_layout_property_js(&self.map_id, layer_id, name, &json)
34        });
35    }
36
37    /// Move a layer to a different position in the layer stack
38    ///
39    /// If `before_id` is `Some`, the layer is moved before that layer.
40    /// If `before_id` is `None`, the layer is moved to the top.
41    pub fn move_layer(&self, layer_id: &str, before_id: Option<&str>) {
42        self.fire_and_forget(|| crate::interop::move_layer_js(&self.map_id, layer_id, before_id));
43    }
44
45    /// Set a filter on a layer
46    pub fn set_filter(&self, layer_id: &str, filter: serde_json::Value) {
47        self.fire_and_forget(|| {
48            let json = serde_json::to_string(&filter).unwrap_or_default();
49            crate::interop::set_filter_js(&self.map_id, layer_id, &json)
50        });
51    }
52}