import React, { Component } from "react"; import PropTypes from "prop-types"; import { connect } from "react-redux"; import { translate } from "react-i18next"; import "setPassword.scss"; import CustomInput from "components/CustomInput.jsx"; import CustomErrors from "components/CustomMessages.jsx"; import io from "io"; @translate(["forgotPassword"], { wait: true }) export default class ForgotPassword extends Component { static propTypes = { t: PropTypes.func, }; static defaultProps = { t: () => {}, }; constructor(props) { super(props); CustomInput.initialize(this); this.state = { step: 1, resetCode: "", }; } getActions = () => { const emailInput = (this.input.email = ref) } />; const requestResetCodeButton = (); const iAlreadyHaveAResetCodeButton = (); const resetCodeInput = (this.input.resetCode = ref) } />; const verifyResetCode = (); const newPasswordInput = (this.input.newPassword = ref) } />; const newPasswordAgainInput = (this.input.newPasswordAgain = ref) } />; const changePassword = (); if (this.state.step === 1) { return [emailInput, requestResetCodeButton, iAlreadyHaveAResetCodeButton]; } else if (this.state.step === 2) { return [resetCodeInput, verifyResetCode]; } return [newPasswordInput, newPasswordAgainInput, changePassword]; }; requestResetCode = () => { if (CustomInput.hasInvalidInput(this.input, ["email"])) { this.messages.clearAddError(this.props.t("general:someFieldsAreIncorrectError")); } else { this.messages.clearAll(); io.getSocket(socket => { socket.emit("users.requestPasswordReset", this.input.email.getValue(), res => { if (res.status === "success") { this.messages.clearAddSuccess(this.props.t("forgotPassword:successfullyRequestedResetCode")); this.messages.clearAddInfo(this.props.t("forgotPassword:weHaveSentAUniqueResetCode")); this.setState({ step: 2, }); } else { this.messages.addError(res.message); } }); }); } }; verifyResetCode = () => { if (CustomInput.hasInvalidInput(this.input, ["resetCode"])) { this.messages.clearAddError(this.props.t("general:someFieldsAreIncorrectError")); } else { this.messages.clearErrors(); io.getSocket(socket => { socket.emit("users.verifyPasswordResetCode", this.input.resetCode.getValue(), res => { if (res.status === "success") { this.messages.clearAddSuccess(this.props.t("forgotPassword:successfullyVerifiedResetCode")); this.setState({ step: 3, resetCode: this.input.resetCode.getValue(), }); } else { this.messages.addError(res.message); } }); }); } }; changePassword = () => { this.messages.clearErrorSuccess(); if (CustomInput.hasInvalidInput(this.input, ["newPassword", "newPasswordAgain"])) { this.messages.clearAddError(this.props.t("general:someFieldsAreIncorrectError")); } else if (CustomInput.isTheSame(this.input, ["newPassword", "newPasswordAgain"])) { this.messages.clearAddError(this.props.t("general:newPasswordNewPasswordAgainSameError")); } else { io.getSocket(socket => { socket.emit("users.changePasswordWithResetCode", this.state.resetCode, this.input.newPassword.getValue(), res => { if (res.status === "success") { this.messages.clearAddSuccess(this.props.t("forgotPassword:successfullyChangedPassword")); // TODO Maybe add 5s delay and replace location.href everywhere location.href = "/login"; } else { this.messages.addError(res.message); } }); }); } }; skipRequestResetCode = () => { this.setState({ step: 2, }); }; render() { const { t } = this.props; return (

{ t("forgotPassword:title") }

1 2 3
(this.messages = ref) } /> { this.getActions() }
); } }