EmpowerHer / FRONTEND /src /components /AuthPanel.tsx
Disini Ruhansa Kodagoda Hettige
Update chatbot responses
23b0ad9
import { useState } from "react";
import type { User } from "firebase/auth";
type AuthMode = "signin" | "signup";
type AuthPanelProps = {
authBusy: boolean;
authEnabled: boolean;
authReady: boolean;
historyReady: boolean;
user: User | null;
onEmailAuth: (
mode: AuthMode,
email: string,
password: string
) => Promise<void>;
onGoogleAuth: () => Promise<void>;
onSignOut: () => Promise<void>;
};
export function AuthPanel({
authBusy,
authEnabled,
authReady,
historyReady,
user,
onEmailAuth,
onGoogleAuth,
onSignOut,
}: AuthPanelProps) {
const [mode, setMode] = useState<AuthMode>("signin");
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const submitDisabled =
authBusy || !email.trim() || password.trim().length < 6 || !authReady;
if (!authEnabled) {
return (
<div className="card authCard">
<h2>Save Chat History</h2>
<p className="muted">
Firebase is not configured in the frontend yet. Add the Vite Firebase
variables to enable sign in and saved conversations.
</p>
</div>
);
}
if (user) {
return (
<div className="card authCard">
<h2>Account</h2>
<p className="authUserLabel">{user.email ?? "Signed in with Google"}</p>
<p className="muted">
This account can reopen the saved conversation on the next visit.
</p>
<div className="authActions">
<button
className="primaryBtn wide"
onClick={() => void onSignOut()}
disabled={authBusy}
>
Sign Out
</button>
<div className="authHint">
{historyReady
? "History sync is active."
: "Loading saved conversation..."}
</div>
</div>
</div>
);
}
return (
<div className="card authCard">
<div className="authHeader">
<h2>Save Chat History</h2>
<div className="authToggle">
<button
className={mode === "signin" ? "authTab active" : "authTab"}
onClick={() => setMode("signin")}
type="button"
>
Sign In
</button>
<button
className={mode === "signup" ? "authTab active" : "authTab"}
onClick={() => setMode("signup")}
type="button"
>
Sign Up
</button>
</div>
</div>
<p className="muted">
Guest mode still works. Sign in only if you want the chatbot to remember
your conversation.
</p>
<label className="authField">
<span>Email</span>
<input
type="email"
value={email}
onChange={(event) => setEmail(event.target.value)}
placeholder="name@example.com"
autoComplete="email"
/>
</label>
<label className="authField">
<span>Password</span>
<input
type="password"
value={password}
onChange={(event) => setPassword(event.target.value)}
placeholder="At least 6 characters"
autoComplete={mode === "signup" ? "new-password" : "current-password"}
/>
</label>
<div className="authActions">
<button
className="primaryBtn wide"
onClick={() => void onEmailAuth(mode, email, password)}
disabled={submitDisabled}
type="button"
>
{authBusy
? "Please wait..."
: mode === "signup"
? "Create Account"
: "Sign In"}
</button>
<button
className="ghost wide"
onClick={() => void onGoogleAuth()}
disabled={authBusy || !authReady}
type="button"
>
Continue with Google
</button>
</div>
</div>
);
}