import React, { useState, useEffect } from 'react' import api from '../services/api' import toast from 'react-hot-toast' import { t } from '../utils/tempTranslations' // Temporary translation system import { UsersIcon, MagnifyingGlassIcon } from '@heroicons/react/24/outline' const Users = () => { const [users, setUsers] = useState([]) const [loading, setLoading] = useState(true) const [searchTerm, setSearchTerm] = useState('') useEffect(() => { loadUsers() }, []) const loadUsers = async () => { try { setLoading(true) const response = await api.get('/management/users') setUsers(response.data.data || []) } catch (error) { toast.error(t('users.loadError')) console.error('Error loading users:', error) } finally { setLoading(false) } } const getRoleBadge = (role) => { const colors = { admin: 'bg-red-100 text-red-800', operator: 'bg-blue-100 text-blue-800', viewer: 'bg-gray-100 text-gray-800' } return ( {role.charAt(0).toUpperCase() + role.slice(1)} ) } const filteredUsers = users.filter(user => user.username?.toLowerCase().includes(searchTerm.toLowerCase()) || user.email?.toLowerCase().includes(searchTerm.toLowerCase()) ) if (loading) { return (
) } return (

{t('users.title')}

{t('users.description')}

setSearchTerm(e.target.value)} className="pl-10 pr-4 py-2 border border-gray-300 rounded-lg w-full max-w-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
{filteredUsers.map((user) => ( ))}
{t('users.user')} {t('users.role')} {t('users.status')} {t('users.lastLogin')} {t('users.created')}
{user.username?.charAt(0).toUpperCase()}
{user.username}
{user.email}
{getRoleBadge(user.role)} {user.is_active ? 'Active' : 'Inactive'} {user.last_login ? new Date(user.last_login).toLocaleDateString() : 'Never'} {new Date(user.created_at).toLocaleDateString()}
{filteredUsers.length === 0 && (

{t('users.noUsers')}

{searchTerm ? t('users.noUsersSearch') : t('users.noUsersDescription')}

)}
) } export default Users