From 2e6ee2eb5794e712c99068e2e8ec9067b385bcf3 Mon Sep 17 00:00:00 2001 From: Himanshu Kansal Date: Wed, 5 Apr 2023 11:43:57 +0530 Subject: [PATCH] =?UTF-8?q?TP-23737=20|=20Added=20firestore=20unsubscribin?= =?UTF-8?q?g=20+=20logout=20current=20user=20at=20fir=E2=80=A6=20(#205)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * TP-23737 | Added firestore unsubscribing + logout current user at firestore * TP-23737 | QA testing fix --- src/action/authActions.ts | 8 ++- src/hooks/useFirestoreUpdates.ts | 97 +++++++++++++++++++------------- 2 files changed, 62 insertions(+), 43 deletions(-) diff --git a/src/action/authActions.ts b/src/action/authActions.ts index 5137793d..7bf954bc 100644 --- a/src/action/authActions.ts +++ b/src/action/authActions.ts @@ -20,6 +20,7 @@ import { setGlobalUserData } from '../constants/Global'; import { resetCasesData } from '../reducer/allCasesSlice'; import {toast} from "../../RN-UI-LIB/src/components/toast"; import { clearAllAsyncStorage } from '../components/utlis/commonFunctions'; +import { logError } from '../components/utlis/errorUtils'; export interface GenerateOTPPayload { phoneNumber: string; @@ -93,7 +94,8 @@ export const logout = () => (dispatch: AppDispatch) => { const url = getApiUrl(ApiKeys.LOGOUT); axiosInstance .get(url) - .then(response => { + .then(async (_) => { + await clearAllAsyncStorage(); setGlobalUserData({token: '', agentId:'', deviceId:''}); dispatch( setAuthData({ @@ -102,10 +104,10 @@ export const logout = () => (dispatch: AppDispatch) => { isLoggedIn: false, }), ); - clearAllAsyncStorage(); dispatch(resetCasesData()); }) .catch(err => { - console.log(err) + logError(err as Error); + console.error(err) }); }; diff --git a/src/hooks/useFirestoreUpdates.ts b/src/hooks/useFirestoreUpdates.ts index 4c15872c..02212da7 100644 --- a/src/hooks/useFirestoreUpdates.ts +++ b/src/hooks/useFirestoreUpdates.ts @@ -14,6 +14,8 @@ import { setFilters } from '../reducer/filtersSlice'; import { FormTemplateV1 } from '../types/template.types'; import { ToastMessages } from '../screens/allCases/constants'; import { setForceUninstallData } from "../reducer/metadataSlice"; +import { logError } from '../components/utlis/errorUtils'; +import { GenericFunctionArgs } from '../common/GenericTypes'; export interface CaseUpdates { updateType: string; @@ -27,12 +29,12 @@ const useFirestoreUpdates = () => { allCases: { caseDetails, casesList, loading }, } = reduxStoreData; - let casesSubscriber: any; - let avTemplateSubscriber: any; - let collectionTemplateSubscriber: any; - let configSubscriber: any; - let filterSubscriber: any; - let forceUninstallSubscriber: any; + let casesUnsubscribe: GenericFunctionArgs; + let avTemplateUnSubscriber: GenericFunctionArgs; + let collectionTemplateUnsubscribe: GenericFunctionArgs; + let configUnsubscribe: GenericFunctionArgs; + let filterUnsubscribe: GenericFunctionArgs; + let forceUninstallUnsubscribe: GenericFunctionArgs; const dispatch = useAppDispatch(); @@ -122,7 +124,6 @@ const useFirestoreUpdates = () => { snapshot: FirebaseFirestoreTypes.DocumentSnapshot, ) => { const configData = snapshot.data(); - console.log('configData', configData); dispatch(setForceUninstallData(configData)) }; @@ -134,26 +135,30 @@ const useFirestoreUpdates = () => { dispatch(setFilters(filterResponse.filterComponentList)); }; - const handleError = (err: any) => { - console.log('Error while fetching firestore snapshot', err); + const handleError = (err: any, collectionPath?: string) => { + const errMsg = `Error while fetching fireStore snapshot: referenceId: ${user?.referenceId} collectionPath: ${collectionPath}`; + logError(err as Error, errMsg) }; const isUserSignedIn = () => { return auth().currentUser ? true : false; }; + const loggedOutCurrentUser = async () => { + await auth().signOut(); + } + const signInUserToFirebase = () => { if (!sessionDetails) { return; } - console.log('here', sessionDetails?.firebaseToken); auth() .signInWithCustomToken(sessionDetails?.firebaseToken) .then(userCredential => { addFirestoreListeners(); }) .catch(error => { - console.log('err: ', error); + logError(error as Error, 'Error in signInUserToFirebase') setGlobalUserData({token: '', agentId:'', deviceId:''}); dispatch( setAuthData({ @@ -169,56 +174,66 @@ const useFirestoreUpdates = () => { }); }; + const subscribeToCollection = (successCb: GenericFunctionArgs, collectionPath: string) => { + return firestore() + .collection(collectionPath) + .onSnapshot(successCb, (err) => handleError(err, collectionPath)); + } + + const subscribeToDoc = (successCb: GenericFunctionArgs, collectionPath: string) => { + return firestore() + .doc(collectionPath) + .onSnapshot(successCb, (err) => handleError(err, collectionPath)); + } + const subscribeToCases = () => { - firestore() - .collection(`allocations/${user?.referenceId}/cases`) - .onSnapshot(handleCasesUpdate, handleError); + const collectionPath = `allocations/${user?.referenceId}/cases`; + return subscribeToCollection(handleCasesUpdate, collectionPath); + }; const subscribeToAvTemplate = () => { - firestore() - .doc(`template/new_template_av`) - .onSnapshot(handleAvTemplateUpdate, handleError); + const collectionPath = 'template/new_template_av'; + return subscribeToDoc(handleAvTemplateUpdate, collectionPath); }; const subscribeToCollectionTemplate = () => { - firestore() - .doc(`template/template_collections_v2`) - .onSnapshot(handleCollectionTemplateUpdate, handleError); + const collectionPath = 'template/template_collections_v2'; + return subscribeToDoc(handleCollectionTemplateUpdate, collectionPath); }; const subscribeToForceUninstall = () => { - firestore() - .doc(`app-state/force-uninstall`) - .onSnapshot(handleForceUninstallUpdate, handleError); + const collectionPath = 'app-state/force-uninstall'; + return subscribeToDoc(handleForceUninstallUpdate, collectionPath); }; const subscribeToFilters = () => { - firestore() - .doc(`filters/${user?.referenceId}`) - .onSnapshot(handleFilterUpdate, handleError); + const collectionPath = `filters/${user?.referenceId}`; + return subscribeToDoc(handleFilterUpdate, collectionPath); }; const subscribeToUserConfig = () => { - firestore() - .doc(`config/${user?.referenceId}`) - .onSnapshot(handleConfigUpdate, handleError); + const collectionPath = `config/${user?.referenceId}`; + return subscribeToDoc(handleConfigUpdate, collectionPath); }; const subscribeToFirestore = () => { addFirestoreListeners(); - configSubscriber = subscribeToUserConfig(); + configUnsubscribe = subscribeToUserConfig(); }; function addFirestoreListeners() { - casesSubscriber = subscribeToCases(); - filterSubscriber = subscribeToFilters(); - avTemplateSubscriber = subscribeToAvTemplate(); - collectionTemplateSubscriber = subscribeToCollectionTemplate(); + casesUnsubscribe = subscribeToCases(); + filterUnsubscribe = subscribeToFilters(); + avTemplateUnSubscriber = subscribeToAvTemplate(); + collectionTemplateUnsubscribe = subscribeToCollectionTemplate(); } useEffect(() => { if (!isLoggedIn || !sessionDetails?.firebaseToken) { + if (isUserSignedIn()) { + loggedOutCurrentUser(); + } return; } if (isUserSignedIn()) { @@ -228,15 +243,17 @@ const useFirestoreUpdates = () => { signInUserToFirebase(); } return () => { - casesSubscriber && casesSubscriber(); - filterSubscriber && filterSubscriber(); - configSubscriber && configSubscriber(); - avTemplateSubscriber && avTemplateSubscriber(); - collectionTemplateSubscriber && collectionTemplateSubscriber(); + casesUnsubscribe && casesUnsubscribe(); + filterUnsubscribe && filterUnsubscribe(); + configUnsubscribe && configUnsubscribe(); + avTemplateUnSubscriber && avTemplateUnSubscriber(); + collectionTemplateUnsubscribe && collectionTemplateUnsubscribe(); + forceUninstallUnsubscribe && forceUninstallUnsubscribe(); }; }, [isLoggedIn]); + useEffect(()=>{ - subscribeToForceUninstall(); + forceUninstallUnsubscribe = subscribeToForceUninstall(); },[]) };