Advertisement
Guest User

Untitled

a guest
Mar 16th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.47 KB | None | 0 0
  1. //Shared utils function file
  2. export const renderSelectField = (field) => {
  3. var styles = {};
  4. var containerStyle = getInputStylesContainer();
  5.  
  6. if (field.input.value || field.meta.touched) {
  7. if (!field.meta.error) {
  8. styles = getInputStylesSuccess();
  9. containerStyle = classNames(containerStyle, {'has-success': true});
  10. } else {
  11. styles = getInputStylesError();
  12. containerStyle = classNames(containerStyle, {'has-error': true});
  13. }
  14. }
  15.  
  16. return (<div className={containerStyle}>
  17. {displayInputLabel(styles.idInput, field.label)}
  18. <select className='form-control' name={field.input.name} id={styles.idInput} aria-describedby={styles.ariaDescribedBy}>
  19. {field.options}
  20. </select>
  21. <span className={styles.glyphicon} aria-hidden='true' />
  22. {field.meta.touched && field.meta.error &&
  23. displayErrorMessage(field.meta.error)}
  24. </div>);
  25. };
  26.  
  27. // The container of the component
  28. export class ProfileContainer extends React.Component {
  29. render () {
  30. // TODO: Check user connection (via the store or via a check within the cookie ?
  31. // TODO: Retrieve the proper userId (via mapStateToProps
  32. if (this.props.connected === false) browserHistory.push('/');
  33. return <ProfileForm
  34. user={this.props.user}
  35. fields={this.props.fields}
  36. errorMessage={this.props.errorMessage}
  37. confirmationMessage={this.props.confirmationMessage}
  38. onSubmitProfileUpdate={this.props.onSubmitProfileUpdate} />;
  39. }
  40. }
  41.  
  42. ProfileContainer.propTypes = {
  43. user: React.PropTypes.object,
  44. connected: React.PropTypes.bool,
  45. fields: React.PropTypes.shape({
  46. email: React.PropTypes.string,
  47. firstname: React.PropTypes.string,
  48. lastname: React.PropTypes.string,
  49. ranking: React.PropTypes.string,
  50. telephone: React.PropTypes.string,
  51. city: React.PropTypes.string
  52. }),
  53. errorMessage: React.PropTypes.string,
  54. confirmationMessage: React.PropTypes.string,
  55. onSubmitProfileUpdate: React.PropTypes.func.isRequired
  56. };
  57.  
  58. const mapStateToProps = (state) => {
  59. return {
  60. connected: state.userConnection.connection.connected,
  61. user: state.userConnection.loadProfile.user,
  62. errorMessage: state.profile.error,
  63. confirmationMessage: state.profile.confirmation
  64. };
  65. };
  66.  
  67. const mapDispatchToProps = (dispatch) => {
  68. return {
  69. onSubmitProfileUpdate: (values) => {
  70. const user = {
  71. email: values.email,
  72. telephone: values.telephone,
  73. firstname: values.firstname,
  74. lastname: values.lastname,
  75. city: values.city,
  76. ranking: values.ranking
  77. };
  78. console.log(values);
  79. console.log('RANKING', user.ranking);
  80. dispatch(profileUpdate(user));
  81. }
  82. };
  83. };
  84.  
  85. export default connect(
  86. mapStateToProps,
  87. mapDispatchToProps
  88. )(ProfileContainer);
  89.  
  90. //Component with the form
  91. class ProfileForm extends React.Component {
  92.  
  93. getTennisRankingsOptions (rankings) {
  94. return (
  95. tennisRankings.map(ranking =>
  96. <option value={ranking} key={ranking}>{ranking}</option>)
  97. );
  98. }
  99. render () {
  100. const { handleSubmit } = this.props;
  101. const messageClassname = this.props.errorMessage !== undefined ? stylesShared.errorMessage : this.props.confirmationMessage !== undefined ? stylesShared.confirmationMessage : '';
  102. return (
  103. <div>
  104. <div>
  105. <div>
  106. <form onSubmit={handleSubmit(this.props.onSubmitProfileUpdate)}>
  107. <div>
  108. <center><h4>Votre profil</h4></center>
  109. </div>
  110. <div className={messageClassname}>
  111. {this.props.errorMessage &&
  112. <span>{this.props.errorMessage}</span>
  113. }
  114. {this.props.confirmationMessage &&
  115. <span>{this.props.confirmationMessage}</span>
  116. }
  117. </div>
  118. <div>
  119. <Field name='firstname' type='text' label='Prénom' component={renderBasicField} />
  120. </div>
  121. <div>
  122. <Field name='lastname' type='text' label='Nom' component={renderBasicField} />
  123. </div>
  124. <div>
  125. <Field name='email' type='email' label='Email' component={renderEmailField} />
  126. </div>
  127. <div>
  128. <Field name='telephone' type='text' label='Téléphone' component={renderBasicField} />
  129. </div>
  130. <div>
  131. <Field name='ranking' className='input-row form-group form-control' options={this.getTennisRankingsOptions()} type='select' component={renderSelectField} />
  132. </div>
  133. <div>
  134. <Field name='city' type='text' label='Ville' component={renderBasicField} />
  135. </div>
  136. <div>
  137. <button className='btn btn-info btn-lg center-block' type='submit'>Mettre à jour</button>
  138. </div>
  139. </form>
  140. </div>
  141. </div>
  142. </div>
  143. );
  144. }
  145. }
  146.  
  147. ProfileForm.propTypes = {
  148. user: React.PropTypes.object,
  149. fields: React.PropTypes.shape({
  150. firstname: React.PropTypes.string,
  151. lastname: React.PropTypes.string,
  152. email: React.PropTypes.string,
  153. telephone: React.PropTypes.string,
  154. ranking: React.PropTypes.string,
  155. city: React.PropTypes.string
  156. }),
  157. errorMessage: React.PropTypes.string,
  158. confirmationMessage: React.PropTypes.string,
  159. onSubmitProfileUpdate: React.PropTypes.func.isRequired,
  160. handleSubmit: propTypes.handleSubmit,
  161. initialize: propTypes.initialize
  162. };
  163.  
  164. const validateProfileForm = values => {
  165. const errors = {};
  166.  
  167. if (!values.firstname) errors.firstname = 'Un prénom est requis';
  168. else if (validator.isLength(values.firstname + '', {min: 0, max: 1})) errors.firstname = 'Votre prénom doit faire au moins 2 caractères';
  169.  
  170. if (!values.lastname) errors.lastname = 'Un nom est requis';
  171. else if (validator.isLength(values.lastname + '', {min: 0, max: 1})) errors.lastname = 'Votre nom doit faire au moins 2 caractères';
  172.  
  173. if (!values.email) errors.email = 'Un email est requis';
  174. else if (!validator.isEmail(values.email + '')) {
  175. errors.email = 'Adresse email invalide';
  176. }
  177.  
  178. if (!values.telephone) errors.telephone = 'Un telephone est requis';
  179. else if (!validator.isMobilePhone(values.telephone + '', 'fr-FR')) {
  180. errors.telephone = 'Téléphone invalide';
  181. }
  182.  
  183. if (!values.password) errors.password = 'Un mot de passe est requis';
  184. else if (validator.isLength(values.password + '', {min: 0, max: 4})) errors.password = 'Votre mot de passe doit faire au moins 5 caractères';
  185.  
  186. return errors;
  187. };
  188.  
  189. export default reduxForm({
  190. form: 'profile',
  191. validate: validateProfileForm
  192. })(ProfileForm);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement