import { useState } from 'react'; import { useNavigate } from 'react-router'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faEye, faEyeSlash } from '@fortawesome/pro-duotone-svg-icons'; import { useAuth } from '@/providers/auth-provider'; import { useData } from '@/providers/data-provider'; import { Button } from '@/components/base/buttons/button'; import { SocialButton } from '@/components/base/buttons/social-button'; import { Checkbox } from '@/components/base/checkbox/checkbox'; import { Input } from '@/components/base/input/input'; export const LoginPage = () => { const { loginWithUser } = useAuth(); const { refresh } = useData(); const navigate = useNavigate(); const saved = localStorage.getItem('helix_remember'); const savedCreds = saved ? JSON.parse(saved) : null; const [email, setEmail] = useState(savedCreds?.email ?? ''); const [password, setPassword] = useState(savedCreds?.password ?? ''); const [showPassword, setShowPassword] = useState(false); const [rememberMe, setRememberMe] = useState(!!savedCreds); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(false); const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); setError(null); if (!email || !password) { setError('Email and password are required'); return; } setIsLoading(true); try { const { apiClient } = await import('@/lib/api-client'); const response = await apiClient.login(email, password); // Build user from sidecar response const u = response.user; const firstName = u?.firstName ?? ''; const lastName = u?.lastName ?? ''; const name = `${firstName} ${lastName}`.trim() || email; const initials = `${firstName[0] ?? ''}${lastName[0] ?? ''}`.toUpperCase() || email[0].toUpperCase(); if (rememberMe) { localStorage.setItem('helix_remember', JSON.stringify({ email, password })); } else { localStorage.removeItem('helix_remember'); } loginWithUser({ id: u?.id, name, initials, role: (u?.role ?? 'executive') as 'executive' | 'admin' | 'cc-agent', email: u?.email ?? email, avatarUrl: u?.avatarUrl, platformRoles: u?.platformRoles, }); refresh(); navigate('/'); } catch (err: any) { setError(err.message); setIsLoading(false); } }; const handleGoogleSignIn = () => { setError('Google sign-in not yet configured'); }; return (
{/* Login Card */}
{/* Logo */}
Helix Engage

Sign in to Helix Engage

Global Hospital

{/* Google sign-in */} Sign in with Google {/* Divider */}
or continue with
{/* Form */}
{error && (
{error}
)} setEmail(value)} size="md" />
setPassword(value)} size="md" />
{/* Footer */} Powered by F0rty2.ai
); };