diff --git a/src/components/form/components/AddressSelection.tsx b/src/components/form/components/AddressSelection.tsx index c6e3826e..86a21667 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,35 @@ 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(() => { + 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 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 +98,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}`; @@ -174,12 +187,8 @@ const AddressSelection: React.FC = (props) => { : getAddressString(address as Address); return ( = ({ 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(() => { + 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(currentCase?.addresses?.find((a) => a.referenceId === id)); + return getAddressString(groupedAndUngroupedAddresses?.find((address) => address.id === id)); }); if (isGeolocation) { - const geolocations = addressGeolocation?.geoLocations; - if (geolocations?.length) { - const index = geolocations?.findIndex((a) => a.id === addressId); + if (geoLocations?.length) { + const index = geoLocations?.findIndex((a) => a.id === addressId); if (index !== -1) { - const address = geolocations?.[index]; + const address = geoLocations?.[index]; return ; } } 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]);