From 0bb1497db63bf8be92e6b8458959356b20eb7948 Mon Sep 17 00:00:00 2001 From: g Date: Mon, 12 Jan 2026 07:24:49 +0000 Subject: [PATCH] Update page.tsx --- app/dashboard/admin/vendors/page.tsx | 101 +++++++++++++++++++++++++-- 1 file changed, 97 insertions(+), 4 deletions(-) diff --git a/app/dashboard/admin/vendors/page.tsx b/app/dashboard/admin/vendors/page.tsx index 47a97f9..608fb44 100644 --- a/app/dashboard/admin/vendors/page.tsx +++ b/app/dashboard/admin/vendors/page.tsx @@ -6,7 +6,9 @@ import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; -import { Search, MoreHorizontal, UserCheck, UserX, Mail, Loader2, Store, Shield, ShieldAlert, Clock, Calendar } from "lucide-react"; +import { Search, MoreHorizontal, UserCheck, UserX, Mail, Loader2, Store, Shield, ShieldAlert, Clock, Calendar, Pencil, Plus } from "lucide-react"; +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; +import { Label } from "@/components/ui/label"; import { fetchClient } from "@/lib/api-client"; import { useToast } from "@/hooks/use-toast"; import { motion, AnimatePresence } from "framer-motion"; @@ -41,6 +43,43 @@ export default function AdminVendorsPage() { const [page, setPage] = useState(1); const [pagination, setPagination] = useState(null); const [searchQuery, setSearchQuery] = useState(""); + const [isEditStoreOpen, setIsEditStoreOpen] = useState(false); + const [editingVendor, setEditingVendor] = useState(null); + const [newStoreId, setNewStoreId] = useState(""); + const [updating, setUpdating] = useState(false); + + const handleEditStore = (vendor: Vendor) => { + setEditingVendor(vendor); + setNewStoreId(vendor.storeId || ""); + setIsEditStoreOpen(true); + }; + + const saveStoreId = async () => { + if (!editingVendor) return; + + try { + setUpdating(true); + await fetchClient(`/admin/vendors/${editingVendor._id}/store-id`, { + method: 'PUT', + body: JSON.stringify({ storeId: newStoreId }) + }); + + toast({ + title: "Success", + description: "Store ID updated successfully", + }); + setIsEditStoreOpen(false); + fetchVendors(); // Refresh list + } catch (error: any) { + toast({ + title: "Error", + description: error.message || "Failed to update store ID", + variant: "destructive", + }); + } finally { + setUpdating(false); + } + }; const fetchVendors = useCallback(async () => { try { @@ -209,9 +248,29 @@ export default function AdminVendorsPage() { {vendor.storeId ? ( - {vendor.storeId} +
+ {vendor.storeId} + +
) : ( - No store +
+ No store + +
)}
@@ -291,6 +350,40 @@ export default function AdminVendorsPage() { )} - + + + + + + Update Vendor Store + + Enter the Store ID to assign to vendor {editingVendor?.username}. + + +
+
+ + setNewStoreId(e.target.value)} + placeholder="Enter 24-character Store ID" + className="col-span-3 font-mono" + /> +

+ Ensure the Store ID corresponds to an existing store in the system. +

+
+
+ + + + +
+
+ ); }