budget-view-finance/src/components/dashboard/UserProfileButton.tsx
gpt-engineer-app[bot] 1f3197caf5 feat: Move user button and integrate webhook
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.
2025-06-23 02:25:49 +00:00

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;