d6f2bd9fdc461346458498c1723003b4.json
20.4 KB
{"ast":null,"code":"var _interopRequireWildcard=require(\"@babel/runtime/helpers/interopRequireWildcard\");var _interopRequireDefault=require(\"@babel/runtime/helpers/interopRequireDefault\");Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=createTabNavigator;var _extends2=_interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));var _classCallCheck2=_interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));var _createClass2=_interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));var _possibleConstructorReturn2=_interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));var _getPrototypeOf3=_interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));var _inherits2=_interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));var React=_interopRequireWildcard(require(\"react\"));var _reactNavigation=require(\"react-navigation\");var _jsxFileName=\"/Users/satya/Workspace/Callstack/react-navigation-tabs/src/utils/createTabNavigator.tsx\";function createTabNavigator(TabView){var NavigationView=function(_React$Component){(0,_inherits2.default)(NavigationView,_React$Component);function NavigationView(){var _getPrototypeOf2;var _this;(0,_classCallCheck2.default)(this,NavigationView);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this=(0,_possibleConstructorReturn2.default)(this,(_getPrototypeOf2=(0,_getPrototypeOf3.default)(NavigationView)).call.apply(_getPrototypeOf2,[this].concat(args)));_this._renderScene=function(_ref){var route=_ref.route;var _this$props=_this.props,screenProps=_this$props.screenProps,descriptors=_this$props.descriptors;var descriptor=descriptors[route.key];var TabComponent=descriptor.getComponent();return React.createElement(_reactNavigation.SceneView,{screenProps:screenProps,navigation:descriptor.navigation,component:TabComponent,__source:{fileName:_jsxFileName,lineNumber:67}});};_this._renderIcon=function(_ref2){var route=_ref2.route,focused=_ref2.focused,tintColor=_ref2.tintColor,_ref2$horizontal=_ref2.horizontal,horizontal=_ref2$horizontal===void 0?false:_ref2$horizontal;var descriptors=_this.props.descriptors;var descriptor=descriptors[route.key];var options=descriptor.options;if(options.tabBarIcon){return typeof options.tabBarIcon==='function'?options.tabBarIcon({focused:focused,tintColor:tintColor,horizontal:horizontal}):options.tabBarIcon;}return null;};_this._getLabelText=function(_ref3){var route=_ref3.route;var descriptors=_this.props.descriptors;var descriptor=descriptors[route.key];var options=descriptor.options;if(options.tabBarLabel){return options.tabBarLabel;}if(typeof options.title==='string'){return options.title;}return route.routeName;};_this._getAccessibilityLabel=function(_ref4){var route=_ref4.route;var descriptors=_this.props.descriptors;var descriptor=descriptors[route.key];var options=descriptor.options;if(typeof options.tabBarAccessibilityLabel!=='undefined'){return options.tabBarAccessibilityLabel;}var label=_this._getLabelText({route:route});if(typeof label==='string'){var routes=_this.props.navigation.state.routes;return label+\", tab, \"+(routes.indexOf(route)+1)+\" of \"+routes.length;}return undefined;};_this._getTestID=function(_ref5){var route=_ref5.route;var descriptors=_this.props.descriptors;var descriptor=descriptors[route.key];var options=descriptor.options;return options.tabBarTestID;};_this._makeDefaultHandler=function(_ref6){var route=_ref6.route,navigation=_ref6.navigation;return function(){if(navigation.isFocused()){if(route.hasOwnProperty('index')&&route.index>0){navigation.dispatch(_reactNavigation.StackActions.popToTop({key:route.key}));}else{navigation.emit('refocus');}}else{_this._jumpTo(route.routeName);}};};_this._handleTabPress=function(_ref7){var route=_ref7.route;_this._isTabPress=true;Promise.resolve().then(function(){return _this._isTabPress=false;});var descriptors=_this.props.descriptors;var descriptor=descriptors[route.key];var navigation=descriptor.navigation,options=descriptor.options;var defaultHandler=_this._makeDefaultHandler({route:route,navigation:navigation});if(options.tabBarOnPress){options.tabBarOnPress({navigation:navigation,defaultHandler:defaultHandler});}else{defaultHandler();}};_this._handleTabLongPress=function(_ref8){var route=_ref8.route;var descriptors=_this.props.descriptors;var descriptor=descriptors[route.key];var navigation=descriptor.navigation,options=descriptor.options;var defaultHandler=_this._makeDefaultHandler({route:route,navigation:navigation});if(options.tabBarOnLongPress){options.tabBarOnLongPress({navigation:navigation,defaultHandler:defaultHandler});}else{defaultHandler();}};_this._handleIndexChange=function(index){if(_this._isTabPress){_this._isTabPress=false;return;}_this._jumpTo(_this.props.navigation.state.routes[index].routeName);};_this._jumpTo=function(routeName){var navigation=_this.props.navigation;navigation.dispatch(_reactNavigation.SwitchActions.jumpTo({routeName:routeName,key:navigation.state.key}));};_this._isTabPress=false;return _this;}(0,_createClass2.default)(NavigationView,[{key:\"render\",value:function render(){var _this$props2=this.props,descriptors=_this$props2.descriptors,navigation=_this$props2.navigation,screenProps=_this$props2.screenProps,navigationConfig=_this$props2.navigationConfig;var state=navigation.state;var route=state.routes[state.index];var descriptor=descriptors[route.key];return React.createElement(TabView,(0,_extends2.default)({},navigationConfig,descriptor.options,{getLabelText:this._getLabelText,getAccessibilityLabel:this._getAccessibilityLabel,getTestID:this._getTestID,renderIcon:this._renderIcon,renderScene:this._renderScene,onIndexChange:this._handleIndexChange,onTabPress:this._handleTabPress,onTabLongPress:this._handleTabLongPress,navigation:navigation,descriptors:descriptors,screenProps:screenProps,__source:{fileName:_jsxFileName,lineNumber:228}}));}}]);return NavigationView;}(React.Component);return function(routes){var config=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var router=(0,_reactNavigation.TabRouter)(routes,config);return(0,_reactNavigation.createNavigator)(NavigationView,router,config);};}","map":{"version":3,"sources":["createTabNavigator.tsx"],"names":["NavigationView","React","route","screenProps","descriptors","descriptor","TabComponent","focused","tintColor","horizontal","options","label","routes","navigation","StackActions","key","Promise","defaultHandler","SwitchActions","routeName","navigationConfig","state","config","router","TabRouter","createNavigator"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n TabRouter,\n StackActions,\n SceneView,\n createNavigator,\n SwitchActions,\n NavigationRoute,\n NavigationRouteConfigMap,\n CreateNavigatorConfig,\n NavigationTabRouterConfig,\n} from 'react-navigation';\nimport {\n NavigationTabProp,\n NavigationCommonTabOptions,\n SceneDescriptorMap,\n} from '../types';\n\ntype RouteConfig<Options> = NavigationRouteConfigMap<\n Options,\n NavigationTabProp<NavigationRoute, any>\n>;\n\ntype CommonProps = {\n navigation: NavigationTabProp;\n descriptors: SceneDescriptorMap;\n screenProps?: unknown;\n};\n\ntype ExtraProps<Config extends {}> = {\n navigationConfig: Config;\n};\n\nexport type RenderIconProps = {\n route: NavigationRoute;\n focused: boolean;\n tintColor?: string;\n horizontal?: boolean;\n};\n\nexport type NavigationViewProps = {\n getLabelText: (props: { route: NavigationRoute }) => string | undefined;\n getAccessibilityLabel: (props: {\n route: NavigationRoute;\n }) => string | undefined;\n getTestID: (props: { route: NavigationRoute }) => string | undefined;\n renderIcon: (props: RenderIconProps) => React.ReactNode;\n renderScene: (props: { route: NavigationRoute }) => React.ReactNode;\n onIndexChange: (index: number) => void;\n onTabPress: (props: { route: NavigationRoute }) => void;\n onTabLongPress: (props: { route: NavigationRoute }) => void;\n};\n\nexport default function createTabNavigator<\n Config extends {},\n Options extends NavigationCommonTabOptions,\n Props extends NavigationViewProps & CommonProps\n>(TabView: React.ComponentType<Props & Config & Options>) {\n class NavigationView extends React.Component<\n Exclude<Props, NavigationViewProps> & ExtraProps<Config>\n > {\n _renderScene = ({ route }: { route: { key: string } }) => {\n const { screenProps, descriptors } = this.props;\n const descriptor = descriptors[route.key];\n const TabComponent = descriptor.getComponent();\n return (\n <SceneView\n screenProps={screenProps}\n navigation={descriptor.navigation}\n component={TabComponent}\n />\n );\n };\n\n _renderIcon = ({\n route,\n focused,\n tintColor,\n horizontal = false,\n }: RenderIconProps) => {\n const { descriptors } = this.props;\n const descriptor = descriptors[route.key];\n const options = descriptor.options;\n\n if (options.tabBarIcon) {\n return typeof options.tabBarIcon === 'function'\n ? options.tabBarIcon({ focused, tintColor, horizontal })\n : options.tabBarIcon;\n }\n\n return null;\n };\n\n _getLabelText = ({ route }: { route: NavigationRoute }) => {\n const { descriptors } = this.props;\n const descriptor = descriptors[route.key];\n const options = descriptor.options;\n\n if (options.tabBarLabel) {\n return options.tabBarLabel;\n }\n\n if (typeof options.title === 'string') {\n return options.title;\n }\n\n return route.routeName;\n };\n\n _getAccessibilityLabel = ({ route }: { route: NavigationRoute }) => {\n const { descriptors } = this.props;\n const descriptor = descriptors[route.key];\n const options = descriptor.options;\n\n if (typeof options.tabBarAccessibilityLabel !== 'undefined') {\n return options.tabBarAccessibilityLabel;\n }\n\n const label = this._getLabelText({ route });\n\n if (typeof label === 'string') {\n const { routes } = this.props.navigation.state;\n return `${label}, tab, ${routes.indexOf(route) + 1} of ${\n routes.length\n }`;\n }\n\n return undefined;\n };\n\n _getTestID = ({ route }: { route: NavigationRoute }) => {\n const { descriptors } = this.props;\n const descriptor = descriptors[route.key];\n const options = descriptor.options;\n\n return options.tabBarTestID;\n };\n\n _makeDefaultHandler = ({\n route,\n navigation,\n }: {\n route: NavigationRoute;\n navigation: NavigationTabProp;\n }) => () => {\n if (navigation.isFocused()) {\n if (route.hasOwnProperty('index') && route.index > 0) {\n // If current tab has a nested navigator, pop to top\n navigation.dispatch(StackActions.popToTop({ key: route.key }));\n } else {\n navigation.emit('refocus');\n }\n } else {\n this._jumpTo(route.routeName);\n }\n };\n\n _handleTabPress = ({ route }: { route: NavigationRoute }) => {\n this._isTabPress = true;\n\n // After tab press, handleIndexChange will be called synchronously\n // So we reset it in promise callback\n Promise.resolve().then(() => (this._isTabPress = false));\n\n const { descriptors } = this.props;\n const descriptor = descriptors[route.key];\n const { navigation, options } = descriptor;\n\n const defaultHandler = this._makeDefaultHandler({ route, navigation });\n\n if (options.tabBarOnPress) {\n options.tabBarOnPress({ navigation, defaultHandler });\n } else {\n defaultHandler();\n }\n };\n\n _handleTabLongPress = ({ route }: { route: NavigationRoute }) => {\n const { descriptors } = this.props;\n const descriptor = descriptors[route.key];\n const { navigation, options } = descriptor;\n\n const defaultHandler = this._makeDefaultHandler({ route, navigation });\n\n if (options.tabBarOnLongPress) {\n options.tabBarOnLongPress({ navigation, defaultHandler });\n } else {\n defaultHandler();\n }\n };\n\n _handleIndexChange = (index: number) => {\n if (this._isTabPress) {\n this._isTabPress = false;\n return;\n }\n\n this._jumpTo(this.props.navigation.state.routes[index].routeName);\n };\n\n _jumpTo = (routeName: string) => {\n const { navigation } = this.props;\n\n navigation.dispatch(\n SwitchActions.jumpTo({\n routeName,\n key: navigation.state.key,\n })\n );\n };\n\n _isTabPress: boolean = false;\n\n render() {\n const {\n descriptors,\n navigation,\n screenProps,\n navigationConfig,\n } = this.props;\n const { state } = navigation;\n const route = state.routes[state.index];\n const descriptor = descriptors[route.key];\n\n return (\n // TODO: don't have time to fix it right now\n // @ts-ignore\n <TabView\n {...navigationConfig}\n {...descriptor.options}\n getLabelText={this._getLabelText}\n getAccessibilityLabel={this._getAccessibilityLabel}\n getTestID={this._getTestID}\n renderIcon={this._renderIcon}\n renderScene={this._renderScene}\n onIndexChange={this._handleIndexChange}\n onTabPress={this._handleTabPress}\n onTabLongPress={this._handleTabLongPress}\n navigation={navigation}\n descriptors={descriptors}\n screenProps={screenProps}\n />\n );\n }\n }\n\n return (\n routes: RouteConfig<Options>,\n config: CreateNavigatorConfig<\n Partial<Config>,\n NavigationTabRouterConfig,\n Partial<Options>,\n NavigationTabProp<NavigationRoute, any>\n > = {}\n ) => {\n const router = TabRouter(routes, config as any);\n\n return createNavigator(NavigationView as any, router, config as any);\n };\n}\n"]},"metadata":{},"sourceType":"script"}