Firestore integration fixes (#37)

* fixes

* fixes

* firestore

* cases list refresh added

* fix

* fix

* fix

* Firestore integration fixes
This commit is contained in:
Aman Chaturvedi
2023-01-06 20:26:41 +05:30
committed by GitHub Enterprise
parent 10dc88e333
commit aa7049ce6a
5 changed files with 114 additions and 109 deletions

View File

@@ -14,6 +14,7 @@
"dependencies": {
"@react-native-async-storage/async-storage": "1.17.11",
"@react-native-firebase/app": "16.4.6",
"@react-native-firebase/auth": "16.5.0",
"@react-native-firebase/crashlytics": "16.5.0",
"@react-native-firebase/database": "16.4.6",
"@react-native-firebase/firestore": "16.5.0",

View File

@@ -7,6 +7,7 @@ import { updateCaseDetailsFirestore } from '../reducer/allCasesSlice';
import { CaseDetail } from '../screens/caseDetails/interface';
import { FirestoreUpdateTypes } from '../common/Constants';
import { toast } from '../../RN-UI-LIB/src/components/toast';
import auth from '@react-native-firebase/auth';
export interface CaseUpdates {
updateType: string;
@@ -16,41 +17,40 @@ export interface CaseUpdates {
const useFirestoreUpdates = () => {
const reduxStoreData = useAppSelector((state: RootState) => state);
const {
user: { user, isLoggedIn },
user: { user, isLoggedIn, sessionDetails },
allCases: { caseDetails },
} = reduxStoreData;
let casesSubscriber: any;
let templateSubscriber: any;
let configSubscriber: any;
const dispatch = useAppDispatch();
const handleCasesUpdate = (
querySnapshot: FirebaseFirestoreTypes.QuerySnapshot,
) => {
// stale data => no pending writes
console.log("querySnapshot.metadata.hasPendingWrites", querySnapshot.metadata)
if (querySnapshot.metadata.hasPendingWrites) {
return;
}
let newlyAddedCases = 0;
const caseUpdates: CaseUpdates[] = [];
querySnapshot
.docChanges()
.forEach(
(documentSnapshot: FirebaseFirestoreTypes.DocumentChange) => {
console.log('type....', documentSnapshot.type);
console.log(
'Updated Chbages .........',
documentSnapshot.doc.data(),
);
const updateType = documentSnapshot.type;
const updatedCaseDetail =
documentSnapshot.doc.data() as CaseDetail;
if (updateType === FirestoreUpdateTypes.ADDED) {
newlyAddedCases++;
if (!caseDetails[updatedCaseDetail.id]) {
newlyAddedCases++;
caseUpdates.push({ updateType, updatedCaseDetail });
}
} else {
caseUpdates.push({ updateType, updatedCaseDetail });
}
console.log(newlyAddedCases);
caseUpdates.push({ updateType, updatedCaseDetail });
},
);
// dispatch(updateCaseDetailsFirestore({ caseUpdates }));
dispatch(updateCaseDetailsFirestore({ caseUpdates }));
if (newlyAddedCases > 0) {
toast({
type: 'success',
@@ -65,69 +65,61 @@ const useFirestoreUpdates = () => {
console.log('Error while fetching firestore snapshot', err);
};
const fakeAddCase = () => {
setTimeout(() => {
firestore()
// .doc(`users/${user?.referenceId}/cases/caseId2`)
.collection('case')
.add({
allocatedAt: 1670806248220,
caseStatus: 'IN_PROGRESS',
context: {
currentTask: null,
taskContext: [Object],
taskSequence: null,
},
createdAt: 1671086418938,
currentAllocationReferenceId:
'c495d1db-ee11-4235-84bd-6ab7e9b70e27',
currentTask: 'CALLING_TASK',
customerInfo: {
customerName: 'Herik',
customerReferenceId:
'e6d122cb-ca9c-4a16-85c9-7c354efe8c8e',
geoLocation:
'https://maps.google.com/?q=26.4273034,74.642422',
imageURL:
'https://ca.slack-edge.com/TEV8SHPQB-U03RK8J6N7Q-7035c43b0621-512',
primaryPhoneNumber: '8436942857',
},
id: '1d57089f-f367-4cd4-8b6c-124ef2e042e5',
isSynced: false,
loanDetails: {
disbursalDate: '2022-12-12',
disbursementAmount: 100,
firstDueDate: '2022-12-12',
loanAccountNumber: 'LAN3003',
loanAccountStatus: 'ACTIVE',
loanType: 'PERSONAL_LOAN',
productCode: 'PL-003',
tenureMonths: 10,
},
taskSequence: [
'COMMUNICATION_ADDRESS_VERIFICATION_TASK',
'PERMANENT_ADDRESS_VERIFICATION_TASK',
'GEO_LOCATION_VERIFICATION_TASK',
'CALLING_TASK',
'NEW_ADDRESS_VERIFICATION_TASK',
],
tasks: null,
updatedAt: 1672736996727,
});
}, 10000);
}
const isUserSignedIn = () => {
return auth().currentUser ? true : false;
};
useEffect(() => {
if (!isLoggedIn) {
const signInUserToFirebase = () => {
if (!sessionDetails) {
return;
}
// fakeAddCase();
const casesSubscriber = firestore()
auth()
.signInWithCustomToken(sessionDetails?.firebaseToken)
.then(userCredential => {
console.log('user....', userCredential.user);
casesSubscriber = subscribeToCases();
})
.catch(error => {
console.log(error);
});
};
const subscribeToCases = () => {
firestore()
.collection(`allocations/${user?.referenceId}/cases`)
// .collection(`users/${user?.referenceId}/case`)
.onSnapshot(handleCasesUpdate, handleError);
// Stop listening for updates when no longer required
return () => casesSubscriber();
};
const subscribeToTemplate = () => {
firestore()
.collection(`allocations/${user?.referenceId}/cases`)
.onSnapshot(handleCasesUpdate, handleError);
};
const subscribeToUserConfig = () => {
firestore()
.collection(`allocations/${user?.referenceId}/cases`)
.onSnapshot(handleCasesUpdate, handleError);
};
const subscribeToFirestore = () => {
casesSubscriber = subscribeToCases();
// templateSubscriber = subscribeToTemplate();
// configSubscriber = subscribeToUserConfig();
};
useEffect(() => {
if (!isLoggedIn || !sessionDetails?.firebaseToken) {
return;
}
if (isUserSignedIn()) {
subscribeToFirestore();
} else {
signInUserToFirebase();
}
return () => {
casesSubscriber && casesSubscriber();
};
}, [isLoggedIn]);
};

View File

@@ -247,10 +247,10 @@ const allCasesSlice = createSlice({
pinRank: updatedCaseDetail.pinRank || null,
};
}
const currentTask = state.caseDetails[id].tasks.find(
const currentTask = updatedCaseDetail.tasks.find(
task =>
task.taskType ===
(state.caseDetails[id].currentTask as string),
(updatedCaseDetail.currentTask as string),
);
state.caseDetails[id] = {
...updatedCaseDetail,
@@ -260,6 +260,9 @@ const allCasesSlice = createSlice({
break;
}
case FirestoreUpdateTypes.ADDED: {
if(state.caseDetails[id]) {
return;
}
const caseListItem: ICaseItem = {
caseReferenceId: id,
updatedAt,
@@ -270,14 +273,14 @@ const allCasesSlice = createSlice({
pinRank: updatedCaseDetail.pinRank || null,
};
state.casesList.push(caseListItem);
state.caseDetails[id].tasks.find(
const currentTaskAdd = updatedCaseDetail.tasks.find(
task =>
task.taskType ===
(state.caseDetails[id].currentTask as string),
(updatedCaseDetail.currentTask as string),
);
state.caseDetails[id] = {
...updatedCaseDetail,
currentTask,
currentTask: currentTaskAdd,
isSynced: true,
};
break;

View File

@@ -4,6 +4,7 @@ import { setGlobalUserData } from '../constants/Global';
interface ISessionDetails {
sessionToken: string;
sessionExpiry: number;
firebaseToken: string;
}
interface IUserDetails {

View File

@@ -1387,7 +1387,15 @@
opencollective-postinstall "^2.0.1"
superstruct "^0.6.2"
"@react-native-firebase/crashlytics@^16.5.0":
"@react-native-firebase/auth@16.5.0":
version "16.5.0"
resolved "https://registry.yarnpkg.com/@react-native-firebase/auth/-/auth-16.5.0.tgz#8fcce3aaf89c6c260ab8dba87644c83ef1595cf1"
integrity sha512-LV3x5I7vMGHhqPqKo+lgLlxQMlFYKF2hYX/F51NmXsL+QXesfUvIWMm8YyUNwspc928QD7PU2mY37V5lrvYuSg==
dependencies:
"@expo/config-plugins" "^5.0.4"
plist "^3.0.5"
"@react-native-firebase/crashlytics@16.5.0":
version "16.5.0"
resolved "https://registry.yarnpkg.com/@react-native-firebase/crashlytics/-/crashlytics-16.5.0.tgz#5c3e22c1bfdccd0157aad78571298d489e4d871d"
integrity sha512-wCZyF3OHi6PSQ0LH2YT0ewDYsEpMCKwTuIe27unBaE+ikIKJhIYY38+A2K4xUDwj9Gnpd52QE0eSfWS0BxfeNQ==
@@ -1477,46 +1485,46 @@
redux-thunk "^2.4.2"
reselect "^4.1.7"
"@sentry/browser@^7.28.1":
version "7.28.1"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.28.1.tgz#c8086e26079809aa401a05d9b4a6e4df63a9c965"
integrity sha512-N8j93IcrWKWorfJ5D+RSKVAvcR4S5tIcZ/HvFPMrQWnfVa/jtJcrKThdjZYteA0wjmPiy8/D3KA8nB91yulBPA==
"@sentry/browser@7.29.0":
version "7.29.0"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.29.0.tgz#eb162b50adec33ac49ecd3dc930bdffbfda8098e"
integrity sha512-Af+dIcntaw405Wt7myDOMGDxiszfy4aBdshrEKYbGgcfHjgXBIdF3iKlNatvl6nrOm+IOVuKgSpCLOr2hiCwzw==
dependencies:
"@sentry/core" "7.28.1"
"@sentry/replay" "7.28.1"
"@sentry/types" "7.28.1"
"@sentry/utils" "7.28.1"
"@sentry/core" "7.29.0"
"@sentry/replay" "7.29.0"
"@sentry/types" "7.29.0"
"@sentry/utils" "7.29.0"
tslib "^1.9.3"
"@sentry/core@7.28.1":
version "7.28.1"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.28.1.tgz#c712ce17469b18b01606108817be24a99ed2116e"
integrity sha512-7wvnuvn/mrAfcugWoCG/3pqDIrUgH5t+HisMJMGw0h9Tc33KqrmqMDCQVvjlrr2pWrw/vuUCFdm8CbUHJ832oQ==
"@sentry/core@7.29.0":
version "7.29.0"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.29.0.tgz#bc4b54d56cf7652598d4430cf43ea97cc069f6fe"
integrity sha512-+e9aIp2ljtT4EJq3901z6TfEVEeqZd5cWzbKEuQzPn2UO6If9+Utd7kY2Y31eQYb4QnJgZfiIEz1HonuYY6zqQ==
dependencies:
"@sentry/types" "7.28.1"
"@sentry/utils" "7.28.1"
"@sentry/types" "7.29.0"
"@sentry/utils" "7.29.0"
tslib "^1.9.3"
"@sentry/replay@7.28.1":
version "7.28.1"
resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.28.1.tgz#fbdd377923e082423b95e3f128cb9af9451aca70"
integrity sha512-Os0PzMjKlwtHwzTU0kfVzGzsi4Vaj3g2arCl4Qnr3b6kYTb9WOFZo/n/v56ss7Z+nZG3K8W5PisoD4MRsRJRig==
"@sentry/replay@7.29.0":
version "7.29.0"
resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.29.0.tgz#75d5bb9df39e0a31994be245032c9998af62a304"
integrity sha512-Gw7HgviJQu6pX5RFQGVY38Av4qFn9otrZdwSSl/QK5hIyg6yhlh5h7U0ydZkrYYGiW6Z6SYYRpEWCJc/Wbh+ZQ==
dependencies:
"@sentry/core" "7.28.1"
"@sentry/types" "7.28.1"
"@sentry/utils" "7.28.1"
"@sentry/core" "7.29.0"
"@sentry/types" "7.29.0"
"@sentry/utils" "7.29.0"
"@sentry/types@7.28.1":
version "7.28.1"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.28.1.tgz#9018b4c152b475de9bedd267237393d3c9b1253d"
integrity sha512-DvSplMVrVEmOzR2M161V5+B8Up3vR71xMqJOpWTzE9TqtFJRGPtqT/5OBsNJJw1+/j2ssMcnKwbEo9Q2EGeS6g==
"@sentry/types@7.29.0":
version "7.29.0"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.29.0.tgz#ed829b6014ee19049035fec6af2b4fea44ff28b8"
integrity sha512-DmoEpoqHPty3VxqubS/5gxarwebHRlcBd/yuno+PS3xy++/i9YPjOWLZhU2jYs1cW68M9R6CcCOiC9f2ckJjdw==
"@sentry/utils@7.28.1":
version "7.28.1"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.28.1.tgz#0a7b6aa4b09e91e4d1aded2a8c8dbaf818cee96e"
integrity sha512-75/jzLUO9HH09iC9TslNimGbxOP3jgn89P+q7uR+rp2fJfRExHVeKJZQdK0Ij4/SmE7TJ3Uh2r154N0INZEx1g==
"@sentry/utils@7.29.0":
version "7.29.0"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.29.0.tgz#cbf8f87dd851b0fdc7870db9c68014c321c3bab8"
integrity sha512-ICcBwTiBGK8NQA8H2BJo0JcMN6yCeKLqNKNMVampRgS6wSfSk1edvcTdhRkW3bSktIGrIPZrKskBHyMwDGF2XQ==
dependencies:
"@sentry/types" "7.28.1"
"@sentry/types" "7.29.0"
tslib "^1.9.3"
"@sideway/address@^4.1.3":