@@ -12,6 +12,8 @@ import { LuLayers } from "react-icons/lu";
1212
1313import { cn } from "@/lib/utils" ;
1414
15+ import { BasemapIds , BASEMAPS } from "@/constants/basemaps" ;
16+
1517import { useMap } from "@/components/map/provider" ;
1618import { Popover , PopoverContent , PopoverTrigger } from "@/components/ui/popover" ;
1719import { Tooltip , TooltipArrow , TooltipContent , TooltipTrigger } from "@/components/ui/tooltip" ;
@@ -23,50 +25,6 @@ export interface BasemapControlProps {
2325 onBasemapChange ?: ( selectedBasemapId : BasemapIds ) => void ;
2426}
2527
26- export const BASEMAPS = [
27- {
28- id : "gray-vector" ,
29- label : "basemap-gray" ,
30- basemap : Basemap . fromId ( "gray-vector" ) ,
31- } ,
32- {
33- id : "dark-gray-vector" ,
34- label : "basemap-dark-gray" ,
35- basemap : Basemap . fromId ( "dark-gray-vector" ) ,
36- } ,
37- {
38- id : "satellite" ,
39- label : "basemap-satellite" ,
40- basemap : Basemap . fromId ( "satellite" ) ,
41- } ,
42- {
43- id : "streets" ,
44- label : "basemap-streets" ,
45- basemap : Basemap . fromId ( "streets" ) ,
46- } ,
47- {
48- id : "hybrid" ,
49- label : "basemap-hybrid" ,
50- basemap : Basemap . fromId ( "hybrid" ) ,
51- } ,
52- {
53- id : "osm" ,
54- label : "basemap-osm" ,
55- basemap : Basemap . fromId ( "osm" ) ,
56- } ,
57- {
58- id : "topo-vector" ,
59- label : "basemap-topographic" ,
60- basemap : Basemap . fromId ( "topo-vector" ) ,
61- } ,
62- {
63- id : "terrain" ,
64- label : "basemap-terrain" ,
65- basemap : Basemap . fromId ( "terrain" ) ,
66- } ,
67- ] as const ;
68- export type BasemapIds = ( typeof BASEMAPS ) [ number ] [ "id" ] ;
69-
7028export const BasemapControl : FC < BasemapControlProps > = ( {
7129 className,
7230 onBasemapChange,
@@ -84,6 +42,13 @@ export const BasemapControl: FC<BasemapControlProps> = ({
8442 [ mapContext , onBasemapChange ] ,
8543 ) ;
8644
45+ const BS = useMemo ( ( ) => {
46+ return BASEMAPS . map ( ( b ) => ( {
47+ ...b ,
48+ basemap : Basemap . fromId ( b . id ) ,
49+ } ) ) ;
50+ } , [ ] ) ;
51+
8752 const activeBasemapId = useMemo ( ( ) => mapContext ?. map ?. basemap ?. id , [ mapContext ?. map ?. basemap ] ) ;
8853
8954 return (
@@ -108,12 +73,14 @@ export const BasemapControl: FC<BasemapControlProps> = ({
10873
10974 < PopoverContent side = "left" align = "start" className = "w-auto bg-background p-0" >
11075 < ul className = "flex flex-col" >
111- { BASEMAPS . map ( ( b ) => {
76+ { BS . map ( ( b ) => {
11277 return (
11378 < li key = { b . id } className = "flex" >
11479 < button
11580 className = { cn ( {
116- "group flex w-full items-center space-x-2 p-2 transition-colors duration-200 hover:bg-muted" : true ,
81+ "group flex w-full items-center space-x-2 p-2 transition-colors duration-200 hover:bg-muted" :
82+ //
83+ true ,
11784 "bg-foreground hover:bg-foreground" : activeBasemapId === b . id ,
11885 } ) }
11986 type = "button"
0 commit comments