import { View, Text, TextInput, ScrollView, RefreshControl, Pressable } from "react-native"; import { useState, useCallback } from "react"; import { useTheme } from "../../../components/theme"; import { useQuery, usePaginatedQuery } from "convex/react"; import { api } from "../../../convex/_generated/api"; import { CategoryGrid } from "../../../components/category-grid"; import { AdCard } from "../../../components/ad-card"; import { Loading } from "../../../components/ui/loading"; import { CATEGORIES } from "../../../lib/constants"; export default function HomeScreen() { const theme = useTheme(); const [search, setSearch] = useState(""); const [refreshing, setRefreshing] = useState(false); const categories = useQuery(api.categories.list); const adsResult = usePaginatedQuery(api.ads.listPaginated, {}, { initialNumItems: 20 }); const ads = adsResult.results; const loadMoreAds = adsResult.loadMore; const adsStatus = adsResult.status; const searchResults = useQuery( api.ads.search, search.trim() ? { query: search.trim() } : "skip" ); const onRefresh = useCallback(() => { setRefreshing(true); setTimeout(() => setRefreshing(false), 800); }, []); const displayCategories = categories ?? CATEGORIES; const displayAds = search.trim() ? (searchResults ?? []) : ads; const isLoading = !search.trim() && adsStatus === "LoadingFirstPage"; return ( } contentContainerStyle={{ padding: theme.spacing.lg, gap: theme.spacing.md, paddingBottom: 40 }} > Добредојдовте 🏠 Најдете мајстор во вашата близина {!search.trim() && ( <> Категории )} {search.trim() ? "Резултати од пребарување" : "Неодамна додадени"} {(search.trim() ? searchResults === undefined : isLoading) ? ( ) : displayAds.length === 0 ? ( {search.trim() ? "Не се пронајдени резултати" : "Нема огласи"} ) : ( {displayAds.map((ad) => ( ))} )} {!search.trim() && adsStatus === "CanLoadMore" && ( loadMoreAds(20)} style={{ backgroundColor: theme.colors.surface, borderRadius: theme.radius.md, paddingVertical: theme.spacing.md, alignItems: "center", borderWidth: 1, borderColor: theme.colors.border, }} > Вчитај повеќе )} ); }