import { clsx } from 'clsx' import { Show, createEffect, createSignal, on } from 'solid-js' import { useLocalize } from '../../../../context/localize' import { Icon } from '../../../_shared/Icon' import styles from './PasswordField.module.scss' type Props = { class?: string errorMessage?: (error: string) => void onInput: (value: string) => void variant?: 'login' | 'registration' } export const PasswordField = (props: Props) => { const { t } = useLocalize() const [showPassword, setShowPassword] = createSignal(false) const [error, setError] = createSignal() const validatePassword = (passwordToCheck) => { const minLength = 8 const hasNumber = /\d/ const hasSpecial = /[!#$%&*@^]/ if (passwordToCheck.length < minLength) { return t('Password should be at least 8 characters') } if (!hasNumber.test(passwordToCheck)) { return t('Password should contain at least one number') } if (!hasSpecial.test(passwordToCheck)) { return t('Password should contain at least one special character: !@#$%^&*') } return null } const handleInputChange = (value) => { props.onInput(value) const errorValue = validatePassword(value) if (errorValue) { setError(errorValue) } else { setError() } } createEffect( on( () => error(), () => { props.errorMessage?.(error()) }, { defer: true }, ), ) return (
handleInputChange(event.currentTarget.value)} />
{error()}
) }