sqlpad
Version:
Web app for writing and running SQL queries and visualizing the results. Supports Postgres, MySQL, SQL Server, Crate and Vertica.
101 lines (91 loc) • 2.71 kB
JavaScript
import React from 'react'
import fetchJson from '../utilities/fetch-json.js'
import uuid from 'uuid'
import Alert from 'react-s-alert'
import UserList from './UserList'
import InviteUserForm from './InviteUserForm'
class UsersView extends React.Component {
state = {
users: [],
isSaving: false
}
componentDidMount() {
document.title = 'SQLPad - Users'
this.loadUsersFromServer()
}
handleDelete = user => {
fetchJson('DELETE', '/api/users/' + user._id).then(json => {
if (json.error) {
return Alert.error('Delete Failed: ' + json.error.toString())
}
Alert.success('User Deleted')
this.loadUsersFromServer()
})
}
loadUsersFromServer = () => {
fetchJson('GET', '/api/users').then(json => {
if (json.error) Alert.error(json.error)
this.setState({ users: json.users })
})
}
updateUserRole = user => {
this.setState({ isSaving: true })
fetchJson('PUT', '/api/users/' + user._id, {
role: user.role
}).then(json => {
this.loadUsersFromServer()
this.setState({ isSaving: false })
if (json.error) {
return Alert.error('Update failed: ' + json.error.toString())
}
Alert.success('User Updated')
})
}
generatePasswordResetLink = user => {
this.setState({ isSaving: true })
const passwordResetId = uuid.v4()
fetchJson('PUT', '/api/users/' + user._id, {
passwordResetId
}).then(json => {
this.loadUsersFromServer()
this.setState({ isSaving: false })
if (json.error) {
return Alert.error('Update failed: ' + json.error.toString())
}
Alert.success('Password link generated')
})
}
removePasswordResetLink = user => {
this.setState({ isSaving: true })
fetchJson('PUT', '/api/users/' + user._id, {
passwordResetId: ''
}).then(json => {
this.loadUsersFromServer()
this.setState({ isSaving: false })
if (json.error) {
return Alert.error('Update failed: ' + json.error.toString())
}
Alert.success('Password reset link removed')
})
}
render() {
const { config, currentUser } = this.props
return (
<div className="flex-100">
<UserList
users={this.state.users}
handleDelete={this.handleDelete}
updateUserRole={this.updateUserRole}
generatePasswordResetLink={this.generatePasswordResetLink}
removePasswordResetLink={this.removePasswordResetLink}
currentUser={currentUser}
/>
<InviteUserForm
loadUsersFromServer={this.loadUsersFromServer}
config={config}
/>
</div>
)
}
}
export default UsersView