fix: corrige tipagem do contexto de autenticação

- 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
This commit is contained in:
Lucas Santana 2024-12-20 13:48:22 -03:00
parent 7430ae15a8
commit 89c325cc7c
4 changed files with 14 additions and 5 deletions

View File

@ -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;

View File

@ -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();

View File

@ -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<any>;
@ -16,7 +17,7 @@ const AuthContext = React.createContext<AuthContextType | undefined>(undefined);
export function AuthProvider({ children }: { children: React.ReactNode }) {
const navigate = useNavigate();
const [user, setUser] = React.useState<any>(null);
const [user, setUser] = React.useState<User | null>(null);
const [userRole, setUserRole] = React.useState<string | null>(null);
const [loading, setLoading] = React.useState(true);

View File

@ -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<User[]>([]);
const [users, setUsers] = React.useState<AdminUser[]>([]);
const [loading, setLoading] = React.useState(true);
const [error, setError] = React.useState<string | null>(null);
const [updating, setUpdating] = React.useState<string | null>(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');