170 lines
4.5 KiB
JavaScript
170 lines
4.5 KiB
JavaScript
//import * as Analytics from "expo-firebase-analytics";//JF:commenting out the firebase analytics portion
|
|
import { signInWithEmailAndPassword, signOut } from "firebase/auth";
|
|
import { all, call, put, takeLatest } from "redux-saga/effects";
|
|
import { logImEXEvent } from "../../firebase/firebase.analytics";
|
|
import {
|
|
auth,
|
|
getCurrentUser,
|
|
updateCurrentUser,
|
|
} from "../../firebase/firebase.utils";
|
|
import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries";
|
|
import { client } from "../../graphql/client";
|
|
import {
|
|
sendPasswordResetFailure,
|
|
sendPasswordResetSuccess,
|
|
setBodyshop,
|
|
signInFailure,
|
|
signInSuccess,
|
|
signOutFailure,
|
|
signOutSuccess,
|
|
unauthorizedUser,
|
|
updateUserDetailsSuccess,
|
|
validatePasswordResetFailure,
|
|
validatePasswordResetSuccess,
|
|
} from "./user.actions";
|
|
import UserActionTypes from "./user.types";
|
|
|
|
export function* onEmailSignInStart() {
|
|
yield takeLatest(UserActionTypes.EMAIL_SIGN_IN_START, signInWithEmail);
|
|
}
|
|
export function* signInWithEmail({ payload: { email, password } }) {
|
|
try {
|
|
logImEXEvent("imexmobile_sign_in_attempt", { user: email });
|
|
const { user } = yield signInWithEmailAndPassword(auth, email, password);
|
|
yield put(
|
|
signInSuccess({
|
|
uid: user.uid,
|
|
email: user.email,
|
|
displayName: user.displayName,
|
|
photoURL: user.photoURL,
|
|
authorized: true,
|
|
})
|
|
);
|
|
} catch (error) {
|
|
yield put(signInFailure(error));
|
|
|
|
//logImEXEvent("redux_sign_in_failure", { user: email, error });
|
|
}
|
|
}
|
|
|
|
export function* onCheckUserSession() {
|
|
yield takeLatest(UserActionTypes.CHECK_USER_SESSION, isUserAuthenticated);
|
|
}
|
|
export function* isUserAuthenticated() {
|
|
try {
|
|
//logImEXEvent("redux_auth_check");
|
|
|
|
const user = yield getCurrentUser();
|
|
if (!user) {
|
|
yield put(unauthorizedUser());
|
|
return;
|
|
}
|
|
|
|
yield put(
|
|
signInSuccess({
|
|
uid: user.uid,
|
|
email: user.email,
|
|
displayName: user.displayName,
|
|
photoURL: user.photoURL,
|
|
authorized: true,
|
|
})
|
|
);
|
|
} catch (error) {
|
|
yield put(signInFailure(error));
|
|
}
|
|
}
|
|
export function* onSignOutStart() {
|
|
yield takeLatest(UserActionTypes.SIGN_OUT_START, signOutStart);
|
|
}
|
|
export function* signOutStart() {
|
|
try {
|
|
logImEXEvent("imexmobile_sign_out");
|
|
|
|
yield signOut(auth);
|
|
yield put(signOutSuccess());
|
|
} catch (error) {
|
|
yield put(signOutFailure(error.message));
|
|
}
|
|
}
|
|
|
|
export function* onUpdateUserDetails() {
|
|
yield takeLatest(UserActionTypes.UPDATE_USER_DETAILS, updateUserDetails);
|
|
}
|
|
export function* updateUserDetails(userDetails) {
|
|
try {
|
|
yield updateCurrentUser(userDetails.payload);
|
|
yield put(updateUserDetailsSuccess(userDetails.payload));
|
|
} catch (error) {
|
|
//yield put(signOutFailure(error.message));
|
|
//TODO error handling
|
|
}
|
|
}
|
|
|
|
export function* onSignInSuccess() {
|
|
yield takeLatest(UserActionTypes.SIGN_IN_SUCCESS, signInSuccessSaga);
|
|
}
|
|
|
|
export function* signInSuccessSaga({ payload }) {
|
|
try {
|
|
const shop = yield client.query({ query: QUERY_BODYSHOP });
|
|
logImEXEvent("imexmobile_sign_in_success", payload);
|
|
|
|
yield put(setBodyshop(shop.data.bodyshops[0]));
|
|
// yield put(
|
|
// setBodyshop({
|
|
// ...shop.data.bodyshops[0],
|
|
// uselocalmediaserver: true,
|
|
// localmediaserverhttp: `http://192.168.1.235:8000`,
|
|
// })
|
|
// );
|
|
} catch (error) {
|
|
console.log("UH-OH. Couldn't get shop details.", error);
|
|
|
|
}
|
|
}
|
|
|
|
export function* onSendPasswordResetStart() {
|
|
yield takeLatest(
|
|
UserActionTypes.SEND_PASSWORD_RESET_EMAIL_START,
|
|
sendPasswordResetEmail
|
|
);
|
|
}
|
|
export function* sendPasswordResetEmail({ payload }) {
|
|
try {
|
|
yield auth.sendPasswordResetEmail(payload, {
|
|
url: "https://imex.online/passwordreset",
|
|
});
|
|
yield put(sendPasswordResetSuccess());
|
|
} catch (error) {
|
|
yield put(sendPasswordResetFailure(error.message));
|
|
}
|
|
}
|
|
|
|
export function* onValidatePasswordResetStart() {
|
|
yield takeLatest(
|
|
UserActionTypes.VALIDATE_PASSWORD_RESET_START,
|
|
validatePasswordResetStart
|
|
);
|
|
}
|
|
export function* validatePasswordResetStart({ payload: { password, code } }) {
|
|
try {
|
|
yield auth.confirmPasswordReset(code, password);
|
|
yield put(validatePasswordResetSuccess());
|
|
} catch (error) {
|
|
yield put(validatePasswordResetFailure(error.message));
|
|
}
|
|
}
|
|
|
|
export function* userSagas() {
|
|
yield all([
|
|
call(onEmailSignInStart),
|
|
call(onCheckUserSession),
|
|
call(onSignOutStart),
|
|
call(onUpdateUserDetails),
|
|
|
|
call(onSignInSuccess),
|
|
call(onSendPasswordResetStart),
|
|
call(onValidatePasswordResetStart),
|
|
]);
|
|
}
|