/* eslint-disable @typescript-eslint/ban-types */ import { useMemo } from 'react'; import { RouteProp, useRoute } from '@react-navigation/native'; type NavigationParams = object | undefined; export type NavigationDetails = readonly [string, T]; export const createNavigationDetails = (name: string, screen?: string) => (params?: T) => [name, screen ? { screen, params } : params] as const; type RouteParams = RouteProp<{ route: T }, 'route'>; export const useParams = < T extends object | undefined, Strict extends boolean = false, >( defaults?: Partial, ) => { const route = useRoute>(); const navParams = route.params; const params = useMemo( () => ({ ...defaults, ...navParams }), [defaults, navParams], ); return params as Strict extends false ? T : Partial; };