import React, { useState, useEffect } from 'react'; import { sortByProperty } from '../utils/sort-utils'; // Default prefix for TMS username search const TMS_USERNAME_PREFIX = 'DKI_'; interface TmsUser { email: string; name: string; } interface UserManagementModalProps { isOpen: boolean; onClose: () => void; onAddUser: (username: string) => void; } const UserManagementModal: React.FC = ({ isOpen, onClose, onAddUser }) => { const [searchTerm, setSearchTerm] = useState(''); const [allUsers, setAllUsers] = useState([]); const [filteredUsers, setFilteredUsers] = useState([]); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); // Load all users when modal opens useEffect(() => { if (isOpen) { document.body.style.overflow = 'hidden'; setSearchTerm(''); setError(null); loadAllUsers(); } else { document.body.style.overflow = 'auto'; } return () => { document.body.style.overflow = 'auto'; }; }, [isOpen]); // Filter users when search term changes useEffect(() => { if (!searchTerm.trim()) { setFilteredUsers(sortByProperty(allUsers, u => u.name)); } else { const term = searchTerm.toLowerCase(); setFilteredUsers( sortByProperty( allUsers.filter(u => u.name.toLowerCase().includes(term) || u.email.toLowerCase().includes(term)), u => u.name ) ); } }, [searchTerm, allUsers]); const loadAllUsers = async () => { setIsLoading(true); setError(null); try { // Search with DKI_ prefix to get DKI users only const response = await fetch('/api/user/search', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: TMS_USERNAME_PREFIX }), }); const data = await response.json(); if (data.success && Array.isArray(data.data)) { const sortedUsers = sortByProperty(data.data as TmsUser[], u => u.name); setAllUsers(sortedUsers); setFilteredUsers(sortedUsers); } else { setError('Không thể tải danh sách người dùng'); } } catch (err) { console.error('Error loading users:', err); setError('Lỗi khi tải danh sách người dùng'); } finally { setIsLoading(false); } }; if (!isOpen) { return null; } return (
e.stopPropagation()} >

Tìm kiếm người dùng TMS

setSearchTerm(e.target.value)} className="bg-slate-900/50 border border-slate-700 text-slate-100 text-sm rounded-lg focus:ring-indigo-500 focus:border-indigo-500 block w-full p-2.5" autoFocus />
{error && (
{error}
)}
{isLoading ? (
Đang tải danh sách...
) : filteredUsers.length === 0 ? (
{searchTerm ? 'Không tìm thấy người dùng phù hợp' : 'Không có người dùng nào'}
) : ( <>
Tên Email
{filteredUsers.map((user) => (
{user.name} {user.email}
))}
)}
{/* Footer - fixed at bottom */}
{searchTerm ? `Tìm thấy ${filteredUsers.length} / ${allUsers.length} người dùng` : `Tổng cộng ${allUsers.length} người dùng`}
); }; export default UserManagementModal;