LOGIN_DIALOG_COMPONENT.md
Component documentation for the LoginDialog authentication interface.
Overview
The LoginDialog component provides a modal authentication interface that allows users to sign in using Google OAuth. This component integrates with Firebase Authentication and includes responsive design considerations for mobile devices.
Component Location
- File:
src/components/LoginDialog.tsx - Type: Modal Dialog Component
- Framework: React with TypeScript
Features
- Google OAuth Integration: Seamless sign-in with Google accounts via Firebase
- Modal Interface: Clean, centered dialog overlay
- Mobile Optimization: Automatically closes sidebar on mobile devices when open
- Loading States: Visual feedback during authentication process
- Error Handling: Displays authentication errors to users
- Accessible: ARIA labels and semantic HTML structure
Props Interface
interface LoginDialogProps {
open: boolean; // Controls dialog visibility
onOpenChange: (open: boolean) => void; // Callback when dialog state changes
}
Usage Examples
Basic Implementation
import LoginDialog from '@/components/LoginDialog';
import { useState } from 'react';
function App() {
const [loginOpen, setLoginOpen] = useState(false);
return (
<div>
<button onClick={() => setLoginOpen(true)}>
Sign In
</button>
<LoginDialog
open={loginOpen}
onOpenChange={setLoginOpen}
/>
</div>
);
}
With Sidebar Provider Context
import { SidebarProvider } from '@/components/ui/sidebar';
import LoginDialog from '@/components/LoginDialog';
// LoginDialog must be used within SidebarProvider context
function AuthenticatedApp() {
return (
<SidebarProvider>
<LoginDialog open={true} onOpenChange={() => {}} />
</SidebarProvider>
);
}
Authentication Methods
Google Sign-In
The component currently supports Google authentication:
const handleGoogleLogin = async () => {
try {
setIsLoading(true);
setLoginError('');
await FirebaseService.loginWithGoogle();
onOpenChange(false);
} catch (error: any) {
setLoginError(error.message);
} finally {
setIsLoading(false);
}
};
Dependencies
Firebase Integration
- Uses
FirebaseService.loginWithGoogle()for authentication - Integrates with Firebase Auth state management
UI Components
@/components/ui/dialog- Modal dialog primitives@/components/ui/button- Interactive button components@/components/ui/alert- Error message display
Sidebar Integration
- Requires
SidebarProvidercontext - Uses
useSidebar()hook for mobile responsiveness
Mobile Behavior
The component includes special handling for mobile devices:
useEffect(() => {
if (open && isMobile) {
setOpenMobile(false); // Close sidebar when login dialog opens
}
}, [open, isMobile, setOpenMobile]);
Error Handling
Authentication errors are displayed using the Alert component:
{loginError && (
<Alert variant="destructive">
<AlertDescription>{loginError}</AlertDescription>
</Alert>
)}
Styling
- Uses Tailwind CSS for responsive design
- Modal width:
sm:max-w-[425px] - Includes Google brand colors in the sign-in button
- Loading states with disabled button styling
Development Notes
Current Limitations
- Only supports Google OAuth (email/password login code exists but is unused)
- Requires SidebarProvider context to function properly
Future Enhancements
- Support for additional OAuth providers (GitHub, etc.)
- Email/password authentication flow
- Remember me functionality
- Multi-factor authentication support
Related Components
FirebaseService- Authentication service layerSidebarProvider- Required context provider- UI components from
@/components/ui/
Testing Considerations
When testing this component:
- Mock Firebase authentication methods
- Test mobile responsive behavior
- Verify error state handling
- Ensure proper dialog open/close behavior