Advertisement
Guest User

Untitled

a guest
Jan 13th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.48 KB | None | 0 0
  1. // This doesn't have everything but it gives an idea of how the interfaces and decorator should be used.
  2.  
  3. interface LoginFormData {
  4. username?: string;
  5. password?: string;
  6. }
  7.  
  8. interface LoginFormProps extends FormProps<LoginFormData, AppState> {
  9. dispatch?: Dispatch<AppState>,
  10. }
  11.  
  12. @reduxForm<typeof LoginForm, LoginFormData, LoginFormProps, AppState>({
  13. form: 'login',
  14. onSubmit: LoginForm.handleSubmit,
  15. validate: LoginForm.validate,
  16. })
  17. export class LoginForm extends React.Component<LoginFormProps, {}> {
  18.  
  19. static validate(values: LoginFormData) {
  20. let errors: FormErrors<LoginFormData> = {};
  21.  
  22. if (!values.username) {
  23. errors.username = 'Required';
  24. }
  25.  
  26. if (!values.password) {
  27. errors.password = 'Required';
  28. }
  29.  
  30. return errors;
  31. }
  32.  
  33. static handleSubmit(values: LoginFormData, dispatch) {
  34. return sleep(2000).then(() => {
  35. throw new SubmissionError<LoginFormData>({_error: 'Submission failed'});
  36. });
  37. };
  38.  
  39. render() {
  40. let handleSubmit = this.props.handleSubmit;
  41.  
  42. return (
  43. <form onSubmit={handleSubmit}>
  44. <Field
  45. component='input'
  46. id='username'
  47. name='username'
  48. onKeyDown={this.handleTextFieldSubmit}
  49. />
  50. <Field
  51. component='password'
  52. id='password'
  53. name='password'
  54. onKeyDown={this.handleTextFieldSubmit}
  55. />
  56. <button
  57. onClick={handleSubmit}
  58. disabled={this.props.pristine}
  59. >Login</button>
  60. </form>
  61. );
  62. }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement