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)