add updateUser
This commit is contained in:
parent
52430ef8d5
commit
73b0d02841
4 changed files with 91 additions and 8 deletions
|
@ -444,12 +444,21 @@ button.button.btn-no:hover {
|
||||||
}
|
}
|
||||||
|
|
||||||
#accountPageLoading {
|
#accountPageLoading {
|
||||||
display: none;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 16px;
|
bottom: 16px;
|
||||||
right: 120px;
|
right: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#accountPageSuccess {
|
||||||
|
margin-top: 8px;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#accountPageError {
|
||||||
|
margin-top: 8px;
|
||||||
|
color: #c04f4f;
|
||||||
|
}
|
||||||
|
|
||||||
.centerGreyForm input[type="text"],
|
.centerGreyForm input[type="text"],
|
||||||
.centerGreyForm input[type="email"],
|
.centerGreyForm input[type="email"],
|
||||||
.centerGreyForm input[type="password"] {
|
.centerGreyForm input[type="password"] {
|
||||||
|
|
|
@ -136,6 +136,24 @@ async function getCurrentUser() {
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function updateUser(id, opts) {
|
||||||
|
const formdata = new FormData()
|
||||||
|
formdata.append('user[name]', opts.name)
|
||||||
|
formdata.append('user[email]', opts.email)
|
||||||
|
formdata.append('user[emails_allowed]', opts.emailsAllowed)
|
||||||
|
formdata.append('current_password', opts.currentPassword)
|
||||||
|
formdata.append('user[password]', opts.newPassword)
|
||||||
|
formdata.append('user[password_confirmation]', opts.newPasswordConfirmation)
|
||||||
|
formdata.append('settings[follow_topic_on_created]', opts.followTopicOnCreated)
|
||||||
|
formdata.append('settings[follow_topic_on_contributed]', opts.followTopicOnContributed)
|
||||||
|
formdata.append('settings[follow_map_on_created]', opts.followMapOnCreated)
|
||||||
|
formdata.append('settings[follow_map_on_contributed]', opts.followMapOnContributed)
|
||||||
|
formdata.append('remove_image', opts.removeImage)
|
||||||
|
if (opts.image) formdata.append('user[image]', opts.image)
|
||||||
|
const res = await putNoStringify(`/users/${id}`, formdata)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
async function approveAccessRequest(mapId, requestId) {
|
async function approveAccessRequest(mapId, requestId) {
|
||||||
const res = await post(`/maps/${mapId}/approve_access/${requestId}`)
|
const res = await post(`/maps/${mapId}/approve_access/${requestId}`)
|
||||||
return res.ok
|
return res.ok
|
||||||
|
@ -160,6 +178,7 @@ module.exports = {
|
||||||
createMetacode,
|
createMetacode,
|
||||||
updateMetacode,
|
updateMetacode,
|
||||||
getCurrentUser,
|
getCurrentUser,
|
||||||
|
updateUser,
|
||||||
approveAccessRequest,
|
approveAccessRequest,
|
||||||
denyAccessRequest,
|
denyAccessRequest,
|
||||||
requestAccess
|
requestAccess
|
||||||
|
|
|
@ -98,6 +98,7 @@ const ReactApp = {
|
||||||
return merge({
|
return merge({
|
||||||
unreadNotificationsCount: Notifications.unreadNotificationsCount,
|
unreadNotificationsCount: Notifications.unreadNotificationsCount,
|
||||||
currentUser: Active.Mapper,
|
currentUser: Active.Mapper,
|
||||||
|
updateUser: DataFetcher.updateUser,
|
||||||
toast: self.toast,
|
toast: self.toast,
|
||||||
mobile: self.mobile,
|
mobile: self.mobile,
|
||||||
mobileTitle: self.mobileTitle,
|
mobileTitle: self.mobileTitle,
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import React, { Component } from 'react'
|
import React, { Component } from 'react'
|
||||||
|
import { browserHistory } from 'react-router'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import Loading from '../components/Loading'
|
import Loading from '../components/Loading'
|
||||||
|
|
||||||
|
@ -6,12 +7,14 @@ class UserSettings extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props)
|
super(props)
|
||||||
this.state = {
|
this.state = {
|
||||||
|
success: false,
|
||||||
|
error: false,
|
||||||
userImageMenuOpen: false,
|
userImageMenuOpen: false,
|
||||||
changePasswordOpen: false,
|
changePasswordOpen: false,
|
||||||
changeName: false,
|
changeName: false,
|
||||||
loading: false,
|
loading: false,
|
||||||
image: null,
|
image: null,
|
||||||
imagePreview: null,
|
imagePreviewFile: null,
|
||||||
currentPassword: '',
|
currentPassword: '',
|
||||||
newPassword: '',
|
newPassword: '',
|
||||||
newPasswordConfirmation: '',
|
newPasswordConfirmation: '',
|
||||||
|
@ -93,10 +96,6 @@ class UserSettings extends Component {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
showLoading = () => {
|
|
||||||
this.setState({ loading: true })
|
|
||||||
}
|
|
||||||
|
|
||||||
showImagePreview = (event) => {
|
showImagePreview = (event) => {
|
||||||
const file = event.target.files[0]
|
const file = event.target.files[0]
|
||||||
this.setState({
|
this.setState({
|
||||||
|
@ -143,12 +142,58 @@ class UserSettings extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onSubmit = async (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
const { updateUser, params: { id } } = this.props
|
||||||
|
const { name, email, imagePreviewFile, emailsAllowed, removeImage,
|
||||||
|
followTopicOnCreated, followTopicOnContributed,
|
||||||
|
followMapOnCreated, followMapOnContributed,
|
||||||
|
currentPassword, newPassword, newPasswordConfirmation } = this.state
|
||||||
|
this.setState({ loading: true, error: false })
|
||||||
|
try {
|
||||||
|
const res = await updateUser(id, {
|
||||||
|
name,
|
||||||
|
email,
|
||||||
|
removeImage,
|
||||||
|
image: imagePreviewFile,
|
||||||
|
emailsAllowed,
|
||||||
|
followTopicOnCreated,
|
||||||
|
followTopicOnContributed,
|
||||||
|
followMapOnCreated,
|
||||||
|
followMapOnContributed,
|
||||||
|
currentPassword,
|
||||||
|
newPassword,
|
||||||
|
newPasswordConfirmation
|
||||||
|
})
|
||||||
|
if (res.ok) {
|
||||||
|
this.setState({ loading: false, success: true })
|
||||||
|
window.setTimeout(() => this.setState({ success: false }), 4000)
|
||||||
|
} else {
|
||||||
|
const parsed = await res.json()
|
||||||
|
const error = parsed.error
|
||||||
|
this.setState({
|
||||||
|
loading: false,
|
||||||
|
error
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.setState({
|
||||||
|
loading: false,
|
||||||
|
error: 'There was an error saving'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
submitClick = (event) => {
|
||||||
|
// validate
|
||||||
|
}
|
||||||
|
|
||||||
render = () => {
|
render = () => {
|
||||||
const id = this.props.currentUser.get('id')
|
const id = this.props.currentUser.get('id')
|
||||||
const name = this.props.currentUser.get('name')
|
const name = this.props.currentUser.get('name')
|
||||||
return (
|
return (
|
||||||
<div id="yield">
|
<div id="yield">
|
||||||
<form className="edit_user centerGreyForm" id={`edit_user_${id}`} encType="multipart/form-data" action={`/users/${id}`} acceptCharset="UTF-8" method="patch">
|
<form onSubmit={this.onSubmit} className="edit_user centerGreyForm" id={`edit_user_${id}`} acceptCharset="UTF-8">
|
||||||
<input name="utf8" type="hidden" value="✓" />
|
<input name="utf8" type="hidden" value="✓" />
|
||||||
<h3>Edit Settings</h3>
|
<h3>Edit Settings</h3>
|
||||||
<div className="userImage">
|
<div className="userImage">
|
||||||
|
@ -224,7 +269,16 @@ class UserSettings extends Component {
|
||||||
<div id="accountPageLoading">
|
<div id="accountPageLoading">
|
||||||
{this.state.loading && <Loading />}
|
{this.state.loading && <Loading />}
|
||||||
</div>
|
</div>
|
||||||
<input type="submit" name="commit" value="Update" className="update" onClick={this.showLoading} data-disable-with="Update" />
|
<div className="clearfloat"></div>
|
||||||
|
<div id="accountPageSuccess">
|
||||||
|
{this.state.success && "Saved"}
|
||||||
|
</div>
|
||||||
|
<div className="clearfloat"></div>
|
||||||
|
<div id="accountPageError">
|
||||||
|
{this.state.error}
|
||||||
|
</div>
|
||||||
|
<div className="clearfloat"></div>
|
||||||
|
<input type="submit" name="commit" value="Update" className="update" onClick={this.submitClick} />
|
||||||
<div className="clearfloat"></div>
|
<div className="clearfloat"></div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue