Move the logged-in user button above the month filter on the dashboard. Integrate a webhook call to send contact form data to a specified URL.
98 lines
2.8 KiB
TypeScript
98 lines
2.8 KiB
TypeScript
|
|
import React, { useState, useEffect } from 'react';
|
|
import {
|
|
DropdownMenu,
|
|
DropdownMenuContent,
|
|
DropdownMenuItem,
|
|
DropdownMenuTrigger,
|
|
} from "@/components/ui/dropdown-menu";
|
|
import { Button } from '@/components/ui/button';
|
|
import { LogOut, User } from 'lucide-react';
|
|
import { supabase } from '@/integrations/supabase/client';
|
|
import { useToast } from '@/hooks/use-toast';
|
|
import { useNavigate } from 'react-router-dom';
|
|
|
|
const UserProfileButton = () => {
|
|
const [userEmail, setUserEmail] = useState<string>('');
|
|
const [dropdownOpen, setDropdownOpen] = useState(false);
|
|
const { toast } = useToast();
|
|
const navigate = useNavigate();
|
|
|
|
useEffect(() => {
|
|
// Buscar dados do usuário logado
|
|
const getUserData = async () => {
|
|
const { data: { user } } = await supabase.auth.getUser();
|
|
if (user?.email) {
|
|
setUserEmail(user.email);
|
|
}
|
|
};
|
|
|
|
getUserData();
|
|
}, []);
|
|
|
|
const handleLogout = async () => {
|
|
try {
|
|
const { error } = await supabase.auth.signOut();
|
|
if (error) throw error;
|
|
|
|
// Limpar localStorage
|
|
localStorage.removeItem('userEmail');
|
|
|
|
toast({
|
|
title: "Logout realizado",
|
|
description: "Você foi desconectado com sucesso"
|
|
});
|
|
|
|
navigate('/auth');
|
|
} catch (error) {
|
|
console.error('Erro no logout:', error);
|
|
toast({
|
|
title: "Erro no logout",
|
|
description: "Ocorreu um erro ao sair da conta",
|
|
variant: "destructive"
|
|
});
|
|
}
|
|
};
|
|
|
|
return (
|
|
<DropdownMenu open={dropdownOpen} onOpenChange={setDropdownOpen}>
|
|
<DropdownMenuTrigger asChild>
|
|
<Button
|
|
className="rounded-full py-0 ps-0 h-10 justify-start"
|
|
variant="outline"
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
setDropdownOpen(!dropdownOpen);
|
|
}}
|
|
>
|
|
<div className="me-2 flex aspect-square h-full p-1.5">
|
|
<div className="h-full w-full rounded-full bg-blue-600 flex items-center justify-center">
|
|
<User className="h-4 w-4 text-white" />
|
|
</div>
|
|
</div>
|
|
<span className="text-sm truncate">
|
|
{userEmail || 'Usuário'}
|
|
</span>
|
|
</Button>
|
|
</DropdownMenuTrigger>
|
|
<DropdownMenuContent align="end" className="w-56 z-50">
|
|
<DropdownMenuItem
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
setDropdownOpen(false);
|
|
handleLogout();
|
|
}}
|
|
className="flex items-center gap-2 text-red-600 hover:text-red-700 hover:bg-red-50 cursor-pointer"
|
|
>
|
|
<LogOut className="h-4 w-4" />
|
|
Sair
|
|
</DropdownMenuItem>
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
);
|
|
};
|
|
|
|
export default UserProfileButton;
|