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 } = 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,24 @@ export default function UserPopover ({ name, children }) {
3140 }
3241 )
3342
43+ const resolvedUser = mentionData ?. userByMention
44+ const popoverUser = data ?. user || resolvedUser
45+ const trigger =
46+ typeof children === 'function'
47+ ? children ( { user : resolvedUser } )
48+ : children
49+
3450 return (
3551 < HoverablePopover
3652 onShow = { getUser }
37- trigger = { children }
38- body = { ! data || loading
53+ trigger = { trigger }
54+ body = { ! data && loading
3955 ? < UserSkeleton />
40- : ! data . user
56+ : ! popoverUser
4157 ? < h1 className = { classNames ( errorStyles . status , errorStyles . describe ) } > USER NOT FOUND</ h1 >
4258 : (
43- < UserBase user = { data . user } className = 'mb-0 pb-0' >
44- < StackingSince since = { data . user . since } />
59+ < UserBase user = { popoverUser } className = 'mb-0 pb-0' >
60+ < StackingSince since = { popoverUser . since } />
4561 </ UserBase >
4662 ) }
4763 />
0 commit comments