|
1 | 1 | import * as React from "react"; |
2 | | -import { Field, reduxForm } from "redux-form"; |
3 | | -import { aol, email, maxLength, minValue, numberType, renderField, required, tooOld } from "../helpers/FormHelper"; |
| 2 | +import { Field, FormProps, reduxForm } from "redux-form"; |
| 3 | +import { |
| 4 | + aol, email, maxLength, minLength, minValue, |
| 5 | + numberType, renderField, required, tooOld |
| 6 | +} from "../helpers/FormHelper"; |
4 | 7 |
|
5 | | -class Form extends React.Component<any, any> { |
| 8 | +export interface IFormData { |
| 9 | + username: string; |
| 10 | + password: string; |
| 11 | + email: string; |
| 12 | + age: number; |
| 13 | +} |
| 14 | + |
| 15 | +interface IProps { |
| 16 | + onSubmit: (values: IFormData) => Promise<any>; |
| 17 | +} |
| 18 | + |
| 19 | +class Form extends React.Component<FormProps<IFormData, IProps, void> & IProps, void> { |
6 | 20 | public render(): JSX.Element { |
7 | 21 | const {handleSubmit, pristine, reset, submitting} = this.props; |
8 | 22 |
|
9 | 23 | return ( |
10 | 24 | <form onSubmit={handleSubmit}> |
11 | | - <Field |
12 | | - name="username" |
13 | | - type="text" |
14 | | - component={renderField} |
15 | | - label="Username" |
16 | | - validate={[required, maxLength(15)]} |
17 | | - /> |
18 | | - <Field |
19 | | - name="email" |
20 | | - type="email" |
21 | | - component={renderField} |
22 | | - label="Email" |
23 | | - validate={email} |
24 | | - warn={aol} |
25 | | - /> |
26 | | - <Field |
27 | | - name="age" |
28 | | - type="number" |
29 | | - component={renderField} |
30 | | - label="Age" |
31 | | - validate={[required, numberType, minValue(18)]} |
32 | | - warn={tooOld} |
33 | | - /> |
| 25 | + <Field name="username" type="text" component={renderField} label="Username" validate={[required, maxLength(15)]}/> |
| 26 | + <Field name="password" type="password" component={renderField} label="Password" validate={[required, minLength(8)]}/> |
| 27 | + <Field name="email" type="email" component={renderField} label="Email" validate={email} warn={aol}/> |
| 28 | + <Field name="age" type="number" component={renderField} label="Age" validate={[required, numberType, minValue(18)]} warn={tooOld}/> |
34 | 29 | <div> |
35 | 30 | <button type="submit" disabled={submitting}>Submit</button> |
36 | 31 | <button type="button" disabled={pristine || submitting} onClick={reset}> |
|
0 commit comments