32 lines
832 B
TypeScript
32 lines
832 B
TypeScript
"use client"
|
|
|
|
import { useEffect, useRef } from "react"
|
|
import { useMap } from "react-map-gl/mapbox"
|
|
|
|
export interface BaseLayerProps {
|
|
visible?: boolean
|
|
beforeId?: string
|
|
}
|
|
|
|
export default function BaseLayer({ visible = true, beforeId }: BaseLayerProps) {
|
|
const { current: map } = useMap()
|
|
const layersAdded = useRef(false)
|
|
|
|
// Find the first symbol layer in the map style to insert layers before it
|
|
const getBeforeLayerId = (): string | undefined => {
|
|
if (!map || !beforeId) return undefined
|
|
|
|
if (beforeId) return beforeId
|
|
|
|
const layers = map.getStyle().layers
|
|
for (const layer of layers) {
|
|
if (layer.type === "symbol") {
|
|
return layer.id
|
|
}
|
|
}
|
|
return undefined
|
|
}
|
|
|
|
return { map, layersAdded, getBeforeLayerId }
|
|
}
|