PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.3
Yatra – Travel Booking & Tour Operator Software v3.0.3
3.0.16 3.0.15 3.0.14 3.0.14.1 3.0.14.2 3.0.12 3.0.13 3.0.11 3.0.10 3.0.9 3.0.8 3.0.7 3.0.6 3.0.5 3.0.5.1 3.0.4 3.0.3 3.0.2.9 3.0.2.7 3.0.2.8 3.0.2.6 trunk 1.0.0 2.0.0 2.0.1 All 84 releases
yatra / resources / js / pages / account / Dashboard.tsx

Dashboard.tsx in Yatra – Travel Booking & Tour Operator Software 3.0.3, at resources/js/pages/account/Dashboard.tsx

534 lines 25.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import React from "react";
2 import {
3 Calendar,
4 CreditCard,
5 User,
6 LifeBuoy,
7 FileText,
8 Package,
9 MapPin,
10 ChevronRight,
11 ArrowRight,
12 Sparkles,
13 Plane,
14 Clock,
15 CheckCircle2,
16 AlertCircle,
17 Bell,
18 } from "lucide-react";
19 import { __ } from "../../lib/i18n";
20 import {
21 formatDate,
22 formatTravelDateRange,
23 getBadge,
24 currency,
25 phoneToTelHref,
26 } from "./utils";
27 import type { Booking, Payment, CustomerProfile } from "./types";
28
29 interface DashboardProps {
30 bookings: Booking[];
31 payments: Payment[];
32 displayProfile: CustomerProfile | null;
33 stats: Array<{
34 label: string;
35 value: string | number;
36 icon: React.ElementType;
37 badge?: string;
38 }>;
39 notifications: any[];
40 /** From Yatra Settings → General (company phone). */
41 conciergePhone?: string;
42 conciergeEmail?: string;
43 onSectionChange: (section: string) => void;
44 }
45
46 const Dashboard: React.FC<DashboardProps> = ({
47 bookings,
48 payments,
49 displayProfile,
50 stats,
51 notifications,
52 conciergePhone = "",
53 conciergeEmail = "",
54 onSectionChange,
55 }) => {
56 const conciergeTel = phoneToTelHref(conciergePhone);
57 const conciergeMail = String(conciergeEmail || "").trim();
58 const upcomingBookings =
59 bookings.filter((b) => new Date(b.travel_date) > new Date()).length > 0
60 ? bookings.filter((b) => new Date(b.travel_date) > new Date()).slice(0, 3)
61 : bookings
62 .filter((b) => new Date(b.travel_date) > new Date())
63 .slice(0, 3);
64
65 const recentBookings = bookings.length > 0 ? bookings.slice(0, 2) : [];
66
67 const pendingPayments =
68 payments.filter((p) => p.status === "pending").length > 0
69 ? payments.filter((p) => p.status === "pending").slice(0, 2)
70 : [];
71
72 const displayNotifications = notifications;
73
74 // Enhanced stats with colors and gradients
75 const enhancedStats = [
76 {
77 ...stats[0],
78 gradient: "from-yatra-primary to-yatra-primary-dark",
79 bgColor: "bg-yatra-soft dark:bg-yatra-surface-dark-muted",
80 iconColor: "text-yatra-primary dark:text-yatra-on-dark",
81 },
82 {
83 ...stats[1],
84 gradient: "from-emerald-500 to-emerald-600",
85 bgColor: "bg-emerald-50 dark:bg-emerald-900/20",
86 iconColor: "text-emerald-600 dark:text-emerald-400",
87 },
88 {
89 ...stats[2],
90 gradient: "from-amber-500 to-amber-600",
91 bgColor: "bg-amber-50 dark:bg-amber-900/20",
92 iconColor: "text-amber-600 dark:text-amber-400",
93 },
94 {
95 ...stats[3],
96 gradient: "from-purple-500 to-purple-600",
97 bgColor: "bg-purple-50 dark:bg-purple-900/20",
98 iconColor: "text-purple-600 dark:text-purple-400",
99 },
100 ];
101
102 return (
103 <div className="space-y-6">
104 {/* Welcome Banner */}
105 <div
106 className="yatra-dashboard-welcome relative overflow-hidden rounded-2xl p-8 shadow-xl"
107 style={{
108 background:
109 "linear-gradient(135deg, var(--yatra-primary, #3b82f6) 0%, var(--yatra-primary-dark, #2563eb) 45%, var(--yatra-primary-darker, #1e40af) 100%)",
110 color: "#ffffff",
111 }}
112 >
113 <div className="relative z-10">
114 <div className="flex items-start justify-between">
115 <div>
116 <h2
117 className="text-lg font-bold mb-2"
118 style={{ color: "#ffffff" }}
119 >
120 {__("Welcome back,", "yatra")}{" "}
121 {displayProfile?.name?.split(" ")[0] || __("Traveler", "yatra")}
122 ! 👋
123 </h2>
124 <p className="text-sm mb-4 text-white/90">
125 {__("You have", "yatra")} {upcomingBookings.length}{" "}
126 {upcomingBookings.length === 1
127 ? __("upcoming adventure", "yatra")
128 : __("upcoming adventures", "yatra")}{" "}
129 {__("coming up", "yatra")}
130 </p>
131 <div className="flex flex-wrap gap-3 mt-4">
132 <div
133 role="button"
134 tabIndex={0}
135 onClick={() => onSectionChange("bookings")}
136 className="px-4 py-2 rounded-lg text-sm font-medium transition-all flex items-center gap-2 hover:opacity-90 cursor-pointer"
137 style={{
138 backgroundColor: "rgba(255, 255, 255, 0.2)",
139 color: "#ffffff",
140 backdropFilter: "blur(8px)",
141 }}
142 >
143 <Calendar className="w-4 h-4" style={{ color: "#ffffff" }} />
144 {__("View Calendar", "yatra")}
145 </div>
146 <div
147 role="button"
148 tabIndex={0}
149 onClick={() => onSectionChange("documents")}
150 className="px-4 py-2 rounded-lg text-sm font-medium transition-all flex items-center gap-2 hover:opacity-90 cursor-pointer"
151 style={{
152 backgroundColor: "rgba(255, 255, 255, 0.2)",
153 color: "#ffffff",
154 backdropFilter: "blur(8px)",
155 }}
156 >
157 <FileText className="w-4 h-4" style={{ color: "#ffffff" }} />
158 {__("My Documents", "yatra")}
159 </div>
160 </div>
161 </div>
162 <div className="hidden md:block">
163 <div
164 className="w-24 h-24 rounded-full flex items-center justify-center"
165 style={{
166 backgroundColor: "rgba(255, 255, 255, 0.1)",
167 backdropFilter: "blur(8px)",
168 }}
169 >
170 <Plane className="w-12 h-12" style={{ color: "#ffffff" }} />
171 </div>
172 </div>
173 </div>
174 </div>
175 <div
176 className="absolute top-0 right-0 w-64 h-64 rounded-full -mr-32 -mt-32"
177 style={{ backgroundColor: "rgba(255, 255, 255, 0.05)" }}
178 ></div>
179 <div
180 className="absolute bottom-0 left-0 w-48 h-48 rounded-full -ml-24 -mb-24"
181 style={{ backgroundColor: "rgba(255, 255, 255, 0.05)" }}
182 ></div>
183 </div>
184
185 {/* Stats Grid */}
186 <div className="yatra-dashboard-stats grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
187 {enhancedStats.map((stat) => (
188 <div
189 key={stat.label}
190 className={`yatra-stat-card yatra-stat-card-${stat.label.toLowerCase().replace(/\s+/g, "-")} group relative bg-white dark:bg-gray-800 border border-gray-100 dark:border-gray-700 rounded-xl shadow-sm hover:shadow-md transition-all overflow-hidden`}
191 >
192 <div className="p-6">
193 <div className="flex items-start justify-between mb-4">
194 <div className={`p-3 rounded-lg ${stat.bgColor}`}>
195 <stat.icon className={`w-6 h-6 ${stat.iconColor}`} />
196 </div>
197 {stat.badge && (
198 <span className="inline-flex text-xs px-2 py-1 rounded-full bg-yatra-chip-bg text-yatra-primary-dark dark:bg-yatra-surface-dark dark:text-yatra-primary-light font-medium">
199 {stat.badge}
200 </span>
201 )}
202 </div>
203 <div>
204 <p className="text-sm text-gray-500 dark:text-gray-400 mb-1">
205 {stat.label}
206 </p>
207 <p className="text-xl font-bold text-gray-900 dark:text-white">
208 {stat.value}
209 </p>
210 </div>
211 </div>
212 <div
213 className={`absolute bottom-0 left-0 right-0 h-1 bg-gradient-to-r ${stat.gradient} opacity-0 group-hover:opacity-100 transition-opacity`}
214 ></div>
215 </div>
216 ))}
217 </div>
218
219 {/* Main Content Grid */}
220 <div className="grid gap-6 lg:grid-cols-3">
221 {/* Upcoming Trips - Takes 2 columns */}
222 <div className="yatra-dashboard-upcoming-trips lg:col-span-2 bg-white dark:bg-gray-800 border border-gray-100 dark:border-gray-700 rounded-xl shadow-sm overflow-hidden">
223 <div className="yatra-dashboard-upcoming-trips-header p-6 border-b border-gray-100 dark:border-gray-700">
224 <div className="flex items-center justify-between">
225 <div className="flex items-center gap-3">
226 <div className="p-2 bg-emerald-50 dark:bg-emerald-900/20 rounded-lg">
227 <Calendar className="w-5 h-5 text-emerald-600 dark:text-emerald-400" />
228 </div>
229 <div>
230 <h3 className="text-base font-semibold text-gray-900 dark:text-white">
231 {__("Upcoming Trips", "yatra")}
232 </h3>
233 <p className="text-sm text-gray-500 dark:text-gray-400">
234 {__("Your next adventures", "yatra")}
235 </p>
236 </div>
237 </div>
238 {upcomingBookings.length > 0 && (
239 <div
240 role="button"
241 tabIndex={0}
242 onClick={() => onSectionChange("bookings")}
243 className="text-sm text-yatra-primary dark:text-yatra-on-dark hover:text-yatra-primary-dark dark:hover:text-yatra-primary-light font-medium flex items-center gap-1 transition-colors cursor-pointer"
244 >
245 {__("View all", "yatra")}
246 <ArrowRight className="w-4 h-4" />
247 </div>
248 )}
249 </div>
250 </div>
251 <div className="p-6">
252 {upcomingBookings.length > 0 ? (
253 <div className="space-y-4">
254 {upcomingBookings.map((booking) => (
255 <div
256 key={booking.id}
257 className="yatra-booking-card yatra-booking-card-upcoming group relative border border-gray-200 dark:border-gray-700 rounded-xl p-5 hover:border-yatra-border-hover dark:hover:border-yatra-border-hover-dark hover:shadow-md transition-all cursor-pointer bg-gradient-to-r from-white to-gray-50/50 dark:from-gray-800 dark:to-gray-800/50"
258 >
259 <div className="flex items-start gap-4">
260 <div className="flex-shrink-0">
261 <div className="w-12 h-12 bg-gradient-to-br from-yatra-primary to-yatra-primary-darker rounded-lg flex items-center justify-center shadow-sm">
262 <MapPin className="w-6 h-6 text-white" />
263 </div>
264 </div>
265 <div className="flex-1 min-w-0">
266 <div className="flex items-start justify-between gap-2 mb-2">
267 <h4 className="text-sm font-semibold text-gray-900 dark:text-white group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark transition-colors">
268 {booking.trip_title}
269 </h4>
270 <span className={getBadge(booking.booking_status)}>
271 {__(booking.booking_status, booking.booking_status)}
272 </span>
273 </div>
274 <p className="text-sm text-gray-600 dark:text-gray-400 mb-2 flex items-center gap-2">
275 <MapPin className="w-4 h-4" />
276 {booking.destination ||
277 __("Multiple destinations", "yatra")}
278 </p>
279 <div className="flex items-center gap-4 text-xs text-gray-500 dark:text-gray-400">
280 <span className="flex items-center gap-1">
281 <Calendar className="w-3.5 h-3.5" />
282 {formatTravelDateRange(
283 booking.travel_date,
284 booking.end_date,
285 )}
286 </span>
287 <span className="flex items-center gap-1">
288 <User className="w-3.5 h-3.5" />
289 {booking.travelers}{" "}
290 {booking.travelers === 1
291 ? __("Traveler", "yatra")
292 : __("Travelers", "yatra")}
293 </span>
294 </div>
295 </div>
296 <ChevronRight className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark transition-colors flex-shrink-0" />
297 </div>
298 </div>
299 ))}
300 </div>
301 ) : (
302 <div className="text-center py-12">
303 <div className="w-16 h-16 bg-gray-100 dark:bg-gray-700 rounded-full flex items-center justify-center mx-auto mb-4">
304 <Calendar className="w-8 h-8 text-gray-400" />
305 </div>
306 <p className="text-gray-500 dark:text-gray-400 font-medium mb-1">
307 {__("No upcoming trips", "yatra")}
308 </p>
309 <p className="text-sm text-gray-400 dark:text-gray-500">
310 {__("Start planning your next adventure!", "yatra")}
311 </p>
312 </div>
313 )}
314 </div>
315 </div>
316
317 {/* Quick Actions & Notifications - Takes 1 column */}
318 <div className="space-y-6">
319 {/* Quick Actions */}
320 <div className="yatra-dashboard-quick-actions bg-white dark:bg-gray-800 border border-gray-100 dark:border-gray-700 rounded-xl shadow-sm overflow-hidden">
321 <div className="yatra-dashboard-quick-actions-header p-6 border-b border-gray-100 dark:border-gray-700">
322 <div className="flex items-center gap-3">
323 <div className="p-2 bg-purple-50 dark:bg-purple-900/20 rounded-lg">
324 <Sparkles className="w-5 h-5 text-purple-600 dark:text-purple-400" />
325 </div>
326 <h3 className="text-base font-semibold text-gray-900 dark:text-white">
327 {__("Quick Actions", "yatra")}
328 </h3>
329 </div>
330 </div>
331 <div className="p-6 space-y-3">
332 <div
333 role="button"
334 tabIndex={0}
335 onClick={() => onSectionChange("bookings")}
336 className="w-full flex items-center justify-between p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-yatra-border-hover dark:hover:border-yatra-border-hover-dark hover:bg-yatra-hover-soft dark:hover:bg-yatra-hover-soft-dark transition-all group cursor-pointer text-sm"
337 >
338 <div className="flex items-center gap-3">
339 <Package className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
340 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
341 {__("View Bookings", "yatra")}
342 </span>
343 </div>
344 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
345 </div>
346 <div
347 role="button"
348 tabIndex={0}
349 onClick={() => onSectionChange("payments")}
350 className="w-full flex items-center justify-between p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-yatra-border-hover dark:hover:border-yatra-border-hover-dark hover:bg-yatra-hover-soft dark:hover:bg-yatra-hover-soft-dark transition-all group cursor-pointer text-sm"
351 >
352 <div className="flex items-center gap-3">
353 <CreditCard className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
354 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
355 {__("Make Payment", "yatra")}
356 </span>
357 </div>
358 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
359 </div>
360 <div
361 role="button"
362 tabIndex={0}
363 onClick={() => onSectionChange("documents")}
364 className="w-full flex items-center justify-between p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-yatra-border-hover dark:hover:border-yatra-border-hover-dark hover:bg-yatra-hover-soft dark:hover:bg-yatra-hover-soft-dark transition-all group cursor-pointer text-sm"
365 >
366 <div className="flex items-center gap-3">
367 <FileText className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
368 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
369 {__("My Documents", "yatra")}
370 </span>
371 </div>
372 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
373 </div>
374 {conciergeTel ? (
375 <a
376 href={conciergeTel}
377 className="w-full flex items-center justify-between p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-yatra-border-hover dark:hover:border-yatra-border-hover-dark hover:bg-yatra-hover-soft dark:hover:bg-yatra-hover-soft-dark transition-all group cursor-pointer text-sm no-underline text-inherit"
378 >
379 <div className="flex items-center gap-3">
380 <LifeBuoy className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
381 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
382 {__("Call us", "yatra")}
383 </span>
384 </div>
385 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
386 </a>
387 ) : conciergeMail ? (
388 <a
389 href={`mailto:${encodeURIComponent(conciergeMail)}`}
390 className="w-full flex items-center justify-between p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-yatra-border-hover dark:hover:border-yatra-border-hover-dark hover:bg-yatra-hover-soft dark:hover:bg-yatra-hover-soft-dark transition-all group cursor-pointer text-sm no-underline text-inherit"
391 >
392 <div className="flex items-center gap-3">
393 <LifeBuoy className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
394 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
395 {__("Email us", "yatra")}
396 </span>
397 </div>
398 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
399 </a>
400 ) : null}
401 </div>
402 </div>
403
404 {/* Notifications */}
405 <div className="yatra-dashboard-notifications bg-white dark:bg-gray-800 border border-gray-100 dark:border-gray-700 rounded-xl shadow-sm overflow-hidden">
406 <div className="yatra-dashboard-notifications-header p-6 border-b border-gray-100 dark:border-gray-700">
407 <div className="flex items-center gap-3">
408 <div className="p-2 bg-amber-50 dark:bg-amber-900/20 rounded-lg">
409 <Bell className="w-5 h-5 text-amber-600 dark:text-amber-400" />
410 </div>
411 <div>
412 <h3 className="text-base font-semibold text-gray-900 dark:text-white">
413 {__("Notifications", "yatra")}
414 </h3>
415 <p className="text-xs text-gray-500 dark:text-gray-400">
416 {__("Updates & reminders", "yatra")}
417 </p>
418 </div>
419 </div>
420 </div>
421 <div className="p-6 space-y-3">
422 {displayNotifications.length > 0 ? (
423 displayNotifications.map((notif) => (
424 <div
425 key={notif.id}
426 className={`p-4 rounded-lg border ${
427 notif.type === "warning"
428 ? "bg-amber-50 dark:bg-amber-900/10 border-amber-200 dark:border-amber-800"
429 : "bg-yatra-soft dark:bg-yatra-hover-soft-dark border-yatra-border-subtle dark:border-yatra-border-dark"
430 }`}
431 >
432 <div className="flex items-start gap-3">
433 {notif.type === "warning" ? (
434 <AlertCircle className="w-5 h-5 text-amber-600 dark:text-amber-400 flex-shrink-0 mt-0.5" />
435 ) : (
436 <CheckCircle2 className="w-5 h-5 text-yatra-primary dark:text-yatra-on-dark flex-shrink-0 mt-0.5" />
437 )}
438 <div className="flex-1 min-w-0">
439 <p className="font-semibold text-sm text-gray-900 dark:text-white mb-1">
440 {notif.title}
441 </p>
442 <p className="text-xs text-gray-600 dark:text-gray-400 leading-relaxed">
443 {notif.message}
444 </p>
445 </div>
446 </div>
447 </div>
448 ))
449 ) : (
450 <div className="text-center py-6">
451 <Bell className="w-8 h-8 text-gray-300 dark:text-gray-600 mx-auto mb-2" />
452 <p className="text-sm text-gray-400 dark:text-gray-500">
453 {__("No new notifications", "yatra")}
454 </p>
455 </div>
456 )}
457 </div>
458 </div>
459 </div>
460 </div>
461
462 {/* Recent Activity Section */}
463 {(recentBookings.length > 0 || pendingPayments.length > 0) && (
464 <div className="yatra-dashboard-recent-activity bg-white dark:bg-gray-800 border border-gray-100 dark:border-gray-700 rounded-xl shadow-sm overflow-hidden">
465 <div className="yatra-dashboard-recent-activity-header p-6 border-b border-gray-100 dark:border-gray-700">
466 <div className="flex items-center gap-3">
467 <div className="p-2 bg-yatra-soft dark:bg-yatra-surface-dark-muted rounded-lg">
468 <Clock className="w-5 h-5 text-yatra-primary dark:text-yatra-on-dark" />
469 </div>
470 <div>
471 <h3 className="text-base font-semibold text-gray-900 dark:text-white">
472 {__("Recent Activity", "yatra")}
473 </h3>
474 <p className="text-sm text-gray-500 dark:text-gray-400">
475 {__("Your latest updates", "yatra")}
476 </p>
477 </div>
478 </div>
479 </div>
480 <div className="p-6">
481 <div className="space-y-4">
482 {recentBookings.map((booking) => (
483 <div
484 key={booking.id}
485 className="flex items-center gap-4 pb-4 border-b border-gray-100 dark:border-gray-700 last:border-0 last:pb-0"
486 >
487 <div className="w-10 h-10 bg-yatra-chip-bg dark:bg-yatra-surface-dark rounded-full flex items-center justify-center flex-shrink-0">
488 <CheckCircle2 className="w-5 h-5 text-yatra-primary dark:text-yatra-on-dark" />
489 </div>
490 <div className="flex-1 min-w-0">
491 <p className="text-sm font-medium text-gray-900 dark:text-white">
492 {__("Booking confirmed:", "yatra")} {booking.trip_title}
493 </p>
494 <p className="text-xs text-gray-500 dark:text-gray-400">
495 {formatDate(booking.booking_date || booking.created_at)}
496 </p>
497 </div>
498 <span className={getBadge(booking.booking_status)}>
499 {__(booking.booking_status, booking.booking_status)}
500 </span>
501 </div>
502 ))}
503 {pendingPayments.map((payment) => (
504 <div
505 key={payment.id}
506 className="flex items-center gap-4 pb-4 border-b border-gray-100 dark:border-gray-700 last:border-0 last:pb-0"
507 >
508 <div className="w-10 h-10 bg-amber-100 dark:bg-amber-900/30 rounded-full flex items-center justify-center flex-shrink-0">
509 <Clock className="w-5 h-5 text-amber-600 dark:text-amber-400" />
510 </div>
511 <div className="flex-1 min-w-0">
512 <p className="text-sm font-medium text-gray-900 dark:text-white">
513 {__("Payment pending:", "yatra")}{" "}
514 {currency(payment.amount)}
515 </p>
516 <p className="text-xs text-gray-500 dark:text-gray-400">
517 {formatDate(payment.date)}
518 </p>
519 </div>
520 <span className={getBadge(payment.status)}>
521 {__(payment.status, payment.status)}
522 </span>
523 </div>
524 ))}
525 </div>
526 </div>
527 </div>
528 )}
529 </div>
530 );
531 };
532
533 export default Dashboard;
534