61 lines
2.3 KiB
JavaScript

/*
Предрейсовые осмотры - мобильное приложение
Корневой layout приложения
*/
//---------------------
//Подключение библиотек
//---------------------
const React = require('react'); //React и хуки
const { useColorScheme } = require('react-native'); //Определение темы устройства
const { SafeAreaProvider } = require('react-native-safe-area-context'); //Провайдер безопасной области
const AppShell = require('./AppShell'); //Оболочка приложения
const { useAppNavigationContext } = require('./AppNavigationProvider'); //Контекст навигации
const { useAppAuthContext } = require('./AppAuthProvider'); //Контекст авторизации
const { useAppLocalDbContext } = require('./AppLocalDbProvider'); //Контекст локальной БД
//-----------
//Тело модуля
//-----------
//Корневой layout приложения
function AppRoot() {
const colorScheme = useColorScheme();
const isDarkMode = colorScheme === 'dark';
const { setInitialScreen, SCREENS } = useAppNavigationContext();
const { isAuthenticated, isInitialized } = useAppAuthContext();
const { isDbReady } = useAppLocalDbContext();
//Флаг для предотвращения повторной установки начального экрана
const initialScreenSetRef = React.useRef(false);
//Установка начального экрана при готовности
React.useEffect(() => {
//Ждём инициализации БД и авторизации
if (!isDbReady || !isInitialized || initialScreenSetRef.current) {
return;
}
initialScreenSetRef.current = true;
//Если авторизован - показываем главный экран
if (isAuthenticated) {
setInitialScreen(SCREENS.MAIN);
}
}, [isDbReady, isInitialized, isAuthenticated, setInitialScreen, SCREENS.MAIN]);
return (
<SafeAreaProvider>
<AppShell isDarkMode={isDarkMode} />
</SafeAreaProvider>
);
}
//----------------
//Интерфейс модуля
//----------------
module.exports = AppRoot;