import React, { useState, useRef, useEffect } from "react"; import { View, Dimensions } from "react-native"; import { useRouter, useLocalSearchParams } from "expo-router"; import { tw, useManualRefresh, useMarkDataFetchers, MyFlatList, MyText, SearchBar, } from "common-ui"; import MaterialIcons from "@expo/vector-icons/MaterialIcons"; import { trpc } from "@/src/trpc-client"; import ProductCard from "@/components/ProductCard"; import FloatingCartBar from "@/components/floating-cart-bar"; const { width: screenWidth } = Dimensions.get("window"); const itemWidth = (screenWidth - 48) / 2; export default function SearchResults() { const router = useRouter(); const { q } = useLocalSearchParams(); const query = (q as string) || ""; const [inputQuery, setInputQuery] = useState(query); const [searchQuery, setSearchQuery] = useState(query); const searchInputRef = useRef(null); useEffect(() => { setTimeout(() => { searchInputRef.current?.focus(); }, 100); }, []); const { data: productsData, isLoading, error, refetch } = trpc.common.product.getAllProductsSummary.useQuery({ searchQuery: searchQuery || undefined, }); const products = productsData?.products || []; useManualRefresh(() => { refetch(); }); useMarkDataFetchers(() => { refetch(); }); const handleSearch = () => { setSearchQuery(inputQuery); }; if (isLoading) { return ( Loading products... ); } if (error) { return ( Oops! Failed to load products ); } return ( ( router.push(`/(drawer)/(tabs)/home/product-detail/${item.id}`) } showDeliveryInfo={false} useAddToCartDialog={true} /> )} keyExtractor={(item, index) => index.toString()} columnWrapperStyle={{ gap: 16, justifyContent: "center" }} contentContainerStyle={[tw`pb-24`, { gap: 16 }]} ListHeaderComponent={ {searchQuery ? `Search Results for "${searchQuery}"` : "All Products"} } /> ); }