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.

57 lines
1.8 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. export default function App() {
  18. const [user, setUser] = useState();
  19. const [isReady, setIsReady] = useState();
  20. const restoreUser = async () => {
  21. const user = await authStorage.getUser();
  22. global.location = await getLocation();
  23. if (user) setUser(user);
  24. };
  25. if (!isReady)
  26. return (
  27. <AppLoading startAsync={restoreUser} onFinish={() => setIsReady(true)} />
  28. );
  29. global.userDataBase = openDatabase();
  30. initDatabase(global.userDataBase);
  31. return (
  32. <AuthContext.Provider
  33. value={{
  34. user,
  35. setUser,
  36. }}
  37. >
  38. <CurrentLocationProvider>
  39. <EventLocationProvider>
  40. <MapDataProvider>
  41. <NavigationContainer theme={navigationTheme}>
  42. {user ? <AppNavigator /> : <AuthNavigator />}
  43. <FlashMessage position="top" />
  44. </NavigationContainer>
  45. </MapDataProvider>
  46. </EventLocationProvider>
  47. </CurrentLocationProvider>
  48. </AuthContext.Provider>
  49. );
  50. }