@@ -18,7 +18,6 @@ import {
1818 Th ,
1919 Td ,
2020 Text ,
21- Image ,
2221 Flex ,
2322 Avatar ,
2423 Button ,
@@ -84,6 +83,7 @@ function Messages() {
8483 const isAdmin = role === "org:admin" ;
8584 const [ unreadCount , setUnreadCount ] = useState ( 0 ) ;
8685 const [ userData , setUserData ] = useState < UserData | null > ( null ) ;
86+ const [ senderProfiles , setSenderProfiles ] = useState < { [ key : string ] : string } > ( { } ) ;
8787
8888 const fetchMessages = async ( ) => {
8989 try {
@@ -149,6 +149,45 @@ function Messages() {
149149 setAdminMessages ( messages . filter ( ( message ) => message . from == user ?. fullName ) ) ;
150150 } , [ messages ] ) ;
151151
152+ useEffect ( ( ) => {
153+ const fetchSenderProfiles = async ( ) => {
154+ if ( messages . length === 0 ) return ;
155+
156+ try {
157+ // fetch profile pics
158+ const uniqueSenders = Array . from ( new Set ( messages . map ( ( message ) => message . from ) ) ) ;
159+ const profilePromises = uniqueSenders . map ( async ( senderName ) => {
160+ try {
161+ const encodedName = encodeURIComponent ( senderName ) ;
162+ const profileRes = await fetch ( `/api/user/by-name/${ encodedName } ` ) ;
163+ if ( profileRes . ok ) {
164+ const profileData = await profileRes . json ( ) ;
165+ return { name : senderName , profileURL : profileData . profileURL || "/pfp.png" } ;
166+ }
167+ } catch ( error ) {
168+ console . error ( `Failed to fetch profile for ${ senderName } :` , error ) ;
169+ }
170+ return { name : senderName , profileURL : "/pfp.png" } ;
171+ } ) ;
172+
173+ const profileResults = await Promise . all ( profilePromises ) ;
174+ const profileMap = profileResults . reduce (
175+ ( acc , result ) => {
176+ acc [ result . name ] = result . profileURL ;
177+ return acc ;
178+ } ,
179+ { } as { [ key : string ] : string } ,
180+ ) ;
181+
182+ setSenderProfiles ( profileMap ) ;
183+ } catch ( error ) {
184+ console . error ( "Failed to fetch sender profiles:" , error ) ;
185+ }
186+ } ;
187+
188+ fetchSenderProfiles ( ) ;
189+ } , [ messages ] ) ;
190+
152191 useEffect ( ( ) => {
153192 if ( message_id && messages . length > 0 ) {
154193 const msg = messages . find ( ( message ) => message . _id === message_id ) ;
@@ -408,15 +447,7 @@ function Messages() {
408447 onClick = { ( ) => setSelectedMessage ( msg ) }
409448 >
410449 < Flex className = { styles . avatarContainer } >
411- < Avatar
412- src = {
413- userData ?. profileURL && msg . from === userData . name
414- ? userData ?. profileURL
415- : "/pfp.png"
416- }
417- name = { msg . from }
418- size = "sm"
419- />
450+ < Avatar src = { senderProfiles [ msg . from ] || "/pfp.png" } name = { msg . from } size = "sm" />
420451 { msg . from }
421452 </ Flex >
422453 </ Td >
@@ -538,7 +569,7 @@ function Messages() {
538569 onClick = { ( ) => setSelectedMessage ( msg ) }
539570 >
540571 < Flex className = { styles . avatarContainer } >
541- < Avatar name = { msg . from } size = "sm" bg = "#596334" color = "white " />
572+ < Avatar src = { senderProfiles [ msg . from ] || "/pfp.png" } name = { msg . from } size = "sm " />
542573 { msg . from }
543574 </ Flex >
544575 </ Td >
0 commit comments