1- import { USER } from '@/fragments/users'
1+ import { USER , USER_BY_MENTION } from '@/fragments/users'
22import errorStyles from '@/styles/error.module.css'
3- import { useLazyQuery } from '@apollo/client'
3+ import { useLazyQuery , useQuery } from '@apollo/client'
44import classNames from 'classnames'
55import Link from 'next/link'
66import HoverablePopover from './hoverable-popover'
@@ -22,7 +22,16 @@ function StackingSince ({ since }) {
2222 )
2323}
2424
25- export default function UserPopover ( { name, children } ) {
25+ export default function UserPopover ( { name, itemId, children } ) {
26+ const { data : mentionData , loading : mentionLoading } = useQuery (
27+ USER_BY_MENTION ,
28+ {
29+ variables : { name, itemId } ,
30+ skip : ! itemId ,
31+ fetchPolicy : 'cache-first'
32+ }
33+ )
34+
2635 const [ getUser , { loading, data } ] = useLazyQuery (
2736 USER ,
2837 {
@@ -31,17 +40,25 @@ export default function UserPopover ({ name, children }) {
3140 }
3241 )
3342
43+ const resolvedUser = mentionData ?. userByMention
44+ const popoverUser = data ?. user || resolvedUser
45+ const isLoading = loading || ( itemId && mentionLoading )
46+ const trigger =
47+ typeof children === 'function'
48+ ? children ( { user : resolvedUser } )
49+ : children
50+
3451 return (
3552 < HoverablePopover
3653 onShow = { getUser }
37- trigger = { children }
38- body = { ! data || loading
54+ trigger = { trigger }
55+ body = { isLoading
3956 ? < UserSkeleton />
40- : ! data . user
57+ : ! popoverUser
4158 ? < h1 className = { classNames ( errorStyles . status , errorStyles . describe ) } > USER NOT FOUND</ h1 >
4259 : (
43- < UserBase user = { data . user } className = 'mb-0 pb-0' >
44- < StackingSince since = { data . user . since } />
60+ < UserBase user = { popoverUser } className = 'mb-0 pb-0' >
61+ < StackingSince since = { popoverUser . since } />
4562 </ UserBase >
4663 ) }
4764 />
0 commit comments