From 98937dda475485f85755deb8db3451c70a0988ae Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Tue, 1 Nov 2022 13:46:07 -0500 Subject: Add animation to the tabs selector --- src/view/shell/mobile/TabsSelector.tsx | 62 ++++++++++------------------------ 1 file changed, 18 insertions(+), 44 deletions(-) (limited to 'src') diff --git a/src/view/shell/mobile/TabsSelector.tsx b/src/view/shell/mobile/TabsSelector.tsx index 18c5f086b..c0ae2321a 100644 --- a/src/view/shell/mobile/TabsSelector.tsx +++ b/src/view/shell/mobile/TabsSelector.tsx @@ -1,26 +1,23 @@ -import React, {createRef, useRef, useMemo, useState} from 'react' +import React, {createRef, useRef, useMemo, useEffect, useState} from 'react' import {observer} from 'mobx-react-lite' import { - Image, ScrollView, StyleSheet, Text, - TouchableOpacity, TouchableWithoutFeedback, View, } from 'react-native' import Animated, { + interpolate, useSharedValue, useAnimatedStyle, withTiming, runOnJS, } from 'react-native-reanimated' -import {IconProp} from '@fortawesome/fontawesome-svg-core' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import Swipeable from 'react-native-gesture-handler/Swipeable' -import LinearGradient from 'react-native-linear-gradient' import {useStores} from '../../../state' -import {s, colors, gradients} from '../../lib/styles' +import {s, colors} from '../../lib/styles' import {match} from '../../routes' import {LinkActionsModel} from '../../../state/models/shell' @@ -32,6 +29,7 @@ export const TabsSelector = observer( const [closingTabIndex, setClosingTabIndex] = useState( undefined, ) + const initInterp = useSharedValue(0) const closeInterp = useSharedValue(0) const tabsRef = useRef(null) const tabRefs = useMemo( @@ -42,6 +40,17 @@ export const TabsSelector = observer( [store.nav.tabs.length], ) + useEffect(() => { + if (active) { + initInterp.value = withTiming(1, {duration: 150}) + } else { + initInterp.value = 0 + } + }, [initInterp, active]) + const wrapperAnimStyle = useAnimatedStyle(() => ({ + bottom: interpolate(initInterp.value, [0, 1.0], [50, 75]), + })) + // events // = @@ -76,10 +85,6 @@ export const TabsSelector = observer( runOnJS(doCloseTab)(tabIndex) }) } - const onNavigate = (url: string) => { - store.nav.navigate(url) - onClose() - } const onLayout = () => { // focus the current tab const targetTab = tabRefs[store.nav.tabIndex] @@ -97,37 +102,6 @@ export const TabsSelector = observer( // rendering // = - const FatMenuItem = ({ - icon, - label, - url, - gradient, - }: { - icon: IconProp - label: string - url: string - gradient: keyof typeof gradients - }) => ( - onNavigate(url)}> - - - - - {label} - - - ) - const renderSwipeActions = () => { return } @@ -148,7 +122,7 @@ export const TabsSelector = observer( - + @@ -240,7 +214,7 @@ export const TabsSelector = observer( - + ) }, @@ -258,7 +232,7 @@ const styles = StyleSheet.create({ }, wrapper: { position: 'absolute', - bottom: 75, + // bottom: 75, width: '100%', backgroundColor: '#fff', borderRadius: 8, -- cgit 1.4.1