From 64ba7cfc31dddffe90aafabfe62bf27797afe1fc Mon Sep 17 00:00:00 2001 From: debudebuye Date: Tue, 24 Feb 2026 21:15:21 +0300 Subject: [PATCH] feat(admin-users): Add user edit dialog with form validation and update functionality --- src/pages/admin/users/[id]/index.tsx | 138 ++++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 3 deletions(-) diff --git a/src/pages/admin/users/[id]/index.tsx b/src/pages/admin/users/[id]/index.tsx index 698798c..04f5472 100644 --- a/src/pages/admin/users/[id]/index.tsx +++ b/src/pages/admin/users/[id]/index.tsx @@ -4,20 +4,76 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" -import { ArrowLeft, Edit, Key } from "lucide-react" +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog" +import { Input } from "@/components/ui/input" +import { Label } from "@/components/ui/label" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" +import { ArrowLeft, Edit, Key, Loader2 } from "lucide-react" import { userService } from "@/services" import { format } from "date-fns" +import { useState } from "react" +import { toast } from "sonner" export default function UserDetailsPage() { const { id } = useParams() const navigate = useNavigate() + const [isEditDialogOpen, setIsEditDialogOpen] = useState(false) + const [isSubmitting, setIsSubmitting] = useState(false) + const [editForm, setEditForm] = useState({ + firstName: '', + lastName: '', + email: '', + role: '', + isActive: true, + }) - const { data: user, isLoading } = useQuery({ + const { data: user, isLoading, refetch } = useQuery({ queryKey: ['admin', 'users', id], queryFn: () => userService.getUser(id!), enabled: !!id, }) + const handleEditClick = () => { + if (user) { + setEditForm({ + firstName: user.firstName || '', + lastName: user.lastName || '', + email: user.email, + role: user.role, + isActive: user.isActive, + }) + setIsEditDialogOpen(true) + } + } + + const handleSaveEdit = async () => { + try { + setIsSubmitting(true) + await userService.updateUser(id!, editForm) + toast.success("User updated successfully") + setIsEditDialogOpen(false) + refetch() + } catch (error) { + toast.error("Failed to update user") + console.error('Update error:', error) + } finally { + setIsSubmitting(false) + } + } + if (isLoading) { return
Loading user details...
} @@ -50,7 +106,7 @@ export default function UserDetailsPage() {
User Information
- @@ -133,6 +189,82 @@ export default function UserDetailsPage() {
+ + + + + Edit User + + Update user information and settings + + +
+
+ + setEditForm({ ...editForm, firstName: e.target.value })} + /> +
+
+ + setEditForm({ ...editForm, lastName: e.target.value })} + /> +
+
+ + setEditForm({ ...editForm, email: e.target.value })} + /> +
+
+ + +
+
+ + +
+
+ + + + +
+
) }