'use client'; import React, { Fragment, useEffect, useState } from 'react'; import { Dialog, Transition } 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); // ✅ NEW: delete modal state (UI only) const [deleteUserModal, setDeleteUserModal] = useState(false); const [userToDelete, setUserToDelete] = useState(null); const isAdminUser = true; const defaultParams = { userid: null, name: '', email: '', mobileNumber: '', password: '', role: 'customer', }; const [params, setParams] = useState({ ...defaultParams }); /* ================= LOGIC ================= */ const fetchUsers = async () => { try { const res = await axios.get('/api/users'); setUsers(res.data || []); setFilteredUsers(res.data || []); } catch { showMessage('Failed to load users', 'error'); } }; useEffect(() => { fetchUsers(); },[]); useEffect(() => { setFilteredUsers( search ? users.filter((u) => (u.name || '').toLowerCase().includes(search.toLowerCase()) ) : users ); }, [search, users]); const showMessage = (msg = '', type = 'success') => { Swal.mixin({ toast: true, position: 'top', showConfirmButton: false, timer: 2500, }).fire({ icon: type as any, title: msg }); }; const changeValue = (e: any) => { const { id, value } = e.target; setParams({ ...params, [id]: value }); }; const saveUser = async () => { if (!params.name || !params.email || !params.mobileNumber) { showMessage('Name, email and mobile number are required', 'error'); return; } const payload = { name: params.name, email: params.email, mobileNumber: params.mobileNumber, password: params.password, role: params.role, }; try { if (params.userid) { await axios.put(`/api/users/${params.userid}`, payload); showMessage('User updated successfully'); } else { await axios.post('/api/users', payload); showMessage('User created successfully'); } setAddUserModal(false); setParams(defaultParams); fetchUsers(); } catch { showMessage('Failed to save user', 'error'); } }; const editUser = (user: any) => { setParams({ userid: user.userid, name: user.name, email: user.email, mobileNumber: user.mobileNumber || '', role: user.role, }); setAddUserModal(true); }; return (
{/* BACKGROUND GLOWS */}
{/* CONTENT */}
{/* HEADER */}

Users

setSearch(e.target.value)} className="px-3 py-2 rounded-lg bg-[rgba(7,13,30,0.7)] border border-white/15 text-white" />
{/* TABLE */}
{filteredUsers.map((user) => ( ))}
Name Email Mobile Number Role Actions
{user.name} {user.email} {user.mobileNumber} {user.role}
{/* ADD / EDIT MODAL */} setAddUserModal(false)} className="relative z-50">

{params.userid ? 'Edit User' : 'Add User'}

{!params.userid && ( )}
{/* DELETE MODAL – SAME CARD UI */} setDeleteUserModal(false)} className="relative z-50">

Delete User

Are you sure you want to delete {userToDelete?.email}?

); }; export default UserModule;