korbit-ai[bot] commented on code in PR #34176:
URL: https://github.com/apache/superset/pull/34176#discussion_r2208100942


##########
docs/docs/configuration/map-tiles.mdx:
##########
@@ -0,0 +1,78 @@
+---
+title: Map Tiles
+sidebar_position: 12
+version: 1
+---
+
+# Map tiles
+
+Superset uses OSM and Mapbox tiles by default. OSM is free but you still need 
setting your MAPBOX_API_KEY if you want to use mapbox maps.

Review Comment:
   ### Unclear Documentation Grammar <sub>![category 
Readability](https://img.shields.io/badge/Readability-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The sentence contains grammatical errors that affect readability ('but you 
still need setting' should be 'but you still need to set')
   
   
   ###### Why this matters
   Grammatical errors in documentation can cause confusion and make it harder 
for users to understand the requirements.
   
   ###### Suggested change ∙ *Feature Preview*
   Revise to: "Superset uses OSM and Mapbox tiles by default. OSM is free, but 
you still need to set your MAPBOX_API_KEY if you want to use Mapbox maps."
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/4372dfd1-4849-4f89-ab65-aaed95b1fdb0/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/4372dfd1-4849-4f89-ab65-aaed95b1fdb0?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/4372dfd1-4849-4f89-ab65-aaed95b1fdb0?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/4372dfd1-4849-4f89-ab65-aaed95b1fdb0?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/4372dfd1-4849-4f89-ab65-aaed95b1fdb0)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:26ad2f99-43a4-4edf-a520-3097a69e5ad0 -->
   
   
   [](26ad2f99-43a4-4edf-a520-3097a69e5ad0)



##########
superset/views/base.py:
##########
@@ -366,6 +366,7 @@ def cached_common_bootstrap_data(  # pylint: 
disable=unused-argument
         "d3_format": conf.get("D3_FORMAT"),
         "d3_time_format": conf.get("D3_TIME_FORMAT"),
         "currencies": conf.get("CURRENCIES"),
+        "deckgl_tiles": conf.get("DECKGL_BASE_MAP"),

Review Comment:
   ### Missing Default Value for Map Tiles Configuration <sub>![category 
Functionality](https://img.shields.io/badge/Functionality-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The default value for conf.get('DECKGL_BASE_MAP') is not specified, which 
could return None if the configuration key is missing.
   
   
   ###### Why this matters
   If the DECKGL_BASE_MAP configuration is not set, the frontend will receive 
None as the value, potentially causing rendering issues in Deck.gl 
visualizations that expect valid tile configuration.
   
   ###### Suggested change ∙ *Feature Preview*
   Add a default value to the configuration fetch to ensure a valid fallback 
for tile settings:
   ```python
   "deckgl_tiles": conf.get("DECKGL_BASE_MAP", {}),
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/65effcc3-f5e6-4b49-96fd-841a3cc5b8d0/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/65effcc3-f5e6-4b49-96fd-841a3cc5b8d0?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/65effcc3-f5e6-4b49-96fd-841a3cc5b8d0?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/65effcc3-f5e6-4b49-96fd-841a3cc5b8d0?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/65effcc3-f5e6-4b49-96fd-841a3cc5b8d0)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:17b36234-99d4-4f22-904b-9d8e8d548aa6 -->
   
   
   [](17b36234-99d4-4f22-904b-9d8e8d548aa6)



##########
superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.tsx:
##########
@@ -102,6 +108,20 @@
     );
 
     const layers = useCallback(() => {
+      if (
+        (props.mapStyle?.startsWith(TILE_LAYER_PREFIX) ||
+          OSM_LAYER_KEYWORDS.some(tilek => props.mapStyle?.includes(tilek))) &&
+        props.layers.some(
+          l => typeof l !== 'function' && l?.id === 'tile-layer',
+        ) === false
+      ) {
+        props.layers.unshift(
+          buildTileLayer(
+            (props.mapStyle ?? '').replace(TILE_LAYER_PREFIX, ''),
+            'tile-layer',
+          ),
+        );

Review Comment:
   ### Props Mutation in Tile Layer Addition <sub>![category 
Functionality](https://img.shields.io/badge/Functionality-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   Direct mutation of props.layers using unshift() modifies the original array, 
violating React's principle of props immutability.
   
   
   ###### Why this matters
   Mutating props directly can lead to unexpected behavior and re-rendering 
issues in React components, potentially causing visual glitches or 
inconsistencies in the map display.
   
   ###### Suggested change ∙ *Feature Preview*
   Create a new array instead of mutating the existing one:
   ```typescript
   const layersWithTile = [
     buildTileLayer(
       (props.mapStyle ?? '').replace(TILE_LAYER_PREFIX, ''),
       'tile-layer',
     ),
     ...props.layers
   ];
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/a012594f-e0db-4658-aa97-24e98518ea9c/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/a012594f-e0db-4658-aa97-24e98518ea9c?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/a012594f-e0db-4658-aa97-24e98518ea9c?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/a012594f-e0db-4658-aa97-24e98518ea9c?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/a012594f-e0db-4658-aa97-24e98518ea9c)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:2f496b33-516e-41e6-a23e-6c92cd9e5374 -->
   
   
   [](2f496b33-516e-41e6-a23e-6c92cd9e5374)



##########
docs/docs/configuration/map-tiles.mdx:
##########
@@ -0,0 +1,78 @@
+---
+title: Map Tiles
+sidebar_position: 12
+version: 1
+---
+
+# Map tiles
+
+Superset uses OSM and Mapbox tiles by default. OSM is free but you still need 
setting your MAPBOX_API_KEY if you want to use mapbox maps.
+
+## Setting map tiles
+
+Map tiles can be set with `DECKGL_BASE_MAP` in your `superset_config.py` or 
`superset_config_docker.py`
+For adding your own map tiles, you can use the following format.
+
+```python
+DECKGL_BASE_MAP = [
+    ['tile://https://your_personal_url/{z}/{x}/{y}.png', 'MyTile']
+]
+```
+Openstreetmap tiles url can be added without prefix.
+```python
+DECKGL_BASE_MAP = [
+    ['https://c.tile.openstreetmap.org/{z}/{x}/{y}.png', 'OpenStreetMap']
+]
+```
+
+Default values are:
+```python
+DECKGL_BASE_MAP = [
+    ['https://tile.openstreetmap.org/{z}/{x}/{y}.png', 'Streets (OSM)'],
+    ['https://tile.osm.ch/osm-swiss-style/{z}/{x}/{y}.png', 'Topography 
(OSM)'],
+    ['mapbox://styles/mapbox/streets-v9', 'Streets'],
+    ['mapbox://styles/mapbox/dark-v9', 'Dark'],
+    ['mapbox://styles/mapbox/light-v9', 'Light'],
+    ['mapbox://styles/mapbox/satellite-streets-v9', 'Satellite Streets'],
+    ['mapbox://styles/mapbox/satellite-v9', 'Satellite'],
+    ['mapbox://styles/mapbox/outdoors-v9', 'Outdoors'],
+]
+```
+
+It is possible to set only mapbox by removing osm tiles and other way around.
+
+:::warning
+Setting `DECKGL_BASE_MAP` overwrite default values
+:::
+
+After defining your map tiles, set them in these variables:
+- `CORS_OPTIONS`
+- `connect-src` of `TALISMAN_CONFIG` and `TALISMAN_CONFIG_DEV` variables.
+
+```python
+ENABLE_CORS = True
+CORS_OPTIONS: dict[Any, Any] = {
+    "origins": [
+        "https://tile.openstreetmap.org";,
+        "https://tile.osm.ch";,
+        "https://your_personal_url/{z}/{x}/{y}.png";,
+    ]
+}

Review Comment:
   ### Incorrect CORS Origin Format <sub>![category 
Design](https://img.shields.io/badge/Design-0d9488)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The CORS configuration example uses a full tile URL path with parameters in 
the origins list, which is incorrect as CORS origins should only include the 
base domain.
   
   
   ###### Why this matters
   Using full tile paths in CORS origins will not work as expected and could 
create security vulnerabilities. CORS origins should only specify the domain 
root.
   
   ###### Suggested change ∙ *Feature Preview*
   Modify the CORS configuration to use only base domains:
   ```python
   CORS_OPTIONS: dict[Any, Any] = {
       "origins": [
           "https://tile.openstreetmap.org";,
           "https://tile.osm.ch";,
           "https://your_personal_url";,  # Only the base domain
       ]
   }
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/eaaef9f8-4f24-4227-9fc1-9106891b4a54/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/eaaef9f8-4f24-4227-9fc1-9106891b4a54?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/eaaef9f8-4f24-4227-9fc1-9106891b4a54?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/eaaef9f8-4f24-4227-9fc1-9106891b4a54?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/eaaef9f8-4f24-4227-9fc1-9106891b4a54)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:c4d3fba7-9116-4959-8785-7c213341f1c4 -->
   
   
   [](c4d3fba7-9116-4959-8785-7c213341f1c4)



##########
superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils.ts:
##########
@@ -215,3 +221,41 @@ export function getColorBreakpointsBuckets(
 
   return buckets;
 }
+export function buildTileLayer(url: string, id: string) {
+  interface TileLayerProps {
+    id: string;
+    data: string;
+    minZoom: number;
+    maxZoom: number;
+    tileSize: number;
+    renderSubLayers: (props: any) => (BitmapLayer | PathLayer)[];
+  }
+
+  interface RenderSubLayerProps {
+    tile: {
+      bbox: GeoBoundingBox;
+    };
+    data: any;
+  }
+
+  return new TileLayer({
+    data: url,
+    id,
+    minZoom: 0,
+    maxZoom: 19,
+    tileSize: 256,

Review Comment:
   ### Unvalidated Tile Source URL <sub>![category 
Security](https://img.shields.io/badge/Security-e11d48)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The function accepts an arbitrary URL parameter without validation, which 
could lead to loading tiles from malicious sources.
   
   
   ###### Why this matters
   Without URL validation, an attacker could potentially inject malicious tile 
sources that could lead to data exfiltration or loading of malicious content.
   
   ###### Suggested change ∙ *Feature Preview*
   ```typescript
   export function buildTileLayer(url: string, id: string) {
     // Validate URL is from trusted sources
     if (!url.startsWith(TILE_LAYER_PREFIX) && 
         !url.startsWith(MAPBOX_LAYER_PREFIX) && 
         !OSM_LAYER_KEYWORDS.some(keyword => 
url.toLowerCase().includes(keyword))) {
       throw new Error('Invalid tile source URL');
     }
     return new TileLayer({
       data: url,
       ...
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/1f337e41-dc27-4f49-a2a3-b9a961a61df8/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/1f337e41-dc27-4f49-a2a3-b9a961a61df8?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/1f337e41-dc27-4f49-a2a3-b9a961a61df8?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/1f337e41-dc27-4f49-a2a3-b9a961a61df8?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/1f337e41-dc27-4f49-a2a3-b9a961a61df8)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:c6e4d584-f888-4026-b48e-0db65208b84a -->
   
   
   [](c6e4d584-f888-4026-b48e-0db65208b84a)



##########
docs/docs/configuration/map-tiles.mdx:
##########
@@ -0,0 +1,78 @@
+---
+title: Map Tiles
+sidebar_position: 12
+version: 1
+---
+
+# Map tiles
+
+Superset uses OSM and Mapbox tiles by default. OSM is free but you still need 
setting your MAPBOX_API_KEY if you want to use mapbox maps.
+
+## Setting map tiles
+
+Map tiles can be set with `DECKGL_BASE_MAP` in your `superset_config.py` or 
`superset_config_docker.py`
+For adding your own map tiles, you can use the following format.

Review Comment:
   ### Improper Sentence Structure <sub>![category 
Documentation](https://img.shields.io/badge/Documentation-7c3aed)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   Two separate sentences should be properly punctuated and connected for 
better readability.
   
   
   ###### Why this matters
   Poor sentence structure makes documentation harder to read and understand.
   
   ###### Suggested change ∙ *Feature Preview*
   Map tiles can be set with `DECKGL_BASE_MAP` in your `superset_config.py` or 
`superset_config_docker.py`. To add your own map tiles, use the following 
format:
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ea51ba2a-dfe6-471b-ac29-a6b4c2fff378/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ea51ba2a-dfe6-471b-ac29-a6b4c2fff378?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ea51ba2a-dfe6-471b-ac29-a6b4c2fff378?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ea51ba2a-dfe6-471b-ac29-a6b4c2fff378?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ea51ba2a-dfe6-471b-ac29-a6b4c2fff378)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:e2789ac5-14cf-4dad-a728-477cb53a34d2 -->
   
   
   [](e2789ac5-14cf-4dad-a728-477cb53a34d2)



##########
superset/examples/long_lat.py:
##########
@@ -107,18 +107,18 @@ def load_long_lat_data(only_metadata: bool = False, 
force: bool = False) -> None
         "granularity_sqla": "day",
         "since": "2014-01-01",
         "until": "now",
-        "viz_type": "mapbox",
+        "viz_type": "osm",
         "all_columns_x": "LON",
         "all_columns_y": "LAT",
-        "mapbox_style": "mapbox://styles/mapbox/light-v9",
+        "mapbox_style": "https://tile.openstreetmap.org/{z}/{x}/{y}.png";,

Review Comment:
   ### Incorrect Configuration Key for OSM Tiles <sub>![category 
Functionality](https://img.shields.io/badge/Functionality-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The configuration key 'mapbox_style' is incorrect for OpenStreetMap tile 
configuration. The code is using a Mapbox-specific configuration key for OSM 
tiles.
   
   
   ###### Why this matters
   Using incorrect configuration keys may lead to the map tiles not loading 
properly or failing to render at all in the visualization.
   
   ###### Suggested change ∙ *Feature Preview*
   Change the configuration key from 'mapbox_style' to a more appropriate key 
like 'tile_url' or 'osm_url':
   ```python
   "tile_url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png";
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/bfe5e2ff-5372-4e4f-b62b-ee32e0e65ed1/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/bfe5e2ff-5372-4e4f-b62b-ee32e0e65ed1?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/bfe5e2ff-5372-4e4f-b62b-ee32e0e65ed1?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/bfe5e2ff-5372-4e4f-b62b-ee32e0e65ed1?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/bfe5e2ff-5372-4e4f-b62b-ee32e0e65ed1)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:1fdc8812-c40d-4508-80dc-79ec9153d20c -->
   
   
   [](1fdc8812-c40d-4508-80dc-79ec9153d20c)



##########
superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.tsx:
##########
@@ -102,6 +108,20 @@ export const DeckGLContainer = memo(
     );
 
     const layers = useCallback(() => {
+      if (
+        (props.mapStyle?.startsWith(TILE_LAYER_PREFIX) ||
+          OSM_LAYER_KEYWORDS.some(tilek => props.mapStyle?.includes(tilek))) &&

Review Comment:
   ### Unclear Parameter Name Abbreviation <sub>![category 
Readability](https://img.shields.io/badge/Readability-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The parameter name 'tilek' is an unclear abbreviation of what appears to be 
'tileKeyword'.
   
   
   ###### Why this matters
   Abbreviated variable names reduce code readability and make it harder for 
developers to understand the purpose of the parameter without additional 
context.
   
   ###### Suggested change ∙ *Feature Preview*
   ```typescript
   OSM_LAYER_KEYWORDS.some(tileKeyword => props.mapStyle?.includes(tileKeyword))
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3fe3c46-7e12-4925-b690-2d98fa7255d2/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3fe3c46-7e12-4925-b690-2d98fa7255d2?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3fe3c46-7e12-4925-b690-2d98fa7255d2?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3fe3c46-7e12-4925-b690-2d98fa7255d2?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3fe3c46-7e12-4925-b690-2d98fa7255d2)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:7d0101ae-1a07-4686-b27d-37f4c433ab91 -->
   
   
   [](7d0101ae-1a07-4686-b27d-37f4c433ab91)



##########
superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.tsx:
##########
@@ -102,6 +108,20 @@
     );
 
     const layers = useCallback(() => {
+      if (
+        (props.mapStyle?.startsWith(TILE_LAYER_PREFIX) ||
+          OSM_LAYER_KEYWORDS.some(tilek => props.mapStyle?.includes(tilek))) &&
+        props.layers.some(
+          l => typeof l !== 'function' && l?.id === 'tile-layer',
+        ) === false
+      ) {

Review Comment:
   ### Hard-to-Parse Conditional Logic <sub>![category 
Readability](https://img.shields.io/badge/Readability-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   Complex conditional logic with multiple conditions and a negated boolean 
expression makes the code hard to read at a glance.
   
   
   ###### Why this matters
   The nested conditions with mixed operators and a negated boolean at the end 
create cognitive overhead when trying to understand the logic flow.
   
   ###### Suggested change ∙ *Feature Preview*
   ```typescript
   const isTileLayerStyle = props.mapStyle?.startsWith(TILE_LAYER_PREFIX) ||
     OSM_LAYER_KEYWORDS.some(tileKeyword => 
props.mapStyle?.includes(tileKeyword));
   const hasTileLayer = props.layers.some(
     layer => typeof layer !== 'function' && layer?.id === 'tile-layer'
   );
   
   if (isTileLayerStyle && !hasTileLayer) {
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e7d4000c-0b35-4283-9bbf-d8819f6177f7/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e7d4000c-0b35-4283-9bbf-d8819f6177f7?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e7d4000c-0b35-4283-9bbf-d8819f6177f7?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e7d4000c-0b35-4283-9bbf-d8819f6177f7?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e7d4000c-0b35-4283-9bbf-d8819f6177f7)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:25ba77c6-c5e4-4416-a9c9-db74601e3913 -->
   
   
   [](25ba77c6-c5e4-4416-a9c9-db74601e3913)



##########
docs/docs/configuration/map-tiles.mdx:
##########
@@ -0,0 +1,78 @@
+---
+title: Map Tiles
+sidebar_position: 12
+version: 1
+---
+
+# Map tiles
+
+Superset uses OSM and Mapbox tiles by default. OSM is free but you still need 
setting your MAPBOX_API_KEY if you want to use mapbox maps.
+
+## Setting map tiles
+
+Map tiles can be set with `DECKGL_BASE_MAP` in your `superset_config.py` or 
`superset_config_docker.py`
+For adding your own map tiles, you can use the following format.
+
+```python
+DECKGL_BASE_MAP = [
+    ['tile://https://your_personal_url/{z}/{x}/{y}.png', 'MyTile']
+]
+```
+Openstreetmap tiles url can be added without prefix.
+```python
+DECKGL_BASE_MAP = [
+    ['https://c.tile.openstreetmap.org/{z}/{x}/{y}.png', 'OpenStreetMap']
+]
+```
+
+Default values are:
+```python
+DECKGL_BASE_MAP = [
+    ['https://tile.openstreetmap.org/{z}/{x}/{y}.png', 'Streets (OSM)'],
+    ['https://tile.osm.ch/osm-swiss-style/{z}/{x}/{y}.png', 'Topography 
(OSM)'],
+    ['mapbox://styles/mapbox/streets-v9', 'Streets'],
+    ['mapbox://styles/mapbox/dark-v9', 'Dark'],
+    ['mapbox://styles/mapbox/light-v9', 'Light'],
+    ['mapbox://styles/mapbox/satellite-streets-v9', 'Satellite Streets'],
+    ['mapbox://styles/mapbox/satellite-v9', 'Satellite'],
+    ['mapbox://styles/mapbox/outdoors-v9', 'Outdoors'],
+]
+```
+
+It is possible to set only mapbox by removing osm tiles and other way around.
+
+:::warning
+Setting `DECKGL_BASE_MAP` overwrite default values
+:::

Review Comment:
   ### Incomplete Warning About Configuration Override <sub>![category 
Functionality](https://img.shields.io/badge/Functionality-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The warning about DECKGL_BASE_MAP overwriting defaults is grammatically 
incorrect and doesn't explain the implications.
   
   
   ###### Why this matters
   Users might accidentally remove all default tile options without 
understanding the consequences of their configuration.
   
   ###### Suggested change ∙ *Feature Preview*
   Update the warning to be more informative:
   ```markdown
   :::warning
   Setting `DECKGL_BASE_MAP` will completely overwrite all default values. If 
you want to keep any default tiles, you must include them in your new 
configuration.
   :::
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/5caf80a7-22d2-4de8-a0e7-2c48e27895a6/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/5caf80a7-22d2-4de8-a0e7-2c48e27895a6?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/5caf80a7-22d2-4de8-a0e7-2c48e27895a6?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/5caf80a7-22d2-4de8-a0e7-2c48e27895a6?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/5caf80a7-22d2-4de8-a0e7-2c48e27895a6)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:1b45a4e5-63f3-440d-837b-2a6edda8d375 -->
   
   
   [](1b45a4e5-63f3-440d-837b-2a6edda8d375)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to