UNPKG

2.36 kBJavaScriptView Raw
1import React, {Component, PropTypes} from 'react'
2import Studio from 'jsreport-studio'
3
4export 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}