@@ -4,7 +4,7 @@ import { useTranslations } from 'next-intl';
4
4
import Image from 'next/image' ;
5
5
import Link from 'next/link' ;
6
6
import { useEffect , useState , useRef , useContext } from 'react' ;
7
- import { AppContext } from '../../../../../../context/AppContextProvider ' ;
7
+ import { toast } from 'react-toastify ' ;
8
8
import { resolveRating } from '../util/ratingUtils' ;
9
9
import { OutlineBtn } from '@/components/shared/Forms/Buttons/Buttons' ;
10
10
import EmojiPicker from '@/components/shared/Review/emojipicker' ;
@@ -15,6 +15,7 @@ import SearchIcon from '@mui/icons-material/Search';
15
15
import { FormControl , TextField } from '@mui/material' ;
16
16
import { fetchReviews } from '@/services/reviewsApi' ;
17
17
import { resolveDate } from '@/utils/date' ;
18
+ import { AppContext } from '../../../../../../context/AppContextProvider' ;
18
19
import logger from '../../../../../../logger.config.mjs' ;
19
20
20
21
function SellerReviews ( {
@@ -36,89 +37,109 @@ function SellerReviews({
36
37
const { currentUser, setReload, reload } = useContext ( AppContext ) ;
37
38
const inputRef = useRef < HTMLInputElement > ( null ) ;
38
39
const [ searchBarValue , setSearchBarValue ] = useState ( '' ) ;
40
+ const [ toUser , setToUser ] = useState ( '' ) ;
39
41
40
42
// Reusable function to process and filter reviews
41
- const processReviews = ( data : IReviewOutput [ ] , userId : string ) : { giverReviews : ReviewInt [ ] , receiverReviews : ReviewInt [ ] } => {
43
+ const processReviews = ( data : IReviewOutput [ ] ) : ReviewInt [ ] => {
42
44
const reviews = data
43
45
. map ( ( feedback : IReviewOutput ) => {
44
- if ( feedback . review_giver_id === userId || feedback . review_receiver_id === userId ) {
45
- const { date, time } = resolveDate ( feedback . review_date ) ;
46
- const { reaction, unicode } = resolveRating ( feedback . rating ) || { } ;
47
-
48
- return {
49
- heading : feedback . comment ,
50
- date,
51
- time,
52
- giver : feedback . giver ,
53
- receiver : feedback . receiver ,
54
- giverId : feedback . review_giver_id ,
55
- receiverId : feedback . review_receiver_id ,
56
- reviewId : feedback . _id ,
57
- reaction,
58
- unicode
59
- } ;
60
- }
61
- return null ; // Ignore irrelevant reviews
46
+ const { date, time } = resolveDate ( feedback . review_date ) ;
47
+ const { reaction, unicode } = resolveRating ( feedback . rating ) || { } ;
48
+ return {
49
+ heading : feedback . comment ,
50
+ date,
51
+ time,
52
+ giver : feedback . giver ,
53
+ receiver : feedback . receiver ,
54
+ giverId : feedback . review_giver_id ,
55
+ receiverId : feedback . review_receiver_id ,
56
+ reviewId : feedback . _id ,
57
+ reaction,
58
+ unicode,
59
+ image : feedback . image
60
+ } ;
62
61
} )
63
62
. filter ( ( review ) : review is ReviewInt => review !== null ) ;
64
63
65
- // Separate into giver and receiver reviews
66
- return {
67
- giverReviews : reviews . filter ( ( review ) => review . giverId === userId ) ,
68
- receiverReviews : reviews . filter ( ( review ) => review . receiverId === userId )
69
- } ;
64
+ return reviews ;
70
65
} ;
71
66
72
- useEffect ( ( ) => {
73
- const fetchSellerReviews = async ( ) => {
74
- setError ( null ) ;
75
- try {
76
- logger . info ( `Fetching reviews for seller ID: ${ userId } ` ) ;
77
- const data = await fetchReviews ( userId ) ;
67
+ const fetchUserReviews = async ( ) => {
68
+ setError ( null ) ;
69
+ try {
70
+ logger . info ( `Fetching reviews for userID: ${ userId } ` ) ;
71
+ const data = await fetchReviews ( userId ) ;
78
72
79
- if ( data && data . length > 0 ) {
80
- logger . info ( `Fetched ${ data . length } reviews for seller ID: ${ userId } ` ) ;
81
- const { giverReviews , receiverReviews } = processReviews ( data , userId ) ;
82
- setGiverReviews ( giverReviews ) ;
83
- setReceiverReviews ( receiverReviews ) ;
73
+ if ( data ) {
74
+ if ( data . givenReviews . length > 0 ) {
75
+ logger . info ( `Fetched ${ data . givenReviews . length } reviews given by userID: ${ userId } ` ) ;
76
+ setGiverReviews ( processReviews ( data . givenReviews ) ) ;
77
+ setToUser ( userId ) ;
84
78
} else {
85
- logger . warn ( `No reviews found for seller ID : ${ userId } ` ) ;
79
+ logger . warn ( `No given reviews found for userID : ${ userId } ` ) ;
86
80
setGiverReviews ( [ ] ) ;
87
- setReceiverReviews ( [ ] ) ;
88
81
}
89
- } catch ( error ) {
90
- logger . error ( `Error fetching reviews for seller ID: ${ userId } ` , { error } ) ;
91
- setError ( 'Error fetching reviews. Please try again later.' ) ;
92
- } finally {
93
- setLoading ( false ) ;
94
- setReload ( false ) ;
82
+
83
+ if ( data . receivedReviews . length > 0 ) {
84
+ logger . info ( `Fetched ${ data . receivedReviews . length } reviews received by userID: ${ userId } ` ) ;
85
+ setReceiverReviews ( processReviews ( data . receivedReviews ) ) ;
86
+ } else {
87
+ logger . warn ( `No received reviews found for userID: ${ userId } ` ) ;
88
+ setReceiverReviews ( [ ] ) ;
89
+ }
90
+ } else {
91
+ logger . warn ( `No reviews found for userID: ${ userId } ` ) ;
92
+ setGiverReviews ( [ ] ) ;
93
+ setReceiverReviews ( [ ] ) ;
95
94
}
96
- } ;
95
+ } catch ( error ) {
96
+ logger . error ( `Error fetching reviews for userID: ${ userId } ` , { error } ) ;
97
+ setError ( 'Error fetching reviews. Please try again later.' ) ;
98
+ } finally {
99
+ setLoading ( false ) ;
100
+ setReload ( false ) ;
101
+ }
102
+ } ;
97
103
98
- fetchSellerReviews ( ) ;
99
- } , [ userId , currentUser , reload ] ) ;
104
+ useEffect ( ( ) => {
105
+ fetchUserReviews ( ) ;
106
+ } , [ userId , currentUser ] ) ;
100
107
101
108
// Handle search logic
102
109
const handleSearch = async ( ) => {
103
110
setReload ( true ) ;
104
111
setError ( null ) ;
105
112
try {
106
- logger . info ( `Searching reviews for seller ID : ${ userId } with query: ${ searchBarValue } ` ) ;
113
+ logger . info ( `Searching reviews for userID : ${ userId } with query: ${ searchBarValue } ` ) ;
107
114
const data = await fetchReviews ( userId , searchBarValue ) ;
108
115
109
- if ( data && data . length > 0 ) {
110
- logger . info ( `Found ${ data . length } reviews for seller ID: ${ userId } ` ) ;
111
- const { giverReviews, receiverReviews } = processReviews ( data , userId ) ;
112
- setGiverReviews ( giverReviews ) ;
113
- setReceiverReviews ( receiverReviews ) ;
116
+ if ( data ) {
117
+ if ( data . givenReviews . length > 0 ) {
118
+ logger . info ( `Found ${ data . givenReviews . length } reviews given by Pioneer: ${ searchBarValue } ` ) ;
119
+ setGiverReviews ( processReviews ( data . givenReviews ) ) ;
120
+ setToUser ( data . givenReviews [ 0 ] . review_giver_id ) ;
121
+ } else {
122
+ logger . warn ( `No given reviews found for Pioneer: ${ searchBarValue } ` ) ;
123
+ setGiverReviews ( [ ] ) ;
124
+ }
125
+ if ( data . receivedReviews . length > 0 ) {
126
+ logger . info ( `Found ${ data . receivedReviews . length } reviews received by Pioneer: ${ searchBarValue } ` ) ;
127
+ setReceiverReviews ( processReviews ( data . receivedReviews ) ) ;
128
+ setToUser ( data . givenReviews [ 0 ] . review_receiver_id ) ;
129
+ } else {
130
+ logger . warn ( `No given reviews found for Pioneer: ${ searchBarValue } ` ) ;
131
+ setReceiverReviews ( [ ] ) ;
132
+ }
133
+
114
134
} else {
115
- logger . warn ( `No reviews found for seller ID: ${ userId } with query: ${ searchBarValue } ` ) ;
135
+ toast . error ( t ( 'SCREEN.REVIEWS.VALIDATION.NO_REVIEWS_FOUND' , { search_value : searchBarValue } ) ) ;
136
+ logger . warn ( `No reviews found for Pioneer: ${ searchBarValue } ` ) ;
116
137
setGiverReviews ( [ ] ) ;
117
138
setReceiverReviews ( [ ] ) ;
118
139
}
119
140
} catch ( error ) {
120
- logger . error ( `Error searching reviews for seller ID: ${ userId } ` , { error } ) ;
121
- setError ( 'Error searching reviews. Please try again later.' ) ;
141
+ logger . error ( `Pioneer ${ searchBarValue } not found ` , { error } ) ;
142
+ return toast . error ( t ( 'SCREEN.REVIEWS.VALIDATION.NO_PIONEER_FOUND' , { search_value : searchBarValue } ) ) ;
122
143
} finally {
123
144
setReload ( false ) ;
124
145
}
@@ -170,7 +191,7 @@ function SellerReviews({
170
191
171
192
< ToggleCollapse header = { t ( 'SCREEN.REVIEWS.GIVE_REVIEW_SECTION_HEADER' ) } >
172
193
< div >
173
- < EmojiPicker sellerId = { userId } setIsSaveEnabled = { setIsSaveEnabled } currentUser = { currentUser } setReload = { setReload } />
194
+ < EmojiPicker sellerId = { toUser } setIsSaveEnabled = { setIsSaveEnabled } currentUser = { currentUser } setReload = { setReload } refresh = { fetchUserReviews } />
174
195
</ div >
175
196
</ ToggleCollapse >
176
197
< ToggleCollapse header = { t ( 'SCREEN.REVIEWS.REVIEWS_GIVEN_SECTION_HEADER' ) } >
@@ -207,7 +228,7 @@ function SellerReviews({
207
228
</ p >
208
229
</ div >
209
230
< div className = "flex justify-between items-center" >
210
- < Link href = { `/seller/reviews/feedback/${ review . reviewId } ?seller_name =${ review . giver } ` } >
231
+ < Link href = { `/seller/reviews/feedback/${ review . reviewId } ?user_name =${ review . giver } ` } >
211
232
< OutlineBtn label = { t ( 'SHARED.REPLY' ) } />
212
233
</ Link >
213
234
</ div >
0 commit comments