diff --git a/src/view/screens/Search/Search.tsx b/src/view/screens/Search/Search.tsx index ad980e9425..867cb832a0 100644 --- a/src/view/screens/Search/Search.tsx +++ b/src/view/screens/Search/Search.tsx @@ -1,4 +1,4 @@ -import React, {useLayoutEffect} from 'react' +import React, {useEffect, useLayoutEffect} from 'react' import { ActivityIndicator, Image, @@ -16,6 +16,9 @@ import Animated, { FadeOut, LayoutAnimationConfig, LinearTransition, + useAnimatedStyle, + useSharedValue, + withTiming, } from 'react-native-reanimated' import {AppBskyActorDefs, AppBskyFeedDefs, moderateProfile} from '@atproto/api' import { @@ -833,6 +836,26 @@ export function SearchScreen( } }, [setShowAutocomplete]) + const cancelWidth = useSharedValue(70) + const showCancelBtnAnimation = useSharedValue(0) + + useEffect(() => { + if (showAutocomplete) { + showCancelBtnAnimation.set(withTiming(1)) + } else { + showCancelBtnAnimation.set(withTiming(0)) + } + }, [showAutocomplete, showCancelBtnAnimation]) + + const animatedInputContainerStyle = useAnimatedStyle(() => ({ + marginRight: showCancelBtnAnimation.get() * cancelWidth.get(), + })) + + const animatedCancelBtnStyle = useAnimatedStyle(() => ({ + opacity: showCancelBtnAnimation.get(), + right: cancelWidth.get() * -1, + })) + return ( {!gtMobile && !showAutocomplete && ( - )} + )} +