import React, { useState } from 'react'; import { Formik } from 'formik'; import * as Yup from 'yup'; import SubmitButton from '@ente/shared/components/SubmitButton'; import { Box, Input, TextField, Typography } from '@mui/material'; import { PasswordStrengthHint } from './PasswordStrength'; import { isWeakPassword } from '@ente/accounts/utils'; import { Trans } from 'react-i18next'; import { t } from 'i18next'; import ShowHidePassword from '@ente/shared/components/Form/ShowHidePassword'; 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;