@@ -2,7 +2,7 @@ import React, { useState, useEffect, useMemo, useRef } from 'react';
22import { Link } from 'react-router-dom' ;
33import { Download , List , X , ChevronDown , ChevronRight , Check , Box , Link as LinkIcon , AlertCircle , Bell , Search , ArrowUpRight , MessageSquare , Send , Save , PieChart , TrendingUp , Eye , ArrowBigUp , ArrowBigDown , Crown , Settings } from 'lucide-react' ;
44import { OptimizedImage } from '@/components/ui/OptimizedImage' ;
5- import { BACKEND_URL } from '@/utils/api' ;
5+ import { api , BACKEND_URL } from '@/utils/api' ;
66import { SiteRoutes } from '@/utils/routes' ;
77import { ProjectCard } from '@/modules/project/components/ProjectCard' ;
88import type { Project , User } from '@/types' ;
@@ -453,6 +453,29 @@ const InlineCommentThreadUI = ({ project, currentUser }: { project?: Project; cu
453453 const userAvatar = resolveAvatar ( currentUser ?. avatarUrl ) ;
454454 const userInitial = currentUser ?. username ?. charAt ( 0 ) ?. toUpperCase ( ) ?? 'Y' ;
455455
456+ const [ randomCommenter , setRandomCommenter ] = useState < { name : string ; avatar : string } | null > ( null ) ;
457+
458+ useEffect ( ( ) => {
459+ if ( ! project ?. authorId ) return ;
460+ api . get ( `/user/profile/${ project . authorId } ` )
461+ . then ( res => {
462+ const u = res . data ;
463+ if ( ! u ?. username ) return ;
464+ const raw : string = u . avatarUrl ?? '' ;
465+ const resolvedAvatar = raw . startsWith ( 'http' )
466+ ? raw
467+ : raw ? `${ BACKEND_URL } ${ raw . startsWith ( '/' ) ? '' : '/' } ${ raw } ` : '' ;
468+ setRandomCommenter ( {
469+ name : u . displayName || u . username ,
470+ avatar : resolvedAvatar ,
471+ } ) ;
472+ } )
473+ . catch ( ( ) => { /* silently fail */ } ) ;
474+ } , [ project ?. authorId ] ) ;
475+
476+ const commenterName = randomCommenter ?. name ?? project ?. author ?? '…' ;
477+ const commenterAvatar = randomCommenter ?. avatar ;
478+
456479 return (
457480 < PreviewPanel icon = { MessageSquare } title = "Comments" accentClass = "text-violet-600 dark:text-violet-400" className = "min-h-[360px]" >
458481 < div className = "space-y-4" >
@@ -492,11 +515,14 @@ const InlineCommentThreadUI = ({ project, currentUser }: { project?: Project; cu
492515
493516 < div className = "flex-1 min-w-0" >
494517 < div className = "flex items-center gap-3 mb-2" >
495- < div className = "w-10 h-10 rounded-full overflow-hidden shadow-sm border border-slate-200 dark:border-white/5 shrink-0" >
496- < img src = "https://avatars.githubusercontent.com/u/26007280" alt = "Dsjoo" className = "w-full h-full object-cover" loading = "lazy" />
518+ < div className = "w-10 h-10 rounded-full overflow-hidden shadow-sm border border-slate-200 dark:border-white/5 shrink-0 bg-slate-200 dark:bg-slate-700" >
519+ { commenterAvatar
520+ ? < img src = { commenterAvatar } alt = { commenterName } className = "w-full h-full object-cover" loading = "lazy" />
521+ : < span className = "w-full h-full flex items-center justify-center text-sm font-bold text-slate-500" > { commenterName . charAt ( 0 ) } </ span >
522+ }
497523 </ div >
498524 < div className = "flex flex-col" >
499- < span className = "font-bold text-sm text-slate-900 dark:text-white" > Dsjoo </ span >
525+ < span className = "font-bold text-sm text-slate-900 dark:text-white" > { commenterName } </ span >
500526 < span className = "text-xs font-medium text-slate-500 dark:text-slate-400" > 2 hours ago</ span >
501527 </ div >
502528 </ div >
0 commit comments