TP-23737 | Added firestore unsubscribing + logout current user at fir… (#205)

* TP-23737 | Added firestore unsubscribing + logout current user at firestore

* TP-23737 | QA testing fix
This commit is contained in:
Himanshu Kansal
2023-04-05 11:43:57 +05:30
committed by GitHub Enterprise
parent 37745bd694
commit 2e6ee2eb57
2 changed files with 62 additions and 43 deletions

View File

@@ -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)
});
};

View File

@@ -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<FirebaseFirestoreTypes.DocumentData>,
) => {
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();
},[])
};