Advertisement
Guest User

Untitled

a guest
Jun 6th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.22 KB | None | 0 0
  1. import React, { PropTypes } from 'react';
  2. import { connect } from 'react-redux';
  3.  
  4. import MenuItem from 'material-ui/MenuItem';
  5.  
  6. import TextField from 'material-ui/TextField';
  7. import Checkbox from 'material-ui/Checkbox';
  8. import SelectField from 'material-ui/SelectField';
  9.  
  10. import RaisedButton from 'material-ui/RaisedButton';
  11. import RailsForm from '../RailsForm/RailsForm';
  12.  
  13. import InputWithInfo from '../InputWithInfo/InputWithInfo'
  14.  
  15. import { Field, Form, actions, createFieldClass, controls } from 'react-redux-form';
  16.  
  17. import { textFieldStyle, checkBoxStyle, selectFieldStyle } from '../shared/sharedDarkStyles';
  18.  
  19. import style from './RegistrationForm.scss';
  20.  
  21. import validator from 'validator';
  22.  
  23. const MaterialField = createFieldClass({
  24. 'TextField': controls.text
  25. });
  26.  
  27. const MaterialSelect = createFieldClass({
  28. 'SelectField': (props) => ({
  29. name: props.name,
  30. onChange: (event, index, value) => props.onChange(value),
  31. value: props.modelValue,
  32. errors: props.errors
  33. })
  34. });
  35.  
  36. const MaterialCheckbox = createFieldClass({
  37. 'Checkbox': (props) => ({
  38. name: props.name,
  39. onCheck: props.onChange,
  40. onBlur: props.onBlur,
  41. onFocus: props.onFocus,
  42. onKeyPress: props.onKeyPress,
  43. checked: (props.modelValue ? true : false)
  44. })
  45. });
  46.  
  47. function parseCheckbox(value){
  48. if (value == 'on') {
  49. return true;
  50. } else {
  51. return false;
  52. }
  53. }
  54.  
  55. function changeCheckbox(model, value){
  56. return (dispatch) => {
  57. dispatch(actions.toggle(model, value));
  58. }
  59. }
  60.  
  61. class RegistrationForm extends React.Component {
  62. handleSubmit(user){
  63. const {registrationForm} = this.props;
  64. if (registrationForm.valid) {
  65. $('#new_user').trigger('submit');
  66. }
  67. }
  68. render () {
  69. const authToken = this.props.authenticity_token;
  70. const { registrationForm: { fields } } = this.props;
  71. const isSubmitFailed = this.props.registrationForm.submitFailed;
  72. const errors = {
  73. company: fields.company && isSubmitFailed && !fields.company.valid && (fields.company.errors.required),
  74. vat: fields.vat && isSubmitFailed && !fields.vat.valid && (fields.vat.errors.required),
  75. name: fields.name && isSubmitFailed && !fields.name.valid && (fields.name.errors.required),
  76. surname: fields.surname && isSubmitFailed && !fields.surname.valid && (fields.surname.errors.required),
  77. email: fields.email && isSubmitFailed && !fields.email.valid && (fields.email.errors.required || fields.email.errors.isEmail),
  78. role: fields.role && isSubmitFailed && !fields.role.valid && (fields.role.errors.required),
  79. password: fields.password && isSubmitFailed && !fields.password.valid && (fields.password.errors.required),
  80. password_confirmation: fields.password_confirmation && isSubmitFailed && !fields.password_confirmation.valid && (fields.password_confirmation.errors.required)
  81. }
  82. return(
  83. <div>
  84. <RailsForm
  85. model = 'registrationUser'
  86. className="new_user"
  87. id="new_user"
  88. action="/users"
  89. method="post"
  90. authToken={authToken}>
  91. <div>
  92. <InputWithInfo infoTxt = {I18n.t('activerecord.attributes.user.freelancer_hint')}
  93. tooltipId='user_company'
  94. tootlipPosition = 'bottom'>
  95. <MaterialField
  96. model='registrationUser.company'>
  97.  
  98. <TextField autofocus='autofocus'
  99. hintText={I18n.t('activerecord.attributes.user.company')}
  100. floatingLabelText={I18n.t('activerecord.attributes.user.company')}
  101. errorText = {errors.company}
  102. type='text'
  103. name='user[company]'
  104. id='user_company'
  105. autoComplete='off'
  106. {...textFieldStyle}/>
  107. </MaterialField>
  108. </InputWithInfo>
  109. </div>
  110. <div>
  111. <MaterialField
  112. model='registrationUser.vat'
  113. validators={{
  114. required: (val) => val && val.length
  115. }}
  116. validateOn='blur'
  117. errors={{
  118. required: (val) => !val && 'This field is required'
  119. }}>
  120. <TextField
  121. hintText={I18n.t('activerecord.attributes.user.vat')}
  122. floatingLabelText={I18n.t('activerecord.attributes.user.vat')}
  123. errorText = {errors.vat}
  124. type='text'
  125. name='user[vat]'
  126. id='user_vat'
  127. autoComplete='off'
  128. {...textFieldStyle}/>
  129. </MaterialField>
  130. </div>
  131. <div className={style.title}>
  132. {I18n.t('registration.title')}
  133. </div>
  134. <div>
  135. <MaterialField
  136. model='registrationUser.name'
  137. validators={{
  138. required: (val) => val && val.length
  139. }}
  140. validateOn='blur'
  141. errors={{
  142. required: (val) => !val && 'This field is required'
  143. }}>
  144. <TextField
  145. hintText={I18n.t('activerecord.attributes.user.name')}
  146. floatingLabelText={I18n.t('activerecord.attributes.user.name')}
  147. errorText = {errors.name}
  148. type='text'
  149. name='user[name]'
  150. id='user_name'
  151. autoComplete='off'
  152. {...textFieldStyle}/>
  153. </MaterialField>
  154. </div>
  155. <div>
  156. <MaterialField
  157. model='registrationUser.surname'
  158. validators={{
  159. required: (val) => val && val.length
  160. }}
  161. validateOn='blur'
  162. errors={{
  163. required: (val) => !val && 'This field is required'
  164. }}>
  165. <TextField
  166. hintText={I18n.t('activerecord.attributes.user.surname')}
  167. floatingLabelText={I18n.t('activerecord.attributes.user.surname')}
  168. errorText = {errors.surname}
  169. type='text'
  170. name='user[surname]'
  171. id='user_surname'
  172. autoComplete='off'
  173. {...textFieldStyle}/>
  174. </MaterialField>
  175. </div>
  176. <div>
  177. <MaterialField
  178. model='registrationUser.email'
  179. validators={{
  180. required: (val) => val && val.length,
  181. isEmail: validator.isEmail
  182. }}
  183. validateOn='blur'
  184. errors={{
  185. isEmail: (val) => !validator.isEmail(val) && 'Not a valid email',
  186. required: (val) => !val && 'This field is required'
  187. }}>
  188. <TextField
  189. hintText={I18n.t('activerecord.attributes.user.email')}
  190. floatingLabelText={I18n.t('activerecord.attributes.user.email')}
  191. errorText = {errors.email}
  192. type='email'
  193. name='user[email]'
  194. id='user_email'
  195. autoComplete='off'
  196. {...textFieldStyle}/>
  197. </MaterialField>
  198. </div>
  199. <div>
  200. <MaterialSelect
  201. model='registrationUser.role'
  202. validators={{
  203. required: (val) => val && val.length
  204. }}
  205. validateOn='blur'
  206. errors={{
  207. required: (val) => !val && 'This field is required'
  208. }}>
  209. <SelectField
  210. floatingLabelText={I18n.t('activerecord.attributes.user.role')}
  211. errorText = {errors.role}
  212. name='user_role'
  213. id='user_role'
  214. fullWidth={true}
  215. {...selectFieldStyle}>
  216. <MenuItem value = { I18n.t('registration.roles.administration')}
  217. primaryText = { I18n.t('registration.roles.administration')} />
  218. <MenuItem value = { I18n.t('registration.roles.it')}
  219. primaryText = { I18n.t('registration.roles.it')} />
  220. <MenuItem value = { I18n.t('registration.roles.warehouse')}
  221. primaryText = { I18n.t('registration.roles.warehouse')} />
  222. <MenuItem value = { I18n.t('registration.roles.presidency')}
  223. primaryText = { I18n.t('registration.roles.presidency')} />
  224. </SelectField>
  225. </MaterialSelect>
  226. </div>
  227. <div>
  228. <MaterialField
  229. model='registrationUser.password'
  230. validators={{
  231. required: (val) => val && val.length
  232. }}
  233. validateOn='blur'
  234. errors={{
  235. required: (val) => !val && 'This field is required'
  236. }}>
  237. <TextField
  238. hintText={I18n.t('activerecord.attributes.user.password')}
  239. floatingLabelText={I18n.t('activerecord.attributes.user.password')}
  240. errorText = {errors.password}
  241. type='password'
  242. name='user[password]'
  243. id='user_password'
  244. {...textFieldStyle}/>
  245. </MaterialField>
  246. </div>
  247. <div>
  248. <MaterialField
  249. model='registrationUser.password_confirmation'
  250. validators={{
  251. required: (val) => val && val.length
  252. }}
  253. validateOn='blur'
  254. errors={{
  255. required: (val) => !val && 'This field is required'
  256. }}>
  257. <TextField
  258. hintText={I18n.t('activerecord.attributes.user.password_confirmation')}
  259. floatingLabelText={I18n.t('activerecord.attributes.user.password_confirmation')}
  260. errorText = {errors.password_confirmation}
  261. type='password'
  262. name='user[password_confirmation]'
  263. id='user_password_confirmation'
  264. {...textFieldStyle}/>
  265. </MaterialField>
  266. </div>
  267. <div>
  268. <MaterialCheckbox
  269. model='registrationUser.tos'
  270. parser = {parseCheckbox}
  271. changeAction= { changeCheckbox }>
  272. <Checkbox
  273. id='user_tos'
  274. name='user_tos'
  275. labelPosition="left"
  276. label={I18n.t('activerecord.attributes.user.tos')}
  277. style={{
  278. fontSize: "0.75em"
  279. }}
  280. {...checkBoxStyle}/>
  281. </MaterialCheckbox>
  282. </div>
  283. <div>
  284. <MaterialCheckbox
  285. model='registrationUser.privacy'
  286. parser = {parseCheckbox}
  287. changeAction= { changeCheckbox }>
  288. <Checkbox
  289. id='user_privacy'
  290. name='user_privacy'
  291. labelPosition="left"
  292. label={I18n.t('activerecord.attributes.user.privacy')}
  293. style={{
  294. fontSize: "0.75em"
  295. }}
  296. {...checkBoxStyle}/>
  297. </MaterialCheckbox>
  298. </div>
  299. <div>
  300. <RaisedButton label={I18n.t('devise.registrations.new.sign_up')}
  301. primary={true}
  302. type='submit'/>
  303. </div>
  304. </RailsForm>
  305. </div>
  306. )
  307. }
  308. }
  309.  
  310. function mapStateToProps(state) {
  311. return {
  312. registrationUser: state.registrationUser,
  313. registrationForm: state.registrationForm,
  314. authToken: state.authToken
  315. };
  316. }
  317.  
  318. export default connect(mapStateToProps)(RegistrationForm);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement