import * as React from "react";
import PropTypes from "prop-types";
import {
View,
StyleSheet,
NativeModules,
requireNativeComponent
} from "react-native";
import NativeBridgeComponent from "./NativeBridgeComponent";
import { isAndroid } from "../utils";
const MODULE_NAME = "HeremapsMapView";
const ANDROID_MODULE_NAME = "HereMapsAndroidMapView";
const HereMaps = requireNativeComponent(MODULE_NAME);
interface MapViewProps {}
interface MapViewState {
isReady: boolean | null;
}
const styles = StyleSheet.create({
matchParent: { flex: 1 }
});
/**
* MapView backed by HereMaps
*/
class MapView extends NativeBridgeComponent(React.Component) {
constructor(props) {
super(props, MODULE_NAME);
this.state = {
isReady: null
};
}
_setNativeRef(nativeRef) {
this._nativeRef = nativeRef;
super._runPendingNativeCommands(nativeRef);
}
_onLayout(e) {
this.setState({
isReady: true,
width: e.nativeEvent.layout.width,
height: e.nativeEvent.layout.height
});
}
render() {
const props = {
...this.props,
style: styles.matchParent
};
const callbacks = {
ref: nativeRef => this._setNativeRef(nativeRef)
};
let mapView = null;
if (isAndroid() && !this.state.isReady) {
mapView = (
{this.props.children}
);
} else if (this.state.isReady) {
mapView = (
{this.props.children}
);
}
return (
{mapView}
);
}
}
const HereMapsView = requireNativeComponent(MODULE_NAME, MapView);
let HereMapsAndroidView;
if (isAndroid()) {
HereMapsAndroidView = requireNativeComponent(ANDROID_MODULE_NAME, MapView);
}
export default MapView;