PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.4
Yatra – Travel Booking & Tour Operator Software v3.0.4
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.4, at resources/js/pages/account/Dashboard.tsx

535 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 { __, sprintf } 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 {sprintf(
121 __("Welcome back, %s!", "yatra"),
122 displayProfile?.name?.split(" ")[0] || __("Traveler", "yatra"),
123 )}
124 </h2>
125 <p className="text-sm mb-4 text-white/90">
126 {__("You have", "yatra")} {upcomingBookings.length}{" "}
127 {upcomingBookings.length === 1
128 ? __("upcoming adventure", "yatra")
129 : __("upcoming adventures", "yatra")}{" "}
130 {__("coming up", "yatra")}
131 </p>
132 <div className="flex flex-wrap gap-3 mt-4">
133 <div
134 role="button"
135 tabIndex={0}
136 onClick={() => onSectionChange("bookings")}
137 className="px-4 py-2 rounded-lg text-sm font-medium transition-all flex items-center gap-2 hover:opacity-90 cursor-pointer"
138 style={{
139 backgroundColor: "rgba(255, 255, 255, 0.2)",
140 color: "#ffffff",
141 backdropFilter: "blur(8px)",
142 }}
143 >
144 <Calendar className="w-4 h-4" style={{ color: "#ffffff" }} />
145 {__("View Calendar", "yatra")}
146 </div>
147 <div
148 role="button"
149 tabIndex={0}
150 onClick={() => onSectionChange("documents")}
151 className="px-4 py-2 rounded-lg text-sm font-medium transition-all flex items-center gap-2 hover:opacity-90 cursor-pointer"
152 style={{
153 backgroundColor: "rgba(255, 255, 255, 0.2)",
154 color: "#ffffff",
155 backdropFilter: "blur(8px)",
156 }}
157 >
158 <FileText className="w-4 h-4" style={{ color: "#ffffff" }} />
159 {__("My Documents", "yatra")}
160 </div>
161 </div>
162 </div>
163 <div className="hidden md:block">
164 <div
165 className="w-24 h-24 rounded-full flex items-center justify-center"
166 style={{
167 backgroundColor: "rgba(255, 255, 255, 0.1)",
168 backdropFilter: "blur(8px)",
169 }}
170 >
171 <Plane className="w-12 h-12" style={{ color: "#ffffff" }} />
172 </div>
173 </div>
174 </div>
175 </div>
176 <div
177 className="absolute top-0 right-0 w-64 h-64 rounded-full -mr-32 -mt-32"
178 style={{ backgroundColor: "rgba(255, 255, 255, 0.05)" }}
179 ></div>
180 <div
181 className="absolute bottom-0 left-0 w-48 h-48 rounded-full -ml-24 -mb-24"
182 style={{ backgroundColor: "rgba(255, 255, 255, 0.05)" }}
183 ></div>
184 </div>
185
186 {/* Stats Grid */}
187 <div className="yatra-dashboard-stats grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
188 {enhancedStats.map((stat) => (
189 <div
190 key={stat.label}
191 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`}
192 >
193 <div className="p-6">
194 <div className="flex items-start justify-between mb-4">
195 <div className={`p-3 rounded-lg ${stat.bgColor}`}>
196 <stat.icon className={`w-6 h-6 ${stat.iconColor}`} />
197 </div>
198 {stat.badge && (
199 <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">
200 {stat.badge}
201 </span>
202 )}
203 </div>
204 <div>
205 <p className="text-sm text-gray-500 dark:text-gray-400 mb-1">
206 {stat.label}
207 </p>
208 <p className="text-xl font-bold text-gray-900 dark:text-white">
209 {stat.value}
210 </p>
211 </div>
212 </div>
213 <div
214 className={`absolute bottom-0 left-0 right-0 h-1 bg-gradient-to-r ${stat.gradient} opacity-0 group-hover:opacity-100 transition-opacity`}
215 ></div>
216 </div>
217 ))}
218 </div>
219
220 {/* Main Content Grid */}
221 <div className="grid gap-6 lg:grid-cols-3">
222 {/* Upcoming Trips - Takes 2 columns */}
223 <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">
224 <div className="yatra-dashboard-upcoming-trips-header p-6 border-b border-gray-100 dark:border-gray-700">
225 <div className="flex items-center justify-between">
226 <div className="flex items-center gap-3">
227 <div className="p-2 bg-emerald-50 dark:bg-emerald-900/20 rounded-lg">
228 <Calendar className="w-5 h-5 text-emerald-600 dark:text-emerald-400" />
229 </div>
230 <div>
231 <h3 className="text-base font-semibold text-gray-900 dark:text-white">
232 {__("Upcoming Trips", "yatra")}
233 </h3>
234 <p className="text-sm text-gray-500 dark:text-gray-400">
235 {__("Your next adventures", "yatra")}
236 </p>
237 </div>
238 </div>
239 {upcomingBookings.length > 0 && (
240 <div
241 role="button"
242 tabIndex={0}
243 onClick={() => onSectionChange("bookings")}
244 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"
245 >
246 {__("View all", "yatra")}
247 <ArrowRight className="w-4 h-4" />
248 </div>
249 )}
250 </div>
251 </div>
252 <div className="p-6">
253 {upcomingBookings.length > 0 ? (
254 <div className="space-y-4">
255 {upcomingBookings.map((booking) => (
256 <div
257 key={booking.id}
258 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"
259 >
260 <div className="flex items-start gap-4">
261 <div className="flex-shrink-0">
262 <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">
263 <MapPin className="w-6 h-6 text-white" />
264 </div>
265 </div>
266 <div className="flex-1 min-w-0">
267 <div className="flex items-start justify-between gap-2 mb-2">
268 <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">
269 {booking.trip_title}
270 </h4>
271 <span className={getBadge(booking.booking_status)}>
272 {__(booking.booking_status, booking.booking_status)}
273 </span>
274 </div>
275 <p className="text-sm text-gray-600 dark:text-gray-400 mb-2 flex items-center gap-2">
276 <MapPin className="w-4 h-4" />
277 {booking.destination ||
278 __("Multiple destinations", "yatra")}
279 </p>
280 <div className="flex items-center gap-4 text-xs text-gray-500 dark:text-gray-400">
281 <span className="flex items-center gap-1">
282 <Calendar className="w-3.5 h-3.5" />
283 {formatTravelDateRange(
284 booking.travel_date,
285 booking.end_date,
286 )}
287 </span>
288 <span className="flex items-center gap-1">
289 <User className="w-3.5 h-3.5" />
290 {booking.travelers}{" "}
291 {booking.travelers === 1
292 ? __("Traveler", "yatra")
293 : __("Travelers", "yatra")}
294 </span>
295 </div>
296 </div>
297 <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" />
298 </div>
299 </div>
300 ))}
301 </div>
302 ) : (
303 <div className="text-center py-12">
304 <div className="w-16 h-16 bg-gray-100 dark:bg-gray-700 rounded-full flex items-center justify-center mx-auto mb-4">
305 <Calendar className="w-8 h-8 text-gray-400" />
306 </div>
307 <p className="text-gray-500 dark:text-gray-400 font-medium mb-1">
308 {__("No upcoming trips", "yatra")}
309 </p>
310 <p className="text-sm text-gray-400 dark:text-gray-500">
311 {__("Start planning your next adventure!", "yatra")}
312 </p>
313 </div>
314 )}
315 </div>
316 </div>
317
318 {/* Quick Actions & Notifications - Takes 1 column */}
319 <div className="space-y-6">
320 {/* Quick Actions */}
321 <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">
322 <div className="yatra-dashboard-quick-actions-header p-6 border-b border-gray-100 dark:border-gray-700">
323 <div className="flex items-center gap-3">
324 <div className="p-2 bg-purple-50 dark:bg-purple-900/20 rounded-lg">
325 <Sparkles className="w-5 h-5 text-purple-600 dark:text-purple-400" />
326 </div>
327 <h3 className="text-base font-semibold text-gray-900 dark:text-white">
328 {__("Quick Actions", "yatra")}
329 </h3>
330 </div>
331 </div>
332 <div className="p-6 space-y-3">
333 <div
334 role="button"
335 tabIndex={0}
336 onClick={() => onSectionChange("bookings")}
337 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"
338 >
339 <div className="flex items-center gap-3">
340 <Package className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
341 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
342 {__("View Bookings", "yatra")}
343 </span>
344 </div>
345 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
346 </div>
347 <div
348 role="button"
349 tabIndex={0}
350 onClick={() => onSectionChange("payments")}
351 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"
352 >
353 <div className="flex items-center gap-3">
354 <CreditCard className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
355 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
356 {__("Make Payment", "yatra")}
357 </span>
358 </div>
359 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
360 </div>
361 <div
362 role="button"
363 tabIndex={0}
364 onClick={() => onSectionChange("documents")}
365 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"
366 >
367 <div className="flex items-center gap-3">
368 <FileText className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
369 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
370 {__("My Documents", "yatra")}
371 </span>
372 </div>
373 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
374 </div>
375 {conciergeTel ? (
376 <a
377 href={conciergeTel}
378 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"
379 >
380 <div className="flex items-center gap-3">
381 <LifeBuoy className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
382 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
383 {__("Call us", "yatra")}
384 </span>
385 </div>
386 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
387 </a>
388 ) : conciergeMail ? (
389 <a
390 href={`mailto:${encodeURIComponent(conciergeMail)}`}
391 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"
392 >
393 <div className="flex items-center gap-3">
394 <LifeBuoy className="w-5 h-5 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
395 <span className="font-medium text-gray-700 dark:text-gray-300 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark">
396 {__("Email us", "yatra")}
397 </span>
398 </div>
399 <ChevronRight className="w-4 h-4 text-gray-400 group-hover:text-yatra-primary dark:group-hover:text-yatra-on-dark" />
400 </a>
401 ) : null}
402 </div>
403 </div>
404
405 {/* Notifications */}
406 <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">
407 <div className="yatra-dashboard-notifications-header p-6 border-b border-gray-100 dark:border-gray-700">
408 <div className="flex items-center gap-3">
409 <div className="p-2 bg-amber-50 dark:bg-amber-900/20 rounded-lg">
410 <Bell className="w-5 h-5 text-amber-600 dark:text-amber-400" />
411 </div>
412 <div>
413 <h3 className="text-base font-semibold text-gray-900 dark:text-white">
414 {__("Notifications", "yatra")}
415 </h3>
416 <p className="text-xs text-gray-500 dark:text-gray-400">
417 {__("Updates & reminders", "yatra")}
418 </p>
419 </div>
420 </div>
421 </div>
422 <div className="p-6 space-y-3">
423 {displayNotifications.length > 0 ? (
424 displayNotifications.map((notif) => (
425 <div
426 key={notif.id}
427 className={`p-4 rounded-lg border ${
428 notif.type === "warning"
429 ? "bg-amber-50 dark:bg-amber-900/10 border-amber-200 dark:border-amber-800"
430 : "bg-yatra-soft dark:bg-yatra-hover-soft-dark border-yatra-border-subtle dark:border-yatra-border-dark"
431 }`}
432 >
433 <div className="flex items-start gap-3">
434 {notif.type === "warning" ? (
435 <AlertCircle className="w-5 h-5 text-amber-600 dark:text-amber-400 flex-shrink-0 mt-0.5" />
436 ) : (
437 <CheckCircle2 className="w-5 h-5 text-yatra-primary dark:text-yatra-on-dark flex-shrink-0 mt-0.5" />
438 )}
439 <div className="flex-1 min-w-0">
440 <p className="font-semibold text-sm text-gray-900 dark:text-white mb-1">
441 {notif.title}
442 </p>
443 <p className="text-xs text-gray-600 dark:text-gray-400 leading-relaxed">
444 {notif.message}
445 </p>
446 </div>
447 </div>
448 </div>
449 ))
450 ) : (
451 <div className="text-center py-6">
452 <Bell className="w-8 h-8 text-gray-300 dark:text-gray-600 mx-auto mb-2" />
453 <p className="text-sm text-gray-400 dark:text-gray-500">
454 {__("No new notifications", "yatra")}
455 </p>
456 </div>
457 )}
458 </div>
459 </div>
460 </div>
461 </div>
462
463 {/* Recent Activity Section */}
464 {(recentBookings.length > 0 || pendingPayments.length > 0) && (
465 <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">
466 <div className="yatra-dashboard-recent-activity-header p-6 border-b border-gray-100 dark:border-gray-700">
467 <div className="flex items-center gap-3">
468 <div className="p-2 bg-yatra-soft dark:bg-yatra-surface-dark-muted rounded-lg">
469 <Clock className="w-5 h-5 text-yatra-primary dark:text-yatra-on-dark" />
470 </div>
471 <div>
472 <h3 className="text-base font-semibold text-gray-900 dark:text-white">
473 {__("Recent Activity", "yatra")}
474 </h3>
475 <p className="text-sm text-gray-500 dark:text-gray-400">
476 {__("Your latest updates", "yatra")}
477 </p>
478 </div>
479 </div>
480 </div>
481 <div className="p-6">
482 <div className="space-y-4">
483 {recentBookings.map((booking) => (
484 <div
485 key={booking.id}
486 className="flex items-center gap-4 pb-4 border-b border-gray-100 dark:border-gray-700 last:border-0 last:pb-0"
487 >
488 <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">
489 <CheckCircle2 className="w-5 h-5 text-yatra-primary dark:text-yatra-on-dark" />
490 </div>
491 <div className="flex-1 min-w-0">
492 <p className="text-sm font-medium text-gray-900 dark:text-white">
493 {__("Booking confirmed:", "yatra")} {booking.trip_title}
494 </p>
495 <p className="text-xs text-gray-500 dark:text-gray-400">
496 {formatDate(booking.booking_date || booking.created_at)}
497 </p>
498 </div>
499 <span className={getBadge(booking.booking_status)}>
500 {__(booking.booking_status, booking.booking_status)}
501 </span>
502 </div>
503 ))}
504 {pendingPayments.map((payment) => (
505 <div
506 key={payment.id}
507 className="flex items-center gap-4 pb-4 border-b border-gray-100 dark:border-gray-700 last:border-0 last:pb-0"
508 >
509 <div className="w-10 h-10 bg-amber-100 dark:bg-amber-900/30 rounded-full flex items-center justify-center flex-shrink-0">
510 <Clock className="w-5 h-5 text-amber-600 dark:text-amber-400" />
511 </div>
512 <div className="flex-1 min-w-0">
513 <p className="text-sm font-medium text-gray-900 dark:text-white">
514 {__("Payment pending:", "yatra")}{" "}
515 {currency(payment.amount)}
516 </p>
517 <p className="text-xs text-gray-500 dark:text-gray-400">
518 {formatDate(payment.date)}
519 </p>
520 </div>
521 <span className={getBadge(payment.status)}>
522 {__(payment.status, payment.status)}
523 </span>
524 </div>
525 ))}
526 </div>
527 </div>
528 </div>
529 )}
530 </div>
531 );
532 };
533
534 export default Dashboard;
535