|
1 | 1 | import { useState } from 'react'; |
2 | 2 |
|
3 | | -import { MAPBOX_TOKEN, BASEMAP_OPTIONS } from '../config'; |
| 3 | +import { baseLayers } from '../config'; |
4 | 4 |
|
5 | 5 | export const BasemapMenu = ({ map }) => { |
6 | | - // Remove elements that require mapbox token; |
7 | | - let styles = BASEMAP_OPTIONS; |
8 | | - if (!MAPBOX_TOKEN) { |
9 | | - styles = BASEMAP_OPTIONS.filter((s) => typeof s.value === 'object'); |
10 | | - } |
| 6 | + const [basemap, setBasemap] = useState('OSM'); |
11 | 7 |
|
12 | | - const [basemap, setBasemap] = useState(styles[0].label); |
13 | | - |
14 | | - const handleClick = (style) => { |
15 | | - let styleValue = style.value; |
16 | | - |
17 | | - if (typeof style.value === 'string') { |
18 | | - styleValue = 'mapbox://styles/mapbox/' + style.value; |
19 | | - } |
20 | | - map.setStyle(styleValue); |
21 | | - setBasemap(style.label); |
| 8 | + const handleClick = (activeLayer) => { |
| 9 | + // toggle visibiity as per active base layer |
| 10 | + Object.keys(baseLayers).forEach((layer) => { |
| 11 | + map.setLayoutProperty( |
| 12 | + `${layer}-layer`, |
| 13 | + 'visibility', |
| 14 | + `${activeLayer}-layer` === `${layer}-layer` ? 'visible' : 'none', |
| 15 | + ); |
| 16 | + }); |
| 17 | + setBasemap(activeLayer); |
22 | 18 | }; |
23 | 19 |
|
24 | 20 | return ( |
25 | 21 | <div className="bg-white blue-dark flex mt2 ml2 f7 fr br1 shadow-1"> |
26 | | - {styles.map((style, k) => { |
| 22 | + {Object.keys(baseLayers).map((baseLayer, k) => { |
27 | 23 | return ( |
28 | 24 | <div |
29 | 25 | key={k} |
30 | | - onClick={() => handleClick(style)} |
| 26 | + onClick={() => handleClick(baseLayer)} |
31 | 27 | className={`ttc pv2 ph3 pointer link + ${ |
32 | | - basemap === style.label ? 'bg-grey-light fw6' : '' |
| 28 | + basemap === baseLayer ? 'bg-grey-light fw6' : '' |
33 | 29 | }`} |
34 | 30 | > |
35 | | - {style.label} |
| 31 | + {k === 0 ? `Default (${baseLayer})` : baseLayer} |
36 | 32 | </div> |
37 | 33 | ); |
38 | 34 | })} |
|
0 commit comments