import { useCallback } from "react"; import { Platform, StatusBar, View } from "react-native"; import { SceneRendererProps, NavigationState, } from "react-native-tab-view-next"; import { Route, CollapsibleTabView, CollapsibleTabViewProps, } from "@showtime-xyz/universal.collapsible-tab-view"; import { Haptics } from "@showtime-xyz/universal.haptics"; import { useIsDarkMode } from "@showtime-xyz/universal.hooks"; import { useSafeAreaInsets } from "@showtime-xyz/universal.safe-area"; import { colors } from "@showtime-xyz/universal.tailwind"; import { RefreshControl } from "./refresh-control"; import { ScollableAutoWidthTabBar } from "./scrollable-auto-width-tab-bar"; import { ScollableTabBar } from "./scrollable-tab-bar"; import { TabSpinner } from "./tab-spinner"; export * from "@showtime-xyz/universal.collapsible-tab-view"; export * from "./tab-flash-list"; export * from "react-native-tab-view-next"; export * from "./tab-flash-list-scroll-view"; export * from "./tab-bar-single"; export * from "./tab-spinner"; export * from "./scrollable-auto-width-tab-bar"; export * from "./scrollable-tab-bar"; export * from "./tab-bar-vertical"; type TabBarProps = CollapsibleTabViewProps & { autoWidthTabBar?: boolean; hideTabBar?: boolean; }; export const StatusBarHeight = StatusBar.currentHeight ?? 0; function HeaderTabView({ autoWidthTabBar, renderScene, navigationState, hideTabBar = false, renderTabBar: renderTabBarProps, ...props }: TabBarProps) { const insets = useSafeAreaInsets(); const isDark = useIsDarkMode(); const renderTabBar = useCallback( ( props: SceneRendererProps & { navigationState: NavigationState; } ) => { if ( hideTabBar || !props.navigationState?.routes || props.navigationState?.routes?.length === 0 ) { return null; } if (renderTabBarProps) { return renderTabBarProps(props); } return ( <> {autoWidthTabBar ? ( ) : ( )} ); }, [autoWidthTabBar, hideTabBar, renderTabBarProps] ); const onPullEnough = useCallback(() => { Haptics.impactAsync(); }, []); const _renderScene = ( props: SceneRendererProps & { route: Route; } ) => { const focused = navigationState.index === props.route?.index || Platform.OS !== "web"; return ( <> {renderScene(props as any)} {Platform.OS === "web" && ( )} ); }; return ( ); } export { Route, HeaderTabView };