import React, { Component } from "react"; import PropTypes from "prop-types"; import { connect } from "react-redux"; import CustomInput from "components/CustomInput.jsx"; import CustomErrors from "components/CustomMessages.jsx"; import io from "io"; @connect(state => ({ user: { userId: state.user.get("userId"), }, })) export default class Settings extends Component { static propTypes = { user: PropTypes.object, }; static defaultProps = { user: { userId: "", }, }; 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("Some fields are incorrect. Please fix them before continuing."); } else { this.messages.clearAll(); io.getSocket(socket => { socket.emit("users.requestPasswordReset", this.input.email.getValue(), res => { if (res.status === "success") { this.messages.clearAddSuccess("Successfully requested reset code."); this.messages.clearAddInfo("We have sent a unique reset code to your email address."); this.setState({ step: 2, }); } else { this.messages.addError(res.message); } }); }); } }; verifyResetCode = () => { if (CustomInput.hasInvalidInput(this.input, ["resetCode"])) { this.messages.clearAddError("Some fields are incorrect. Please fix them before continuing."); } else { this.messages.clearErrors(); io.getSocket(socket => { socket.emit("users.verifyPasswordResetCode", this.input.resetCode.getValue(), res => { if (res.status === "success") { this.messages.clearAddSuccess("Successfully verified reset code."); 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("Some fields are incorrect. Please fix them before continuing."); } else if (CustomInput.isTheSame(this.input, ["newPassword", "newPasswordAgain"])) { this.messages.clearAddError("New password and new password again need to be the same."); } else { io.getSocket(socket => { socket.emit("users.changePasswordWithResetCode", this.state.resetCode, this.input.newPassword.getValue(), res => { if (res.status === "success") { this.messages.clearAddSuccess("Successfully changed password. Redirecting you to the login page."); // 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() { return (

Reset password

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