@vis.gl/react-maplibre
Version:
React components for Maplibre GL JS
56 lines • 1.39 kB
JavaScript
/** These methods may break the react binding if called directly */
const skipMethods = [
'setMaxBounds',
'setMinZoom',
'setMaxZoom',
'setMinPitch',
'setMaxPitch',
'setRenderWorldCopies',
'setProjection',
'setStyle',
'addSource',
'removeSource',
'addLayer',
'removeLayer',
'setLayerZoomRange',
'setFilter',
'setPaintProperty',
'setLayoutProperty',
'setLight',
'setTerrain',
'setFog',
'remove'
];
export default function createRef(mapInstance) {
if (!mapInstance) {
return null;
}
const map = mapInstance.map;
const result = {
getMap: () => map
};
for (const key of getMethodNames(map)) {
// @ts-expect-error
if (!(key in result) && !skipMethods.includes(key)) {
result[key] = map[key].bind(map);
}
}
return result;
}
function getMethodNames(obj) {
const result = new Set();
let proto = obj;
while (proto) {
for (const key of Object.getOwnPropertyNames(proto)) {
if (key[0] !== '_' &&
typeof obj[key] === 'function' &&
key !== 'fire' &&
key !== 'setEventedParent') {
result.add(key);
}
}
proto = Object.getPrototypeOf(proto);
}
return Array.from(result);
}
//# sourceMappingURL=create-ref.js.map