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

121 lines (119 loc) 3.57 kB
"use strict"; /** * External dependencies */ import { useEffect, useState } from 'react'; /** * Internal dependencies */ import useRefState from "../compose/useRefState.js"; import promiseQueue from "../promiseQueue.js"; import { MarkerHotspotPlaces } from "../constants.js"; import { MapLayerMarkerModule } from "../nativeMapModules.js"; import { NativeEventEmitter } from 'react-native'; const Module = MapLayerMarkerModule; ; const Marker = ({ nativeNodeHandle, layerUuid, position, title = '', description = '', symbol = null, onCreate, onRemove, onChange, onError, onPress, onLongPress, onTrigger }) => { // @ts-ignore const [random, setRandom] = useState(0); const [uuid, setUuid] = useRefState(null); const [triggerCreateNew, setTriggerCreateNew] = useState(null); const create = () => { setUuid(false); promiseQueue.enqueue(() => { return Module.createMarker(nativeNodeHandle, layerUuid, position, title, description, symbol).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 && position) { create(); } return () => { if (!!uuid && nativeNodeHandle) { promiseQueue.enqueue(() => { return Module.removeMarker(nativeNodeHandle, layerUuid, uuid).then(removedUuid => { onRemove ? onRemove({ uuid: removedUuid }) : null; }).catch(err => { console.log('ERROR', err); onError ? onError(err) : null; }); }); } }; }, [!!uuid, triggerCreateNew]); useEffect(() => { if (nativeNodeHandle && !!uuid) { promiseQueue.enqueue(() => { return Module.removeMarker(nativeNodeHandle, layerUuid, uuid).then(() => { setUuid(null); setTriggerCreateNew(Math.random()); }).catch(err => { console.log('ERROR', err); onError ? onError(err) : null; }); }); } else if (uuid === null && position) { setTriggerCreateNew(Math.random()); } }, [position ? position.lng + position.lat : null, symbol ? Object.values(symbol).join('') : null]); useEffect(() => { const eventEmitter = new NativeEventEmitter(); let eventListener = eventEmitter.addListener('MarkerItemSingleTapUp', response => { if (response.uuid === uuid && onPress) { onPress(response); } }); return () => { eventListener.remove(); }; }, [uuid, onPress]); useEffect(() => { const eventEmitter = new NativeEventEmitter(); let eventListener = eventEmitter.addListener('MarkerItemLongPress', response => { if (response.uuid === uuid && onLongPress) { onLongPress(response); } }); return () => { eventListener.remove(); }; }, [uuid, onLongPress]); useEffect(() => { const eventEmitter = new NativeEventEmitter(); let eventListener = eventEmitter.addListener('MarkerItemTriggerEvent', response => { if (response.uuid === uuid && onTrigger) { onTrigger(response); } }); return () => { eventListener.remove(); }; }, [uuid, onTrigger]); return null; }; Marker.MarkerHotspotPlaces = MarkerHotspotPlaces; export default Marker; //# sourceMappingURL=Marker.js.map