11import type { MaterialTopTabBarProps } from '@react-navigation/material-top-tabs' ;
22import { TabActions } from '@react-navigation/native' ;
3- import React , { useCallback , useEffect , useLayoutEffect , useMemo , useRef , useState } from 'react' ;
3+ import React , { useCallback , useEffect , useLayoutEffect , useRef , useState } from 'react' ;
44import { View } from 'react-native' ;
5+ import type { TupleToUnion } from 'type-fest' ;
56import FocusTrapContainerElement from '@components/FocusTrap/FocusTrapContainerElement' ;
67// eslint-disable-next-line no-restricted-imports
78import * as Expensicons from '@components/Icon/Expensicons' ;
@@ -43,8 +44,10 @@ type IconTitleAndTestID = {
4344 testID ?: string ;
4445} ;
4546
47+ const MEMOIZED_LAZY_TAB_SELECTOR_ICONS = [ 'CalendarSolid' , 'UploadAlt' , 'User' , 'Car' , 'Hashtag' , 'Map' , 'Pencil' , 'Crosshair' ] as const ;
48+
4649function getIconTitleAndTestID (
47- icons : Record < 'CalendarSolid' | 'UploadAlt' | 'User' | 'Car' | 'Hashtag' | 'Map' | 'Pencil' , IconAsset > ,
50+ icons : Record < TupleToUnion < typeof MEMOIZED_LAZY_TAB_SELECTOR_ICONS > , IconAsset > ,
4851 route : string ,
4952 translate : LocaleContextProps [ 'translate' ] ,
5053) : IconTitleAndTestID {
@@ -75,6 +78,8 @@ function getIconTitleAndTestID(
7578 return { icon : icons . Map , title : translate ( 'tabSelector.map' ) , testID : 'distanceMap' } ;
7679 case CONST . TAB_REQUEST . DISTANCE_MANUAL :
7780 return { icon : icons . Pencil , title : translate ( 'tabSelector.manual' ) , testID : 'distanceManual' } ;
81+ case CONST . TAB_REQUEST . DISTANCE_GPS :
82+ return { icon : icons . Crosshair , title : translate ( 'tabSelector.gps' ) , testID : 'distanceGPS' } ;
7883 default :
7984 throw new Error ( `Route ${ route } has no icon nor title set.` ) ;
8085 }
@@ -91,11 +96,11 @@ function TabSelector({
9196 renderProductTrainingTooltip,
9297 equalWidth = false ,
9398} : TabSelectorProps ) {
94- const icons = useMemoizedLazyExpensifyIcons ( [ 'CalendarSolid' , 'UploadAlt' , 'User' , 'Car' , 'Hashtag' , 'Map' , 'Pencil' ] ) ;
99+ const icons = useMemoizedLazyExpensifyIcons ( MEMOIZED_LAZY_TAB_SELECTOR_ICONS ) ;
95100 const { translate} = useLocalize ( ) ;
96101 const theme = useTheme ( ) ;
97102 const styles = useThemeStyles ( ) ;
98- const defaultAffectedAnimatedTabs = useMemo ( ( ) => Array . from ( { length : state . routes . length } , ( v , i ) => i ) , [ state . routes . length ] ) ;
103+ const defaultAffectedAnimatedTabs = Array . from ( { length : state . routes . length } , ( v , i ) => i ) ;
99104 const [ affectedAnimatedTabs , setAffectedAnimatedTabs ] = useState ( defaultAffectedAnimatedTabs ) ;
100105 const viewRef = useRef < View > ( null ) ;
101106 const [ selectorWidth , setSelectorWidth ] = React . useState ( 0 ) ;
0 commit comments