import { useNoticesStore } from "@/store/noticesStore"; import { NoticeCard } from "@/components/NoticeCard"; import { Button, ButtonText } from "@/components/ui/button"; import { usePathname } from "expo-router"; import { Box } from "@/components/ui/box"; import { Text } from "@/components/ui/text"; import { VStack } from "@/components/ui/vstack"; import { ActivityIndicator, FlatList } from "react-native"; import { useEffect, useState } from "react"; import { createOrder, createPayment, getOrder } from "@/api/order"; import { Ionicons } from "@expo/vector-icons"; import { useToast, Toast, ToastTitle } from "@/components/ui/toast"; import { useAuthStore } from "@/store/authStore"; import * as WebBrowser from "expo-web-browser"; import { useRouter } from "expo-router"; export default function UserNotices() { const router = useRouter(); const pathname = usePathname(); const { notices, fetchNotices, deleteNotice } = useNoticesStore(); const [isLoading, setIsLoading] = useState(true); const [isRedirecting, setIsRedirecting] = useState(false); const toast = useToast(); const [toastId, setToastId] = useState(0); const { user_id } = useAuthStore.getState(); const currentUserId = user_id; const [orderId, setOrderId] = useState(null); useEffect(() => { WebBrowser.maybeCompleteAuthSession(); }, []); useEffect(() => { const loadNotices = async () => { setIsLoading(true); try { await fetchNotices(); } catch (err) { console.error("Błąd podczas pobierania ogłoszeń:", err); } finally { setIsLoading(false); } }; loadNotices(); }, [pathname, fetchNotices]); const showNewToast = (title) => { const newId = Math.random(); setToastId(newId); toast.show({ id: newId, placement: "top", duration: 3000, render: ({ id }) => { const uniqueToastId = "toast-" + id; return ( {title} ); }, }); }; const handleOrder = async (noticeId, type) => { try { const result = await createOrder(noticeId, type); if (result) { setOrderId(result); try { const paymentResult = await createPayment(result); if (paymentResult) { setIsRedirecting(true); await WebBrowser.openAuthSessionAsync(paymentResult); setTimeout(async () => { setIsRedirecting(false); try { const lastOrder = await getOrder(result); const lastPayments = lastOrder.payments; const paymentStatus = lastPayments.length > 0 ? lastPayments[lastPayments.length - 1].status : null; if (paymentStatus === "CORRECT") { showNewToast("Płatność została zrealizowana."); await fetchNotices(); router.replace("/notices"); } else { showNewToast("Sprawdzanie statusu płatności..."); } } catch (err) { console.log("Błąd podczas sprawdzania płatności:", err); showNewToast("Nie udało się sprawdzić statusu płatności."); } }, 300); } else { console.log(`Nie udało się aktywować ogłoszenia ${noticeId}.`); } } catch (err) { setIsRedirecting(false); console.log("Błąd podczas aktywacji ogłoszenia:", err); } } } catch (err) { console.log("Błąd podczas aktywacji ogłoszenia:", err); } }; const handleDeleteNotice = async (noticeId) => { try { await deleteNotice(noticeId); } catch (err) { console.error("Błąd podczas usuwania ogłoszenia:", err); } }; const userNotices = notices .filter((notice) => notice.clientId === currentUserId) .sort((a, b) => new Date(b.publishDate) - new Date(a.publishDate)); if (isLoading) { return ( ); } return ( {isRedirecting && ( Przekierowanie do płatności... )} {/* Moje ogłoszenia */} {userNotices.length > 0 ? ( ( {item.status === "INACTIVE" && ( )} {item.status === "ACTIVE" ? ( ) : ( )} )} keyExtractor={(item) => item.noticeId.toString()} /> ) : ( Nie masz żadnych ogłoszeń. )} ); }