UNPKG

7.65 kBSource Map (JSON)View Raw
1{"version":3,"sources":["TabView.tsx"],"names":["React","StyleSheet","View","TabBar","SceneView","Pager","TabView","onIndexChange","navigationState","renderScene","initialLayout","keyboardDismissMode","lazy","lazyPreloadDistance","onSwipeStart","onSwipeEnd","renderLazyPlaceholder","renderTabBar","props","sceneContainerStyle","style","swipeEnabled","tabBarPosition","layout","setLayout","useState","width","height","jumpToIndex","index","handleLayout","e","nativeEvent","prevLayout","styles","pager","position","render","addEnterListener","jumpTo","sceneRendererProps","routes","map","route","i","key","loading","create","flex","overflow"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n StyleSheet,\n View,\n StyleProp,\n ViewStyle,\n LayoutChangeEvent,\n} from 'react-native';\nimport TabBar from './TabBar';\nimport SceneView from './SceneView';\nimport Pager from './Pager';\nimport type {\n Layout,\n NavigationState,\n Route,\n SceneRendererProps,\n PagerProps,\n} from './types';\n\nexport type Props<T extends Route> = PagerProps & {\n onIndexChange: (index: number) => void;\n navigationState: NavigationState<T>;\n renderScene: (props: SceneRendererProps & { route: T }) => React.ReactNode;\n renderLazyPlaceholder?: (props: { route: T }) => React.ReactNode;\n renderTabBar?: (\n props: SceneRendererProps & { navigationState: NavigationState<T> }\n ) => React.ReactNode;\n tabBarPosition?: 'top' | 'bottom';\n initialLayout?: Partial<Layout>;\n lazy?: ((props: { route: T }) => boolean) | boolean;\n lazyPreloadDistance?: number;\n sceneContainerStyle?: StyleProp<ViewStyle>;\n style?: StyleProp<ViewStyle>;\n};\n\nexport default function TabView<T extends Route>({\n onIndexChange,\n navigationState,\n renderScene,\n initialLayout,\n keyboardDismissMode = 'auto',\n lazy = false,\n lazyPreloadDistance = 0,\n onSwipeStart,\n onSwipeEnd,\n renderLazyPlaceholder = () => null,\n renderTabBar = (props) => <TabBar {...props} />,\n sceneContainerStyle,\n style,\n swipeEnabled = true,\n tabBarPosition = 'top',\n}: Props<T>) {\n const [layout, setLayout] = React.useState({\n width: 0,\n height: 0,\n ...initialLayout,\n });\n\n const jumpToIndex = (index: number) => {\n if (index !== navigationState.index) {\n onIndexChange(index);\n }\n };\n\n const handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n setLayout((prevLayout) => {\n if (prevLayout.width === width && prevLayout.height === height) {\n return prevLayout;\n }\n\n return { height, width };\n });\n };\n\n return (\n <View onLayout={handleLayout} style={[styles.pager, style]}>\n <Pager\n layout={layout}\n navigationState={navigationState}\n keyboardDismissMode={keyboardDismissMode}\n swipeEnabled={swipeEnabled}\n onSwipeStart={onSwipeStart}\n onSwipeEnd={onSwipeEnd}\n onIndexChange={jumpToIndex}\n >\n {({ position, render, addEnterListener, jumpTo }) => {\n // All of the props here must not change between re-renders\n // This is crucial to optimizing the routes with PureComponent\n const sceneRendererProps = {\n position,\n layout,\n jumpTo,\n };\n\n return (\n <React.Fragment>\n {tabBarPosition === 'top' &&\n renderTabBar({\n ...sceneRendererProps,\n navigationState,\n })}\n {render(\n navigationState.routes.map((route, i) => {\n return (\n <SceneView\n {...sceneRendererProps}\n addEnterListener={addEnterListener}\n key={route.key}\n index={i}\n lazy={typeof lazy === 'function' ? lazy({ route }) : lazy}\n lazyPreloadDistance={lazyPreloadDistance}\n navigationState={navigationState}\n style={sceneContainerStyle}\n >\n {({ loading }) =>\n loading\n ? renderLazyPlaceholder({ route })\n : renderScene({\n ...sceneRendererProps,\n route,\n })\n }\n </SceneView>\n );\n })\n )}\n {tabBarPosition === 'bottom' &&\n renderTabBar({\n ...sceneRendererProps,\n navigationState,\n })}\n </React.Fragment>\n );\n }}\n </Pager>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n pager: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"]}
\No newline at end of file