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"}