import { isWeakPassword } from "@ente/accounts/utils"; import ShowHidePassword from "@ente/shared/components/Form/ShowHidePassword"; import SubmitButton from "@ente/shared/components/SubmitButton"; import { Box, Input, TextField, Typography } from "@mui/material"; import { Formik } from "formik"; import { t } from "i18next"; import React, { useState } from "react"; import { Trans } from "react-i18next"; import * as Yup from "yup"; import { PasswordStrengthHint } from "./PasswordStrength"; export interface SetPasswordFormProps { userEmail: string; callback: ( passphrase: string, setFieldError: ( field: keyof SetPasswordFormValues, message: string, ) => void, ) => Promise; buttonText: string; } export interface SetPasswordFormValues { passphrase: string; confirm: string; } function SetPasswordForm(props: SetPasswordFormProps) { const [loading, setLoading] = useState(false); const [showPassword, setShowPassword] = useState(false); const handleClickShowPassword = () => { setShowPassword(!showPassword); }; const handleMouseDownPassword = ( event: React.MouseEvent, ) => { event.preventDefault(); }; const onSubmit = async ( values: SetPasswordFormValues, { setFieldError, }: { setFieldError: ( field: keyof SetPasswordFormValues, message: string, ) => void; }, ) => { setLoading(true); try { const { passphrase, confirm } = values; if (passphrase === confirm) { await props.callback(passphrase, setFieldError); } else { setFieldError("confirm", t("PASSPHRASE_MATCH_ERROR")); } } catch (e) { setFieldError("confirm", `${t("UNKNOWN_ERROR")} ${e.message}`); } finally { setLoading(false); } }; return ( initialValues={{ passphrase: "", confirm: "" }} validationSchema={Yup.object().shape({ passphrase: Yup.string().required(t("REQUIRED")), confirm: Yup.string().required(t("REQUIRED")), })} validateOnChange={false} validateOnBlur={false} onSubmit={onSubmit} > {({ values, errors, handleChange, handleSubmit }) => (
{t("ENTER_ENC_PASSPHRASE")} ), }} /> {loading && ( {t("KEY_GENERATION_IN_PROGRESS_MESSAGE")} )} )} ); } export default SetPasswordForm;