diff --git a/app/(admin)/admin/dashboard/page.tsx b/app/(admin)/admin/dashboard/page.tsx index b527b2d..82d61ca 100644 --- a/app/(admin)/admin/dashboard/page.tsx +++ b/app/(admin)/admin/dashboard/page.tsx @@ -39,6 +39,12 @@ interface DashboardStats { active_upcoming_meetings: number; total_revenue: number; monthly_revenue: number; + // Percentage fields from API + users_pct?: number; + scheduled_pct?: number; + completed_pct?: number; + pending_review_pct?: number; + rejected_pct?: number; trends: { total_users: string; active_users: string; @@ -133,6 +139,12 @@ export default function Dashboard() { active_upcoming_meetings: activeUpcomingMeetings, total_revenue: totalRevenue, monthly_revenue: monthlyRevenue, + // Include percentage fields from API + users_pct: appointmentStats?.users_pct, + scheduled_pct: appointmentStats?.scheduled_pct, + completed_pct: appointmentStats?.completed_pct, + pending_review_pct: appointmentStats?.pending_review_pct, + rejected_pct: appointmentStats?.rejected_pct, trends, }); } catch (error) { @@ -148,6 +160,11 @@ export default function Dashboard() { active_upcoming_meetings: 0, total_revenue: 0, monthly_revenue: 0, + users_pct: undefined, + scheduled_pct: undefined, + completed_pct: undefined, + pending_review_pct: undefined, + rejected_pct: undefined, trends: { total_users: "0%", active_users: "0%", @@ -172,7 +189,7 @@ export default function Dashboard() { title: "Total Users", value: stats?.total_users ?? 0, icon: Users, - trend: stats?.trends.total_users ?? "0%", + trend: stats?.users_pct !== undefined ? `${Math.round(stats.users_pct)}%` : undefined, trendUp: true, }, { @@ -193,28 +210,28 @@ export default function Dashboard() { title: "Upcoming Bookings", value: stats?.upcoming_bookings ?? 0, icon: CalendarCheck, - trend: stats?.trends.upcoming_bookings ?? "0", + trend: stats?.scheduled_pct !== undefined ? `${Math.round(stats.scheduled_pct)}%` : undefined, trendUp: true, }, { title: "Completed Bookings", value: stats?.completed_bookings ?? 0, icon: CalendarCheck, - trend: stats?.trends.completed_bookings ?? "0%", + trend: stats?.completed_pct !== undefined ? `${Math.round(stats.completed_pct)}%` : undefined, trendUp: true, }, { title: "Cancelled Bookings", value: stats?.cancelled_bookings ?? 0, icon: CalendarX, - trend: stats?.trends.cancelled_bookings ?? "0%", + trend: stats?.rejected_pct !== undefined ? `${Math.round(stats.rejected_pct)}%` : undefined, trendUp: false, }, { title: "Active Upcoming Meetings", value: stats?.active_upcoming_meetings ?? 0, icon: CalendarCheck, - trend: "0", + trend: undefined, trendUp: true, }, ]; @@ -284,8 +301,7 @@ export default function Dashboard() {
- {/* Percentage badge commented out */} - {/* {card.trend && ( + {card.trend && (
{card.trendUp ? ( @@ -294,7 +310,7 @@ export default function Dashboard() { )} {card.trend}
- )} */} + )}
diff --git a/app/(user)/user/dashboard/page.tsx b/app/(user)/user/dashboard/page.tsx index 2a02bb1..64bd165 100644 --- a/app/(user)/user/dashboard/page.tsx +++ b/app/(user)/user/dashboard/page.tsx @@ -146,9 +146,13 @@ export default function UserDashboard() { if (stats) { return { scheduled: stats.scheduled || 0, + scheduled_pct: stats.scheduled_pct, completed: stats.completed || 0, + completed_pct: stats.completed_pct, pending_review: stats.pending_review || 0, + pending_review_pct: stats.pending_review_pct, rejected: stats.rejected || 0, + rejected_pct: stats.rejected_pct, total_requests: stats.total_requests || 0, completion_rate: stats.completion_rate || 0, }; @@ -223,13 +227,14 @@ export default function UserDashboard() {
- {/* Percentage badge commented out */} - {/*
+ {displayStats.scheduled_pct !== undefined && ( +
- {displayStats.scheduled > 0 ? `+${displayStats.scheduled}` : "0"} -
*/} + {`${Math.round(displayStats.scheduled_pct)}%`} +
+ )}

@@ -248,13 +253,14 @@ export default function UserDashboard() {
- {/* Percentage badge commented out */} - {/*
- - {displayStats.completed > 0 ? `+${displayStats.completed}` : "0"} -
*/} + {displayStats.completed_pct !== undefined && ( +
+ + {`${Math.round(displayStats.completed_pct)}%`} +
+ )}

@@ -273,13 +279,7 @@ export default function UserDashboard() {
- {/* Percentage badge commented out */} - {/*
- - {`${Math.round(displayStats.completion_rate || 0)}%`} -
*/} + {/* No percentage badge for total appointments */}

@@ -298,13 +298,14 @@ export default function UserDashboard() {
- {/* Percentage badge commented out */} - {/*
- - {displayStats.pending_review > 0 ? `${displayStats.pending_review}` : "0"} -
*/} + {displayStats.pending_review_pct !== undefined && ( +
+ + {`${Math.round(displayStats.pending_review_pct)}%`} +
+ )}

diff --git a/lib/models/appointments.ts b/lib/models/appointments.ts index e77d39a..b231781 100644 --- a/lib/models/appointments.ts +++ b/lib/models/appointments.ts @@ -140,24 +140,36 @@ export interface MatchingAvailability { export interface AppointmentStats { total_requests: number; pending_review: number; + pending_review_pct?: number; scheduled: number; + scheduled_pct?: number; rejected: number; + rejected_pct?: number; completed: number; + completed_pct?: number; completion_rate: number; users?: number; // Total users count from API + users_pct?: number; active_upcoming_meetings?: number; availability_coverage?: number; + availability_coverage_pct?: number; available_days_count?: number; jitsi_meetings_created?: number; meetings_with_video?: number; + meetings_with_video_pct?: number; + video_meetings?: number; } export interface UserAppointmentStats { total_requests: number; pending_review: number; + pending_review_pct?: number; scheduled: number; + scheduled_pct?: number; rejected: number; + rejected_pct?: number; completed: number; + completed_pct?: number; completion_rate: number; email?: string; }