UNPKG

react-native-mapsforge-vtm

Version:

React Native components to build vector maps using Mapsforges fork of vtm. Offline rendering of OpenStreetMap data. Android only

107 lines (104 loc) 3.36 kB
"use strict"; /** * External dependencies */ import { useEffect, useState } from 'react'; /** * Internal dependencies */ import useRefState from "../compose/useRefState.js"; import promiseQueue from "../promiseQueue.js"; import { MapLayerBitmapTileModule } from "../nativeMapModules.js"; const Module = MapLayerBitmapTileModule; const LayerBitmapTile = ({ nativeNodeHandle, reactTreeIndex, url = 'https://tile.openstreetmap.org/{Z}/{X}/{Y}.png', alpha = 1, zoomMin = 1, zoomMax = 20, enabledZoomMin = 1, enabledZoomMax = 20, cacheSize = 0, cacheDirBase = '/', // if `/`, will fallback to java getReactApplicationContext().getCacheDir(); cacheDirChild = '', // if ``, will fallback to slugify url; onCreate, onRemove, onChange, onError }) => { // @ts-ignore const [random, setRandom] = useState(0); const [uuid, setUuid] = useRefState(null); const [triggerCreateNew, setTriggerCreateNew] = useState(null); const createLayer = () => { setUuid(false); promiseQueue.enqueue(() => { return Module.createLayer(nativeNodeHandle, url, alpha, // The BitmapTileLayer will ensure its between 0 and 1. Math.round(zoomMin), Math.round(zoomMax), Math.round(enabledZoomMin), Math.round(enabledZoomMax), Math.round(cacheSize), cacheDirBase.trim(), cacheDirChild.trim(), reactTreeIndex).then(response => { setUuid(response.uuid); setRandom(Math.random()); null === triggerCreateNew ? onCreate ? onCreate(response) : null : onChange ? onChange(response) : null; }).catch(err => { console.log('ERROR', err); onError ? onError(err) : null; }); }); }; useEffect(() => { if (uuid === null && nativeNodeHandle) { createLayer(); } return () => { if (uuid && nativeNodeHandle) { promiseQueue.enqueue(() => { return Module.removeLayer(nativeNodeHandle, uuid).then(removedUuid => { onRemove ? onRemove({ uuid: removedUuid }) : null; }).catch(err => { console.log('ERROR', err); onError ? onError(err) : null; }); }); } }; }, [nativeNodeHandle, !!uuid]); // enabledZoomMin enabledZoomMax changed. useEffect(() => { if (nativeNodeHandle && uuid) { Module.updateEnabledZoomMinMax(nativeNodeHandle, uuid, Math.round(enabledZoomMin), Math.round(enabledZoomMax)).catch(err => { console.log('ERROR', err); onError ? onError(err) : null; }); } }, [enabledZoomMin, enabledZoomMax]); useEffect(() => { if (nativeNodeHandle && uuid) { Module.setAlpha(nativeNodeHandle, uuid, alpha).catch(err => { console.log('ERROR', err); onError ? onError(err) : null; }); } }, [alpha]); useEffect(() => { if (nativeNodeHandle && uuid) { promiseQueue.enqueue(() => { return Module.removeLayer(nativeNodeHandle, uuid).then(() => { setUuid(null); setTriggerCreateNew(Math.random()); }).catch(err => { console.log('ERROR', err); onError ? onError(err) : null; }); }); } }, [url, zoomMin, zoomMax, cacheSize, cacheDirBase, cacheDirChild]); return null; }; LayerBitmapTile.isMapLayer = true; export default LayerBitmapTile; //# sourceMappingURL=LayerBitmapTile.js.map