From f25aee39d97f716476066867d7618359c2646be5 Mon Sep 17 00:00:00 2001 From: pradeepkumar Date: Sun, 1 Feb 2026 15:04:11 +0530 Subject: [PATCH] feat: Display presigned avatar URLs for recent users on the dashboard. --- src/app/dashboard/page.tsx | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index effe873..0757932 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -1,7 +1,7 @@ 'use client'; import { useEffect, useState } from 'react'; -import { usersService, User } from '@/services'; +import { usersService, User, uploadService } from '@/services'; import Link from 'next/link'; export default function DashboardPage() { @@ -13,6 +13,7 @@ export default function DashboardPage() { }); const [isLoading, setIsLoading] = useState(true); const [recentUsers, setRecentUsers] = useState([]); + const [avatarUrls, setAvatarUrls] = useState>({}); useEffect(() => { fetchDashboardData(); @@ -29,7 +30,23 @@ export default function DashboardPage() { agents: users.filter((u) => u.role === 'AGENT').length, pendingUsers: users.filter((u) => u.status === 'PENDING_VERIFICATION').length, }); - setRecentUsers(users.slice(0, 5)); + const recent = users.slice(0, 5); + setRecentUsers(recent); + + // Fetch presigned URLs for avatars + const urls: Record = {}; + await Promise.all( + recent.map(async (user) => { + if (user.profile?.avatar && uploadService.isS3Key(user.profile.avatar)) { + try { + urls[user.id] = await uploadService.getPresignedDownloadUrl(user.profile.avatar); + } catch { + // Ignore errors for individual avatar fetches + } + } + }) + ); + setAvatarUrls(urls); } catch (err) { console.error('Failed to fetch dashboard data:', err); } finally { @@ -204,10 +221,10 @@ export default function DashboardPage() {
- {user.profile?.avatar ? ( + {avatarUrls[user.id] ? ( ) : (