diff --git a/apps/expo/src/app/(tabs)/search/_layout.tsx b/apps/expo/src/app/(tabs)/search/_layout.tsx index 663f463..b6f0e75 100644 --- a/apps/expo/src/app/(tabs)/search/_layout.tsx +++ b/apps/expo/src/app/(tabs)/search/_layout.tsx @@ -25,6 +25,8 @@ export default function SearchScreen() { const [query, setQuery] = useState(""); const translateY = useSharedValue(0); const fadeAnim = useSharedValue(1); + const searchResultsOpacity = useSharedValue(0); + const searchResultsScale = useSharedValue(0.95); const [searchResultsLoaded, setSearchResultsLoaded] = useState(false); const { data, isSuccess } = useQuery({ @@ -34,11 +36,15 @@ export default function SearchScreen() { useEffect(() => { if (isSuccess && data && data.length > 0) { + searchResultsOpacity.value = withTiming(1, { duration: 500 }); + searchResultsScale.value = withTiming(1, { duration: 500 }); setSearchResultsLoaded(true); - } else { + } else if (!query) { + searchResultsOpacity.value = 0; + searchResultsScale.value = 0.95; setSearchResultsLoaded(false); } - }, [data, isSuccess]); + }, [data, isSuccess, query, searchResultsOpacity, searchResultsScale]); useEffect(() => { const keyboardWillShowListener = Keyboard.addListener( @@ -77,6 +83,13 @@ export default function SearchScreen() { }; }); + const searchResultsStyle = useAnimatedStyle(() => { + return { + opacity: searchResultsOpacity.value, + transform: [{ scale: searchResultsScale.value }], + }; + }); + const handleScrollBegin = () => { fadeAnim.value = withTiming(0, { duration: 100, @@ -106,13 +119,15 @@ export default function SearchScreen() { } > {searchResultsLoaded ? ( - - {data?.map((item, index) => ( - - - - ))} - + + + {data?.map((item, index) => ( + + + + ))} + + ) : (