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,
},
});