88 lines
2.1 KiB
JavaScript
88 lines
2.1 KiB
JavaScript
import { all, call, put, takeLatest } from "redux-saga/effects";
|
|
import { auth, getCurrentUser } from "../../firebase/firebase.utils";
|
|
import {
|
|
signInFailure,
|
|
signInSuccess,
|
|
signOutFailure,
|
|
signOutSuccess,
|
|
unauthorizedUser
|
|
} from "./user.actions";
|
|
import UserActionTypes from "./user.types";
|
|
|
|
// export function* getSnapshotFromUserAuth(userAuth) {
|
|
// try {
|
|
// const userRef = yield call(createUserProfileDocument, userAuth);
|
|
// //const userSnapshot = yield userRef.get();
|
|
// } catch (error) {
|
|
// yield put(signInFailure(error));
|
|
// }
|
|
// }
|
|
|
|
export function* signInWithEmail({ payload: { email, password } }) {
|
|
try {
|
|
const { user } = yield auth.signInWithEmailAndPassword(email, password);
|
|
yield put(
|
|
signInSuccess({
|
|
id: user.uid,
|
|
email: user.email,
|
|
displayName: user.displayName,
|
|
authorized: true
|
|
})
|
|
);
|
|
} catch (error) {
|
|
yield put(signInFailure(error));
|
|
}
|
|
}
|
|
//This is the listener fo rthe call, and when it finds it, it triggers somethign else.
|
|
export function* onEmailSignInStart() {
|
|
yield takeLatest(UserActionTypes.EMAIL_SIGN_IN_START, signInWithEmail);
|
|
}
|
|
|
|
export function* isUserAuthenticated() {
|
|
try {
|
|
const user = yield getCurrentUser();
|
|
if (!user) {
|
|
yield put(unauthorizedUser());
|
|
return;
|
|
}
|
|
yield put(
|
|
signInSuccess({
|
|
id: user.uid,
|
|
email: user.email,
|
|
displayName: user.displayName,
|
|
authorized: true
|
|
})
|
|
);
|
|
} catch (error) {
|
|
yield put(signInFailure(error));
|
|
}
|
|
}
|
|
|
|
export function* onCheckUserSession() {
|
|
yield takeLatest(UserActionTypes.CHECK_USER_SESSION, isUserAuthenticated);
|
|
}
|
|
|
|
export function* signOutStart() {
|
|
try {
|
|
yield auth.signOut();
|
|
yield put(signOutSuccess());
|
|
} catch (error) {
|
|
yield put(signOutFailure(error.message));
|
|
}
|
|
}
|
|
|
|
export function* onSignOutStart() {
|
|
yield takeLatest(UserActionTypes.SIGN_OUT_START, signOutStart);
|
|
}
|
|
|
|
export function* userSagas() {
|
|
yield all([
|
|
// call(onGoogleSignInStart),
|
|
call(onEmailSignInStart),
|
|
call(onCheckUserSession),
|
|
call(onSignOutStart)
|
|
// call(onEmailSignUpStart),
|
|
// call(onEmailSignUpSuccess)
|
|
]);
|
|
}
|