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 (
+
+
+
+
+ {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