import React from 'react'; import MapboxGL from 'react-native-mapbox-gl'; import { View, Text, FlatList, StyleSheet, Modal, TouchableOpacity, } from 'react-native'; import { Icon } from 'react-native-elements'; // components import MapHeader from './components/common/MapHeader'; // styles import sheet from './styles/sheet'; import colors from './styles/colors'; // utils import { IS_ANDROID } from './utils'; import config from './utils/config'; // examples import ShowMap from './components/ShowMap'; import SetPitch from './components/SetPitch'; import SetBearing from './components/SetBearing'; import ShowClick from './components/ShowClick'; import FlyTo from './components/FlyTo'; import FitBounds from './components/FitBounds'; import SetUserTrackingModes from './components/SetUserTrackingModes'; import ShowRegionDidChange from './components/ShowRegionDidChange'; import YoYo from './components/YoYo'; import EarthQuakes from './components/EarthQuakes'; import GeoJSONSource from './components/GeoJSONSource'; import WatercolorRasterTiles from './components/WatercolorRasterTiles'; import TwoByTwo from './components/TwoByTwo'; import IndoorBuilding from './components/IndoorBuilding'; const styles = StyleSheet.create({ header: { marginTop: 48, fontSize: 24, textAlign: 'center', }, exampleList: { flex: 1, marginTop: 60 + 12, // header + list padding, }, exampleListItemBorder: { borderBottomWidth: StyleSheet.hairlineWidth, borderBottomColor: '#ccc', }, exampleListItem: { paddingVertical: 32, paddingHorizontal: 16, flexDirection: 'row', justifyContent: 'space-between', }, exampleListLabel: { fontSize: 18, }, exampleBackground: { flex: 1, backgroundColor: colors.primary.pinkFaint, }, }); class ExampleItem { constructor (label, Component) { this.label = label; this.Component = Component; } } const Examples = [ new ExampleItem('Show Map', ShowMap), new ExampleItem('Set Pitch', SetPitch), new ExampleItem('Set Bearing', SetBearing), new ExampleItem('Show Click', ShowClick), new ExampleItem('Fly To', FlyTo), new ExampleItem('Fit Bounds', FitBounds), new ExampleItem('Set User Tracking Modes', SetUserTrackingModes), new ExampleItem('Show Region Did Change', ShowRegionDidChange), new ExampleItem('Yo Yo Camera', YoYo), new ExampleItem('Clustering Earthquakes', EarthQuakes), new ExampleItem('GeoJSON Source', GeoJSONSource), new ExampleItem('Watercolor Raster Tiles', WatercolorRasterTiles), new ExampleItem('Two Map Views', TwoByTwo), new ExampleItem('Indoor Building Map', IndoorBuilding), ]; class App extends React.Component { constructor (props) { super(props); this.state = { activeExample: -1, }; this.renderItem = this.renderItem.bind(this); this.onCloseExample = this.onCloseExample.bind(this); } async componentWillMount () { if (IS_ANDROID) { await MapboxGL.requestPermissions(); } MapboxGL.setAccessToken(config.get('accessToken')); } getActiveItem () { if (this.state.activeExample < 0 || this.state.activeExample >= Examples.length) { return null; } return Examples[this.state.activeExample]; } onExamplePress (activeExamplePosition) { this.setState({ activeExample: activeExamplePosition }); } onCloseExample () { this.setState({ activeExample: -1 }); } renderItem ({ item, index }) { return ( this.onExamplePress(index)}> {item.label} ); } renderActiveExample () { const item = this.getActiveItem(); const modalProps = { visible: !!item, transparent: true, animationType: 'slide', onRequestClose: this.onCloseExample, }; return ( {modalProps.visible ? ( ) : null} ); } render () { return ( item.label} renderItem={this.renderItem} /> {this.renderActiveExample()} ); } } export default App;