From 89c325cc7cdfdaccdd29c6e7a58152b70a13a78d Mon Sep 17 00:00:00 2001 From: Lucas Santana Date: Fri, 20 Dec 2024 13:48:22 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20corrige=20tipagem=20do=20contexto=20de?= =?UTF-8?q?=20autentica=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adiciona tipagem User do Supabase para o estado do usuário - Corrige interface AuthContextType com tipos corretos - Atualiza AdminUser para garantir email obrigatório - Adiciona type guard para filtrar usuários válidos - Exporta e importa tipos do AuthContext corretamente --- src/components/auth/ProtectedRoute.tsx | 1 + src/components/header/ProfileMenu.tsx | 1 + src/hooks/useAuth.tsx | 5 +++-- src/pages/admin/UserManagementPage.tsx | 12 +++++++++--- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/components/auth/ProtectedRoute.tsx b/src/components/auth/ProtectedRoute.tsx index f4cc6e1..2ed2fdd 100644 --- a/src/components/auth/ProtectedRoute.tsx +++ b/src/components/auth/ProtectedRoute.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { Navigate, useLocation } from 'react-router-dom'; import { useAuth } from '../../hooks/useAuth'; +import type { AuthContextType } from '../../hooks/useAuth'; interface ProtectedRouteProps { children: React.ReactNode; diff --git a/src/components/header/ProfileMenu.tsx b/src/components/header/ProfileMenu.tsx index f607717..2bad2ad 100644 --- a/src/components/header/ProfileMenu.tsx +++ b/src/components/header/ProfileMenu.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { useNavigate } from 'react-router-dom'; import { LogOut, Settings, LayoutDashboard } from 'lucide-react'; import { useAuth } from '../../hooks/useAuth'; +import type { AuthContextType } from '../../hooks/useAuth'; export function ProfileMenu() { const { user, userRole, signOut } = useAuth(); diff --git a/src/hooks/useAuth.tsx b/src/hooks/useAuth.tsx index 958f066..6218956 100644 --- a/src/hooks/useAuth.tsx +++ b/src/hooks/useAuth.tsx @@ -1,9 +1,10 @@ import React from 'react'; import { useNavigate } from 'react-router-dom'; import { supabase } from '../lib/supabase'; +import { User } from '@supabase/supabase-js'; interface AuthContextType { - user: any; + user: User | null; loading: boolean; error: string | null; signIn: (email: string, password: string) => Promise; @@ -16,7 +17,7 @@ const AuthContext = React.createContext(undefined); export function AuthProvider({ children }: { children: React.ReactNode }) { const navigate = useNavigate(); - const [user, setUser] = React.useState(null); + const [user, setUser] = React.useState(null); const [userRole, setUserRole] = React.useState(null); const [loading, setLoading] = React.useState(true); diff --git a/src/pages/admin/UserManagementPage.tsx b/src/pages/admin/UserManagementPage.tsx index a0f70fd..b5760eb 100644 --- a/src/pages/admin/UserManagementPage.tsx +++ b/src/pages/admin/UserManagementPage.tsx @@ -1,7 +1,8 @@ import React from 'react'; import { supabase } from '../../lib/supabase'; +import { User } from '@supabase/supabase-js'; -interface User { +interface AdminUser { id: string; email: string; user_metadata?: { @@ -10,7 +11,7 @@ interface User { } export function UserManagementPage() { - const [users, setUsers] = React.useState([]); + const [users, setUsers] = React.useState([]); const [loading, setLoading] = React.useState(true); const [error, setError] = React.useState(null); const [updating, setUpdating] = React.useState(null); @@ -23,7 +24,12 @@ export function UserManagementPage() { try { const { data: { users }, error } = await supabase.auth.admin.listUsers(); if (error) throw error; - setUsers(users?.filter(user => user.email) || []); + + const validUsers = users?.filter((user): user is AdminUser => + typeof user.email === 'string' + ) || []; + + setUsers(validUsers); } catch (err) { console.error('Erro ao buscar usuários:', err); setError('Não foi possível carregar os usuários');