@@ -48,9 +48,38 @@ const UserVIewOrders: React.FC = () => {
48
48
const [ orderResponseData , setOrderResponseData ] = useState ( null ) ;
49
49
const [ isLoggedOut , setIsLoggedOut ] = useState ( false ) ;
50
50
const [ isPreloader , setIsPreloader ] = useState ( false ) ;
51
+ const [ cartResponseData , setCartResponseData ] = useState ( null ) ;
52
+
51
53
const navigate = useNavigate ( ) ;
52
54
53
55
const cartState = useAppSelector ( ( state ) => state . cart ) ;
56
+ useEffect ( ( ) => {
57
+ fetchCarts ( ) ;
58
+ } , [ dispatch ] ) ;
59
+ const fetchCarts = async ( ) => {
60
+ try {
61
+ setIsLoading ( true ) ;
62
+ const response = await dispatch ( getUserCarts ( ) ) ;
63
+ const response1 = await dispatch ( getUserCarts ( ) ) . unwrap ( ) ;
64
+ if ( response . payload === 'Not authorized' ) {
65
+ setIsLoggedOut ( true ) ;
66
+ toast . error ( 'Please login first' ) ;
67
+ navigate ( '/login' ) ;
68
+ }
69
+ setCartResponseData ( response1 . data ) ;
70
+ setIsLoading ( false ) ;
71
+ } catch ( error : any ) {
72
+ if ( error === 'Not authorized' ) {
73
+ setIsLoggedOut ( true ) ;
74
+ toast . error ( 'Please login first' ) ;
75
+ navigate ( '/login' ) ;
76
+ }
77
+ console . error ( 'Error fetching carts:' , error ) ;
78
+ setIsLoading ( false ) ;
79
+ setIsError ( true ) ;
80
+ toast . error ( error . message ) ;
81
+ }
82
+ } ;
54
83
55
84
useEffect ( ( ) => {
56
85
fetchOrders ( ) ;
@@ -74,7 +103,7 @@ const UserVIewOrders: React.FC = () => {
74
103
console . error ( 'Error fetching orders:' , error ) ;
75
104
setIsLoading ( false ) ;
76
105
setIsError ( true ) ;
77
- toast . error ( " Error getting orders, check your internet" ) ;
106
+ toast . error ( ' Error getting orders, check your internet' ) ;
78
107
} finally {
79
108
setIsLoading ( false ) ;
80
109
}
@@ -102,6 +131,13 @@ const UserVIewOrders: React.FC = () => {
102
131
</ div >
103
132
) ;
104
133
}
134
+ if ( orderResponseData . length < 1 ) {
135
+ return (
136
+ < div className = "error-message" >
137
+ < p > No orders found.</ p >
138
+ </ div >
139
+ ) ;
140
+ }
105
141
106
142
return (
107
143
< >
@@ -126,50 +162,103 @@ const UserVIewOrders: React.FC = () => {
126
162
< div className = "order" >
127
163
{ orderResponseData ?. map ( ( order ) => (
128
164
< React . Fragment key = { order . id } >
129
- { JSON . parse ( order . products ) . map ( ( product , index ) => (
130
- < div key = { index } className = "order-item" >
131
- < div className = "head" >
132
- < div className = "" > Order No: { order . id . split ( '-' ) [ 0 ] } </ div >
133
- < div className = "" > Details</ div >
134
- < div className = "" > Placed on</ div >
135
- < div className = "" > Status: { order . status } </ div >
136
- </ div >
137
- < div className = "order-body" >
138
- < div className = "order-product" >
139
- < img
140
- src = { product . image }
141
- alt = { product . name }
142
- className = "product_img"
143
- />
144
- < p className = "o-description" >
145
- < h3 > { product . name } </ h3 >
146
- < br />
147
- < span > x{ product . quantity } </ span >
148
- < span className = "o-price" > ${ product . price } </ span >
149
- </ p >
150
- </ div >
151
- < div className = "order-details" >
152
- < Link to = { '' } > View Order Details</ Link >
153
- </ div >
154
- < div className = "date-placed" >
155
- < span > { new Date ( order . createdAt ) . toDateString ( ) } </ span >
165
+ { typeof order . products === 'string'
166
+ ? JSON . parse ( order . products ) . map ( ( product , index ) => (
167
+ < div key = { index } className = "order-item" >
168
+ < div className = "head" >
169
+ < div className = "" >
170
+ Order No: { order . id . split ( '-' ) [ 0 ] }
171
+ </ div >
172
+ < div className = "" > Details</ div >
173
+ < div className = "" > Placed on</ div >
174
+ < div className = "" > Status: { order . status } </ div >
175
+ </ div >
176
+ < div className = "order-body" >
177
+ < div className = "order-product" >
178
+ < img
179
+ src = { product . image }
180
+ alt = { product . name }
181
+ className = "product_img"
182
+ />
183
+ < p className = "o-description" >
184
+ < h3 > { product . name } </ h3 >
185
+ < br />
186
+ < span > x{ product . quantity } </ span >
187
+ < span className = "o-price" > ${ product . price } </ span >
188
+ </ p >
189
+ </ div >
190
+ < div className = "order-details" >
191
+ < Link to = { '' } > View Order Details</ Link >
192
+ </ div >
193
+ < div className = "date-placed" >
194
+ < span >
195
+ { new Date ( order . createdAt ) . toDateString ( ) }
196
+ </ span >
197
+ </ div >
198
+ < div className = "track" >
199
+ < button
200
+ className = {
201
+ order . status === 'Cancelled' ? 'disabled' : ''
202
+ }
203
+ onClick = { ( ) =>
204
+ navigate ( `/trackOrder/${ order . id } /${ product . id } ` )
205
+ }
206
+ disabled = { order . status === 'Cancelled' }
207
+ >
208
+ TRACK ORDER
209
+ </ button >
210
+ </ div >
211
+ </ div >
156
212
</ div >
157
- < div className = "track" >
158
- < button
159
- className = {
160
- order . status === 'Cancelled' ? 'disabled' : ''
161
- }
162
- onClick = { ( ) =>
163
- navigate ( `/trackOrder/${ order . id } /${ product . id } ` )
164
- }
165
- disabled = { order . status === 'Cancelled' }
166
- >
167
- TRACK ORDER
168
- </ button >
213
+ ) )
214
+ : order . products . map ( ( product , index ) => (
215
+ < div key = { index } className = "order-item" >
216
+ < div className = "head" >
217
+ < div className = "" >
218
+ Order No: { order . id . split ( '-' ) [ 0 ] }
219
+ </ div >
220
+ < div className = "" > Details</ div >
221
+ < div className = "" > Placed on</ div >
222
+ < div className = "" > Status: { order . status } </ div >
223
+ </ div >
224
+ < div className = "order-body" >
225
+ < div className = "order-product" >
226
+ < img
227
+ src = { product . image }
228
+ alt = { product . name }
229
+ className = "product_img"
230
+ />
231
+ < p className = "o-description" >
232
+ < h3 > { product . name } </ h3 >
233
+ < br />
234
+ < span > x{ product . quantity } </ span >
235
+ < span className = "o-price" > ${ product . price } </ span >
236
+ </ p >
237
+ </ div >
238
+ < div className = "order-details" >
239
+ < Link to = { '' } > View Order Details</ Link >
240
+ </ div >
241
+ < div className = "date-placed" >
242
+ < span >
243
+ { new Date ( order . createdAt ) . toDateString ( ) }
244
+ </ span >
245
+ </ div >
246
+ < div className = "track" >
247
+ < button
248
+ className = {
249
+ order . status === 'Cancelled' ? 'disabled' : ''
250
+ }
251
+ onClick = { ( ) =>
252
+ navigate ( `/trackOrder/${ order . id } /${ product . id } ` )
253
+ }
254
+ disabled = { order . status === 'Cancelled' }
255
+ >
256
+ TRACK ORDER
257
+ </ button >
258
+ </ div >
259
+ </ div >
169
260
</ div >
170
- </ div >
171
- </ div >
172
- ) ) }
261
+ ) ) }
173
262
</ React . Fragment >
174
263
) ) }
175
264
</ div >
0 commit comments