react-native-mapsforge-vtm
Version:
React Native components to build vector maps using Mapsforges fork of vtm. Offline rendering of OpenStreetMap data. Android only
62 lines (58 loc) • 1.84 kB
JavaScript
;
/**
* External dependencies
*/
import { useEffect, useState } from 'react';
import { NativeModules, NativeEventEmitter } from 'react-native';
/**
* Internal dependencies
*/
const {
MapLayerMapsforgeModule
} = NativeModules;
const useRenderStyleOptions = ({
renderTheme,
nativeNodeHandle,
onError
}) => {
const [renderStyleOptions, setRenderStyleOptions] = useState([]);
const [renderStyleDefaultId, setRenderStyleDefault] = useState(null);
useEffect(() => {
const eventEmitter = new NativeEventEmitter();
let eventListener = eventEmitter.addListener('RenderThemeParsed', result => {
if (result && renderTheme === result.filePath) {
setRenderStyleOptions(Object.values(result.collection));
if (null == renderStyleDefaultId) {
const defaultStyle = Object.values(result.collection).find(obj => !!obj.default);
if (undefined !== defaultStyle) {
setRenderStyleDefault(defaultStyle.value);
}
}
}
});
return () => {
eventListener.remove();
};
}, [nativeNodeHandle]);
// ??? should reset on prop change !!!
useEffect(() => {
if (renderTheme) {
MapLayerMapsforgeModule.getRenderThemeOptions(renderTheme).then(collection => {
setRenderStyleOptions(Object.values(collection));
const defaultStyle = Object.values(collection).find(obj => obj.default);
if (undefined !== defaultStyle && !!defaultStyle) {
setRenderStyleDefault(defaultStyle.value);
}
}).catch(err => {
console.log('ERROR', err);
onError ? onError(err) : null;
});
}
}, [nativeNodeHandle, renderTheme]);
return {
renderStyleDefaultId,
renderStyleOptions
};
};
export default useRenderStyleOptions;
//# sourceMappingURL=useRenderStyleOptions.js.map