1 | import React, {Component, PropTypes} from 'react'
|
2 | import Studio from 'jsreport-studio'
|
3 |
|
4 | export default class NewUserModal extends Component {
|
5 | static propTypes = {
|
6 | close: PropTypes.func.isRequired
|
7 | }
|
8 |
|
9 | constructor () {
|
10 | super()
|
11 | this.state = {}
|
12 | }
|
13 |
|
14 | async createUser () {
|
15 | if (!this.refs.username.value) {
|
16 | return this.setState({ userNameError: true })
|
17 | }
|
18 |
|
19 | if (!this.refs.password1.value) {
|
20 | return this.setState({ passwordError: true })
|
21 | }
|
22 |
|
23 | try {
|
24 | let response = await Studio.api.post('/odata/users', {
|
25 | data: {
|
26 | username: this.refs.username.value,
|
27 | password: this.refs.password1.value
|
28 | }
|
29 | })
|
30 | response.__entitySet = 'users'
|
31 |
|
32 | Studio.addExistingEntity(response)
|
33 | this.props.close()
|
34 | } catch (e) {
|
35 | this.setState({ apiError: e.message })
|
36 | }
|
37 | }
|
38 |
|
39 | validatePassword () {
|
40 | this.setState(
|
41 | {
|
42 | passwordError: this.refs.password2.value && this.refs.password2.value !== this.refs.password1.value,
|
43 | apiError: null
|
44 | })
|
45 | }
|
46 |
|
47 | validateUsername () {
|
48 | this.setState(
|
49 | {
|
50 | userNameError: this.refs.username.value === '',
|
51 | apiError: null
|
52 | })
|
53 | }
|
54 |
|
55 | render () {
|
56 | return <div>
|
57 | <div className='form-group'>
|
58 | <label>Username</label>
|
59 | <input type='text' ref='username' onChange={() => this.validateUsername()} />
|
60 | </div>
|
61 | <div className='form-group'>
|
62 | <label>Password</label>
|
63 | <input type='password' ref='password1' />
|
64 | </div>
|
65 | <div className='form-group'>
|
66 | <label>Password verification</label>
|
67 | <input type='password' ref='password2' onChange={() => this.validatePassword()} />
|
68 | </div>
|
69 | <div className='form-group'>
|
70 | <span style={{color: 'red', display: this.state.passwordError ? 'block' : 'none'}}>password doesn't match</span>
|
71 | <span
|
72 | style={{color: 'red', display: this.state.userNameError ? 'block' : 'none'}}>username must be filled</span>
|
73 | <span style={{color: 'red', display: this.state.apiError ? 'block' : 'none'}}>{this.state.apiError}</span>
|
74 | </div>
|
75 | <div className='button-bar'>
|
76 | <button className='button confirmation' onClick={() => this.createUser()}>ok</button>
|
77 | </div>
|
78 | </div>
|
79 | }
|
80 | }
|