diff --git a/src/components/Root.js b/src/components/Root.js index b42cf78..a743463 100644 --- a/src/components/Root.js +++ b/src/components/Root.js @@ -15,12 +15,15 @@ class Root extends Component { render() { const {signOut, signedIn} = this.props - const btn = signedIn - ? - : sign in + const controls = signedIn + ? (
+ People + +
) + : Sign in return (
- {btn} + {controls} diff --git a/src/components/routes/AuthPage.js b/src/components/routes/AuthPage.js index cc9a55f..cbc0d42 100644 --- a/src/components/routes/AuthPage.js +++ b/src/components/routes/AuthPage.js @@ -3,7 +3,7 @@ import SignInForm from '../auth/SignInForm' import SignUpForm from '../auth/SignUpForm' import {Route, NavLink} from 'react-router-dom' import {connect} from 'react-redux' -import {signUp, moduleName} from '../../ducks/auth' +import {signIn, signUp, moduleName} from '../../ducks/auth' import Loader from '../common/Loader' class AuthPage extends Component { @@ -25,10 +25,10 @@ class AuthPage extends Component { ) } - handleSignIn = (values) => console.log('---', values) + handleSignIn = ({email, password}) => this.props.signIn(email, password) handleSignUp = ({email, password}) => this.props.signUp(email, password) } export default connect(state => ({ loading: state[moduleName].loading -}), {signUp})(AuthPage) \ No newline at end of file +}), {signUp, signIn})(AuthPage) \ No newline at end of file diff --git a/src/ducks/auth.js b/src/ducks/auth.js index 6bae0d9..de5fdff 100644 --- a/src/ducks/auth.js +++ b/src/ducks/auth.js @@ -1,8 +1,7 @@ import firebase from 'firebase' import {appName} from '../config' import {Record} from 'immutable' -//import store from '../redux' -import {all, cps, call, put, take, takeEvery} from 'redux-saga/effects' +import {all, call, put, take, takeEvery} from 'redux-saga/effects' import {push} from 'react-router-redux' const ReducerRecord = Record({ @@ -15,7 +14,9 @@ export const moduleName = 'auth' export const SIGN_UP_REQUEST = `${appName}/${moduleName}/SIGN_UP_REQUEST` export const SIGN_UP_SUCCESS = `${appName}/${moduleName}/SIGN_UP_SUCCESS` export const SIGN_UP_ERROR = `${appName}/${moduleName}/SIGN_UP_ERROR` +export const SIGN_IN_REQUEST = `${appName}/${moduleName}/SIGN_IN_REQUEST` export const SIGN_IN_SUCCESS = `${appName}/${moduleName}/SIGN_IN_SUCCESS` +export const SIGN_IN_ERROR = `${appName}/${moduleName}/SIGN_IN_ERROR` export const SIGN_OUT_REQUEST = `${appName}/${moduleName}/SIGN_OUT_REQUEST` export const SIGN_OUT_SUCCESS = `${appName}/${moduleName}/SIGN_OUT_SUCCESS` @@ -24,15 +25,18 @@ export default function reducer(state = new ReducerRecord(), action) { const {type, payload, error} = action switch (type) { + case SIGN_IN_REQUEST: case SIGN_UP_REQUEST: return state.set('loading', true) case SIGN_IN_SUCCESS: + case SIGN_UP_SUCCESS: return state .set('loading', false) .set('user', payload.user) .set('error', null) + case SIGN_IN_ERROR: case SIGN_UP_ERROR: return state .set('loading', false) @@ -46,6 +50,13 @@ export default function reducer(state = new ReducerRecord(), action) { } } +export function signIn(email, password) { + return { + type: SIGN_IN_REQUEST, + payload: {email, password} + } +} + export function signUp(email, password) { return { type: SIGN_UP_REQUEST, @@ -59,6 +70,31 @@ export function signOut() { } } +export const signInSaga = function * () { + const auth = firebase.auth() + + while (true) { + const action = yield take(SIGN_IN_REQUEST) + + try { + const user = yield call( + [auth, auth.signInWithEmailAndPassword], + action.payload.email, action.payload.password + ) + yield put({ + type: SIGN_IN_SUCCESS, + payload: {user} + }) + yield put(push('/people')) + } catch (error) { + yield put({ + type: SIGN_IN_ERROR, + error + }) + } + } +} + export const signUpSaga = function * () { const auth = firebase.auth() @@ -74,6 +110,7 @@ export const signUpSaga = function * () { type: SIGN_UP_SUCCESS, payload: {user} }) + yield put(push('/people')) } catch (error) { yield put({ type: SIGN_UP_ERROR, @@ -103,17 +140,20 @@ export function signUp(email, password) { } */ -export const watchStatusChange = function * () { - const auth = firebase.auth() - try { - yield cps([auth, auth.onAuthStateChanged]) - } catch (user) { - yield put({ - type: SIGN_IN_SUCCESS, - payload: {user} - }) - } -} +// export const watchStatusChange = function * () { +// const auth = firebase.auth() +// try { +// yield cps([auth, auth.onAuthStateChanged]) +// } catch (user) { +// yield put({ +// type: SIGN_IN_SUCCESS, +// payload: {user} +// }) +// } +// } + + +// NOTE: We don't need to listen to auth changes if we already dispatching user when he is signing in/up /* firebase.auth().onAuthStateChanged(user => { @@ -142,8 +182,9 @@ export const signOutSaga = function * () { export const saga = function * () { yield all([ + signInSaga(), signUpSaga(), - watchStatusChange(), + // watchStatusChange(), takeEvery(SIGN_OUT_REQUEST, signOutSaga) ]) } \ No newline at end of file diff --git a/src/ducks/people.js b/src/ducks/people.js index 8e80b5d..5537780 100644 --- a/src/ducks/people.js +++ b/src/ducks/people.js @@ -1,6 +1,7 @@ import {appName} from '../config' import {Record, List} from 'immutable' import {put, call, takeEvery} from 'redux-saga/effects' +import {reset} from 'redux-form' import {generateId} from './utils' const ReducerState = Record({ @@ -46,6 +47,7 @@ export const addPersonSaga = function * (action) { type: ADD_PERSON, payload: {...action.payload, id} }) + yield put(reset('person')) } /* diff --git a/src/redux/index.js b/src/redux/index.js index d0ca1dc..7c49715 100644 --- a/src/redux/index.js +++ b/src/redux/index.js @@ -1,4 +1,4 @@ -import {createStore, applyMiddleware} from 'redux' +import {createStore, applyMiddleware, compose} from 'redux' import reducer from './reducer' import logger from 'redux-logger' import {routerMiddleware} from 'react-router-redux' @@ -9,7 +9,11 @@ import rootSaga from './saga' const sagaMiddleware = createSagaMiddleware() const enhancer = applyMiddleware(sagaMiddleware, routerMiddleware(history), logger) -const store = createStore(reducer, enhancer) +const store = createStore(reducer, compose( + enhancer, + window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() + ) +) window.store = store sagaMiddleware.run(rootSaga)