Skip to content
This repository was archived by the owner on Dec 9, 2021. It is now read-only.

Commit c8c5c6e

Browse files
committedAug 23, 2017
Add CustomField
1 parent 89ba699 commit c8c5c6e

File tree

3 files changed

+42
-21
lines changed

3 files changed

+42
-21
lines changed
 

Diff for: ‎src/RouterWrapper.tsx

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {BrowserRouter, Route, Switch} from 'react-router-dom';
44
import {StaticRouter} from 'react-router';
55
import About from './views/About';
66
import Home from './views/Home';
7+
import Contact from './views/Contact';
78
import Footer from './views/landmarks/Footer';
89
import Header from './views/landmarks/Header';
910
import IStore from './interfaces/store/IStore';
@@ -37,6 +38,10 @@ const RouterWrapper: React.StatelessComponent<IProviderWrapperProps> = (props: I
3738
path="/about"
3839
component={About}
3940
/>
41+
<Route
42+
path="/contact"
43+
component={Contact}
44+
/>
4045
</Switch>
4146
<Footer />
4247
</div>

Diff for: ‎src/views/Contact.tsx

+25-21
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
import * as React from 'react';
22
import {connect} from 'react-redux';
33
import MetaAction from '../store/meta/MetaAction';
4-
import {reduxForm, Field, FormProps, FormErrors} from 'redux-form';
5-
import IStore from '../interfaces/IStore';
4+
import {reduxForm, Field, FormProps, FormErrors, InjectedFormProps} from 'redux-form';
65
import {Dispatch} from 'redux';
7-
import IContactForm from '../interfaces/IContactForm';
8-
import IMetaReducerState from '../interfaces/reducers/IMetaReducerState';
9-
import IAction from '../interfaces/IAction';
6+
import IMetaReducerState from '../interfaces/store/reducers/IMetaReducerState';
7+
import IStore from '../interfaces/store/IStore';
8+
import IContactForm from '../interfaces/views/IContactForm';
9+
import CustomField from './CustomField';
1010

11-
const mapStateToProps = (state: IStore) => ({});
11+
interface IStateToProps extends InjectedFormProps<IContactForm> {}
12+
13+
interface IDispatchToProps {
14+
setMeta: (meta: IMetaReducerState) => void;
15+
}
16+
17+
const mapStateToProps = (state: IStore): IStateToProps => ({
1218

13-
const mapDispatchToProps = (dispatch: Dispatch<any>) => ({
14-
setMeta: (meta: IMetaReducerState): IAction<IMetaReducerState> => dispatch(MetaAction.setMeta(meta)),
1519
});
1620

17-
interface IContactProps extends FormProps {
18-
setMeta: (meta: IMetaReducerState) => IAction<IMetaReducerState>;
19-
}
21+
const mapDispatchToProps = (dispatch: Dispatch<any>): IDispatchToProps => ({
22+
setMeta: (meta: IMetaReducerState) => dispatch(MetaAction.setMeta(meta)),
23+
});
2024

21-
class Contact extends React.Component<IContactProps, {}> {
25+
class Contact extends React.Component<IStateToProps & IDispatchToProps, {}> {
2226

2327
private _handleSubmitHandler: Function = (formData: IContactForm) => this._onFormSubmit(formData);
2428

@@ -37,7 +41,7 @@ class Contact extends React.Component<IContactProps, {}> {
3741
</div>
3842
<form onSubmit={handleSubmit(this._handleSubmitHandler)}>
3943
<div className="form-group">
40-
<Field
44+
<CustomField
4145
component={this._renderInputField}
4246
label="Name"
4347
name="name"
@@ -46,7 +50,7 @@ class Contact extends React.Component<IContactProps, {}> {
4650
/>
4751
</div>
4852
<div className="form-group">
49-
<Field
53+
<CustomField
5054
component={this._renderInputField}
5155
label="Email"
5256
name="email"
@@ -61,14 +65,14 @@ class Contact extends React.Component<IContactProps, {}> {
6165
</small>
6266
</div>
6367
<div className="form-group">
64-
<Field
68+
<CustomField
6569
label={'Example select'}
6670
name="exampleSelect1"
6771
component={this._renderSelect}
6872
/>
6973
</div>
7074
<div className="form-group">
71-
<Field
75+
<CustomField
7276
component={this._renderTextArea}
7377
label="Message"
7478
name="message"
@@ -78,20 +82,20 @@ class Contact extends React.Component<IContactProps, {}> {
7882
<fieldset className="form-group">
7983
<legend>{'Code Quality'}</legend>
8084

81-
<Field
85+
<CustomField
8286
component={this._renderRadio}
8387
label="This code is awesome!"
8488
name="codeQualityRadio"
8589
option="1"
8690
checked={true}
8791
/>
88-
<Field
92+
<CustomField
8993
component={this._renderRadio}
9094
label="This code is ok."
9195
name="codeQualityRadio"
9296
option="2"
9397
/>
94-
<Field
98+
<CustomField
9599
component={this._renderRadio}
96100
label="This code is bad."
97101
name="codeQualityRadio"
@@ -100,7 +104,7 @@ class Contact extends React.Component<IContactProps, {}> {
100104
/>
101105
</fieldset>
102106
<div className="form-check">
103-
<Field
107+
<CustomField
104108
component={this._renderCheckbox}
105109
label="Did you star my repo?"
106110
name="starred"
@@ -250,4 +254,4 @@ export default reduxForm({
250254

251255
return errors;
252256
},
253-
})(connect(mapStateToProps, mapDispatchToProps)(Contact));
257+
})(connect<IStateToProps, IDispatchToProps, {}>(mapStateToProps, mapDispatchToProps)(Contact));

Diff for: ‎src/views/CustomField.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import {Field} from 'redux-form';
2+
3+
const CustomField = Field as new () => Field<{
4+
label?: string;
5+
placeholder?: string;
6+
type?: string;
7+
option?: string;
8+
checked?: boolean;
9+
disabled?: boolean;
10+
}>;
11+
12+
export default CustomField;

0 commit comments

Comments
 (0)