From 9965a004fd81a4e48e99a5e19134f416fea1ef9f Mon Sep 17 00:00:00 2001 From: Aman Chaturvedi Date: Sat, 21 Sep 2024 12:41:44 +0530 Subject: [PATCH 1/3] TP-85043 | addresses firestore deprecation --- .../form/components/AddressSelection.tsx | 39 +++++++++++-------- .../components/GeolocationAddressAnswer.tsx | 14 ++++++- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/components/form/components/AddressSelection.tsx b/src/components/form/components/AddressSelection.tsx index 25723745..14637d4b 100644 --- a/src/components/form/components/AddressSelection.tsx +++ b/src/components/form/components/AddressSelection.tsx @@ -1,5 +1,5 @@ import { TouchableOpacity, View } from 'react-native'; -import React from 'react'; +import React, { useMemo } from 'react'; import { useAppDispatch, useAppSelector } from '../../../hooks'; import { CaseAllocationType } from '../../../screens/allCases/interface'; import { validateInput } from '../services/validation.service'; @@ -47,21 +47,27 @@ export const AddressSourceMap: Record = { const AddressSelection: React.FC = (props) => { const { caseId, questionId, error, widgetId, sectionId, control, questionType } = props; - const { currentCase, addressGeolocation, isLoading, loanAccountNumber } = useAppSelector( - (state) => { - const currentCase = state.allCases.caseDetails[caseId]; - const loanAccountNumber = currentCase?.loanAccountNumber; - const addresses = state.address?.[loanAccountNumber]; - return { - currentCase, - loanAccountNumber, - addressGeolocation: addresses?.addressesAndGeoLocations || {}, - isLoading: addresses?.isLoading || false, - }; - } + const loanAccountNumber = useAppSelector( + (state) => state.allCases.caseDetails[caseId]?.loanAccountNumber + ); + const addressesAndGeolocations = useAppSelector( + (state: RootState) => state.address?.[loanAccountNumber] + ); + const { isLoading, addressesAndGeoLocations: groupedAddressesAndGeolocations } = + addressesAndGeolocations || {}; + const { groupedAddresses = [], geoLocations = [] } = groupedAddressesAndGeolocations || {}; + const ungroupedAddresses = useAppSelector( + (state: RootState) => state.ungroupedAddresses[loanAccountNumber]?.ungroupedAddresses || [] + ); + + const groupedAndUngroupedAddresses = useMemo( + () => [...groupedAddresses, ...ungroupedAddresses], + [groupedAddresses, ungroupedAddresses] + ); + + const template = useAppSelector( + (state) => state.case.templateData[CaseAllocationType.COLLECTION_CASE] ); - const caseType = currentCase?.caseType || CaseAllocationType.ADDRESS_VERIFICATION_CASE; - const template = useAppSelector((state) => state.case.templateData[caseType]); const question = template.questions[questionId]; const dispatch = useAppDispatch(); @@ -84,8 +90,7 @@ const AddressSelection: React.FC = (props) => { const isGeolocation = question?.tag === VisitTypeSelection.GEOLOCATION_SELECTION; - const addresses = - (isGeolocation ? addressGeolocation?.geoLocations : currentCase?.addresses) || []; + const addresses = (isGeolocation ? geoLocations : groupedAndUngroupedAddresses) || []; const controllerName = `widgetContext.${widgetId}.sectionContext.${sectionId}.questionContext.${questionId}`; diff --git a/src/components/form/components/GeolocationAddressAnswer.tsx b/src/components/form/components/GeolocationAddressAnswer.tsx index cf45dbc4..9d960f32 100644 --- a/src/components/form/components/GeolocationAddressAnswer.tsx +++ b/src/components/form/components/GeolocationAddressAnswer.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useMemo } from 'react'; import { getAddressString, memoize } from '../../utlis/commonFunctions'; import { useAppSelector } from '../../../hooks'; import { VisitTypeSelection } from './AddressSelection'; @@ -23,10 +23,20 @@ const GeolocationAddressAnswer: React.FC = ({ addressGeolocation: state.address?.[loanAccountNumber]?.addressesAndGeoLocations || {}, isLoading: state.address?.[loanAccountNumber]?.isLoading || false, })); + const { groupedAddresses = [], geoLocations = [] } = addressGeolocation || {}; + const ungroupedAddresses = useAppSelector( + (state: RootState) => state.ungroupedAddresses[loanAccountNumber]?.ungroupedAddresses || [] + ); + + const groupedAndUngroupedAddresses = useMemo( + () => [...groupedAddresses, ...ungroupedAddresses], + [groupedAddresses, ungroupedAddresses] + ); + const isGeolocation = metadata?.type === VisitTypeSelection.GEOLOCATION_SELECTION; const getAddressFromId = memoize((id: string) => { - return getAddressString(currentCase?.addresses?.find((a) => a.referenceId === id)); + return getAddressString(groupedAndUngroupedAddresses?.find((address) => address.referenceId === id)); }); if (isGeolocation) { From 5dca93a14e638a9a3ff52e2af20f525483fc49a1 Mon Sep 17 00:00:00 2001 From: Aman Chaturvedi Date: Sat, 21 Sep 2024 12:43:45 +0530 Subject: [PATCH 2/3] TP-85043 | addresses firestore deprecation --- .../form/components/GeolocationAddressAnswer.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/form/components/GeolocationAddressAnswer.tsx b/src/components/form/components/GeolocationAddressAnswer.tsx index 9d960f32..cb928082 100644 --- a/src/components/form/components/GeolocationAddressAnswer.tsx +++ b/src/components/form/components/GeolocationAddressAnswer.tsx @@ -39,12 +39,11 @@ const GeolocationAddressAnswer: React.FC = ({ return getAddressString(groupedAndUngroupedAddresses?.find((address) => address.referenceId === id)); }); - if (isGeolocation) { - const geolocations = addressGeolocation?.geoLocations; - if (geolocations?.length) { - const index = geolocations?.findIndex((a) => a.id === addressId); + if (isGeolocation) {; + if (geoLocations?.length) { + const index = geoLocations?.findIndex((a) => a.id === addressId); if (index !== -1) { - const address = geolocations?.[index]; + const address = geoLocations?.[index]; return ; } } From b39302a6b0265a5a3f6211c28494fc6af0f0ca22 Mon Sep 17 00:00:00 2001 From: Aman Chaturvedi Date: Sun, 22 Sep 2024 19:01:02 +0530 Subject: [PATCH 3/3] TP-85043 | addresses firestore deprecate --- .../form/components/AddressSelection.tsx | 26 +++++++++++-------- .../components/GeolocationAddressAnswer.tsx | 20 +++++++++----- src/components/utlis/commonFunctions.ts | 5 ++-- .../NewAddressContainer.tsx | 5 +++- .../caseDetails/CollectionCaseDetail.tsx | 6 ++++- 5 files changed, 40 insertions(+), 22 deletions(-) diff --git a/src/components/form/components/AddressSelection.tsx b/src/components/form/components/AddressSelection.tsx index 14637d4b..86a21667 100644 --- a/src/components/form/components/AddressSelection.tsx +++ b/src/components/form/components/AddressSelection.tsx @@ -60,15 +60,23 @@ const AddressSelection: React.FC = (props) => { (state: RootState) => state.ungroupedAddresses[loanAccountNumber]?.ungroupedAddresses || [] ); - const groupedAndUngroupedAddresses = useMemo( - () => [...groupedAddresses, ...ungroupedAddresses], - [groupedAddresses, ungroupedAddresses] - ); + const groupedAndUngroupedAddresses = useMemo(() => { + let addressesList = []; + groupedAddresses.forEach((groupedAddress) => { + if (groupedAddress?.metaAddress) { + addressesList.push(groupedAddress.metaAddress); + } + if (groupedAddress?.similarAddresses?.length) { + addressesList = [...addressesList, ...groupedAddress.similarAddresses]; + } + }); + return [...addressesList, ...ungroupedAddresses]; + }, [groupedAddresses, ungroupedAddresses]); const template = useAppSelector( (state) => state.case.templateData[CaseAllocationType.COLLECTION_CASE] ); - const question = template.questions[questionId]; + const question = template?.questions?.[questionId]; const dispatch = useAppDispatch(); @@ -179,12 +187,8 @@ const AddressSelection: React.FC = (props) => { : getAddressString(address as Address); return ( = ({ (state: RootState) => state.ungroupedAddresses[loanAccountNumber]?.ungroupedAddresses || [] ); - const groupedAndUngroupedAddresses = useMemo( - () => [...groupedAddresses, ...ungroupedAddresses], - [groupedAddresses, ungroupedAddresses] - ); + const groupedAndUngroupedAddresses = useMemo(() => { + let addressesList = []; + groupedAddresses.forEach((groupedAddress) => { + if (groupedAddress?.metaAddress) { + addressesList.push(groupedAddress.metaAddress); + } + if (groupedAddress?.similarAddresses?.length) { + addressesList = [...addressesList, ...groupedAddress.similarAddresses]; + } + }); + return [...addressesList, ...ungroupedAddresses]; + }, [groupedAddresses, ungroupedAddresses]); const isGeolocation = metadata?.type === VisitTypeSelection.GEOLOCATION_SELECTION; const getAddressFromId = memoize((id: string) => { - return getAddressString(groupedAndUngroupedAddresses?.find((address) => address.referenceId === id)); + return getAddressString(groupedAndUngroupedAddresses?.find((address) => address.id === id)); }); - if (isGeolocation) {; + if (isGeolocation) { if (geoLocations?.length) { const index = geoLocations?.findIndex((a) => a.id === addressId); if (index !== -1) { diff --git a/src/components/utlis/commonFunctions.ts b/src/components/utlis/commonFunctions.ts index db979800..eb27a224 100644 --- a/src/components/utlis/commonFunctions.ts +++ b/src/components/utlis/commonFunctions.ts @@ -201,9 +201,8 @@ export function getAddressString(address?: Address): string { const addressFirstLine = [address.pinCode, address.city].filter(Boolean).join(', '); const presentationAddressList = [ addressFirstLine, - address.lineOne, - address.lineTwo, - toTileCase(address.source), + address.addressText, + toTileCase(address.primarySource), ]; return presentationAddressList.filter(Boolean).join(' \n '); } diff --git a/src/screens/addressGeolocation/NewAddressContainer.tsx b/src/screens/addressGeolocation/NewAddressContainer.tsx index 8567022b..67c84c95 100644 --- a/src/screens/addressGeolocation/NewAddressContainer.tsx +++ b/src/screens/addressGeolocation/NewAddressContainer.tsx @@ -14,7 +14,7 @@ import { IAddAddressPayload, IAddressGeolocationPayload, } from '../../types/addressGeolocation.types'; -import { addAddress, getPinCodeDetails } from '../../action/addressGeolocationAction'; +import { addAddress, getPinCodeDetails, getUngroupedAddress } from '../../action/addressGeolocationAction'; import { useSelector } from 'react-redux'; import { RootState } from '../../store/store'; import { addClickstreamEvent } from '../../services/clickstreamEventService'; @@ -29,6 +29,7 @@ import { verifyPinCodeForNewAddressContainer } from "@screens/addressGeolocation/utils/utils"; import LoadingIcon from "@rn-ui-lib/icons/LoadingIcon"; +import { getCaseUnifiedData, UnifiedCaseDetailsTypes } from '@actions/caseApiActions'; const PAGE_TITLE = 'Add new address'; @@ -149,6 +150,8 @@ const NewAddressContainer: React.FC = ({ route: routeParam type: 'info', text1: 'Address Added Successfully!', }); + dispatch(getCaseUnifiedData([loanAccountNumber], [UnifiedCaseDetailsTypes.ADDRESS_AND_GEOLOCATIONS])); + dispatch(getUngroupedAddress(loanAccountNumber)); navigateToScreen(CaseDetailStackEnum.COLLECTION_CASE_DETAIL, { caseId }); addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_ADD_NEW_ADDRESS_SUBMIT_SUCCESS, { loanAccountNumber, diff --git a/src/screens/caseDetails/CollectionCaseDetail.tsx b/src/screens/caseDetails/CollectionCaseDetail.tsx index 051c2008..e73029ce 100644 --- a/src/screens/caseDetails/CollectionCaseDetail.tsx +++ b/src/screens/caseDetails/CollectionCaseDetail.tsx @@ -24,6 +24,7 @@ import { syncActiveCallDetails } from '@actions/callRecordingActions'; import { getCustomerDocuments } from '@screens/allCases/utils'; import { logError } from '@components/utlis/errorUtils'; import { GenericObject, GenericType } from '@common/GenericTypes'; +import { getUngroupedAddress } from '@actions/addressGeolocationAction'; interface ICaseDetails { route: { @@ -41,7 +42,9 @@ const CollectionCaseDetails: React.FC = (props) => { }, } = props; const caseDetail = useAppSelector((state: RootState) => state.allCases.caseDetails[caseId]) || {}; - const isCallActive = useAppSelector((state: RootState) => state?.activeCall?.activeCallDetails?.callActive); + const isCallActive = useAppSelector( + (state: RootState) => state?.activeCall?.activeCallDetails?.callActive + ); const { loanAccountNumber } = caseDetail; const opacityAnimation = useRef(new Animated.Value(0.8)).current; @@ -72,6 +75,7 @@ const CollectionCaseDetails: React.FC = (props) => { [UnifiedCaseDetailsTypes.FEEDBACKS, UnifiedCaseDetailsTypes.ADDRESS_AND_GEOLOCATIONS] ) ); + dispatch(getUngroupedAddress(loanAccountNumber)); } }, [caseDetail]);