Add enter and escape key behavior to Chronograf admin users page

pull/10616/head
deniz kusefoglu 2017-12-06 14:22:27 -08:00
parent f7b26ed43a
commit 63ff785bd1
4 changed files with 30 additions and 2 deletions

View File

@ -23,6 +23,7 @@ const AdminTabs = ({
onUpdateUserSuperAdmin, onUpdateUserSuperAdmin,
onDeleteUser, onDeleteUser,
meID, meID,
notify,
}) => { }) => {
const tabs = [ const tabs = [
{ {
@ -42,6 +43,7 @@ const AdminTabs = ({
onUpdateUserSuperAdmin={onUpdateUserSuperAdmin} onUpdateUserSuperAdmin={onUpdateUserSuperAdmin}
onDeleteUser={onDeleteUser} onDeleteUser={onDeleteUser}
meID={meID} meID={meID}
notify={notify}
/> />
), ),
}, },
@ -99,6 +101,7 @@ AdminTabs.propTypes = {
onUpdateUserRole: func.isRequired, onUpdateUserRole: func.isRequired,
onUpdateUserSuperAdmin: func.isRequired, onUpdateUserSuperAdmin: func.isRequired,
onDeleteUser: func.isRequired, onDeleteUser: func.isRequired,
notify: func.isRequired,
} }
export default AdminTabs export default AdminTabs

View File

@ -40,7 +40,7 @@ class UsersTable extends Component {
} }
render() { render() {
const {organization, users, onCreateUser, meID} = this.props const {organization, users, onCreateUser, meID, notify} = this.props
const {isCreatingUser} = this.state const {isCreatingUser} = this.state
const { const {
@ -83,6 +83,7 @@ class UsersTable extends Component {
organization={organization} organization={organization}
onBlur={this.handleBlurCreateUserRow} onBlur={this.handleBlurCreateUserRow}
onCreateUser={onCreateUser} onCreateUser={onCreateUser}
notify={notify}
/> />
: null} : null}
{users.length || !isCreatingUser {users.length || !isCreatingUser
@ -132,5 +133,6 @@ UsersTable.propTypes = {
onUpdateUserSuperAdmin: func.isRequired, onUpdateUserSuperAdmin: func.isRequired,
onDeleteUser: func.isRequired, onDeleteUser: func.isRequired,
meID: string.isRequired, meID: string.isRequired,
notify: func.isRequired,
} }
export default UsersTable export default UsersTable

View File

@ -59,6 +59,25 @@ class UsersTableRowNew extends Component {
this.setState({superAdmin}) this.setState({superAdmin})
} }
handleKeyDown = e => {
const {name, provider} = this.state
const preventCreate = !name || !provider
if (e.key === 'Escape') {
this.props.onBlur()
}
if (e.key === 'Enter') {
if (preventCreate) {
return this.props.notify(
'warning',
'Users must have a name and auth provider.'
)
}
this.handleConfirmCreateUser()
}
}
render() { render() {
const { const {
colRole, colRole,
@ -83,6 +102,7 @@ class UsersTableRowNew extends Component {
autoFocus={true} autoFocus={true}
value={name} value={name}
onChange={this.handleInputChange('name')} onChange={this.handleInputChange('name')}
onKeyDown={this.handleKeyDown}
/> />
</td> </td>
<td style={{width: colRole}}> <td style={{width: colRole}}>
@ -111,6 +131,7 @@ class UsersTableRowNew extends Component {
placeholder="OAuth Provider..." placeholder="OAuth Provider..."
value={provider} value={provider}
onChange={this.handleInputChange('provider')} onChange={this.handleInputChange('provider')}
onKeyDown={this.handleKeyDown}
/> />
</td> </td>
<td style={{width: colScheme}}> <td style={{width: colScheme}}>
@ -148,6 +169,7 @@ UsersTableRowNew.propTypes = {
}), }),
onBlur: func.isRequired, onBlur: func.isRequired,
onCreateUser: func.isRequired, onCreateUser: func.isRequired,
notify: func.isRequired,
} }
export default UsersTableRowNew export default UsersTableRowNew

View File

@ -64,7 +64,7 @@ class AdminChronografPage extends Component {
} }
render() { render() {
const {users, meCurrentOrganization, meRole, meID} = this.props const {users, meCurrentOrganization, meRole, meID, notify} = this.props
return ( return (
<div className="page"> <div className="page">
@ -89,6 +89,7 @@ class AdminChronografPage extends Component {
onUpdateUserRole={this.handleUpdateUserRole} onUpdateUserRole={this.handleUpdateUserRole}
onUpdateUserSuperAdmin={this.handleUpdateUserSuperAdmin} onUpdateUserSuperAdmin={this.handleUpdateUserSuperAdmin}
onDeleteUser={this.handleDeleteUser} onDeleteUser={this.handleDeleteUser}
notify={notify}
/> />
</div> </div>
</div> </div>