//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 * as Sentry from "sentry-expo"; 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 { // Analytics.setUserId(payload.email);//JF:commenting out the firebase analytics portion Sentry.Native.setUser({ email: payload.email }); 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); Sentry.Native.captureException(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), ]); }