Advertisement
Guest User

Untitled

a guest
Jul 1st, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.31 KB | None | 0 0
  1. import React, {PropTypes} from 'react';
  2. import {connect} from 'react-redux';
  3. import {bindActionCreators} from 'redux';
  4. import * as actionCreators from '../../actions/actionCreators';
  5. import countries from '../../data/countries';
  6. import users from '../../data/users';
  7. import {browserHistory} from 'react-router';
  8.  
  9. import RegistrationFormStepOne from './registrationFormStepOne';
  10. import RegistrationFormStepTwo from './registrationFormStepTwo';
  11. import RegistrationFormStepThree from './registrationFormStepThree';
  12. import RegistrationFormStepFour from './registrationFormStepFour';
  13. import RegistrationFinished from './registrationFinished';
  14.  
  15. class RegistrationPage extends React.Component {
  16. constructor(props) {
  17. super(props);
  18.  
  19. this.state = {
  20. user: {
  21. "companyName": "",
  22. "btwNumber": "",
  23. "address": "",
  24. "address1": "",
  25. "address2": "",
  26. "country": "",
  27. "zipcode": "",
  28. "place": "",
  29.  
  30. "firstName": "",
  31. "lastName": "",
  32. "phone": "",
  33. "mobilePhone": "",
  34. "email": "",
  35. "userName": "",
  36. "password": "",
  37.  
  38. 'idCardFile': false,
  39. 'statutenFile': false,
  40. 'blankLetterheadFile': false,
  41. 'companyPhotoFile': false,
  42.  
  43. 'terms': true,
  44. "emailNotifications": true,
  45. "smsNotifications": true
  46. },
  47. fileNames: {},
  48. selectedFile: {},
  49. icons: {
  50. idCard: 'upload',
  51. statuten: 'upload',
  52. blankLetterhead: 'upload',
  53. companyPhoto: 'upload'
  54. },
  55. step: 1,
  56. errors: {}
  57. };
  58.  
  59. this.setUser = this.setUser.bind(this);
  60. this.onButtonClick = this.onButtonClick.bind(this);
  61. this.onButtonPreviousClick = this.onButtonPreviousClick.bind(this);
  62. this.changeCheckboxState = this.changeCheckboxState.bind(this);
  63. this.onFileChange = this.onFileChange.bind(this);
  64. }
  65.  
  66. componentWillMount(){
  67. console.log(this.props.params.id);
  68. }
  69.  
  70.  
  71. getCountries(){
  72. return countries;
  73. }
  74.  
  75.  
  76. setUser(event) {
  77. const field = event.target.name;
  78. const value = event.target.value;
  79.  
  80. let user = this.state.user;
  81. user[field] = value;
  82. this.setState({user: user});
  83. }
  84.  
  85. validation(step){
  86. const user = this.state.user;
  87. const languageReg = this.props.currentLanguage.default.registrationPage;
  88. let formIsValid = true;
  89. let errors = {};
  90. switch (step){
  91. case "one":
  92. if(!user.companyName){
  93. formIsValid = false;
  94. errors.companyName = languageReg.companyNameEmpty;
  95. }
  96.  
  97. if(!user.btwNumber){
  98. formIsValid = false;
  99. errors.btwNumber = languageReg.btwNumberEmpty;
  100. }
  101.  
  102. if(!user.address){
  103. formIsValid = false;
  104. errors.address = languageReg.addressEmpty;
  105. }
  106.  
  107. if(!user.country){
  108. formIsValid = false;
  109. errors.country = languageReg.countryEmpty;
  110. }
  111.  
  112. if(!user.zipcode){
  113. formIsValid = false;
  114. errors.zipcode = languageReg.zipcodeEmpty;
  115. }
  116.  
  117. if(!user.place){
  118. formIsValid = false;
  119. errors.place = languageReg.placeEmpty;
  120. }
  121. break;
  122. case "two":
  123. if(!user.firstName){
  124. formIsValid = false;
  125. errors.firstName = languageReg.firstNameEmpty;
  126. }
  127.  
  128. if(!user.lastName){
  129. formIsValid = false;
  130. errors.lastName = languageReg.lastNameEmpty;
  131. }
  132.  
  133. if(!user.phone){
  134. formIsValid = false;
  135. errors.phone = languageReg.phoneEmpty;
  136. }
  137.  
  138. if(!user.mobilePhone){
  139. formIsValid = false;
  140. errors.mobilePhone = languageReg.mobilePhoneEmpty;
  141. }
  142.  
  143. if(!user.email){
  144. formIsValid = false;
  145. errors.email = languageReg.emailEmpty;
  146. }
  147.  
  148. const emailExists = users.filter(function ( obj ) {
  149. return obj.email == user.email;
  150. })[0];
  151.  
  152. if(emailExists){
  153. formIsValid = false;
  154. errors.email = "This emailddress already exists.";
  155. }
  156.  
  157. if(!user.userName){
  158. formIsValid = false;
  159. errors.userName = languageReg.userNameEmpty;
  160. }
  161.  
  162. if(!user.password){
  163. formIsValid = false;
  164. errors.password = languageReg.passwordEmpty;
  165. }
  166.  
  167. if(!user.confirmPassword){
  168. formIsValid = false;
  169. errors.confirmPassword = languageReg.passwordEmpty;
  170. }
  171.  
  172. if(user.password !== user.confirmPassword){
  173. formIsValid = false;
  174. errors.password = languageReg.passwordsNotSame;
  175. errors.confirmPassword = languageReg.passwordsNotSame;
  176. }
  177. break;
  178. default:
  179. if(!user.terms && typeof user.terms != "undefined"){
  180. formIsValid = false;
  181. errors.terms = languageReg.termsError;
  182. }
  183. }
  184.  
  185. this.setState({errors: errors});
  186. return formIsValid;
  187. }
  188.  
  189. onFileChange(name, event) {
  190. event.preventDefault();
  191. let file = event.target.value;
  192.  
  193. let filename = file.split('\\').pop(); //We get only the name of the file
  194. let filenameWithoutExtension = filename.replace(/\.[^/.]+$/, ""); //We get the name of the file without extension
  195.  
  196. let user = this.state.user;
  197. let fileNames = this.state.fileNames;
  198. let selectedFile = this.state.selectedFile;
  199. let icons = this.state.icons;
  200.  
  201. switch (name.btnName) {
  202. case "idCard" :
  203. fileNames[name.btnName] = filenameWithoutExtension;
  204. //Check if file is selected
  205. if(file){
  206. selectedFile[name.btnName] = "fileSelected";
  207. user["idCardFile"] = true;
  208. icons["idCard"] = "check";
  209. }else{
  210. selectedFile[name.btnName] = "";
  211. user["idCardFile"] = false;
  212. icons["idCard"] = "upload";
  213. }
  214. break;
  215. case "statuten" :
  216. fileNames[name.btnName] = filenameWithoutExtension;
  217.  
  218. //Check if file is selected
  219. if(file){
  220. selectedFile[name.btnName] = "fileSelected";
  221. user["statutenFile"] = true;
  222. icons["statuten"] = "check";
  223. }else{
  224. selectedFile[name.btnName] = "";
  225. user["statutenFile"] = false;
  226. icons["statuten"] = "upload";
  227. }
  228. break;
  229. case "blankLetterhead" :
  230. fileNames[name.btnName] = filenameWithoutExtension;
  231.  
  232. //Check if file is selected
  233. if(file){
  234. selectedFile[name.btnName] = "fileSelected";
  235. user["blankLetterheadFile"] = true;
  236. icons["blankLetterhead"] = "check";
  237. }else{
  238. selectedFile[name.btnName] = "";
  239. user["blankLetterheadFile"] = false;
  240. icons["blankLetterhead"] = "upload";
  241. }
  242. break;
  243. default:
  244. fileNames[name.btnName] = filenameWithoutExtension;
  245. //Check if file is selected
  246. if(file){
  247. selectedFile[name.btnName] = "fileSelected";
  248. user["companyPhotoFile"] = true;
  249. icons["companyPhoto"] = "check";
  250. }else{
  251. selectedFile[name.btnName] = "";
  252. user["companyPhotoFile"] = false;
  253. icons["companyPhoto"] = "upload";
  254. }
  255. }
  256.  
  257. this.setState({user: user, fileNames: fileNames, selectedFile: selectedFile, icons: icons});
  258. }
  259.  
  260. changeCheckboxState(event) {
  261. let chcName = event.target.name;
  262. let user = this.state.user;
  263.  
  264. switch (chcName) {
  265. case "chcEmailNotificationsYes":
  266. user["emailNotifications"] = event.target.checked;
  267. break;
  268. case "chcEmailNotificationsNo":
  269. user["emailNotifications"] = !event.target.checked;
  270. break;
  271. case "chcTerms":
  272. if(typeof this.state.user.terms === "undefined"){
  273. user["terms"] = false;
  274. }else{
  275. user["terms"] = !this.state.user.terms;
  276. }
  277.  
  278. break;
  279. case "chcSmsYes":
  280. user["smsNotifications"] = event.target.checked;
  281. break;
  282. default:
  283. user["smsNotifications"] = !event.target.checked;
  284. }
  285. this.setState({user: user});
  286. this.props.actions.userRegistration(this.state.user);
  287. }
  288.  
  289. onButtonClick(name, event) {
  290. event.preventDefault();
  291.  
  292. switch (name) {
  293. case "stepFourConfirmation":
  294. if(this.validation("four")) {
  295. this.props.actions.userRegistrationThunk(this.state.user);
  296. this.setState({step: 5, user: {}});
  297. }
  298. break;
  299. case "stepTwoNext":
  300. if(this.validation("two")) {
  301. this.setState({step: 3});
  302. this.context.router.push("stepThree");
  303. }
  304. break;
  305. case "stepThreeFinish":
  306. this.setState({step: 4});
  307. break;
  308. default:
  309. if(this.validation("one")) {
  310. this.setState({step: 2});
  311. this.context.router.push('stepTwo');
  312. }
  313. }
  314. }
  315.  
  316.  
  317. onButtonPreviousClick(){
  318. this.setState({step: this.state.step - 1});
  319. }
  320.  
  321. render() {
  322. const languageReg = this.props.currentLanguage.default.registrationPage;
  323. let formStep = '';
  324. let step = this.state.step;
  325. switch (step) {
  326. case 1:
  327. formStep = (<RegistrationFormStepOne user={this.state.user}
  328. onChange={this.setUser}
  329. onButtonClick={this.onButtonClick}
  330. countries={this.getCountries(countries)}
  331. errors={this.state.errors}
  332. step={step}/>);
  333. break;
  334. case 2:
  335. formStep = (<RegistrationFormStepTwo user={this.state.user}
  336. onChange={this.setUser}
  337. onButtonClick={this.onButtonClick}
  338. onButtonPreviousClick={this.onButtonPreviousClick}
  339. errors={this.state.errors}/>);
  340. break;
  341. case 3:
  342. formStep = (<RegistrationFormStepThree user={this.state.user}
  343. onFileChange={this.onFileChange}
  344. onButtonClick={this.onButtonClick}
  345. onButtonPreviousClick={this.onButtonPreviousClick}
  346. errors={this.state.errors}
  347. fileNames={this.state.fileNames}
  348. icons={this.state.icons}
  349. fileChosen={this.state.selectedFile}/>);
  350. break;
  351. case 4 :
  352. formStep = (<RegistrationFormStepFour user={this.state.user}
  353. onChange={this.setUser}
  354. onChangeCheckboxState={this.changeCheckboxState}
  355. onButtonClick={this.onButtonClick}
  356. onButtonPreviousClick={this.onButtonPreviousClick}
  357. errors={this.state.errors}/>);
  358. break;
  359.  
  360. default:
  361. formStep = (<RegistrationFinished user={this.state.user} />);
  362. }
  363.  
  364. return (
  365. <div className="sidebar-menu-container" id="sidebar-menu-container">
  366.  
  367. <div className="sidebar-menu-push">
  368.  
  369. <div className="sidebar-menu-overlay"></div>
  370.  
  371. <div className="sidebar-menu-inner">
  372. <div className="contact-form">
  373. <div className="container">
  374. <div className="row">
  375. <div className="col-md-10 col-md-offset-1 col-md-offset-right-1">
  376. {React.cloneElement(formStep, {currentLanguage: languageReg})}
  377. </div>
  378. </div>
  379. </div>
  380. </div>
  381. </div>
  382. </div>
  383. </div>
  384. );
  385. }
  386. }
  387.  
  388. RegistrationPage.contextTypes = {
  389. router: PropTypes.object
  390. };
  391.  
  392. function mapStateToProps(state, ownProps) {
  393. return {
  394. userData: state.userRegistrationReducer
  395. };
  396. }
  397.  
  398. function mapDispatchToProps(dispatch) {
  399. return {
  400. actions: bindActionCreators(actionCreators, dispatch)
  401. };
  402. }
  403.  
  404. export default connect(mapStateToProps, mapDispatchToProps)(RegistrationPage);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement