import { useSnackbarController } from "@firecms/core"; import { useEffect, useState } from "react"; import { ArrowBackIcon, Button, CircularProgress, IconButton, LoadingButton, TextField, Typography } from "@firecms/ui"; import { FireCMSBackend } from "../../types"; import { useTranslation } from "@firecms/core"; type LoginFormMode = "login" | "signup"; export function CloudUserPasswordForm({ onClose, fireCMSBackend, onAnalyticsEvent }: { onClose: () => void, fireCMSBackend: FireCMSBackend, onAnalyticsEvent?: (event: string, params?: Record) => void; }) { const { t } = useTranslation(); const [mode, setMode] = useState("login"); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [resettingPassword, setResettingPassword] = useState(false); const snackbarController = useSnackbarController(); useEffect(() => { if (!document) return; const escFunction = (event: any) => { if (event.keyCode === 27) { onClose(); } }; document.addEventListener("keydown", escFunction, false); return () => { document.removeEventListener("keydown", escFunction, false); }; }, [onClose]); const handleSubmit = (event: React.FormEvent) => { event.preventDefault(); if (!email.trim() || !password.trim()) { snackbarController.open({ message: t("auth_invalid_email_password"), type: "error" }); return; } if (mode === "login") { onAnalyticsEvent?.("password_attempt"); fireCMSBackend.emailPasswordLogin(email, password); } else { onAnalyticsEvent?.("signup_password_attempt"); fireCMSBackend.createUserWithEmailAndPassword(email, password); } }; const handlePasswordReset = async (e: React.MouseEvent) => { e.preventDefault(); if (!email.trim()) { snackbarController.open({ message: t("auth_enter_email_first"), type: "error" }); return; } setResettingPassword(true); onAnalyticsEvent?.("password_reset_requested"); try { await fireCMSBackend.sendPasswordResetEmail(email); onAnalyticsEvent?.("password_reset_success"); snackbarController.open({ message: t("auth_password_reset_sent"), type: "success" }); } catch (e: any) { onAnalyticsEvent?.("password_reset_error", { error: e.message }); snackbarController.open({ message: e.message, type: "error" }); } finally { setResettingPassword(false); } }; const isFormValid = email.trim() && password.trim(); return (
{ onAnalyticsEvent?.("form_back_clicked"); onClose(); }}> {mode === "login" ? t("auth_sign_in_account") : t("auth_create_new_account")}
setEmail(event.target.value)} /> setPassword(event.target.value)} />
{mode === "login" && ( {t("auth_reset_password")} )} {fireCMSBackend.loginLoading && ( )}
); }