import { useIntl } from 'react-intl' import { passwordValidators } from '@scandic-hotels/common/utils/zod/passwordValidator' import type { PasswordValidatorKey } from '@scandic-hotels/common/utils/zod/newPassword' import { MaterialIcon } from '../Icons/MaterialIcon' import { Typography } from '../Typography' import styles from './passwordInput.module.css' export function NewPasswordValidation({ value, errors, id, }: { value: string errors: string[] id: string }) { const intl = useIntl() if (!value) return null function getErrorMessage(key: PasswordValidatorKey) { switch (key) { case 'length': return intl.formatMessage( { id: 'passwordInput.lengthRequirement', defaultMessage: '{min} to {max} characters', }, { min: 10, max: 40, } ) case 'hasUppercase': return intl.formatMessage( { id: 'passwordInput.uppercaseRequirement', defaultMessage: '{count} uppercase letter', }, { count: 1 } ) case 'hasLowercase': return intl.formatMessage( { id: 'passwordInput.lowercaseRequirement', defaultMessage: '{count} lowercase letter', }, { count: 1 } ) case 'hasNumber': return intl.formatMessage( { id: 'passwordInput.numberRequirement', defaultMessage: '{count} number', }, { count: 1 } ) case 'hasSpecialChar': return intl.formatMessage( { id: 'passwordInput.specialCharacterRequirement', defaultMessage: '{count} special character', }, { count: 1 } ) case 'allowedCharacters': return intl.formatMessage({ id: 'passwordInput.allowedCharactersRequirement', defaultMessage: 'Only allowed characters', }) } } return (
{Object.entries(passwordValidators).map(([key, { message }]) => ( {getErrorMessage(key as PasswordValidatorKey)} ))}
) } interface IconProps { errorMessage: string errors: string[] } function Icon({ errorMessage, errors }: IconProps) { const intl = useIntl() return errors.includes(errorMessage) ? ( ) : ( ) }