import React from 'react'; import { findNodeHandle, type NativeSyntheticEvent } from 'react-native'; import type { NativeProps as TabsHostAndroidNativeComponentProps } from '../../../fabric/tabs/TabsHostAndroidNativeComponent'; import type { NativeProps as TabsHostIOSNativeComponentProps } from '../../../fabric/tabs/TabsHostIOSNativeComponent'; import { RNSLog } from '../../../private'; import type { TabSelectedEvent } from './TabsHost.types'; type TabsHostPlatformNativeComponentProps = | TabsHostAndroidNativeComponentProps | TabsHostIOSNativeComponentProps; interface TabsHostConfig { componentNodeRef: React.RefObject | null>; onTabSelected?: | ((event: NativeSyntheticEvent) => void) | undefined; } export function useTabsHost({ componentNodeRef, onTabSelected, }: TabsHostConfig) { const componentNodeHandle = React.useRef(-1); React.useEffect(() => { if (componentNodeRef.current != null) { componentNodeHandle.current = findNodeHandle(componentNodeRef.current) ?? -1; } else { componentNodeHandle.current = -1; } }, []); const onTabSelectedCallback = React.useCallback( (event: NativeSyntheticEvent) => { RNSLog.log( `TabsHost [${ componentNodeHandle.current ?? -1 }] onTabSelected: ${JSON.stringify(event.nativeEvent)}`, ); onTabSelected?.(event); }, [onTabSelected], ); return { onTabSelected: onTabSelectedCallback, }; }