'use client'; import React, { Fragment, useEffect, useState } from 'react'; import { Dialog, Transition, TransitionChild, DialogPanel } from '@headlessui/react'; import IconX from '@/components/icon/icon-x'; import IconUserPlus from '@/components/icon/icon-user-plus'; import IconSearch from '@/components/icon/icon-search'; import Swal from 'sweetalert2'; import axios from 'axios'; const UserModule = () => { const [users, setUsers] = useState([]); const [filteredUsers, setFilteredUsers] = useState([]); const [search, setSearch] = useState(''); const [addUserModal, setAddUserModal] = useState(false); const defaultParams = { userid: null, name: '', email: '', password: '', phonenumber: '', role: 'customer', }; const [params, setParams] = useState({ ...defaultParams }); // ✅ Fetch users const fetchUsers = async () => { try { const res = await axios.get('http://localhost:3003/api/auth/users'); setUsers(res.data?.users || []); setFilteredUsers(res.data?.users || []); } catch (err) { console.error(err); showMessage('Failed to load users', 'error'); } }; useEffect(() => { fetchUsers(); }, []); // ✅ Search filter useEffect(() => { if (!search) { setFilteredUsers(users); } else { setFilteredUsers( users.filter((u) => u.name.toLowerCase().includes(search.toLowerCase())) ); } }, [search, users]); const showMessage = (msg = '', type = 'success') => { const toast: any = Swal.mixin({ toast: true, position: 'top', showConfirmButton: false, timer: 2500, customClass: { container: 'toast' }, }); toast.fire({ icon: type, title: msg, padding: '10px 20px', }); }; const changeValue = (e: any) => { const { id, value } = e.target; setParams({ ...params, [id]: value }); }; // ✅ Add / Update User const saveUser = async () => { if (!params.name || !params.email || !params.phonenumber || !params.role) { showMessage('Please fill all required fields', 'error'); return; } try { if (params.userid) { // UPDATE await axios.put(`http://localhost:3003/api/auth/users/${params.userid}`, params); showMessage('User updated successfully'); } else { // ADD await axios.post('http://localhost:3003/api/auth/users/add', params); showMessage('User added successfully'); } setAddUserModal(false); fetchUsers(); } catch (err: any) { console.error(err); showMessage('Error saving user', 'error'); } }; // ✅ Edit User const editUser = (user: any) => { setParams({ ...user, password: '' }); // don’t show password in edit setAddUserModal(true); }; // ✅ Delete User const deleteUser = async (user: any) => { Swal.fire({ title: 'Are you sure?', text: `Delete user ${user.name}?`, icon: 'warning', showCancelButton: true, confirmButtonText: 'Yes, delete it!', cancelButtonText: 'Cancel', }).then(async (result) => { if (result.isConfirmed) { try { await axios.delete(`http://localhost:3003/api/auth/users/${user.userid}`); showMessage('User deleted successfully'); fetchUsers(); } catch (err) { console.error(err); showMessage('Failed to delete user', 'error'); } } }); }; return (
{/* Header */}

Users

setSearch(e.target.value)} />
{/* ✅ Table */}
{filteredUsers.map((user: any) => ( ))}
Name Email Phone Role Actions
{user.name} {user.email} {user.phonenumber} {user.role}
{/* ✅ Add / Edit Popup */} setAddUserModal(false)} className="relative z-50" >
{params.userid ? 'Edit User' : 'Add User'}
{!params.userid && (
)}
); }; export default UserModule;