import React, { useState, useEffect } from 'react'; import { Dialog } from '@headlessui/react'; import { XMarkIcon } from '@heroicons/react/24/outline'; import toast from 'react-hot-toast'; interface User { id: string; name: string; email: string; role: 'superuser' | 'tenant_admin' | 'evaluator' | 'read_only' | 'write_only'; isActive: boolean; } interface UserModalProps { isOpen: boolean; onClose: () => void; user?: User; onSuccess: () => void; } const API_URL = globalThis.__APP_ENV__?.VITE_API_BASE_URL || 'https://duxiter.azurianlab.com/api'; const UserModal: React.FC = ({ isOpen, onClose, user, onSuccess }) => { const [formData, setFormData] = useState({ name: '', email: '', role: 'evaluator', password: '' }); useEffect(() => { if (user) { setFormData({ name: user.name, email: user.email, role: user.role, password: '' }); } else { setFormData({ name: '', email: '', role: 'evaluator', password: '' }); } }, [user]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { const token = localStorage.getItem('token'); const url = user ? `${API_URL}/users/${user.id}` : `${API_URL}/users`; const response = await fetch(url, { method: user ? 'PUT' : 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify(formData) }); if (!response.ok) { throw new Error(user ? 'Failed to update user' : 'Failed to create user'); } toast.success(user ? 'User updated successfully' : 'User created successfully'); onSuccess(); onClose(); } catch (error) { logger.error('Error:', error); toast.error(user ? 'Failed to update user' : 'Failed to create user'); } }; return ( ); }; export default UserModal;