import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Search, Filter, Eye, Shield, User as UserIcon } from 'lucide-react'; import { usePlatformUsers } from '../../hooks/usePlatform'; interface PlatformUsersProps { onMasquerade: (targetUser: { id: number; username?: string; name?: string; email?: string; role?: string }) => void; } const PlatformUsers: React.FC = ({ onMasquerade }) => { const { t } = useTranslation(); const [searchTerm, setSearchTerm] = useState(''); const [roleFilter, setRoleFilter] = useState('all'); const { data: users, isLoading, error } = usePlatformUsers(); const filteredUsers = (users || []).filter(u => { const matchesSearch = (u.name || '').toLowerCase().includes(searchTerm.toLowerCase()) || u.email.toLowerCase().includes(searchTerm.toLowerCase()) || u.username.toLowerCase().includes(searchTerm.toLowerCase()); const matchesRole = roleFilter === 'all' || u.role === roleFilter; return matchesSearch && matchesRole; }); const getRoleBadgeColor = (role: string) => { switch(role) { case 'superuser': return 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300'; case 'platform_manager': case 'platform_support': return 'bg-indigo-100 text-indigo-800 dark:bg-indigo-900/30 dark:text-indigo-300'; case 'owner': return 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300'; case 'staff': return 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300'; case 'customer': return 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300'; default: return 'bg-gray-100 text-gray-800'; } }; const handleMasquerade = (platformUser: any) => { // Pass user info to masquerade - we only need the id onMasquerade({ id: platformUser.id, username: platformUser.username, name: platformUser.full_name || platformUser.username, email: platformUser.email, role: platformUser.role || 'customer', }); }; if (isLoading) { return (
{t('common.loading')}
); } if (error) { return (
{t('errors.generic')}
); } return (

{t('platform.userDirectory')}

{t('platform.userDirectoryDescription')}

setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2 bg-gray-50 dark:bg-gray-700 border border-gray-200 dark:border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:text-white" />
{filteredUsers.map((u) => ( ))}
{t('platform.user')} {t('platform.role')} {t('platform.email')} {t('common.actions')}
{(u.name || u.username).charAt(0).toUpperCase()}
{u.name || u.username}
{u.business_name && (
{u.business_name}
)}
{(u.role || 'customer').replace(/_/g, ' ')} {u.email}
{filteredUsers.length === 0 && (
{t('platform.noUsersFound')}
)}
); }; export default PlatformUsers;