You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

86 lines
2.8 KiB

import React, { useState, useEffect } from "react";
import { NavigationContainer } from "@react-navigation/native";
import navigationTheme from "./app/navigation/navigationTheme";
import "./app/config/globals.js";
import AppLoading from "expo-app-loading";
import FlashMessage from "react-native-flash-message";
import AppNavigator from "./app/navigation/AppNavigator";
import EventLocationProvider from "./app/context/EventLocationContext";
import CurrentLocationProvider from "./app/context/CurrentLocationContext";
import AuthNavigator from "./app/navigation/AuthNavigator";
import { AuthContext } from "./app/auth/context";
import authStorage from "./app/auth/storage";
import MapDataProvider from "./app/context/MapDataContext";
import { getLocation } from "./app/hooks/useLocation";
import { useFiltering } from "./app/hooks/useFiltering";
import NoInternetConnectionScreen from "./app/screens/NoInternetConnectionScreen";
import NetInfo, { useNetInfo } from "@react-native-community/netinfo";
import getPluviometerStation from "./app/hooks/usePluviometricStation";
export default function App() {
const [user, setUser] = useState();
const [pluviometerStation, setPluviometerStation] = useState(undefined);
const [isReady, setIsReady] = useState();
const netInfo = useNetInfo();
useEffect(() => {
if (user?.username != null) {
if (pluviometerStation == undefined) {
getPluviometerStation(user.id, setPluviometerStation);
}
authStorage.setUser(user);
}
else{
setPluviometerStation(undefined);
}
}, [user]);
useEffect(() => {
if (user?.username != null) {
setUser({ ...user, pluviometer: pluviometerStation });
}
}, [pluviometerStation]);
console.log(pluviometerStation);
const restoreUser = async () => {
const storageUser = await authStorage.getUser();
if (storageUser) setUser(storageUser);
global.location = await getLocation();
};
if (!isReady && netInfo.isInternetReachable) {
return (
<AppLoading
startAsync={restoreUser}
onFinish={() => setIsReady(true)}
onError={(e) => console.log(e)}
/>
);
} else if (netInfo.isInternetReachable) {
global.formsSockets = useFiltering(global.location || global.defaultLocation);
return (
<AuthContext.Provider
value={{
user,
setUser,
}}
>
<CurrentLocationProvider>
<EventLocationProvider>
<MapDataProvider>
<NavigationContainer theme={navigationTheme}>
{user ? <AppNavigator /> : <AuthNavigator />}
<FlashMessage position="top" />
</NavigationContainer>
</MapDataProvider>
</EventLocationProvider>
</CurrentLocationProvider>
</AuthContext.Provider>
);
} else return <NoInternetConnectionScreen />;
}