From d12ae04f8ac2de20da6b8e51f29a919e7ad30645 Mon Sep 17 00:00:00 2001 From: Kuba Date: Mon, 2 Jun 2025 23:56:56 +0200 Subject: [PATCH] added the ability to see the notices of a particular user(transition from the notice) --- ArtisanConnect/app/notice/[id].jsx | 9 +++- ArtisanConnect/app/user/[userId].jsx | 69 ++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 ArtisanConnect/app/user/[userId].jsx diff --git a/ArtisanConnect/app/notice/[id].jsx b/ArtisanConnect/app/notice/[id].jsx index 2547aac..a0fad91 100644 --- a/ArtisanConnect/app/notice/[id].jsx +++ b/ArtisanConnect/app/notice/[id].jsx @@ -1,4 +1,4 @@ -import {Stack, useLocalSearchParams} from "expo-router"; +import {Link, Stack, useLocalSearchParams} from "expo-router"; import {Box} from "@/components/ui/box"; import {Card} from "@/components/ui/card"; import {Heading} from "@/components/ui/heading"; @@ -6,7 +6,7 @@ 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, Dimensions, FlatList, View, TextInput} from "react-native"; +import {ActivityIndicator, Dimensions, FlatList, View, TextInput, TouchableOpacity} from "react-native"; import {useEffect, useState, useRef} from "react"; import {useNoticesStore} from "@/store/noticesStore"; import {useWishlist} from "@/store/wishlistStore"; @@ -267,6 +267,11 @@ export default function NoticeDetails() { > Wyślij wiadomość + + + Zobacz więcej ogłoszeń od {user.firstName} + + ) : ( diff --git a/ArtisanConnect/app/user/[userId].jsx b/ArtisanConnect/app/user/[userId].jsx new file mode 100644 index 0000000..0f85231 --- /dev/null +++ b/ArtisanConnect/app/user/[userId].jsx @@ -0,0 +1,69 @@ +import { useLocalSearchParams } from "expo-router"; +import { useState, useEffect } from "react"; +import { FlatList, ActivityIndicator, Text } from "react-native"; +import { Box } from "@/components/ui/box"; +import { Image } from "@/components/ui/image"; +import { VStack } from "@/components/ui/vstack"; +import { Heading } from "@/components/ui/heading"; +import { getUserById } from "@/api/client"; +import { useNoticesStore } from "@/store/noticesStore"; +import { NoticeCard } from "@/components/NoticeCard"; + +export default function UserProfile() { + const { userId } = useLocalSearchParams(); + const [user, setUser] = useState(null); + const [isUserLoading, setIsUserLoading] = useState(true); + const { notices } = useNoticesStore(); + + useEffect(() => { + const fetchUser = async () => { + setIsUserLoading(true); + try { + const userData = await getUserById(Number(userId)); + setUser(userData); + } catch (err) { + console.error("Błąd podczas pobierania danych użytkownika:", err); + setUser(null); + } finally { + setIsUserLoading(false); + } + }; + fetchUser(); + }, [userId]); + + if (isUserLoading) { + return ; + } + + if (!user) { + return Nie znaleziono użytkownika; + } + + const userNotices = notices.filter(notice => notice.clientId === Number(userId)); + + return ( + + + Zdjęcie profilowe + + {user.firstName} {user.lastName} + + + {userNotices.length > 0 ? ( + } + keyExtractor={(item) => item.noticeId.toString()} + /> + ) : ( + Ten użytkownik nie ma żadnych ogłoszeń. + )} + + ); +} \ No newline at end of file