@@ -92,12 +92,19 @@ function ForumPage({ theme,finalUser,setIsPopup,setMsg }) {
9292 const router = useRouter ( ) ;
9393 const [ hoveredUser , setHoveredUser ] = useState ( null ) ;
9494 const [ cursorPosition , setCursorPosition ] = useState ( { x : 0 , y : 0 } ) ;
95+ let [ users , setUsers ] = useState ( [ ] )
9596 let [ top , setTop ] = useState ( [ ] )
9697 const [ isClosed , setIsClosed ] = useState ( false )
9798 let [ sortedArray , setSortedArray ] = useState ( [ ] )
98- const handleMouseEnter = ( event , userImg ) => {
99+ const handleMouseEnter = async ( event , userImg ) => {
99100 setCursorPosition ( { x : event . clientX , y : event . clientY } ) ;
100- setHoveredUser ( userImg ) ;
101+ let obj = { ...userImg }
102+ console . log ( userImg )
103+ let u = await fetch ( "/api/getuser" , { method :"POST" , body :JSON . stringify ( { id :userImg . authorId } ) } )
104+ u = await u . json ( )
105+ u = u . msg
106+ obj = { ...obj , count :Object . keys ( u . followers ) . length , questions :u . questions , answers :u . answers }
107+ setHoveredUser ( obj ) ;
101108 } ;
102109
103110 const handleMouseLeave = ( ) => {
@@ -130,29 +137,54 @@ function ForumPage({ theme,finalUser,setIsPopup,setMsg }) {
130137 useEffect ( ( ) => {
131138 fetchData ( )
132139 } , [ ] )
133- async function fetchData ( ) {
134- let data = await fetch ( "/api/createquestion" , { method :"GET" } )
135- data = await data . json ( )
136- data = data . data
137- let arr = data . filter ( ( data ) => data . createdAt !== undefined )
138- arr = arr . sort ( ( a , b ) => a . createdAt - b . createdAt )
139- // data=data.sort((a,b)=>b.dateTime-a.dateTime)
140- setSortedArray ( [ ...arr ] )
141- let arr1 = arr . sort ( ( a , b ) => b . views - a . views )
142- setTop ( [ ...arr1 ] )
143- console . log ( data , 'dsjidddddddddddd' )
144- data . reverse ( )
145- setIssues ( [ ...data ] )
146- setOriginalIssues ( [ ...data ] )
147- }
140+ useEffect ( ( ) => {
141+ console . log ( users , 'users' )
142+ } , [ users ] )
143+ async function fetchData ( ) {
144+ try {
145+ // Fetch initial data
146+ let response = await fetch ( "/api/createquestion" , { method : "GET" } ) ;
147+ let data = await response . json ( ) ;
148+ data = data . data ;
149+
150+ // Filter out items without 'createdAt'
151+ let arr = data . filter ( item => item . createdAt !== undefined ) ;
152+
153+ // Create an empty object to store user messages
154+ let obj1 = [ ] ;
155+
156+ // Collect all user IDs to fetch in parallel
157+ let userPromises = data . flatMap ( item =>
158+ item . relatedUser . map ( async ( userRef ) => {
159+ console . log ( userRef )
160+ setUsers ( prev => [ ...prev , userRef . authorId ] )
161+
162+ } )
163+ ) ;
164+ // Sort and update state
165+ arr = arr . sort ( ( a , b ) => a . createdAt - b . createdAt ) ;
166+ setSortedArray ( [ ...arr ] ) ;
167+
168+ let arr1 = [ ...arr ] . sort ( ( a , b ) => b . views - a . views ) ;
169+ setTop ( [ ...arr1 ] ) ;
170+
171+ // Reverse the data and update state
172+ data . reverse ( ) ;
173+ setIssues ( [ ...data ] ) ;
174+ setOriginalIssues ( [ ...data ] ) ;
175+
176+ } catch ( error ) {
177+ console . error ( "Error fetching data:" , error ) ;
178+ }
179+ }
180+
148181 let search = useRef ( )
149182function handleSearch ( ) {
150183 let arr = originalIssues
151184 let value = search . current . value
152185 if ( value . length == 0 ) {
153186 setIssues ( [ ...originalIssues ] )
154187 }
155- console . log ( value )
156188 value = value . toLowerCase ( )
157189 arr = arr . filter ( ( data ) => data . title . toLowerCase ( ) . includes ( value ) )
158190 setIssues ( [ ...arr ] )
@@ -509,16 +541,18 @@ const handlePageChange = (page) => {
509541
510542 < div className = "flex max-md:pl-[50px] max-sm:gap-[1rem] max-sm:items-center items-center gap-6 max-sm:mt-2 text-gray-500 flex-wrap" >
511543 < div className = "flex items-center gap-1 hover:gap-2 transition-all duration-500 mt-2 max-sm:mt-0" >
512- { issue ?. discussionUsers ?. map ( ( userImg , idx ) => (
513- < img
514- key = { idx }
515- src = { userImg }
516- alt = "Discussion User"
517- className = "rounded-full w-5 h-5"
518- onMouseEnter = { ( event ) => handleMouseEnter ( event , userImg ) }
519- onMouseLeave = { handleMouseLeave }
520- />
521- ) ) }
544+ { issue ?. relatedUser . map ( ( user , idx ) => {
545+ return < img
546+ key = { idx }
547+ onClick = { ( ) => router . push ( `/profile?id=${ user . authorId } ` ) }
548+ src = { user . authorImage }
549+ id = "img"
550+ alt = "Discussion User"
551+ className = "rounded-full w-5 h-5"
552+ onMouseEnter = { ( event ) => handleMouseEnter ( event , user ) }
553+ onMouseLeave = { handleMouseLeave }
554+ />
555+ } ) }
522556 </ div >
523557 < div onClick = { ( e ) => handleLike ( e , issue ) } className = " flex items-center gap-2 max-sm:text-[11px]" >
524558 < FontAwesomeIcon color = { `${ finalUser && issue ?. likes ?. includes ( finalUser . _id ) ?"blue" :"" } ` } icon = { faHeart } />
@@ -567,16 +601,16 @@ className="flex items-center gap-4">
567601
568602 < div className = "flex max-md:pl-[50px] max-sm:gap-[1rem] max-sm:items-center items-center gap-6 max-sm:mt-2 text-gray-500 flex-wrap" >
569603 < div className = "flex items-center gap-1 hover:gap-2 transition-all duration-500 mt-2 max-sm:mt-0" >
570- { issue ?. discussionUsers ? .map ( ( userImg , idx ) => (
571- < img
604+ { issue ?. relatedUser . map ( ( user , idx ) => {
605+ return < img
572606 key = { idx }
573- src = { userImg }
607+ src = { user . authorImage }
574608 alt = "Discussion User"
575609 className = "rounded-full w-5 h-5"
576- onMouseEnter = { ( event ) => handleMouseEnter ( event , userImg ) }
610+ onMouseEnter = { ( event ) => handleMouseEnter ( event , user ) }
577611 onMouseLeave = { handleMouseLeave }
578612 />
579- ) ) }
613+ } ) }
580614 </ div >
581615 < div onClick = { ( e ) => handleLike ( e , issue ) } className = " flex items-center gap-2 max-sm:text-[11px]" >
582616 < FontAwesomeIcon color = { `${ finalUser && issue ?. likes ?. includes ( finalUser . _id ) ?"blue" :"" } ` } icon = { faHeart } />
@@ -595,23 +629,26 @@ className="flex items-center gap-4">
595629 </ div >
596630 ) ) }
597631 { hoveredUser && (
632+ < label htmlFor = "id" >
633+
598634 < div
599635 className = { `forummodal ease-out fixed border p-4 w-[400px] h-[200px] rounded-lg ${ theme ?"bg-white border-gray-300" : "bg-[#2b2b2b] border-slate-50 border-[1px] text-gray-400" } shadow-lg` }
600636 style = { { top : cursorPosition . y + 10 , left : cursorPosition . x - 400 } }
601637 >
602638 < div className = "w-[100%] flex gap-4 items-center" >
603- < img src = { hoveredUser } alt = "Hovered User" className = "w-20 h-20 rounded-full" />
639+ < img src = { hoveredUser . authorImage } alt = "Hovered User" className = "w-20 h-20 rounded-full" />
604640 < div className = "flex w-[100%] items-start gap-2 h-[100%] justify-center flex-col " >
605- < p > User Name </ p >
641+ < p > { hoveredUser . authorName } </ p >
606642 < button className = { `bg-transparent pt-1 pb-1 pl-3 pr-3 rounded-md border-[1px] border-gray-500 ` } > Follow</ button >
607643 </ div >
608644 </ div >
609645 < div className = "p-[20px] mt-4 flex gap-6 w-[100%] justify-center" >
610- < p className = "flex flex-col h-[100%] items-center" > < h2 > Answers</ h2 > < p > 40 </ p > </ p >
611- < p className = "flex h-[100%] flex-col items-center" > < h2 > Questions</ h2 > < p > 40 </ p > </ p >
612- < p className = "flex h-[100%] items-center flex-col" > < h2 > Followers</ h2 > < p > 40 </ p > </ p >
646+ < p className = "flex flex-col h-[100%] items-center" > < h2 > Answers</ h2 > < p > { hoveredUser && hoveredUser . answers } </ p > </ p >
647+ < p className = "flex h-[100%] flex-col items-center" > < h2 > Questions</ h2 > < p > { hoveredUser && hoveredUser . questions } </ p > </ p >
648+ < p className = "flex h-[100%] items-center flex-col" > < h2 > Followers</ h2 > < p > { hoveredUser && hoveredUser . count } </ p > </ p >
613649 </ div >
614650 </ div >
651+ </ label >
615652 ) }
616653 </ div >
617654 </ div >
0 commit comments