diff --git a/README.md b/README.md
index 3bd00c1..9e9af93 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
-##HT1.1 Сделать форму для добавления людей(firstName, lastName, email) с валидацией, по /people роуту
-##HT1.2 добавлять их в редакс-стор
-##HT1.3 Создать собственный проект на firebase и использовать его в своих ДЗ
\ No newline at end of file
+## HT1.1 Сделать форму для добавления людей(firstName, lastName, email) с валидацией, по /people роуту(complete)
+
+## HT1.2 добавлять их в редакс-стор(complete?)
+
+## HT1.3 Создать собственный проект на firebase и использовать его в своих ДЗ (complete)
diff --git a/src/components/People/PeopleForm.js b/src/components/People/PeopleForm.js
new file mode 100644
index 0000000..1bfe298
--- /dev/null
+++ b/src/components/People/PeopleForm.js
@@ -0,0 +1,44 @@
+import React, { Component } from 'react'
+import { reduxForm, Field } from 'redux-form'
+import ErrorField from '../common/ErrorField'
+import emailValidator from 'email-validator'
+
+class PeopleForm extends Component {
+ render() {
+ const { handleSubmit, submitting } = this.props;
+ return (
+
+ );
+ }
+}
+
+const validate = ({first_name, last_name, email}) => {
+ const errors = {}
+
+ if (!email) errors.email = 'email is required'
+ else if (!emailValidator.validate(email)) errors.email = 'invalid email'
+
+ if (!first_name) errors.first_name = 'first_name is required'
+
+ if(!last_name) errors.last_name = 'last_name is required'
+
+ return errors
+}
+
+
+export default reduxForm({
+ form: 'people',
+ validate
+})(PeopleForm);
\ No newline at end of file
diff --git a/src/components/Root.js b/src/components/Root.js
index bbf2596..bcd533c 100644
--- a/src/components/Root.js
+++ b/src/components/Root.js
@@ -3,6 +3,7 @@ import {Route} from 'react-router-dom'
import AdminPage from './routes/AdminPage'
import AuthPage from './routes/AuthPage'
import ProtectedRoute from './common/ProtectedRoute'
+import PeopleForm from './People/PeopleForm'
class Root extends Component {
static propTypes = {
@@ -14,6 +15,7 @@ class Root extends Component {
)
}
diff --git a/src/components/routes/PeoplePage.js b/src/components/routes/PeoplePage.js
new file mode 100644
index 0000000..ed8e070
--- /dev/null
+++ b/src/components/routes/PeoplePage.js
@@ -0,0 +1,13 @@
+import React, { Component } from 'react'
+
+class PeoplePage extends Comment {
+ render () {
+ return (
+
+ People Page
+
+ )
+ }
+}
+
+export default PeoplePage
diff --git a/src/config.js b/src/config.js
index e8d8d78..3d96faa 100644
--- a/src/config.js
+++ b/src/config.js
@@ -1,13 +1,13 @@
import firebase from 'firebase'
-export const appName = "advreact-21-08"
+export const appName = "adv-21-08"
export const firebaseConfig = {
- apiKey: "AIzaSyDjA6CeIHuni5lNm4ML1b-TSxJltsYUO8g",
+ apiKey: "AIzaSyAFf2xnTf-RQAxK0W_QWKbsf8nEW0vJ66Y",
authDomain: `${appName}.firebaseapp.com`,
databaseURL: `https://${appName}.firebaseio.com`,
projectId: appName,
storageBucket: `${appName}.appspot.com`,
- messagingSenderId: "789814589283"
+ messagingSenderId: "497019564518"
}
firebase.initializeApp(firebaseConfig)
\ No newline at end of file
diff --git a/src/ducks/people.js b/src/ducks/people.js
new file mode 100644
index 0000000..d13ca9d
--- /dev/null
+++ b/src/ducks/people.js
@@ -0,0 +1,34 @@
+import firebase from 'firebase'
+import {appName} from '../config'
+import {Record} from 'immutable'
+
+const ReducerRecord = Record({
+ user: null,
+ error: null,
+ loading: false
+})
+
+export const moduleName = 'people'
+export const ADD_USER_REQUEST = `${appName}/${moduleName}/ADD_USER_REQUEST`
+export const ADD_USER_SUCCESS = `${appName}/${moduleName}/ADD_USER_SUCCESS`
+export const ADD_USER_ERROR = `${appName}/${moduleName}/ADD_USER_ERROR`
+
+export default function reducer(state = new ReducerRecord(), action) {
+ const {type, payload, error} = action
+
+ switch(type) {
+ case ADD_USER_REQUEST:
+ return state
+ .set('loading', true)
+
+ case ADD_USER_SUCCESS:
+ return state
+
+ case ADD_USER_ERROR:
+ return state
+ .set('loading', false)
+ .set('error', error)
+ default:
+ return state;
+ }
+}
\ No newline at end of file
diff --git a/src/redux/index.js b/src/redux/index.js
index b45bb34..0860785 100644
--- a/src/redux/index.js
+++ b/src/redux/index.js
@@ -7,7 +7,9 @@ import history from '../history'
const enhancer = applyMiddleware(routerMiddleware(history), thunk, logger)
-const store = createStore(reducer, enhancer)
+const store = createStore(reducer,
+ enhancer,
+ window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())
window.store = store
export default store
diff --git a/src/redux/reducer.js b/src/redux/reducer.js
index 34143fe..918c743 100644
--- a/src/redux/reducer.js
+++ b/src/redux/reducer.js
@@ -2,8 +2,10 @@ import {combineReducers} from 'redux'
import {routerReducer as router} from 'react-router-redux'
import {reducer as form} from 'redux-form'
import authReducer, {moduleName as authModule} from '../ducks/auth'
+import peopleReducer, {moduleName as peopleModule } from '../ducks/people';
export default combineReducers({
router, form,
- [authModule]: authReducer
+ [authModule]: authReducer,
+ [peopleModule]: peopleReducer
})
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 10d3512..6bab36e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -47,14 +47,10 @@ acorn@^5.0.0, acorn@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75"
-address@1.0.2:
+address@1.0.2, address@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/address/-/address-1.0.2.tgz#480081e82b587ba319459fef512f516fe03d58af"
-address@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
-
ajv-keywords@^1.0.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
@@ -338,7 +334,7 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
esutils "^2.0.2"
js-tokens "^3.0.2"
-babel-core@6.25.0:
+babel-core@6.25.0, babel-core@^6.0.0:
version "6.25.0"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729"
dependencies:
@@ -362,7 +358,7 @@ babel-core@6.25.0:
slash "^1.0.0"
source-map "^0.5.0"
-babel-core@^6.0.0, babel-core@^6.26.0:
+babel-core@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
dependencies:
@@ -838,18 +834,12 @@ babel-plugin-transform-react-jsx@6.24.1, babel-plugin-transform-react-jsx@^6.24.
babel-plugin-syntax-jsx "^6.8.0"
babel-runtime "^6.22.0"
-babel-plugin-transform-regenerator@6.24.1:
+babel-plugin-transform-regenerator@6.24.1, babel-plugin-transform-regenerator@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418"
dependencies:
regenerator-transform "0.9.11"
-babel-plugin-transform-regenerator@^6.22.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
- dependencies:
- regenerator-transform "^0.10.0"
-
babel-plugin-transform-runtime@6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee"
@@ -950,14 +940,14 @@ babel-register@^6.24.1, babel-register@^6.26.0:
mkdirp "^0.5.1"
source-map-support "^0.4.15"
-babel-runtime@6.23.0:
+babel-runtime@6.23.0, babel-runtime@^6.22.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.10.0"
-babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+babel-runtime@^6.18.0, babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
dependencies:
@@ -4199,7 +4189,7 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
-minimist@0.0.8:
+minimist@0.0.8, minimist@~0.0.1:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
@@ -4207,10 +4197,6 @@ minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-minimist@~0.0.1:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
-
mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
@@ -5440,14 +5426,6 @@ regenerator-transform@0.9.11:
babel-types "^6.19.0"
private "^0.1.6"
-regenerator-transform@^0.10.0:
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
- dependencies:
- babel-runtime "^6.18.0"
- babel-types "^6.19.0"
- private "^0.1.6"
-
regex-cache@^0.4.2:
version "0.4.3"
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
@@ -6600,14 +6578,10 @@ window-size@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-wordwrap@0.0.2:
+wordwrap@0.0.2, wordwrap@~0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-
wordwrap@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"