import { StyleSheet, View, Platform } from 'react-native'; import * as FileSystem from 'expo-file-system'; import { useEffect, useState } from 'react'; import MapView, { UrlTile, Geojson, Marker } from 'react-native-maps'; import initDB from './app/database/db'; import {fetchRegion, getForRegion} from './app/api/api'; import {loadGeoJSONData, loadMarkersData} from './app/functions'; import NetInfo from "@react-native-community/netinfo"; const tilesBaseURL = 'https://maps.nomadmania.com/tiles_osm'; const localTileDir = `${FileSystem.documentDirectory}tiles`; export default function App() { const [isConnected, setIsConnected] = useState(null); const [geoJSON, setGeoJSON] = useState(null); const [markers, setMarkers] = useState(null); const region = 226; useEffect(() => { const unsubscribe = NetInfo.addEventListener(state => { setIsConnected(state.isConnected); }); return () => unsubscribe(); }, []); useEffect(() => { async function prepare() { if (isConnected !== null) { console.log("Connected: ", isConnected); if (isConnected) { await fetchRegion(region); await getForRegion(region); } await loadMarkersData().then(data => { setMarkers(data); }).catch(error => { console.error("Error loading markers data: ", error); }) await loadGeoJSONData(region).then(data => { setGeoJSON({ type: 'FeatureCollection', features: [ { type: 'Feature', properties: { }, geometry: { type: data?.type, coordinates: data?.coordinates, } } ] }); }).catch(error => { console.error("Error loading GeoJSON data: ", error); }); } } initDB(); prepare(); }, [isConnected]); const renderLocalTiles = () => { return ( ); }; function renderGeoJSON() { if (!geoJSON) return null; return ( ); }; const renderMarkers = () => { if (!markers) return null; return markers?.map((marker, idx) => ( )); }; return ( {renderLocalTiles()} {renderGeoJSON()} {renderMarkers()} ); } const styles = StyleSheet.create({ container: { flex: 1, }, map: { flex: 1, }, });