import {Stack, useLocalSearchParams} from "expo-router"; import {Box} from "@/components/ui/box"; import {Card} from "@/components/ui/card"; import {Heading} from "@/components/ui/heading"; import {Image} from "@/components/ui/image"; import {Text} from "@/components/ui/text"; import {VStack} from "@/components/ui/vstack"; import {Ionicons} from "@expo/vector-icons"; import {ActivityIndicator} from "react-native"; import {useEffect, useState} from "react"; import {useNoticesStore} from "@/store/noticesStore"; import {useWishlist} from "@/store/wishlistStore"; import {Pressable} from "react-native"; export default function NoticeDetails() { const {id} = useLocalSearchParams(); const [image, setImage] = useState(null); const [isImageLoading, setIsImageLoading] = useState(true); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [notice, setNotice] = useState(null); const {getNoticeById, getAllImagesByNoticeId} = useNoticesStore(); const addNoticeToWishlist = useWishlist((state) => state.addNoticeToWishlist); const removeNoticeFromWishlist = useWishlist((state) => state.removeNoticeFromWishlist); const isInWishlist = useWishlist((state) => notice ? state.wishlistNotices.some((item) => item.noticeId === notice.noticeId) : false ); useEffect(() => { const fetchNotice = async () => { setIsLoading(true); try { const noticeData = getNoticeById(Number(id)); if (noticeData) { setNotice(noticeData); setError(null); } else { setError(new Error(`Notice with ID ${id} not found.`)); } } catch (err) { setError(err); } finally { setIsLoading(false); } }; fetchNotice(); }, [id]); useEffect(() => { const fetchImage = async () => { setIsImageLoading(true); if (notice) { try { const images = await getAllImagesByNoticeId(notice.noticeId); setImage(images && images.length > 0 ? images[0] : "https://http.cat/404.jpg"); } catch (err) { console.error("Error while loading images:", err); setImage("https://http.cat/404.jpg"); } finally { setIsImageLoading(false); } } }; if (notice) { fetchImage(); } }, [notice]); if (isLoading) { return ; } if (error) { return Błąd, spróbuj ponownie póżniej: {error.message}; } if (!notice) { return Nie znaleziono ogłoszenia; } return ( {isImageLoading ? ( ) : ( image )} {notice.title} {notice.price}zł { if (isInWishlist) { removeNoticeFromWishlist(notice.noticeId); } else { addNoticeToWishlist(notice); } }} > ); }