Firestore integration fixes (#37)
* fixes * fixes * firestore * cases list refresh added * fix * fix * fix * Firestore integration fixes
This commit is contained in:
committed by
GitHub Enterprise
parent
10dc88e333
commit
aa7049ce6a
@@ -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",
|
||||
|
||||
@@ -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]);
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -4,6 +4,7 @@ import { setGlobalUserData } from '../constants/Global';
|
||||
interface ISessionDetails {
|
||||
sessionToken: string;
|
||||
sessionExpiry: number;
|
||||
firebaseToken: string;
|
||||
}
|
||||
|
||||
interface IUserDetails {
|
||||
|
||||
70
yarn.lock
70
yarn.lock
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user