diff --git a/app/dashboard/admin/alerts/page.tsx b/app/dashboard/admin/alerts/page.tsx index 02f0e99..6908f3b 100644 --- a/app/dashboard/admin/alerts/page.tsx +++ b/app/dashboard/admin/alerts/page.tsx @@ -5,6 +5,7 @@ import { Button } from "@/components/ui/button"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { AlertTriangle, CheckCircle, XCircle, Clock, Bell, Shield } from "lucide-react"; +import Link from "next/link"; export default function AdminAlertsPage() { // Mock data for system alerts @@ -93,9 +94,14 @@ export default function AdminAlertsPage() { return (
-
-

System Alerts

-

Monitor system alerts and security notifications

+
+
+

System Alerts

+

Monitor system alerts and security notifications

+
+
{/* Alert Summary */} diff --git a/app/dashboard/admin/ban/page.tsx b/app/dashboard/admin/ban/page.tsx index e6417e3..a370064 100644 --- a/app/dashboard/admin/ban/page.tsx +++ b/app/dashboard/admin/ban/page.tsx @@ -12,6 +12,7 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from "@/components/ui/alert-dialog"; import { UserX, Shield, Search, Ban, Unlock } from "lucide-react"; import { useState } from "react"; +import Link from "next/link"; export default function AdminBanPage() { const [banData, setBanData] = useState({ @@ -62,9 +63,14 @@ export default function AdminBanPage() { return (
-
-

Ban Users

-

Manage user bans and suspensions

+
+
+

Ban Users

+

Manage user bans and suspensions

+
+
{/* Stats Cards */} diff --git a/app/dashboard/admin/invite/page.tsx b/app/dashboard/admin/invite/page.tsx index 8d0966e..9a1693a 100644 --- a/app/dashboard/admin/invite/page.tsx +++ b/app/dashboard/admin/invite/page.tsx @@ -10,6 +10,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@ import { Badge } from "@/components/ui/badge"; import { UserPlus, Mail, Copy, Check } from "lucide-react"; import { useState } from "react"; +import Link from "next/link"; export default function AdminInvitePage() { const [inviteData, setInviteData] = useState({ @@ -35,9 +36,14 @@ export default function AdminInvitePage() { return (
-
-

Invite Vendor

-

Send invitations to new vendors to join the platform

+
+
+

Invite Vendor

+

Send invitations to new vendors to join the platform

+
+
diff --git a/app/dashboard/admin/page.tsx b/app/dashboard/admin/page.tsx index 8bde25a..816d1ba 100644 --- a/app/dashboard/admin/page.tsx +++ b/app/dashboard/admin/page.tsx @@ -7,13 +7,20 @@ import RecentOrdersCard from "@/components/admin/RecentOrdersCard"; import SystemStatusCard from "@/components/admin/SystemStatusCard"; import InvitationsListCard from "@/components/admin/InvitationsListCard"; import VendorsCard from "@/components/admin/VendorsCard"; +import { Button } from "@/components/ui/button"; +import Link from "next/link"; export default function AdminPage() { return (
-
-

Admin

-

Restricted area. Only admin1 can access.

+
+
+

Admin

+

Restricted area. Only admin1 can access.

+
+
diff --git a/app/dashboard/admin/settings/page.tsx b/app/dashboard/admin/settings/page.tsx index 1a4b055..aeaf984 100644 --- a/app/dashboard/admin/settings/page.tsx +++ b/app/dashboard/admin/settings/page.tsx @@ -8,13 +8,19 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@ import { Textarea } from "@/components/ui/textarea"; import { Separator } from "@/components/ui/separator"; import { Settings, Shield, Bell, Database, Globe, Key, Save } from "lucide-react"; +import Link from "next/link"; export default function AdminSettingsPage() { return (
-
-

Admin Settings

-

Configure system settings and preferences

+
+
+

Admin Settings

+

Configure system settings and preferences

+
+
diff --git a/app/dashboard/orders/[id]/page.tsx b/app/dashboard/orders/[id]/page.tsx index 4bc2979..6261f47 100644 --- a/app/dashboard/orders/[id]/page.tsx +++ b/app/dashboard/orders/[id]/page.tsx @@ -22,7 +22,8 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; -import { Clipboard, Truck, Package, ArrowRight, ChevronDown, AlertTriangle, Copy, Loader2, RefreshCw } from "lucide-react"; +import { Clipboard, Truck, Package, ArrowRight, ChevronDown, AlertTriangle, Copy, Loader2, RefreshCw, MessageCircle } from "lucide-react"; +import Link from "next/link"; import { useRouter } from "next/navigation"; import { toast } from "sonner"; import { @@ -829,6 +830,22 @@ export default function OrderDetailsPage() {
)}
+ {(order?.telegramBuyerId || order?.telegramUsername) && ( +
+ +
+ )}
)} diff --git a/lib/api-client.ts b/lib/api-client.ts index 6e34363..4052a60 100644 --- a/lib/api-client.ts +++ b/lib/api-client.ts @@ -232,7 +232,8 @@ export async function clientFetch(url: string, options: RequestInit = { headers, credentials: 'include', mode: 'cors', - referrerPolicy: 'strict-origin-when-cross-origin' + referrerPolicy: 'strict-origin-when-cross-origin', + signal: AbortSignal.timeout(30000), // 30 second timeout }); if (!res.ok) { @@ -303,6 +304,7 @@ export async function fetchClient( method, credentials: 'include', headers: requestHeaders, + signal: AbortSignal.timeout(30000), // 30 second timeout ...rest, }; diff --git a/middleware.ts b/middleware.ts index 1c5ea43..52ffc51 100644 --- a/middleware.ts +++ b/middleware.ts @@ -50,6 +50,7 @@ export async function middleware(req: NextRequest) { method: "GET", headers, credentials: 'include', + signal: AbortSignal.timeout(10000), // 10 second timeout }); console.log(`Middleware: Auth check responded with status ${res.status}`); diff --git a/public/git-info.json b/public/git-info.json index 43f2924..852e117 100644 --- a/public/git-info.json +++ b/public/git-info.json @@ -1,4 +1,4 @@ { - "commitHash": "1fc29e6", - "buildTime": "2025-10-23T20:42:39.661Z" + "commitHash": "fcba1a8", + "buildTime": "2025-10-30T01:13:38.854Z" } \ No newline at end of file