import { NavigationContainerRefContext, NavigationContext, NavigationProp, } from '@react-native-bedrock/native/@react-navigation/native'; import { useContext } from 'react'; /** * @name useNavigationSafely * @category Hooks * @kind function * @link https://github.com/react-navigation/react-navigation/blob/d1cd940d9a3fb46bec0eb6bf4f8023789fc93b28/packages/core/src/useNavigation.tsx#L13 * @description * `@react-navigation/native`에서 화면 간의 이동을 관리하는 [`useNavigation`](https://reactnavigation.org/docs/use-navigation/)을 안전하게 사용할 수 있도록 만든 Hook이에요. * 이 Hook은 `@react-navigation/native`에서 제공하는 `useNavigation`을 기반으로 만들어 졌지만, `navigation`이나 `root` 객체가 `null`이거나 `undefined`일 때 에러를 발생시키지 않아 보다 안전하게 동작해요. * 또, `@react-navigation/native`를 사용하지 않는 환경에서도 코드가 안전하게 동작하게 만들어 사용자가 에러를 경험하지 않아요. * * @returns {NavigationProp | undefined} - 화면이 보이는 상태이에요. * @example * ```typescript * const navigation = useNavigationSafely(); * const isNavigationFocused = () => navigation?.isFocused() ?? true; * ``` */ export function useNavigationSafely(): NavigationProp | undefined { const root = useContext(NavigationContainerRefContext); const navigation = useContext(NavigationContext); return (navigation ?? root ?? undefined) as NavigationProp | undefined; }