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

156 lines (153 loc) 4.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = require("react"); var _useRefState = _interopRequireDefault(require("../compose/useRefState.js")); var _promiseQueue = _interopRequireDefault(require("../promiseQueue.js")); var _nativeMapModules = require("../nativeMapModules.js"); var _reactNative = require("react-native"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /** * External dependencies */ /** * Internal dependencies */ const Module = _nativeMapModules.MapLayerPathModule; ; ; // 0 never include in response. // 1 include in response on create. // 2 include in response on change. const responseIncludeDefaults = { coordinates: 0, bounds: 0 }; const defaultStyle = { strokeWidth: 4, strokeColor: '#ff0000' }; const LayerPath = ({ nativeNodeHandle, positions = [], filePath, responseInclude = responseIncludeDefaults, gestureScreenDistance = 20, reactTreeIndex, style = defaultStyle, simplificationTolerance = 0, onCreate, onRemove, onChange, onError, onPress, onLongPress, onDoubleTap, onTrigger }) => { // @ts-ignore const [random, setRandom] = (0, _react.useState)(0); const [uuid, setUuid] = (0, _useRefState.default)(null); const [triggerCreateNew, setTriggerCreateNew] = (0, _react.useState)(null); positions = positions || []; responseInclude = { ...responseIncludeDefaults, ...responseInclude }; style = { ...defaultStyle, ...style }; const supportsGestures = !!onPress || !!onLongPress || !!onDoubleTap; const createLayer = () => { setUuid(false); _promiseQueue.default.enqueue(() => { return Module.createLayer(nativeNodeHandle, positions, filePath, style, responseInclude, !!supportsGestures, gestureScreenDistance, simplificationTolerance, 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; }); }); }; (0, _react.useEffect)(() => { if (uuid === null && nativeNodeHandle && (filePath || positions.length > 0)) { createLayer(); } return () => { if (uuid && nativeNodeHandle) { _promiseQueue.default.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, triggerCreateNew]); (0, _react.useEffect)(() => { if (nativeNodeHandle && uuid) { _promiseQueue.default.enqueue(() => { return Module.updateStyle(nativeNodeHandle, uuid, style, responseInclude).then(response => { onChange ? onChange(response) : null; }).catch(err => { console.log('ERROR', err); onError ? onError(err) : null; }); }); } }, [Object.values(style).join('')]); (0, _react.useEffect)(() => { if (nativeNodeHandle) { if (uuid) { _promiseQueue.default.enqueue(() => { return Module.removeLayer(nativeNodeHandle, uuid).then(() => { setUuid(null); setTriggerCreateNew(Math.random()); }).catch(err => { console.log('ERROR', err); onError ? onError(err) : null; }); }); } else if (uuid === null && (filePath || positions.length > 0)) { setTriggerCreateNew(Math.random()); } } }, [positions.length > 0 ? [...positions].map(pos => pos.lng + pos.lat).join('') : null, simplificationTolerance, filePath, Object.keys(responseInclude).map(key => key + responseInclude[key]).join('')]); (0, _react.useEffect)(() => { const eventEmitter = new _reactNative.NativeEventEmitter(); let eventListener = eventEmitter.addListener('PathGesture', response => { if (response.uuid === uuid) { switch (response.type) { case 'doubleTap': onDoubleTap ? onDoubleTap(response) : null; break; case 'LongPress': onLongPress ? onLongPress(response) : null; break; case 'press': onPress ? onPress(response) : null; break; case 'trigger': onTrigger ? onTrigger(response) : null; break; } } }); return () => { eventListener.remove(); }; }, [uuid, !!supportsGestures, onDoubleTap, onLongPress, onPress, onTrigger]); return null; }; LayerPath.isMapLayer = true; var _default = exports.default = LayerPath; //# sourceMappingURL=LayerPath.js.map