diff --git a/apps/web/app/orgs/[orgslug]/(withmenu)/user/[username]/UserProfileClient.tsx b/apps/web/app/orgs/[orgslug]/(withmenu)/user/[username]/UserProfileClient.tsx
index da5e676b..f648ddcc 100644
--- a/apps/web/app/orgs/[orgslug]/(withmenu)/user/[username]/UserProfileClient.tsx
+++ b/apps/web/app/orgs/[orgslug]/(withmenu)/user/[username]/UserProfileClient.tsx
@@ -14,7 +14,8 @@ import {
Laptop2,
Users,
Calendar,
- Lightbulb
+ Lightbulb,
+ X
} from 'lucide-react'
import { getUserAvatarMediaDirectory } from '@services/media/media'
@@ -38,7 +39,36 @@ const ICON_MAP = {
'calendar': Calendar,
} as const
+// Add Modal component
+const ImageModal: React.FC<{
+ image: { url: string; caption?: string };
+ onClose: () => void;
+}> = ({ image, onClose }) => {
+ return (
+
+
+
+

+ {image.caption && (
+
{image.caption}
+ )}
+
+
+ );
+};
+
function UserProfileClient({ userData, profile }: UserProfileClientProps) {
+ const [selectedImage, setSelectedImage] = React.useState<{ url: string; caption?: string } | null>(null);
+
const IconComponent = ({ iconName }: { iconName: string }) => {
const IconElement = ICON_MAP[iconName as keyof typeof ICON_MAP]
if (!IconElement) return null
@@ -127,6 +157,30 @@ function UserProfileClient({ userData, profile }: UserProfileClientProps) {
{section.title}
+ {/* Add Image Gallery section */}
+ {section.type === 'image-gallery' && (
+
+ {section.images.map((image: any, imageIndex: number) => (
+
setSelectedImage(image)}
+ >
+

+ {image.caption && (
+
+ )}
+
+ ))}
+
+ )}
+
{section.type === 'text' && (
{section.content}
)}
@@ -227,6 +281,14 @@ function UserProfileClient({ userData, profile }: UserProfileClientProps) {
+
+ {/* Image Modal */}
+ {selectedImage && (
+ setSelectedImage(null)}
+ />
+ )}
)
}
diff --git a/apps/web/app/orgs/[orgslug]/(withmenu)/user/[username]/page.tsx b/apps/web/app/orgs/[orgslug]/(withmenu)/user/[username]/page.tsx
index 2ce0430d..eb44a420 100644
--- a/apps/web/app/orgs/[orgslug]/(withmenu)/user/[username]/page.tsx
+++ b/apps/web/app/orgs/[orgslug]/(withmenu)/user/[username]/page.tsx
@@ -17,17 +17,11 @@ interface UserPageProps {
export async function generateMetadata({ params }: UserPageProps): Promise {
try {
- const session = await getServerSession(nextAuthOptions)
- const access_token = session?.tokens?.access_token
const resolvedParams = await params
- if (!access_token) {
- return {
- title: 'User Profile',
- }
- }
+
- const userData = await getUserByUsername(resolvedParams.username, access_token)
+ const userData = await getUserByUsername(resolvedParams.username)
return {
title: `${userData.first_name} ${userData.last_name} | Profile`,
description: userData.bio || `Profile page of ${userData.first_name} ${userData.last_name}`,
@@ -44,16 +38,8 @@ async function UserPage({ params }: UserPageProps) {
const { username } = resolvedParams;
try {
- // Get access token from server session
- const session = await getServerSession(nextAuthOptions)
- const access_token = session?.tokens?.access_token
-
- if (!access_token) {
- throw new Error('No access token available')
- }
-
// Fetch user data by username
- const userData = await getUserByUsername(username, access_token);
+ const userData = await getUserByUsername(username);
const profile = userData.profile ? (
typeof userData.profile === 'string' ? JSON.parse(userData.profile) : userData.profile
) : { sections: [] };
diff --git a/apps/web/components/Dashboard/Pages/UserAccount/UserProfile/UserProfileBuilder.tsx b/apps/web/components/Dashboard/Pages/UserAccount/UserProfile/UserProfileBuilder.tsx
index abd2be19..71b7f918 100644
--- a/apps/web/components/Dashboard/Pages/UserAccount/UserProfile/UserProfileBuilder.tsx
+++ b/apps/web/components/Dashboard/Pages/UserAccount/UserProfile/UserProfileBuilder.tsx
@@ -164,7 +164,7 @@ const UserProfileBuilder = () => {
if (session?.data?.user?.id && access_token) {
try {
setIsLoading(true)
- const userData = await getUser(session.data.user.id, access_token)
+ const userData = await getUser(session.data.user.id)
if (userData.profile) {
try {
@@ -291,7 +291,7 @@ const UserProfileBuilder = () => {
try {
// Get fresh user data before update
- const userData = await getUser(session.data.user.id, access_token)
+ const userData = await getUser(session.data.user.id)
// Update only the profile field
userData.profile = profileData
diff --git a/apps/web/components/Objects/UserAvatar.tsx b/apps/web/components/Objects/UserAvatar.tsx
index 0eef3d3c..d21b430c 100644
--- a/apps/web/components/Objects/UserAvatar.tsx
+++ b/apps/web/components/Objects/UserAvatar.tsx
@@ -27,9 +27,9 @@ function UserAvatar(props: UserAvatarProps) {
useEffect(() => {
const fetchUserByUsername = async () => {
- if (props.username && session?.data?.tokens?.access_token) {
+ if (props.username) {
try {
- const data = await getUserByUsername(props.username, session.data.tokens.access_token)
+ const data = await getUserByUsername(props.username)
setUserData(data)
} catch (error) {
console.error('Error fetching user by username:', error)
@@ -38,7 +38,7 @@ function UserAvatar(props: UserAvatarProps) {
}
fetchUserByUsername()
- }, [props.username, session?.data?.tokens?.access_token])
+ }, [props.username])
const isExternalUrl = (url: string): boolean => {
return url.startsWith('http://') || url.startsWith('https://')
@@ -86,7 +86,7 @@ function UserAvatar(props: UserAvatarProps) {
return getUserAvatarMediaDirectory(userData.user_uuid, avatarUrl)
}
- // If user has an avatar in session
+ // If user has an avatar in session (only if session exists)
if (session?.data?.user?.avatar_image) {
const avatarUrl = session.data.user.avatar_image
// If it's an external URL (e.g., from Google, Facebook, etc.), use it directly
diff --git a/apps/web/services/users/users.ts b/apps/web/services/users/users.ts
index ce55d75f..e63a4e06 100644
--- a/apps/web/services/users/users.ts
+++ b/apps/web/services/users/users.ts
@@ -7,7 +7,7 @@ import {
getResponseMetadata,
} from '@services/utils/ts/requests'
-export async function getUser(user_id: string, access_token: string) {
+export async function getUser(user_id: string) {
const result = await fetch(
`${getAPIUrl()}users/id/${user_id}`,
RequestBody('GET', null, null)
@@ -16,7 +16,7 @@ export async function getUser(user_id: string, access_token: string) {
return res
}
-export async function getUserByUsername(username: string, access_token: string) {
+export async function getUserByUsername(username: string) {
const result = await fetch(
`${getAPIUrl()}users/username/${username}`,
RequestBody('GET', null, null)