API & Client: Profile update
This commit is contained in:
parent
2c4f3c4462
commit
8e21fc4112
@ -1,5 +1,5 @@
|
||||
import datetime
|
||||
from flask import Blueprint, jsonify, request
|
||||
from flask import Blueprint, current_app, jsonify, request
|
||||
from sqlalchemy import exc, or_
|
||||
|
||||
from mpwo_api import appLog, bcrypt, db
|
||||
@ -182,6 +182,21 @@ def edit_user(user_id):
|
||||
bio = post_data.get('bio')
|
||||
birth_date = post_data.get('birth_date')
|
||||
location = post_data.get('location')
|
||||
password = post_data.get('password')
|
||||
password_conf = post_data.get('password_conf')
|
||||
|
||||
if password is not None and password != '':
|
||||
if password_conf != password:
|
||||
response_object = {
|
||||
'status': 'error',
|
||||
'message': 'Password and password confirmation don\'t match.\n'
|
||||
}
|
||||
return jsonify(response_object), 400
|
||||
else:
|
||||
password = bcrypt.generate_password_hash(
|
||||
password, current_app.config.get('BCRYPT_LOG_ROUNDS')
|
||||
).decode()
|
||||
|
||||
try:
|
||||
user = User.query.filter_by(id=user_id).first()
|
||||
user.first_name = first_name
|
||||
@ -193,6 +208,8 @@ def edit_user(user_id):
|
||||
if birth_date
|
||||
else None
|
||||
)
|
||||
if password is not None and password != '':
|
||||
user.password = password
|
||||
db.session.commit()
|
||||
|
||||
response_object = {
|
||||
|
@ -19,6 +19,14 @@ function ProfileError(message) {
|
||||
return { type: 'PROFILE_ERROR', message }
|
||||
}
|
||||
|
||||
function PwdError(message) {
|
||||
return { type: 'PWD_ERROR', message }
|
||||
}
|
||||
|
||||
function initProfileFormData(user) {
|
||||
return { type: 'INIT_PROFILE_FORM', user }
|
||||
}
|
||||
|
||||
export const handleFormChange = (target, value) => ({
|
||||
type: 'UPDATE_USER_FORMDATA',
|
||||
target,
|
||||
@ -31,10 +39,6 @@ export const updateProfileFormData = (target, value) => ({
|
||||
value,
|
||||
})
|
||||
|
||||
function initProfileFormData(user) {
|
||||
return { type: 'INIT_PROFILE_FORM', user }
|
||||
}
|
||||
|
||||
export function getProfile(dispatch) {
|
||||
return mpwoApi
|
||||
.getProfile()
|
||||
@ -147,6 +151,10 @@ export function handleProfileFormSubmit(event) {
|
||||
event.preventDefault()
|
||||
return (dispatch, getState) => {
|
||||
const state = getState()
|
||||
if (state.formProfile.formProfile.password !==
|
||||
state.formProfile.formProfile.passwordConf) {
|
||||
dispatch(PwdError('Password and password confirmation don\'t match.'))
|
||||
} else {
|
||||
return mpwoApi
|
||||
.updateProfile(state.formProfile.formProfile)
|
||||
.then(ret => {
|
||||
@ -161,4 +169,6 @@ export function handleProfileFormSubmit(event) {
|
||||
throw error
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ class ProfileEdit extends React.Component {
|
||||
const { formProfile,
|
||||
onHandleFormChange,
|
||||
onHandleProfileFormSubmit,
|
||||
message,
|
||||
user
|
||||
} = this.props
|
||||
return (
|
||||
@ -24,6 +25,9 @@ class ProfileEdit extends React.Component {
|
||||
<Helmet>
|
||||
<title>mpwo - {user.username} - Edit Profile</title>
|
||||
</Helmet>
|
||||
{ message !== '' && (
|
||||
<code>{message}</code>
|
||||
)}
|
||||
<div className="container">
|
||||
<h1 className="page-title">Profile Edition</h1>
|
||||
<div className="row">
|
||||
@ -62,6 +66,29 @@ class ProfileEdit extends React.Component {
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>
|
||||
Password:
|
||||
<input
|
||||
name="password"
|
||||
className="form-control input-lg"
|
||||
type="password"
|
||||
onChange={onHandleFormChange}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>
|
||||
Password Confirmation:
|
||||
<input
|
||||
name="passwordConf"
|
||||
className="form-control input-lg"
|
||||
type="password"
|
||||
onChange={onHandleFormChange}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
<hr />
|
||||
<div className="form-group">
|
||||
<label>
|
||||
First Name:
|
||||
@ -146,6 +173,7 @@ class ProfileEdit extends React.Component {
|
||||
export default connect(
|
||||
state => ({
|
||||
formProfile: state.formProfile.formProfile,
|
||||
message: state.message,
|
||||
user: state.user,
|
||||
}),
|
||||
dispatch => ({
|
||||
|
@ -58,7 +58,9 @@ export default class MpwoApi {
|
||||
last_name: form.lastName,
|
||||
bio: form.bio,
|
||||
location: form.location,
|
||||
birth_date: form.birthdate,
|
||||
birth_date: form.birthDate,
|
||||
password: form.password,
|
||||
password_conf: form.passwordConf,
|
||||
}),
|
||||
})
|
||||
return fetch(request)
|
||||
|
@ -49,6 +49,7 @@ const message = (state = initial.message, action) => {
|
||||
switch (action.type) {
|
||||
case 'AUTH_ERROR':
|
||||
case 'PROFILE_ERROR':
|
||||
case 'PWD_ERROR':
|
||||
return action.message
|
||||
case 'LOGOUT':
|
||||
case 'PROFILE_SUCCESS':
|
||||
|
@ -28,7 +28,9 @@ export default {
|
||||
lastName: '',
|
||||
bio: '',
|
||||
location: '',
|
||||
birthDate: ''
|
||||
birthDate: '',
|
||||
password: '',
|
||||
passwordConf: ''
|
||||
}
|
||||
},
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user