import { View, Text, TextInput, ScrollView, RefreshControl, Pressable } from "react-native";
import { useState, useCallback } from "react";
import { useRouter } from "expo-router";
import { useTheme } from "../../../components/theme";
import { useQuery, usePaginatedQuery } from "convex/react";
import { api } from "../../../convex/_generated/api";
import { useAuth } from "../../_layout";
import { CategoryGrid } from "../../../components/category-grid";
import { AdCard } from "../../../components/ad-card";
import { Loading } from "../../../components/ui/loading";
import { Badge } from "../../../components/ui/badge";
import { CATEGORIES } from "../../../lib/constants";
export default function HomeScreen() {
const theme = useTheme();
const router = useRouter();
const { userId } = useAuth();
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={{ paddingBottom: 40 }}
>
Добредојдовте
Најдете мајстор во вашата близина
🔍
{search.length > 0 && (
setSearch("")}
style={{ padding: 4 }}
>
✕
)}
{!search.trim() && (
<>
Категории
router.push("/(tabs)/(explore)")}
>
Сите
>
)}
{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.surfaceAlt,
borderRadius: theme.radius.md,
paddingVertical: theme.spacing.md,
alignItems: "center",
borderWidth: 1,
borderColor: theme.colors.borderLight,
}}
>
Вчитај повеќе
)}
);
}