/* Предрейсовые осмотры - мобильное приложение Провайдер контекста навигации приложения */ //--------------------- //Подключение библиотек //--------------------- const React = require('react'); //React и хуки const useAppNavigation = require('../../hooks/useAppNavigation'); //Хук навигации const useHardwareBackPress = require('../../hooks/useHardwareBackPress'); //Хук кнопки "Назад" //----------- //Тело модуля //----------- //Контекст навигации приложения const AppNavigationContext = React.createContext(null); //Провайдер навигации приложения function AppNavigationProvider({ children }) { const navigationApi = useAppNavigation(); //Деструктурируем для использования в useCallback const { canGoBack, goBack } = navigationApi; //Обработчик аппаратной кнопки "Назад" (Android) const handleHardwareBackPress = React.useCallback(() => { //Если можно вернуться назад - возвращаемся if (canGoBack) { goBack(); return true; //Предотвращаем закрытие приложения } //Если нельзя - позволяем системе обработать (закрыть приложение) return false; }, [canGoBack, goBack]); //Подключаем обработчик кнопки "Назад" useHardwareBackPress(handleHardwareBackPress); //Мемоизация значения контекста с перечислением отдельных свойств const value = React.useMemo( () => ({ SCREENS: navigationApi.SCREENS, currentScreen: navigationApi.currentScreen, screenParams: navigationApi.screenParams, navigate: navigationApi.navigate, goBack: navigationApi.goBack, reset: navigationApi.reset, setInitialScreen: navigationApi.setInitialScreen, canGoBack: navigationApi.canGoBack }), [ navigationApi.SCREENS, navigationApi.currentScreen, navigationApi.screenParams, navigationApi.navigate, navigationApi.goBack, navigationApi.reset, navigationApi.setInitialScreen, navigationApi.canGoBack ] ); return {children}; } //Хук доступа к контексту навигации приложения function useAppNavigationContext() { const ctx = React.useContext(AppNavigationContext); if (!ctx) { throw new Error('useAppNavigationContext должен использоваться внутри AppNavigationProvider'); } return ctx; } //---------------- //Интерфейс модуля //---------------- module.exports = { AppNavigationProvider, useAppNavigationContext };