// File: frontend/app/(protected)/admin/users/page.jsx 'use client'; import { useState, useEffect } from 'react'; import { PlusCircle, MoreHorizontal } from 'lucide-react'; import { api } from '@/lib/api'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; import { Badge } from '@/components/ui/badge'; // Import components ที่เราเพิ่งสร้าง import { UserFormDialog } from '../_components/user-form-dialog'; import { ConfirmDeleteDialog } from '../_components/confirm-delete-dialog'; export default function UsersPage() { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); // State สำหรับควบคุม Dialog ทั้งหมด const [isFormOpen, setIsFormOpen] = useState(false); const [isDeleteOpen, setIsDeleteOpen] = useState(false); const [selectedUser, setSelectedUser] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); // Function สำหรับดึงข้อมูลใหม่ const fetchUsers = async () => { try { setLoading(true); const res = await api.get('/users'); setUsers(res.data); } catch (error) { console.error("Failed to fetch users", error); } finally { setLoading(false); } }; useEffect(() => { fetchUsers(); }, []); // Handlers สำหรับเปิด Dialog const handleCreate = () => { setSelectedUser(null); setIsFormOpen(true); }; const handleEdit = (user) => { setSelectedUser(user); setIsFormOpen(true); }; const handleDelete = (user) => { setSelectedUser(user); setIsDeleteOpen(true); }; // Function ที่จะทำงานเมื่อยืนยันการลบ const confirmDeactivate = async () => { if (!selectedUser) return; setIsSubmitting(true); try { await api.delete(`/users/${selectedUser.id}`); fetchUsers(); // Refresh ข้อมูล setIsDeleteOpen(false); } catch (error) { console.error("Failed to deactivate user", error); // ควรมี Alert แจ้งเตือน } finally { setIsSubmitting(false); } }; return ( <>
User Accounts Manage all user accounts and their roles.
Username Email Roles Status Actions {loading ? ( Loading... ) : ( users.map((user) => ( {user.username} {user.email}
{user.Roles?.map(role => {role.name})}
{user.is_active ? 'Active' : 'Inactive'} Actions handleEdit(user)}>Edit handleDelete(user)} className="text-red-500"> Deactivate
)) )}
{/* Render Dialogs ที่นี่ (มันจะไม่แสดงผลจนกว่า state จะเป็น true) */} ); }