import { Show } from 'solid-js/web' import { t } from '../../../utils/intl' import styles from './AuthModal.module.scss' import { clsx } from 'clsx' import { SocialProviders } from './SocialProviders' import { signIn } from '../../../stores/auth' import { ApiError } from '../../../utils/apiClient' import { createSignal } from 'solid-js' import { isValidEmail } from './validators' import { email, setEmail } from './sharedLogic' import { useRouter } from '../../../stores/router' import type { AuthModalSearchParams } from './types' type FormFields = { email: string password: string } type ValidationErrors = Partial> export const LoginForm = () => { const [submitError, setSubmitError] = createSignal('') const [isSubmitting, setIsSubmitting] = createSignal(false) const [validationErrors, setValidationErrors] = createSignal({}) const { changeSearchParam } = useRouter() const [password, setPassword] = createSignal('') const handleEmailInput = (newEmail: string) => { setValidationErrors(({ email: _notNeeded, ...rest }) => rest) setEmail(newEmail) } const handlePasswordInput = (newPassword: string) => { setValidationErrors(({ password: _notNeeded, ...rest }) => rest) setPassword(newPassword) } const handleSubmit = async (event: Event) => { event.preventDefault() setSubmitError('') const newValidationErrors: ValidationErrors = {} if (!email()) { newValidationErrors.email = t('Please enter email') } else if (!isValidEmail(email())) { newValidationErrors.email = t('Invalid email') } if (!password()) { newValidationErrors.password = t('Please enter password') } if (Object.keys(newValidationErrors).length > 0) { setValidationErrors(newValidationErrors) return } setIsSubmitting(true) try { await signIn({ email: email(), password: password() }) } catch (error) { if (error instanceof ApiError) { if (error.code === 'email_not_confirmed') { setSubmitError(t('Please, confirm email')) return } if (error.code === 'user_not_found') { setSubmitError(t('Something went wrong, check email and password')) return } } setSubmitError(error.message) } finally { setIsSubmitting(false) } } return (

{t('Enter the Discours')}

  • {submitError()}
handleEmailInput(event.currentTarget.value)} />
{validationErrors().email}
handlePasswordInput(event.currentTarget.value)} />
{validationErrors().password}
changeSearchParam('mode', 'register')}> {t('I have no account yet')}
) }