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.

64 lines
2.3 KiB

  1. import React, { useState } from "react";
  2. import { NavigationContainer } from "@react-navigation/native";
  3. import navigationTheme from "./app/navigation/navigationTheme";
  4. import "./app/config/globals.js";
  5. import openDatabase from "./app/database/database-connection";
  6. import { AppLoading } from "expo";
  7. import initDatabase from "./app/database/database-init";
  8. import FlashMessage from "react-native-flash-message";
  9. import AppNavigator from "./app/navigation/AppNavigator";
  10. import EventLocationProvider from "./app/context/EventLocationContext";
  11. import CurrentLocationProvider from "./app/context/CurrentLocationContext";
  12. import AuthNavigator from "./app/navigation/AuthNavigator";
  13. import { AuthContext } from "./app/auth/context";
  14. import authStorage from "./app/auth/storage";
  15. import MapDataProvider from "./app/context/MapDataContext";
  16. import { getLocation } from "./app/hooks/useLocation";
  17. import { useFiltering } from "./app/hooks/useFiltering";
  18. import NoInternetConnectionScreen from "./app/screens/NoInternetConnectionScreen";
  19. import NetInfo, { useNetInfo } from "@react-native-community/netinfo";
  20. export default function App() {
  21. const [user, setUser] = useState();
  22. const [isReady, setIsReady] = useState();
  23. const netInfo = useNetInfo();
  24. const restoreUser = async () => {
  25. const user = await authStorage.getUser();
  26. global.location = { lat: -23.623, long: -46.5637 }; // await getLocation();
  27. if (user) setUser(user);
  28. };
  29. if (!isReady && netInfo.isInternetReachable) {
  30. return (
  31. <AppLoading startAsync={restoreUser} onFinish={() => setIsReady(true)} />
  32. );
  33. } else if (netInfo.isInternetReachable) {
  34. global.userDataBase = openDatabase();
  35. initDatabase(global.userDataBase);
  36. global.formsSockets = useFiltering(global.location);
  37. return (
  38. <AuthContext.Provider
  39. value={{
  40. user,
  41. setUser,
  42. }}
  43. >
  44. <CurrentLocationProvider>
  45. <EventLocationProvider>
  46. <MapDataProvider>
  47. <NavigationContainer theme={navigationTheme}>
  48. {user ? <AppNavigator /> : <AuthNavigator />}
  49. <FlashMessage position="top" />
  50. </NavigationContainer>
  51. </MapDataProvider>
  52. </EventLocationProvider>
  53. </CurrentLocationProvider>
  54. </AuthContext.Provider>
  55. );
  56. } else return <NoInternetConnectionScreen />;
  57. }