// Copyright (C) 2020 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import Form, { FormComponentProps } from 'antd/lib/form/Form'; import Button from 'antd/lib/button'; import Icon from 'antd/lib/icon'; import Input from 'antd/lib/input'; import patterns from 'utils/validation-patterns'; export interface ChangePasswordData { oldPassword: string; newPassword1: string; newPassword2: string; } type ChangePasswordFormProps = { fetching: boolean; onSubmit(loginData: ChangePasswordData): void; } & FormComponentProps; class ChangePasswordFormComponent extends React.PureComponent { private validateConfirmation = (_: any, value: string, callback: Function): void => { const { form } = this.props; if (value && value !== form.getFieldValue('newPassword1')) { callback('Two passwords that you enter is inconsistent!'); } else { callback(); } }; private validatePassword = (_: any, value: string, callback: Function): void => { const { form } = this.props; if (!patterns.validatePasswordLength.pattern.test(value)) { callback(patterns.validatePasswordLength.message); } if (!patterns.passwordContainsNumericCharacters.pattern.test(value)) { callback(patterns.passwordContainsNumericCharacters.message); } if (!patterns.passwordContainsUpperCaseCharacter.pattern.test(value)) { callback(patterns.passwordContainsUpperCaseCharacter.message); } if (!patterns.passwordContainsLowerCaseCharacter.pattern.test(value)) { callback(patterns.passwordContainsLowerCaseCharacter.message); } if (value) { form.validateFields(['newPassword2'], { force: true }); } callback(); }; private handleSubmit = (e: React.FormEvent): void => { e.preventDefault(); const { form, onSubmit, } = this.props; form.validateFields((error, values): void => { if (!error) { const validatedFields = { ...values, confirmations: [], }; onSubmit(validatedFields); } }); }; private renderOldPasswordField(): JSX.Element { const { form } = this.props; return ( {form.getFieldDecorator('oldPassword', { rules: [{ required: true, message: 'Please input your current password!', }], })(} placeholder='Current password' />)} ); } private renderNewPasswordField(): JSX.Element { const { form } = this.props; return ( {form.getFieldDecorator('newPassword1', { rules: [{ required: true, message: 'Please input new password!', }, { validator: this.validatePassword, }], })(} placeholder='New password' />)} ); } private renderNewPasswordConfirmationField(): JSX.Element { const { form } = this.props; return ( {form.getFieldDecorator('newPassword2', { rules: [{ required: true, message: 'Please confirm your new password!', }, { validator: this.validateConfirmation, }], })(} placeholder='Confirm new password' />)} ); } public render(): JSX.Element { const { fetching } = this.props; return (
{this.renderOldPasswordField()} {this.renderNewPasswordField()} {this.renderNewPasswordConfirmationField()}
); } } export default Form.create()(ChangePasswordFormComponent);