/**
*
* InputPassword
*
*/
import React from 'react';
import PropTypes from 'prop-types';
import { isEmpty, includes, mapKeys, reject, map, isObject } from 'lodash';
import { FormattedMessage } from 'react-intl';
import WithInput from 'components/WithInput';
class InputPassword extends React.Component { // eslint-disable-line react/prefer-stateless-function
/* eslint-disable jsx-a11y/no-static-element-interactions */
constructor(props) {
super(props);
this.state = {
errors: [],
hasInitialValue: false,
type: true,
};
}
componentDidMount() {
if (this.props.value && !isEmpty(this.props.value)) {
this.setState({ hasInitialValue: true });
}
}
componentWillReceiveProps(nextProps) {
if (this.props.errors !== nextProps.errors) {
this.setState({ errors: nextProps.errors });
}
}
handleBlur = ({ target }) => {
// prevent error display if input is initially empty
if (!isEmpty(target.value) || this.state.hasInitialValue) {
// validates basic string validations
// add custom logic here such as alerts...
const errors = this.validate(target.value);
this.setState({ errors, hasInitialValue: true });
}
}
// Basic string validations
validate = (value) => {
let errors = [];
// handle i18n
const requiredError = { id: 'settings-manager.request.error.validation.required' };
mapKeys(this.props.validations, (validationValue, validationKey) => {
switch (validationKey) {
case 'maxLength':
if (value.length > validationValue) {
errors.push({ id: 'settings-manager.request.error.validation.maxLength' });
}
break;
case 'minLength':
if (value.length < validationValue) {
errors.push({ id: 'settings-manager.request.error.validation.minLength' });
}
break;
case 'required':
if (value.length === 0) {
errors.push({ id: 'settings-manager.request.error.validation.required' });
}
break;
case 'regex':
if (!new RegExp(validationValue).test(value)) {
errors.push({ id: 'settings-manager.request.error.validation.regex' });
}
break;
default:
errors = [];
}
});
if (includes(errors, requiredError)) {
errors = reject(errors, (error) => error !== requiredError);
}
return errors;
}
showPassword = () => this.setState({ type: !this.state.type })
renderErrors = () => { // eslint-disable-line consistent-return
if (!this.props.noErrorsDescription) {
return (
map(this.state.errors, (error, key) => {
const displayError = isObject(error) && error.id
?