react-native-navigation-mode
Version:
Detect Android navigation mode (3-button, 2-button, or gesture)
75 lines (72 loc) • 1.91 kB
JavaScript
;
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