UNPKG

react-native-navigation-mode

Version:

Detect Android navigation mode (3-button, 2-button, or gesture)

75 lines (72 loc) 1.91 kB
"use strict"; import { Platform } from 'react-native'; import React from 'react'; import NavigationModeModule from "./NativeNavigationMode.js"; /** * Get detailed navigation mode information * Returns navigation type, interaction mode, and device info */ export function getNavigationMode() { if (Platform.OS === 'ios') { // iOS always uses gesture navigation (no 3-button navigation exists) return Promise.resolve({ type: 'gesture', isGestureNavigation: true }); } return NavigationModeModule.getNavigationMode(); } /** * Quick check if the device is using gesture-based navigation * @returns Promise<boolean> - true if gesture navigation is active */ export function isGestureNavigation() { if (Platform.OS === 'ios') { // iOS always uses gesture navigation return Promise.resolve(true); } return NavigationModeModule.isGestureNavigation(); } /** * Hook for React components to get navigation mode */ export function useNavigationMode() { const [navigationMode, setNavigationMode] = React.useState(null); const [loading, setLoading] = React.useState(true); const [error, setError] = React.useState(null); React.useEffect(() => { let mounted = true; async function fetchNavigationMode() { try { const mode = await getNavigationMode(); if (mounted) { setNavigationMode(mode); setError(null); } } catch (err) { if (mounted) { setError(err instanceof Error ? err : new Error('Unknown error')); } } finally { if (mounted) { setLoading(false); } } } fetchNavigationMode(); return () => { mounted = false; }; }, []); return { navigationMode, loading, error }; } export default { getNavigationMode, isGestureNavigation, useNavigationMode }; //# sourceMappingURL=index.js.map