diff --git a/admin/src/App.js b/admin/src/App.js
index fcd005e..892fe97 100644
--- a/admin/src/App.js
+++ b/admin/src/App.js
@@ -1,5 +1,5 @@
import React, {Component} from 'react'
-import { Route } from 'react-router-dom'
+import {NavLink, Route} from 'react-router-dom'
import ProtectedRoute from './components/common/protected-route'
import AuthPage from './routes/auth'
import AdminPage from './routes/admin'
@@ -8,6 +8,9 @@ class App extends Component {
render() {
return (
diff --git a/admin/src/components/user/user.js b/admin/src/components/user/user.js
new file mode 100644
index 0000000..7e52f89
--- /dev/null
+++ b/admin/src/components/user/user.js
@@ -0,0 +1,38 @@
+import React, { Component } from 'react'
+import { reduxForm, Field } from 'redux-form'
+import validator from 'email-validator'
+import ErrorField from "../common/error-field";
+
+class UserForm extends Component {
+ static propTypes = {
+
+ }
+
+ render() {
+ return (
+
+
Add user
+
+
+ )
+ }
+}
+
+const validate = ({ first, last, email }) => {
+ const errors = {}
+
+ if (!first || !last) errors.first = errors.last = 'first or last is a required field'
+ if (email && !validator.validate(email)) errors.email = 'invalid email'
+
+ return errors
+}
+
+export default reduxForm({
+ form: 'user',
+ validate
+})(UserForm)
diff --git a/admin/src/config.js b/admin/src/config.js
index b042e54..b8c69f0 100644
--- a/admin/src/config.js
+++ b/admin/src/config.js
@@ -1,14 +1,14 @@
import firebase from 'firebase'
-export const appName = 'advreact-10-05'
+export const appName = 'advreact-8046a'
export const config = {
- apiKey: 'AIzaSyCbMQM0eQUSQ0SuLVAu9ZNPUcm4rdbiB8U',
+ apiKey: 'AIzaSyDDXueGWilb2t294SfYQfFC24o93KhDuc4',
authDomain: `${appName}.firebaseapp.com`,
databaseURL: `https://${appName}.firebaseio.com`,
projectId: appName,
storageBucket: "",
- messagingSenderId: "1094825197832"
+ messagingSenderId: "1082449474915"
}
firebase.initializeApp(config)
\ No newline at end of file
diff --git a/admin/src/ducks/user.js b/admin/src/ducks/user.js
new file mode 100644
index 0000000..fdeefb8
--- /dev/null
+++ b/admin/src/ducks/user.js
@@ -0,0 +1,46 @@
+import {List} from 'immutable'
+import {reset} from 'redux-form'
+
+import {appName} from '../config'
+
+/**
+ * Constants
+ * */
+export const moduleName = 'user'
+const prefix = `${appName}/${moduleName}`
+
+export const USER_ADD_SUCCESS = `${prefix}/USER_ADD_SUCCESS`
+
+/**
+ * Reducer
+ * */
+export const reducerRecord = List()
+
+export default function reducer(state = reducerRecord, action) {
+ const { type, payload } = action
+
+ switch (type) {
+ case USER_ADD_SUCCESS:{
+ const { first, last, email } = payload
+ return state.push({ first, last, email })
+ }
+
+ default:
+ return state
+ }
+}
+
+/**
+ * Selectors
+ * */
+
+/**
+ * Action Creators
+ * */
+
+export function addUser(first, last, email) {
+ return (dispatch) => {
+ dispatch({ type: USER_ADD_SUCCESS, payload: { first, last, email } })
+ dispatch(reset('user'))
+ }
+}
\ No newline at end of file
diff --git a/admin/src/redux/reducer.js b/admin/src/redux/reducer.js
index 8a2942d..a115266 100644
--- a/admin/src/redux/reducer.js
+++ b/admin/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 userReducer, { moduleName as userModule } from '../ducks/user'
export default combineReducers({
router, form,
- [authModule]: authReducer
+ [authModule]: authReducer,
+ [userModule]: userReducer,
})
\ No newline at end of file
diff --git a/admin/src/routes/admin.js b/admin/src/routes/admin.js
index 743e0b9..7dde1cb 100644
--- a/admin/src/routes/admin.js
+++ b/admin/src/routes/admin.js
@@ -1,4 +1,7 @@
import React, { Component } from 'react'
+import {connect} from 'react-redux'
+import UserForm from '../components/user/user'
+import { addUser } from '../ducks/user'
class AdminPage extends Component {
static propTypes = {
@@ -9,9 +12,12 @@ class AdminPage extends Component {
return (
Admin Page
+
)
}
+
+ addUser = ({ first, last, email }) => this.props.addUser(first, last, email)
}
-export default AdminPage
\ No newline at end of file
+export default connect(null, { addUser })(AdminPage)
\ No newline at end of file