@@ -43,12 +43,11 @@ function SellerReviews({
43
43
const userId = params . id ;
44
44
45
45
const [ giverReviews , setGiverReviews ] = useState < ReviewInt [ ] | null > ( null ) ;
46
- const [ receiverReviews , setReciverReviews ] = useState < ReviewInt [ ] | null > ( null ) ;
47
- const [ searchLoading , setSearchLoading ] = useState < boolean > ( false ) ;
46
+ const [ receiverReviews , setReceiverReviews ] = useState < ReviewInt [ ] | null > ( null ) ;
48
47
const [ loading , setLoading ] = useState < boolean > ( true ) ;
49
48
const [ error , setError ] = useState < string | null > ( null ) ;
50
49
const [ isSaveEnabled , setIsSaveEnabled ] = useState ( false ) ;
51
- const { currentUser } = useContext ( AppContext ) ;
50
+ const { currentUser, setReload , reload } = useContext ( AppContext ) ;
52
51
const inputRef = useRef < HTMLInputElement > ( null ) ;
53
52
const [ searchBarValue , setSearchBarValue ] = useState ( '' ) ;
54
53
@@ -95,17 +94,18 @@ function SellerReviews({
95
94
logger . info ( `Fetched ${ data . length } reviews for seller ID: ${ userId } ` ) ;
96
95
const { giverReviews, receiverReviews } = processReviews ( data , userId ) ;
97
96
setGiverReviews ( giverReviews ) ;
98
- setReciverReviews ( receiverReviews ) ;
97
+ setReceiverReviews ( receiverReviews ) ;
99
98
} else {
100
99
logger . warn ( `No reviews found for seller ID: ${ userId } ` ) ;
101
100
setGiverReviews ( [ ] ) ;
102
- setReciverReviews ( [ ] ) ;
101
+ setReceiverReviews ( [ ] ) ;
103
102
}
104
103
} catch ( error ) {
105
104
logger . error ( `Error fetching reviews for seller ID: ${ userId } ` , { error } ) ;
106
105
setError ( 'Error fetching reviews. Please try again later.' ) ;
107
106
} finally {
108
107
setLoading ( false ) ;
108
+ setReload ( false )
109
109
}
110
110
} ;
111
111
@@ -114,7 +114,7 @@ function SellerReviews({
114
114
115
115
// Handle search logic
116
116
const handleSearch = async ( ) => {
117
- setSearchLoading ( true ) ;
117
+ setReload ( true ) ;
118
118
try {
119
119
logger . info ( `Searching reviews for seller ID: ${ userId } with query: ${ searchBarValue } ` ) ;
120
120
const data = await fetchReviews ( userId , searchBarValue ) ;
@@ -123,17 +123,17 @@ function SellerReviews({
123
123
logger . info ( `Found ${ data . length } reviews for seller ID: ${ userId } ` ) ;
124
124
const { giverReviews, receiverReviews } = processReviews ( data , userId ) ;
125
125
setGiverReviews ( giverReviews ) ;
126
- setReciverReviews ( receiverReviews ) ;
126
+ setReceiverReviews ( receiverReviews ) ;
127
127
} else {
128
128
logger . warn ( `No reviews found for seller ID: ${ userId } with query: ${ searchBarValue } ` ) ;
129
129
setGiverReviews ( [ ] ) ;
130
- setReciverReviews ( [ ] ) ;
130
+ setReceiverReviews ( [ ] ) ;
131
131
}
132
132
} catch ( error ) {
133
133
logger . error ( `Error searching reviews for seller ID: ${ userId } ` , { error } ) ;
134
134
setError ( 'Error searching reviews. Please try again later.' ) ;
135
135
} finally {
136
- setSearchLoading ( false ) ;
136
+ setReload ( false ) ;
137
137
}
138
138
} ;
139
139
@@ -157,7 +157,7 @@ function SellerReviews({
157
157
158
158
{ /* Search area */ }
159
159
< div className = 'flex gap-3 items-center justify-items-center py-3' >
160
- < span > { t ( 'SHARED.PIONEER_LABEL' ) } </ span >
160
+ < span > { t ( 'SHARED.PIONEER_LABEL' ) } </ span >
161
161
< FormControl className = "flex-grow mr-2" >
162
162
< TextField
163
163
id = "search-input"
@@ -180,21 +180,61 @@ function SellerReviews({
180
180
< SearchIcon className = "text-[#ffc153]" />
181
181
</ button >
182
182
</ div >
183
-
184
- { searchLoading && ( < div className = 'text-center text-primary text-lg' >
185
- { t ( 'SHARED.SEARCH_LOADING' ) }
186
- </ div > )
187
- }
188
183
189
184
< ToggleCollapse header = { t ( 'SCREEN.REVIEWS.GIVE_REVIEW_SECTION_HEADER' ) } >
190
185
< div >
191
- < EmojiPicker sellerId = { userId } setIsSaveEnabled = { setIsSaveEnabled } currentUser = { currentUser } />
186
+ < EmojiPicker sellerId = { userId } setIsSaveEnabled = { setIsSaveEnabled } currentUser = { currentUser } setReload = { setReload } />
192
187
</ div >
193
- </ ToggleCollapse >
194
-
188
+ </ ToggleCollapse >
195
189
< ToggleCollapse header = { t ( 'SCREEN.REVIEWS.REVIEWS_GIVEN_SECTION_HEADER' ) } >
196
-
197
- { giverReviews && giverReviews . map ( ( review , index ) => (
190
+ { reload
191
+ ? < Skeleton type = 'seller_review' />
192
+ : giverReviews && giverReviews . map ( ( review , index ) => (
193
+ < div key = { index } className = "seller_item_container mb-5" >
194
+ < div className = "flex justify-between items-start mb-3" >
195
+ { /* Left content */ }
196
+ < div className = "flex-grow" >
197
+ < p className = "text-primary text-sm" >
198
+ { review . giver } { ' -> ' }
199
+ < span className = "text-primary text-sm" > { review . receiver } </ span >
200
+ </ p >
201
+ < p className = "text-md break-words" > { review . heading } </ p >
202
+ </ div >
203
+
204
+ { /* Right content */ }
205
+ < div className = "flex flex-col items-end space-y-2" >
206
+ < div className = "text-[#828282] text-sm text-right whitespace-nowrap" >
207
+ < p > { review . date } </ p >
208
+ < p > { review . time } </ p >
209
+ </ div >
210
+ < div className = "flex gap-2 items-center" >
211
+ < Image
212
+ src = { review . image }
213
+ alt = "emoji image"
214
+ width = { 50 }
215
+ height = { 50 }
216
+ className = "object-cover rounded-md"
217
+ />
218
+ < p className = "text-xl max-w-[50px]" title = { review . reaction } >
219
+ { review . unicode }
220
+ </ p >
221
+ </ div >
222
+ < div className = "flex justify-between items-center" >
223
+ < Link href = { `/seller/reviews/feedback/${ review . reviewId } ?seller_name=${ review . giver } ` } >
224
+ < OutlineBtn label = { t ( 'SHARED.REPLY' ) } />
225
+ </ Link >
226
+ </ div >
227
+ </ div >
228
+ </ div >
229
+ </ div >
230
+ ) )
231
+ }
232
+ </ ToggleCollapse >
233
+
234
+ < ToggleCollapse header = { t ( 'SCREEN.REVIEWS.REVIEWS_RECEIVED_SECTION_HEADER' ) } open = { true } >
235
+ { reload
236
+ ? < Skeleton type = 'seller_review' />
237
+ : receiverReviews && receiverReviews . map ( ( review , index ) => (
198
238
< div key = { index } className = "seller_item_container mb-5" >
199
239
< div className = "flex justify-between items-start mb-3" >
200
240
{ /* Left content */ }
@@ -220,7 +260,9 @@ function SellerReviews({
220
260
height = { 50 }
221
261
className = "object-cover rounded-md"
222
262
/>
223
- < p className = "text-xl max-w-[50px]" > { review . unicode } </ p >
263
+ < p className = "text-xl max-w-[50px]" title = { review . reaction } >
264
+ { review . unicode }
265
+ </ p >
224
266
</ div >
225
267
< div className = "flex justify-between items-center" >
226
268
< Link href = { `/seller/reviews/feedback/${ review . reviewId } ?seller_name=${ review . giver } ` } >
@@ -230,47 +272,8 @@ function SellerReviews({
230
272
</ div >
231
273
</ div >
232
274
</ div >
233
- ) ) }
234
- </ ToggleCollapse >
235
-
236
- < ToggleCollapse header = { t ( 'SCREEN.REVIEWS.REVIEWS_RECEIVED_SECTION_HEADER' ) } open = { true } >
237
- { receiverReviews && receiverReviews . map ( ( review , index ) => (
238
- < div key = { index } className = "seller_item_container mb-5" >
239
- < div className = "flex justify-between items-start mb-3" >
240
- { /* Left content */ }
241
- < div className = "flex-grow" >
242
- < p className = "text-primary text-sm" >
243
- { review . giver } { ' -> ' }
244
- < span className = "text-primary text-sm" > { review . receiver } </ span >
245
- </ p >
246
- < p className = "text-md break-words" > { review . heading } </ p >
247
- </ div >
248
-
249
- { /* Right content */ }
250
- < div className = "flex flex-col items-end space-y-2" >
251
- < div className = "text-[#828282] text-sm text-right whitespace-nowrap" >
252
- < p > { review . date } </ p >
253
- < p > { review . time } </ p >
254
- </ div >
255
- < div className = "flex gap-2 items-center" >
256
- < Image
257
- src = { review . image }
258
- alt = "emoji image"
259
- width = { 50 }
260
- height = { 50 }
261
- className = "object-cover rounded-md"
262
- />
263
- < p className = "text-xl max-w-[50px]" > { review . unicode } </ p >
264
- </ div >
265
- < div className = "flex justify-between items-center" >
266
- < Link href = { `/seller/reviews/feedback/${ review . reviewId } ?seller_name=${ review . giver } ` } >
267
- < OutlineBtn label = { t ( 'SHARED.REPLY' ) } />
268
- </ Link >
269
- </ div >
270
- </ div >
271
- </ div >
272
- </ div >
273
- ) ) }
275
+ ) )
276
+ }
274
277
</ ToggleCollapse >
275
278
</ div >
276
279
</ >
0 commit comments