fix user validation fallback

This commit is contained in:
Christian Vidal Wolf
2026-05-20 14:04:02 +02:00
parent 396ff23d49
commit d17db2761b
2 changed files with 132 additions and 48 deletions
+24
View File
@@ -17,6 +17,7 @@ export function UserManagementView({ session }: UserManagementViewProps) {
const [users, setUsers] = useState<User[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const [warning, setWarning] = useState<string | null>(null);
const [search, setSearch] = useState('');
const [processingId, setProcessingId] = useState<string | null>(null);
const [deleteConfirmUser, setDeleteConfirmUser] = useState<User | null>(null);
@@ -24,6 +25,7 @@ export function UserManagementView({ session }: UserManagementViewProps) {
const fetchUsers = async () => {
setLoading(true);
setError(null);
setWarning(null);
try {
const res = await fetch('/api/users-admin', {
method: 'POST',
@@ -41,6 +43,7 @@ export function UserManagementView({ session }: UserManagementViewProps) {
const data = await res.json();
setUsers(data.users || []);
setWarning(data.warning || null);
} catch (err: any) {
console.error('[UserManagement] fetch error:', err);
setError(err.message || 'Error fetching user list.');
@@ -56,6 +59,7 @@ export function UserManagementView({ session }: UserManagementViewProps) {
const handleToggleValidation = async (user: User, approve: boolean) => {
setProcessingId(user.id);
setError(null);
setWarning(null);
try {
const res = await fetch('/api/users-admin', {
method: 'POST',
@@ -76,6 +80,8 @@ export function UserManagementView({ session }: UserManagementViewProps) {
throw new Error(data.error || 'Failed to update user approval status.');
}
const data = await res.json().catch(() => ({}));
// Update local state
setUsers(prev => prev.map(u => {
if (u.id === user.id) {
@@ -83,6 +89,9 @@ export function UserManagementView({ session }: UserManagementViewProps) {
}
return u;
}));
if (data.warning) {
setWarning(data.warning);
}
} catch (err: any) {
setError(err.message || 'Error updating approval status.');
} finally {
@@ -183,6 +192,21 @@ export function UserManagementView({ session }: UserManagementViewProps) {
</div>
)}
{warning && (
<div className="mb-6 p-4 bg-amber-950/30 border border-amber-500/30 rounded-lg flex items-start gap-3">
<AlertCircle className="w-5 h-5 text-amber-400 shrink-0 mt-0.5" />
<div className="flex-1 text-sm text-amber-200">
<span className="font-semibold">Aviso:</span> {warning}
</div>
<button
onClick={() => setWarning(null)}
className="text-amber-300 hover:text-amber-200 text-xs font-semibold px-2 py-1 rounded"
>
Descartar
</button>
</div>
)}
{loading ? (
<div className="h-64 flex flex-col items-center justify-center text-slate-400">
<Loader2 className="w-8 h-8 animate-spin text-blue-500 mb-3" />