+
Bookings
-
+
Manage and view all appointment bookings
| + | Patient | -+ | Date & Time | -+ | Duration | -+ | Status | -+ | Payment | -+ | Amount | -+ | Actions | + |
-
-
+
-
-
+
+
{booking.user.first_name} {booking.user.last_name}
-
+
{booking.user.email}
+
+ {formatDate(booking.scheduled_at)}
+
|
-
-
+
+ |
-
{formatDate(booking.scheduled_at)}
-
+
+ |
{booking.duration} min
|
-
+ |
|
-
+ |
|
-
+ |
${booking.amount}
|
-
- |
+
+ |
{booking.jitsi_room_url && (
@@ -328,13 +300,13 @@ export default function Booking() {
)}
{booking.notes && (
@@ -347,7 +319,6 @@ export default function Booking() {
)}
-
);
}
diff --git a/app/(admin)/dashboard/page.tsx b/app/(admin)/dashboard/page.tsx
index 50ec090..b1e9cf7 100644
--- a/app/(admin)/dashboard/page.tsx
+++ b/app/(admin)/dashboard/page.tsx
@@ -1,7 +1,13 @@
"use client";
import { useState, useEffect } from "react";
-import SideNav from "@/app/(admin)/_components/side-nav";
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/components/ui/select";
import {
Users,
UserCheck,
@@ -10,8 +16,8 @@ import {
CalendarX,
DollarSign,
TrendingUp,
- Search,
- Bell,
+ ArrowUpRight,
+ ArrowDownRight,
} from "lucide-react";
interface DashboardStats {
@@ -28,6 +34,7 @@ interface DashboardStats {
export default function Dashboard() {
const [stats, setStats] = useState
- {/* Side Navigation */}
-
- {/* Top Header Bar */}
-
-
-
) : (
-
-
-
- {/* Main Content */}
-
-
+ {/* Main Content */}
+
+
-
+
- + Welcome Back! Hammond +++ Here's an overview of your practice today +
-
-
-
{loading ? (
@@ -155,32 +154,53 @@ export default function Dashboard() {
Dashboard-Overview of your practice statistics +
- {statCards.map((card, index) => {
- const Icon = card.icon;
- return (
-
);
}
diff --git a/app/(admin)/layout.tsx b/app/(admin)/layout.tsx
index db27d60..4cd0095 100644
--- a/app/(admin)/layout.tsx
+++ b/app/(admin)/layout.tsx
@@ -1,7 +1,12 @@
+import { Header } from "./_components/header";
+
export default function AdminLayout({ children }: { children: React.ReactNode }) {
return (
-
+
-
+
+ >
)}
-
-
-
+ );
+ })}
+
+ {statCards.map((card, index) => {
+ const Icon = card.icon;
+ return (
+
- );
- })}
-
+
-
+
+
+
+
+
+ {card.trendUp ? (
+
+
+
+ {card.title} +++ {card.value} + ++ vs last month + - {card.title} --- {card.value} - -
- {children}
+
)
}
\ No newline at end of file
diff --git a/app/(admin)/notifications/page.tsx b/app/(admin)/notifications/page.tsx
index d8b1822..fa65682 100644
--- a/app/(admin)/notifications/page.tsx
+++ b/app/(admin)/notifications/page.tsx
@@ -1,30 +1,34 @@
"use client";
import { useState } from "react";
-import SideNav from "@/app/(admin)/_components/side-nav";
-import { Notifications, Notification } from "@/app/(admin)/_components/notifications";
+import { Bell } from "lucide-react";
+
+interface Notification {
+ id: string;
+ title: string;
+ message: string;
+ time: string;
+ read: boolean;
+}
export default function NotificationsPage() {
const [notifications, setNotifications] = useState
+ {children}
+
- {/* Side Navigation */}
-
-
);
}
diff --git a/app/(auth)/login/page.tsx b/app/(auth)/login/page.tsx
index b20b935..e500604 100644
--- a/app/(auth)/login/page.tsx
+++ b/app/(auth)/login/page.tsx
@@ -47,11 +47,10 @@ export default function Login() {
className="ml-auto mb-6 w-8 h-8 rounded-full"
aria-label="Close"
>
-
-
+
+ {/* Notifications List */}
+
+
-
+
+ Notifications ++ {unreadCount > 0 && ( + + {unreadCount} new + + )} +
+ {notifications.length === 0 ? (
+
+
+
+ ) : (
+ No notifications +
+ {notifications.map((notification) => {
+ return (
+
+ )}
+
+
+ );
+ })}
+
+
+
+
+ + {notification.title} + + {!notification.read && ( + + )} ++ {notification.message} + ++ {notification.time} + +
+ |
|---|