diff options
Diffstat (limited to 'src/view/com/pager/FeedsTabBar.web.tsx')
-rw-r--r-- | src/view/com/pager/FeedsTabBar.web.tsx | 58 |
1 files changed, 52 insertions, 6 deletions
diff --git a/src/view/com/pager/FeedsTabBar.web.tsx b/src/view/com/pager/FeedsTabBar.web.tsx index 5cee2fd6d..d80b140ce 100644 --- a/src/view/com/pager/FeedsTabBar.web.tsx +++ b/src/view/com/pager/FeedsTabBar.web.tsx @@ -1,30 +1,76 @@ import React from 'react' +import {Animated, StyleSheet} from 'react-native' import {observer} from 'mobx-react-lite' import {TabBar} from 'view/com/pager/TabBar' -import {CenteredView} from 'view/com/util/Views' import {RenderTabBarFnProps} from 'view/com/pager/Pager' +import {useStores} from 'state/index' import {usePalette} from 'lib/hooks/usePalette' +import {useAnimatedValue} from 'lib/hooks/useAnimatedValue' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {FeedsTabBar as FeedsTabBarMobile} from './FeedsTabBarMobile' export const FeedsTabBar = observer( - (props: RenderTabBarFnProps & {onPressSelected: () => void}) => { - const pal = usePalette('default') + ( + props: RenderTabBarFnProps & {testID?: string; onPressSelected: () => void}, + ) => { const {isDesktop} = useWebMediaQueries() - if (!isDesktop) { return <FeedsTabBarMobile {...props} /> + } else { + return <FeedsTabBarDesktop {...props} /> } + }, +) + +const FeedsTabBarDesktop = observer( + ( + props: RenderTabBarFnProps & {testID?: string; onPressSelected: () => void}, + ) => { + const store = useStores() + const pal = usePalette('default') + const interp = useAnimatedValue(0) + React.useEffect(() => { + Animated.timing(interp, { + toValue: store.shell.minimalShellMode ? 1 : 0, + duration: 100, + useNativeDriver: true, + isInteraction: false, + }).start() + }, [interp, store.shell.minimalShellMode]) + const transform = { + transform: [ + {translateX: '-50%'}, + {translateY: Animated.multiply(interp, -100)}, + ], + } return ( - <CenteredView> + // @ts-ignore the type signature for transform wrong here, translateX and translateY need to be in separate objects -prf + <Animated.View style={[pal.view, styles.tabBar, transform]}> <TabBar {...props} items={['Following', "What's hot"]} indicatorPosition="bottom" indicatorColor={pal.colors.link} /> - </CenteredView> + </Animated.View> ) }, ) + +const styles = StyleSheet.create({ + tabBar: { + position: 'absolute', + zIndex: 1, + left: '50%', + width: 640, + top: 0, + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: 18, + }, + tabBarAvi: { + marginTop: 1, + marginRight: 18, + }, +}) |