import React, { Component } from 'react'; import { connect } from 'react-redux'; import fetch from 'isomorphic-unfetch'; import Page from '../comps/Page'; import PaddedRow from '../comps/PaddedRow'; import Spinner from '../comps/Spinner'; import updStateFromId from '../util/updStateFromId'; import mapUser from '../util/mapUser'; import getUrl from '../util/getUrl'; import getJwt from '../util/getJwt'; class Settings extends Component { state = { pending: false, passErr: null, curPass: '', newPass: '', confPass: '' } updVal = updStateFromId.bind(this); submit = async e => { e.preventDefault(); const { pending, curPass, newPass, confPass } = this.state; const { email, _id } = this.props.user; if(pending) return; const doErr = passErr => this.setState({ pending: false, passErr }); const vals = { 'Current password': curPass, 'New password': newPass, 'Confirm new password': confPass }; const keys = Object.keys(vals); for(let i = 0; i < keys.length; i++) { let key = keys[i], val = vals[key]; if(val.length === 0) return doErr(`${key} is required`); } if(newPass !== confPass) return doErr('New passwords don\'t match'); this.setState({ passErr: null, pending: true }); const updRes = await fetch(getUrl('users/' + _id), { method: 'PATCH', headers: { 'Content-Type': 'application/json', Authorization: getJwt() }, body: JSON.stringify({ email, password: curPass, newPassword: newPass }) }).catch(doErr); if(updRes.ok) { this.setState({ curPass: '', newPass: '', confPass: '', passErr: 'Password updated successfully', pending: false }); } else { let message = 'failed to update password'; try { const data = await updRes.json(); message = data.message || message; } catch (err) { doErr(err.message); } doErr(message); } } render() { const { pending, passErr, curPass, newPass, confPass } = this.state; return (

Account settings


Change password

{!passErr ? null :

{passErr}

}
); } } export default connect(mapUser)(Settings);