diff --git a/src/components/App.js b/src/components/App.js
index f70a4ed..8192704 100644
--- a/src/components/App.js
+++ b/src/components/App.js
@@ -3,6 +3,8 @@ import {Route} from 'react-router-dom'
import ProtectedRoute from './common/ProtectedRoute'
import AdminPage from './routes/Admin'
import AuthPage from './routes/Auth'
+import PeoplePage from './routes/PeopleContainer'
+
class App extends Component {
static propTypes = {
@@ -14,6 +16,7 @@ class App extends Component {
)
diff --git a/src/components/routes/PeopleContainer.js b/src/components/routes/PeopleContainer.js
new file mode 100644
index 0000000..12ce15a
--- /dev/null
+++ b/src/components/routes/PeopleContainer.js
@@ -0,0 +1,28 @@
+import React, { Component } from 'react'
+import {Route, NavLink} from 'react-router-dom'
+import {connect} from 'react-redux'
+import { parsonAdd } from '../../ducks/people'
+import SignIn from '../auth/SignIn'
+import PeopleForm from './PeopleForm'
+
+class PeoplePage extends Component {
+ static propTypes = {
+
+ };
+
+ render() {
+ return (
+
+
People Container Page
+
+
+ )
+ }
+
+ handlePersonAdd = ({email, firstName, lastName}) => {
+ this.props.parsonAdd({email, firstName, lastName})
+ }
+
+}
+
+export default connect(null, { parsonAdd })(PeoplePage)
\ No newline at end of file
diff --git a/src/components/routes/PeopleForm.js b/src/components/routes/PeopleForm.js
new file mode 100644
index 0000000..4d3fee0
--- /dev/null
+++ b/src/components/routes/PeopleForm.js
@@ -0,0 +1,46 @@
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
+import { reduxForm, Field } from 'redux-form'
+import emailValidator from 'email-validator'
+import ErrorField from '../common/ErrorField'
+
+export class PeopleForm extends Component {
+ static propTypes = {
+
+ }
+
+ render() {
+ return (
+
+ )
+ }
+
+}
+
+
+const validate = ({email, firstName, lastName}) => {
+ const errors = {}
+
+ if(!email) errors.email = 'email is a required field'
+ if(!firstName) errors.firstName = 'provide a first name'
+ if(!lastName) errors.lastName = 'provide a last name'
+
+ if(email && !emailValidator.validate(email)) errors.email = 'invalid email'
+
+ return errors
+}
+
+export default reduxForm({
+ form: "people",
+ validate
+}) (PeopleForm)
diff --git a/src/ducks/people.js b/src/ducks/people.js
new file mode 100644
index 0000000..6aef1f7
--- /dev/null
+++ b/src/ducks/people.js
@@ -0,0 +1,57 @@
+import {appName} from '../config'
+import {Record} from 'immutable'
+import firebase from 'firebase'
+import { createSelector } from 'reselect'
+
+/**
+ * Constants
+ */
+export const moduleName = 'people'
+const prefix = '${appName}/${moduleName}'
+
+export const ADD_PERSON = '${prefix}/ADD_PERSON'
+
+
+/**
+ * Reducer
+ */
+export default function reducer(state = [], action) {
+ const {type, payload} = action
+
+ switch(type) {
+ case ADD_PERSON:
+ const user = {
+ firstName: payload.firstName,
+ lastName: payload.lastName,
+ email: payload.email
+ }
+ return [ ...state, user ];
+
+ default:
+ return state
+ }
+}
+
+/**
+ * Selectors
+ */
+export const stateSelector = state => state[moduleName]
+export const userSelector = createSelector(
+ stateSelector,
+ state => state
+)
+
+ /**
+ * Action Creators
+ */
+ export function parsonAdd(email, firstName, lastName) {
+ return {
+ type: ADD_PERSON,
+ payload: {
+ email,
+ firstName,
+ lastName
+ }
+ }
+ }
+
diff --git a/src/redux/reducer.js b/src/redux/reducer.js
index 34143fe..259a58b 100644
--- a/src/redux/reducer.js
+++ b/src/redux/reducer.js
@@ -1,9 +1,22 @@
import {combineReducers} from 'redux'
import {routerReducer as router} from 'react-router-redux'
-import {reducer as form} from 'redux-form'
+import {reducer as formReducer} from 'redux-form'
import authReducer, {moduleName as authModule} from '../ducks/auth'
+import peopleReducer, {moduleName as peopleModule} from '../ducks/people'
+import {ADD_PERSON} from '../ducks/people'
export default combineReducers({
- router, form,
- [authModule]: authReducer
+ router,
+ form: formReducer.plugin({
+ people: (state, action) => {
+ switch(action.type) {
+ case ADD_PERSON:
+ return undefined;
+ default:
+ return state;
+ }
+ }
+ }),
+ [authModule]: authReducer,
+ [peopleModule]: peopleReducer
})
\ No newline at end of file