@finspringinnovations/fixeddepositsdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +128 -0
- package/lib/api/applicationApi.d.ts +1 -0
- package/lib/api/applicationApi.js +11 -0
- package/lib/api/bankApi.d.ts +352 -0
- package/lib/api/bankApi.js +54 -0
- package/lib/api/baseApi.d.ts +6 -0
- package/lib/api/baseApi.js +406 -0
- package/lib/api/customerApi.d.ts +855 -0
- package/lib/api/customerApi.js +241 -0
- package/lib/api/fdApi.d.ts +979 -0
- package/lib/api/fdApi.js +112 -0
- package/lib/api/fdCalculatorApi.d.ts +179 -0
- package/lib/api/fdCalculatorApi.js +36 -0
- package/lib/api/index.d.ts +14 -0
- package/lib/api/index.js +45 -0
- package/lib/api/interestRateApi.d.ts +585 -0
- package/lib/api/interestRateApi.js +101 -0
- package/lib/api/kycApi.d.ts +486 -0
- package/lib/api/kycApi.js +71 -0
- package/lib/api/masterDataApi.d.ts +158 -0
- package/lib/api/masterDataApi.js +35 -0
- package/lib/api/nomineeApi.d.ts +325 -0
- package/lib/api/nomineeApi.js +46 -0
- package/lib/api/onboardingApi.d.ts +192 -0
- package/lib/api/onboardingApi.js +41 -0
- package/lib/api/panApi.d.ts +0 -0
- package/lib/api/panApi.js +23 -0
- package/lib/api/paymentApi.d.ts +325 -0
- package/lib/api/paymentApi.js +46 -0
- package/lib/api/workflowApi.d.ts +654 -0
- package/lib/api/workflowApi.js +90 -0
- package/lib/assets/images/images.d.ts +6 -0
- package/lib/assets/images/images.js +12 -0
- package/lib/components/AadhaarInput.d.ts +13 -0
- package/lib/components/AadhaarInput.js +47 -0
- package/lib/components/ActionButton.d.ts +12 -0
- package/lib/components/ActionButton.js +87 -0
- package/lib/components/ActiveFDCard.d.ts +18 -0
- package/lib/components/ActiveFDCard.js +116 -0
- package/lib/components/AmountInput.d.ts +20 -0
- package/lib/components/AmountInput.js +142 -0
- package/lib/components/CheckboxOption.d.ts +11 -0
- package/lib/components/CheckboxOption.js +41 -0
- package/lib/components/CompanyHeader.d.ts +7 -0
- package/lib/components/CompanyHeader.js +59 -0
- package/lib/components/DropdownSelector.d.ts +9 -0
- package/lib/components/DropdownSelector.js +49 -0
- package/lib/components/EmptyState.d.ts +17 -0
- package/lib/components/EmptyState.js +44 -0
- package/lib/components/ErrorDisplay.d.ts +17 -0
- package/lib/components/ErrorDisplay.js +69 -0
- package/lib/components/FAQItem.d.ts +9 -0
- package/lib/components/FAQItem.js +52 -0
- package/lib/components/FDCard.d.ts +23 -0
- package/lib/components/FDCard.js +116 -0
- package/lib/components/FormDropdown.d.ts +18 -0
- package/lib/components/FormDropdown.js +155 -0
- package/lib/components/FormSection.d.ts +14 -0
- package/lib/components/FormSection.js +38 -0
- package/lib/components/Header.d.ts +14 -0
- package/lib/components/Header.js +52 -0
- package/lib/components/IFSCSearchResultCard.d.ts +13 -0
- package/lib/components/IFSCSearchResultCard.js +70 -0
- package/lib/components/InfoBox.d.ts +8 -0
- package/lib/components/InfoBox.js +39 -0
- package/lib/components/InterestRateCard.d.ts +8 -0
- package/lib/components/InterestRateCard.js +46 -0
- package/lib/components/LoadingIndicator.d.ts +12 -0
- package/lib/components/LoadingIndicator.js +30 -0
- package/lib/components/OTPInput.d.ts +17 -0
- package/lib/components/OTPInput.js +144 -0
- package/lib/components/PaymentDetailsCard.d.ts +20 -0
- package/lib/components/PaymentDetailsCard.js +68 -0
- package/lib/components/PendingFDBottomSheet.d.ts +19 -0
- package/lib/components/PendingFDBottomSheet.js +122 -0
- package/lib/components/SafeAreaWrapper.d.ts +13 -0
- package/lib/components/SafeAreaWrapper.js +41 -0
- package/lib/components/ScreenHeader.d.ts +11 -0
- package/lib/components/ScreenHeader.js +46 -0
- package/lib/components/StatusDisplay.d.ts +15 -0
- package/lib/components/StatusDisplay.js +88 -0
- package/lib/components/TextFieldWithLabel.d.ts +46 -0
- package/lib/components/TextFieldWithLabel.js +326 -0
- package/lib/components/TrustBox.d.ts +8 -0
- package/lib/components/TrustBox.js +46 -0
- package/lib/components/ValidationErrorAlert.d.ts +23 -0
- package/lib/components/ValidationErrorAlert.js +39 -0
- package/lib/components/ValidationMessage.d.ts +9 -0
- package/lib/components/ValidationMessage.js +98 -0
- package/lib/components/index.d.ts +35 -0
- package/lib/components/index.js +64 -0
- package/lib/config/apiConfig.d.ts +34 -0
- package/lib/config/apiConfig.js +158 -0
- package/lib/config/appDataConfig.d.ts +159 -0
- package/lib/config/appDataConfig.js +310 -0
- package/lib/config/encryptionConfig.d.ts +21 -0
- package/lib/config/encryptionConfig.js +61 -0
- package/lib/config/workflowConstants.d.ts +62 -0
- package/lib/config/workflowConstants.js +63 -0
- package/lib/constants/strings/bank.d.ts +72 -0
- package/lib/constants/strings/bank.js +86 -0
- package/lib/constants/strings/base64Images.d.ts +26 -0
- package/lib/constants/strings/base64Images.js +29 -0
- package/lib/constants/strings/common.d.ts +53 -0
- package/lib/constants/strings/common.js +62 -0
- package/lib/constants/strings/employee.d.ts +61 -0
- package/lib/constants/strings/employee.js +77 -0
- package/lib/constants/strings/faq.d.ts +14 -0
- package/lib/constants/strings/faq.js +20 -0
- package/lib/constants/strings/fd.d.ts +122 -0
- package/lib/constants/strings/fd.js +151 -0
- package/lib/constants/strings/home.d.ts +49 -0
- package/lib/constants/strings/home.js +62 -0
- package/lib/constants/strings/index.d.ts +16 -0
- package/lib/constants/strings/index.js +44 -0
- package/lib/constants/strings/kyc.d.ts +80 -0
- package/lib/constants/strings/kyc.js +94 -0
- package/lib/constants/strings/nominee.d.ts +64 -0
- package/lib/constants/strings/nominee.js +81 -0
- package/lib/hooks/useAuth.d.ts +25 -0
- package/lib/hooks/useAuth.js +39 -0
- package/lib/hooks/useFDData.d.ts +11 -0
- package/lib/hooks/useFDData.js +40 -0
- package/lib/index.d.ts +48 -0
- package/lib/index.js +161 -0
- package/lib/navigation/RootNavigator.d.ts +9 -0
- package/lib/navigation/RootNavigator.js +459 -0
- package/lib/navigation/SimpleNavigator.d.ts +11 -0
- package/lib/navigation/SimpleNavigator.js +114 -0
- package/lib/navigation/helpers.d.ts +11 -0
- package/lib/navigation/helpers.js +83 -0
- package/lib/navigation/index.d.ts +17 -0
- package/lib/navigation/index.js +42 -0
- package/lib/navigation/types.d.ts +139 -0
- package/lib/navigation/types.js +2 -0
- package/lib/navigation/workflowNavigator.d.ts +22 -0
- package/lib/navigation/workflowNavigator.js +104 -0
- package/lib/providers/ApiProvider.d.ts +7 -0
- package/lib/providers/ApiProvider.js +16 -0
- package/lib/providers/MasterDataProvider.d.ts +10 -0
- package/lib/providers/MasterDataProvider.js +54 -0
- package/lib/screens/AadhaarVerification.d.ts +7 -0
- package/lib/screens/AadhaarVerification.js +627 -0
- package/lib/screens/AddBankAccount.d.ts +22 -0
- package/lib/screens/AddBankAccount.js +381 -0
- package/lib/screens/BankDetail.d.ts +16 -0
- package/lib/screens/BankDetail.js +596 -0
- package/lib/screens/Employee.d.ts +18 -0
- package/lib/screens/Employee.js +594 -0
- package/lib/screens/FDCalculator.d.ts +18 -0
- package/lib/screens/FDCalculator.js +767 -0
- package/lib/screens/FDList.d.ts +28 -0
- package/lib/screens/FDList.js +1853 -0
- package/lib/screens/FindIFSC.d.ts +16 -0
- package/lib/screens/FindIFSC.js +248 -0
- package/lib/screens/NomineeDetail.d.ts +17 -0
- package/lib/screens/NomineeDetail.js +592 -0
- package/lib/screens/PayNow.d.ts +14 -0
- package/lib/screens/PayNow.js +230 -0
- package/lib/screens/Payment.d.ts +11 -0
- package/lib/screens/Payment.js +191 -0
- package/lib/screens/PaymentStatus.d.ts +16 -0
- package/lib/screens/PaymentStatus.js +431 -0
- package/lib/screens/ReviewKYC.d.ts +23 -0
- package/lib/screens/ReviewKYC.js +727 -0
- package/lib/state/paymentSession.d.ts +8 -0
- package/lib/state/paymentSession.js +13 -0
- package/lib/store/fdListSelectedSlice.d.ts +21 -0
- package/lib/store/fdListSelectedSlice.js +26 -0
- package/lib/store/hooks.d.ts +8 -0
- package/lib/store/hooks.js +8 -0
- package/lib/store/index.d.ts +3 -0
- package/lib/store/index.js +8 -0
- package/lib/store/onboardingSlice.d.ts +12 -0
- package/lib/store/onboardingSlice.js +32 -0
- package/lib/store/store.d.ts +13 -0
- package/lib/store/store.js +27 -0
- package/lib/theme/ThemeContext.d.ts +210 -0
- package/lib/theme/ThemeContext.js +92 -0
- package/lib/theme/colors.d.ts +80 -0
- package/lib/theme/colors.js +85 -0
- package/lib/theme/index.d.ts +35 -0
- package/lib/theme/index.js +78 -0
- package/lib/theme/shadows.d.ts +53 -0
- package/lib/theme/shadows.js +58 -0
- package/lib/theme/typography.d.ts +134 -0
- package/lib/theme/typography.js +143 -0
- package/lib/types/dataTypes.d.ts +34 -0
- package/lib/types/dataTypes.js +2 -0
- package/lib/types/workflowTypes.d.ts +2 -0
- package/lib/types/workflowTypes.js +2 -0
- package/lib/utils/apiLogger.d.ts +48 -0
- package/lib/utils/apiLogger.js +105 -0
- package/lib/utils/encryption.d.ts +28 -0
- package/lib/utils/encryption.js +113 -0
- package/lib/utils/getFDData.d.ts +48 -0
- package/lib/utils/getFDData.js +145 -0
- package/lib/utils/globalData.d.ts +2 -0
- package/lib/utils/globalData.js +10 -0
- package/package.json +51 -0
- package/src/api/applicationApi.ts +12 -0
- package/src/api/bankApi.ts +42 -0
- package/src/api/baseApi.ts +463 -0
- package/src/api/customerApi.ts +324 -0
- package/src/api/fdApi.ts +150 -0
- package/src/api/fdCalculatorApi.ts +41 -0
- package/src/api/index.ts +29 -0
- package/src/api/interestRateApi.ts +143 -0
- package/src/api/kycApi.ts +63 -0
- package/src/api/masterDataApi.ts +37 -0
- package/src/api/nomineeApi.ts +34 -0
- package/src/api/onboardingApi.ts +64 -0
- package/src/api/panApi.ts +25 -0
- package/src/api/paymentApi.ts +34 -0
- package/src/api/workflowApi.ts +94 -0
- package/src/assets/images/Mahindra.png +0 -0
- package/src/assets/images/arrow-filled.png +0 -0
- package/src/assets/images/arrow-left.png +0 -0
- package/src/assets/images/backicon.png +0 -0
- package/src/assets/images/calendar.png +0 -0
- package/src/assets/images/chevron-down.png +0 -0
- package/src/assets/images/chevron-down@2x.png +0 -0
- package/src/assets/images/chevron-down@3x.png +0 -0
- package/src/assets/images/images.js +10 -0
- package/src/assets/images/shriram_logo.png +0 -0
- package/src/components/AadhaarInput.tsx +91 -0
- package/src/components/ActionButton.tsx +129 -0
- package/src/components/ActiveFDCard.tsx +188 -0
- package/src/components/AmountInput.tsx +217 -0
- package/src/components/CheckboxOption.tsx +93 -0
- package/src/components/CompanyHeader.tsx +80 -0
- package/src/components/DropdownSelector.tsx +77 -0
- package/src/components/EmptyState.tsx +109 -0
- package/src/components/ErrorDisplay.tsx +135 -0
- package/src/components/FAQItem.tsx +90 -0
- package/src/components/FDCard.tsx +186 -0
- package/src/components/FormDropdown.tsx +214 -0
- package/src/components/FormSection.tsx +86 -0
- package/src/components/Header.tsx +110 -0
- package/src/components/IFSCSearchResultCard.tsx +139 -0
- package/src/components/InfoBox.tsx +55 -0
- package/src/components/InterestRateCard.tsx +77 -0
- package/src/components/LoadingIndicator.tsx +63 -0
- package/src/components/OTPInput.tsx +213 -0
- package/src/components/PaymentDetailsCard.tsx +120 -0
- package/src/components/PendingFDBottomSheet.tsx +237 -0
- package/src/components/README.md +210 -0
- package/src/components/SafeAreaWrapper.tsx +68 -0
- package/src/components/ScreenHeader.tsx +83 -0
- package/src/components/StatusDisplay.tsx +139 -0
- package/src/components/TextFieldWithLabel.tsx +502 -0
- package/src/components/TrustBox.tsx +63 -0
- package/src/components/ValidationErrorAlert.tsx +57 -0
- package/src/components/ValidationMessage.tsx +134 -0
- package/src/components/index.tsx +47 -0
- package/src/config/apiConfig.ts +217 -0
- package/src/config/appDataConfig.ts +358 -0
- package/src/config/encryptionConfig.ts +65 -0
- package/src/config/workflowConstants.ts +70 -0
- package/src/constants/strings/README.md +146 -0
- package/src/constants/strings/bank.ts +92 -0
- package/src/constants/strings/base64Images.ts +31 -0
- package/src/constants/strings/common.ts +63 -0
- package/src/constants/strings/employee.ts +85 -0
- package/src/constants/strings/faq.ts +23 -0
- package/src/constants/strings/fd.ts +172 -0
- package/src/constants/strings/home.ts +67 -0
- package/src/constants/strings/index.ts +21 -0
- package/src/constants/strings/kyc.ts +100 -0
- package/src/constants/strings/nominee.ts +90 -0
- package/src/hooks/useAuth.ts +42 -0
- package/src/hooks/useFDData.ts +48 -0
- package/src/index.tsx +139 -0
- package/src/navigation/RootNavigator.tsx +687 -0
- package/src/navigation/SimpleNavigator.tsx +123 -0
- package/src/navigation/helpers.ts +85 -0
- package/src/navigation/index.tsx +84 -0
- package/src/navigation/types.ts +146 -0
- package/src/navigation/workflowNavigator.ts +131 -0
- package/src/providers/ApiProvider.tsx +23 -0
- package/src/providers/MasterDataProvider.tsx +30 -0
- package/src/screens/AadhaarVerification.tsx +809 -0
- package/src/screens/AddBankAccount.tsx +541 -0
- package/src/screens/BankDetail.tsx +826 -0
- package/src/screens/Employee.tsx +822 -0
- package/src/screens/FDCalculator.tsx +1002 -0
- package/src/screens/FDList.tsx +2199 -0
- package/src/screens/FindIFSC.tsx +332 -0
- package/src/screens/NomineeDetail.tsx +800 -0
- package/src/screens/PayNow.tsx +282 -0
- package/src/screens/Payment.tsx +224 -0
- package/src/screens/PaymentStatus.tsx +595 -0
- package/src/screens/ReviewKYC.tsx +1062 -0
- package/src/state/paymentSession.ts +13 -0
- package/src/store/fdListSelectedSlice.ts +42 -0
- package/src/store/hooks.ts +6 -0
- package/src/store/index.ts +3 -0
- package/src/store/onboardingSlice.ts +37 -0
- package/src/store/store.ts +27 -0
- package/src/theme/ThemeContext.tsx +84 -0
- package/src/theme/colors.ts +90 -0
- package/src/theme/index.ts +85 -0
- package/src/theme/shadows.ts +61 -0
- package/src/theme/typography.ts +151 -0
- package/src/types/dataTypes.ts +37 -0
- package/src/types/env.d.ts +93 -0
- package/src/types/workflowTypes.ts +12 -0
- package/src/utils/apiLogger.ts +166 -0
- package/src/utils/encryption.ts +159 -0
- package/src/utils/getFDData.ts +165 -0
- package/src/utils/globalData.ts +7 -0
|
@@ -0,0 +1,687 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { createStackNavigator } from '@react-navigation/stack';
|
|
3
|
+
import type { RootStackParamList, SDKNavigationConfig } from './types';
|
|
4
|
+
import { BackHandler, Platform, Alert } from 'react-native';
|
|
5
|
+
import { navigationRef } from './helpers';
|
|
6
|
+
|
|
7
|
+
// Import screens
|
|
8
|
+
import FDListScreen from '../screens/FDList';
|
|
9
|
+
import FDCalculatorScreen from '../screens/FDCalculator';
|
|
10
|
+
import AadhaarVerificationScreen from '../screens/AadhaarVerification';
|
|
11
|
+
import ReviewKYCScreen from '../screens/ReviewKYC';
|
|
12
|
+
import EmployeeScreen from '../screens/Employee';
|
|
13
|
+
import NomineeDetailScreen from '../screens/NomineeDetail';
|
|
14
|
+
import BankDetailScreen from '../screens/BankDetail';
|
|
15
|
+
import AddBankAccountScreen from '../screens/AddBankAccount';
|
|
16
|
+
import FindIFSCScreen from '../screens/FindIFSC';
|
|
17
|
+
import PayNowScreen from '../screens/PayNow';
|
|
18
|
+
import PaymentScreen from '../screens/Payment';
|
|
19
|
+
import PaymentStatusScreen from '../screens/PaymentStatus';
|
|
20
|
+
|
|
21
|
+
// Import full SDK navigators and initialization functions
|
|
22
|
+
import {
|
|
23
|
+
initializeSDK as initializeShriramSDK,
|
|
24
|
+
initializeEnvironment as initializeShriramEnvironment,
|
|
25
|
+
RootNavigator as ShriramRootNavigator,
|
|
26
|
+
navigationRef as shriramNavigationRef,
|
|
27
|
+
ThemeProvider as ShriramThemeProvider,
|
|
28
|
+
ApiProvider as ShriramApiProvider,
|
|
29
|
+
MasterDataProvider as ShriramMasterDataProvider,
|
|
30
|
+
useMasterData as useShriramMasterData,
|
|
31
|
+
useAppDispatch as useShriramAppDispatch,
|
|
32
|
+
setFDListSelected as setShriramFDListSelected,
|
|
33
|
+
setOnboardingIds as setShriramOnboardingIds,
|
|
34
|
+
setGlobalData as setShriramGlobalData,
|
|
35
|
+
type AppData as ShriramAppData,
|
|
36
|
+
type EnvironmentData as ShriramEnvironmentData
|
|
37
|
+
} from '@finspringinnovations/shriramfdsdk';
|
|
38
|
+
import {
|
|
39
|
+
initializeSDK as initializeMahindraSDK,
|
|
40
|
+
initializeEnvironment as initializeMahindraEnvironment,
|
|
41
|
+
RootNavigator as MahindraRootNavigator,
|
|
42
|
+
navigationRef as mahindraNavigationRef,
|
|
43
|
+
ThemeProvider as MahindraThemeProvider,
|
|
44
|
+
ApiProvider as MahindraApiProvider,
|
|
45
|
+
MasterDataProvider as MahindraMasterDataProvider,
|
|
46
|
+
useMasterData as useMahindraMasterData,
|
|
47
|
+
useAppDispatch as useMahindraAppDispatch,
|
|
48
|
+
setFDListSelected as setMahindraFDListSelected,
|
|
49
|
+
setOnboardingIds as setMahindraOnboardingIds,
|
|
50
|
+
type AppData as MahindraAppData,
|
|
51
|
+
type EnvironmentData as MahindraEnvironmentData
|
|
52
|
+
} from '@finspringinnovations/mahindrafdsdk';
|
|
53
|
+
|
|
54
|
+
// Import NavigationContainer and tree wrappers
|
|
55
|
+
import { NavigationContainer, NavigationIndependentTree } from '@react-navigation/native';
|
|
56
|
+
|
|
57
|
+
// Import navigation helpers
|
|
58
|
+
import { goBack, navigate, replace, pop } from './helpers';
|
|
59
|
+
import { getPaymentSession } from '../state/paymentSession';
|
|
60
|
+
|
|
61
|
+
// Import data getters from fdsdk
|
|
62
|
+
import { getAppData, getEnvironmentData } from '../config/appDataConfig';
|
|
63
|
+
import { useMasterData } from '../providers/MasterDataProvider';
|
|
64
|
+
import { useTheme } from '../theme/ThemeContext';
|
|
65
|
+
|
|
66
|
+
const Stack = createStackNavigator<RootStackParamList>();
|
|
67
|
+
const MahindraRootNavigatorAny = MahindraRootNavigator as React.ComponentType<any>;
|
|
68
|
+
|
|
69
|
+
interface RootNavigatorProps {
|
|
70
|
+
config?: SDKNavigationConfig;
|
|
71
|
+
onExit?: (fdDetails?: any) => void;
|
|
72
|
+
onPanRequired?: () => void;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const RootNavigator: React.FC<RootNavigatorProps> = ({
|
|
76
|
+
config = {},
|
|
77
|
+
onExit,
|
|
78
|
+
onPanRequired,
|
|
79
|
+
}) => {
|
|
80
|
+
// State to track external SDK navigation
|
|
81
|
+
const [externalSDK, setExternalSDK] = React.useState<'shriram' | 'mahindra' | null>(null);
|
|
82
|
+
const [externalSDKFDData, setExternalSDKFDData] = React.useState<any>(null);
|
|
83
|
+
|
|
84
|
+
// Get master data and theme from fdsdk – same theme (and themeName for dark/primary) is passed to Shriram and Mahindra
|
|
85
|
+
const { masterData } = useMasterData();
|
|
86
|
+
const { theme: fdsdkTheme, themeName: fdsdkThemeName } = useTheme();
|
|
87
|
+
|
|
88
|
+
// Handle Android hardware back button
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (Platform.OS !== 'android') return;
|
|
91
|
+
|
|
92
|
+
let lastBackPressTime = 0;
|
|
93
|
+
|
|
94
|
+
const onBackPress = () => {
|
|
95
|
+
// Check if navigation is ready
|
|
96
|
+
if (!navigationRef.current?.isReady()) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const now = Date.now();
|
|
101
|
+
|
|
102
|
+
// Ignore synthetic back events triggered during forward navigation (debounce)
|
|
103
|
+
if (now - lastBackPressTime < 300) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
lastBackPressTime = now;
|
|
108
|
+
|
|
109
|
+
const currentRoute = navigationRef.current?.getCurrentRoute()?.name;
|
|
110
|
+
|
|
111
|
+
// Block back on Payment and PaymentStatus screens
|
|
112
|
+
if (currentRoute === "Payment" || currentRoute === "PaymentStatus") {
|
|
113
|
+
return true; // block hardware back
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// FD Calculator should always redirect to FD List
|
|
117
|
+
if (currentRoute === "FDCalculator") {
|
|
118
|
+
navigationRef.current.navigate('FDList');
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Skip FDList - let screen-specific handler handle it
|
|
123
|
+
if (currentRoute === "FDList") {
|
|
124
|
+
return false; // Let screen-specific handler handle it
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Enable back navigation everywhere else - use the same goBack() helper that header back buttons use
|
|
128
|
+
goBack(); // This calls the same function as the header back button
|
|
129
|
+
return true;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const subscription = BackHandler.addEventListener("hardwareBackPress", onBackPress);
|
|
133
|
+
|
|
134
|
+
return () => {
|
|
135
|
+
subscription.remove();
|
|
136
|
+
};
|
|
137
|
+
}, []);
|
|
138
|
+
|
|
139
|
+
const {
|
|
140
|
+
initialRouteName = 'FDList',
|
|
141
|
+
customScreenOptions = {},
|
|
142
|
+
} = config;
|
|
143
|
+
|
|
144
|
+
const ensureExternalSdkInitialized = React.useCallback((sdkType: 'shriram' | 'mahindra') => {
|
|
145
|
+
const appData = getAppData();
|
|
146
|
+
const storedEnv = getEnvironmentData();
|
|
147
|
+
const envData = storedEnv as ShriramEnvironmentData & MahindraEnvironmentData | null;
|
|
148
|
+
|
|
149
|
+
if (!appData) {
|
|
150
|
+
Alert.alert('Error', 'FDSDK app data is missing. Please restart the flow.');
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
if (!envData) {
|
|
154
|
+
Alert.alert('Error', 'FDSDK environment data is missing. Please initialize environment from host app.');
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
try {
|
|
159
|
+
if (sdkType === 'shriram') {
|
|
160
|
+
initializeShriramEnvironment(envData as ShriramEnvironmentData);
|
|
161
|
+
initializeShriramSDK(appData as ShriramAppData);
|
|
162
|
+
} else {
|
|
163
|
+
initializeMahindraEnvironment(envData as MahindraEnvironmentData);
|
|
164
|
+
initializeMahindraSDK(appData as MahindraAppData);
|
|
165
|
+
}
|
|
166
|
+
return true;
|
|
167
|
+
} catch (error: any) {
|
|
168
|
+
Alert.alert(
|
|
169
|
+
'Error',
|
|
170
|
+
`Failed to initialize ${sdkType === 'shriram' ? 'Shriram' : 'Mahindra'} SDK: ${error?.message || 'Unknown error'}`
|
|
171
|
+
);
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
}, []);
|
|
175
|
+
|
|
176
|
+
// Default screen options
|
|
177
|
+
const defaultScreenOptions = {
|
|
178
|
+
headerShown: false,
|
|
179
|
+
cardStyle: { backgroundColor: '#f8f9fa' },
|
|
180
|
+
animationEnabled: true,
|
|
181
|
+
gestureEnabled: true,
|
|
182
|
+
...customScreenOptions,
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
return (
|
|
186
|
+
<Stack.Navigator
|
|
187
|
+
initialRouteName={initialRouteName}
|
|
188
|
+
screenOptions={defaultScreenOptions}
|
|
189
|
+
>
|
|
190
|
+
<Stack.Screen
|
|
191
|
+
name="FDList"
|
|
192
|
+
options={{ title: 'Fixed Deposits' }}
|
|
193
|
+
>
|
|
194
|
+
{(props) => (
|
|
195
|
+
<FDListScreen
|
|
196
|
+
onGoBack={() => {
|
|
197
|
+
onExit?.();
|
|
198
|
+
}}
|
|
199
|
+
onSelectFD={(fdId) => {
|
|
200
|
+
// FD selected
|
|
201
|
+
}}
|
|
202
|
+
onNavigateToFDCalculator={(fdData) => {
|
|
203
|
+
navigate('FDCalculator', { fdData });
|
|
204
|
+
}}
|
|
205
|
+
onNavigateToExternalSDK={(sdkType, fdData, context) => {
|
|
206
|
+
try {
|
|
207
|
+
// Get app data and environment data from fdsdk
|
|
208
|
+
const appData = getAppData();
|
|
209
|
+
const envData = getEnvironmentData();
|
|
210
|
+
|
|
211
|
+
// Validate that we have the required data
|
|
212
|
+
if (!appData) {
|
|
213
|
+
console.error('Cannot navigate to external SDK: App data not initialized');
|
|
214
|
+
Alert.alert('Error', 'App data not available. Please initialize the SDK first.');
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (!envData) {
|
|
219
|
+
console.error('Cannot navigate to external SDK: Environment data not initialized');
|
|
220
|
+
Alert.alert('Error', 'Environment data not available. Please initialize the SDK first.');
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Initialize the target SDK with all data
|
|
225
|
+
if (sdkType === 'shriram') {
|
|
226
|
+
try {
|
|
227
|
+
// Initialize Shriram SDK
|
|
228
|
+
initializeShriramEnvironment(envData as ShriramEnvironmentData);
|
|
229
|
+
initializeShriramSDK(appData as ShriramAppData);
|
|
230
|
+
|
|
231
|
+
// Navigate to external SDK
|
|
232
|
+
setExternalSDK('shriram');
|
|
233
|
+
setExternalSDKFDData(fdData);
|
|
234
|
+
navigate('ExternalSDK', {
|
|
235
|
+
sdkType: 'shriram',
|
|
236
|
+
fdData,
|
|
237
|
+
providerId: context?.providerId,
|
|
238
|
+
fdListSelectedData: context?.fdListSelectedData,
|
|
239
|
+
completeFDData: context?.completeFDData,
|
|
240
|
+
onboardingIds: context?.onboardingIds,
|
|
241
|
+
});
|
|
242
|
+
} catch (error: any) {
|
|
243
|
+
console.error('Failed to initialize Shriram SDK:', error);
|
|
244
|
+
Alert.alert('Error', `Failed to initialize Shriram SDK: ${error?.message || 'Unknown error'}`);
|
|
245
|
+
}
|
|
246
|
+
} else if (sdkType === 'mahindra') {
|
|
247
|
+
try {
|
|
248
|
+
// Initialize Mahindra SDK
|
|
249
|
+
initializeMahindraEnvironment(envData as MahindraEnvironmentData);
|
|
250
|
+
initializeMahindraSDK(appData as MahindraAppData);
|
|
251
|
+
|
|
252
|
+
// Navigate to external SDK
|
|
253
|
+
setExternalSDK('mahindra');
|
|
254
|
+
setExternalSDKFDData(fdData);
|
|
255
|
+
navigate('ExternalSDK', {
|
|
256
|
+
sdkType: 'mahindra',
|
|
257
|
+
fdData,
|
|
258
|
+
providerId: context?.providerId,
|
|
259
|
+
fdListSelectedData: context?.fdListSelectedData,
|
|
260
|
+
completeFDData: context?.completeFDData,
|
|
261
|
+
onboardingIds: context?.onboardingIds,
|
|
262
|
+
});
|
|
263
|
+
} catch (error: any) {
|
|
264
|
+
console.error('Failed to initialize Mahindra SDK:', error);
|
|
265
|
+
Alert.alert('Error', `Failed to initialize Mahindra SDK: ${error?.message || 'Unknown error'}`);
|
|
266
|
+
}
|
|
267
|
+
} else {
|
|
268
|
+
console.warn('Unknown SDK type:', sdkType);
|
|
269
|
+
}
|
|
270
|
+
} catch (error: any) {
|
|
271
|
+
console.error('Error in onNavigateToExternalSDK:', error);
|
|
272
|
+
Alert.alert('Error', `Navigation error: ${error?.message || 'Unknown error'}`);
|
|
273
|
+
}
|
|
274
|
+
}}
|
|
275
|
+
{...props}
|
|
276
|
+
/>
|
|
277
|
+
)}
|
|
278
|
+
</Stack.Screen>
|
|
279
|
+
|
|
280
|
+
<Stack.Screen
|
|
281
|
+
name="FDCalculator"
|
|
282
|
+
options={{ title: 'FD Calculator' }}
|
|
283
|
+
>
|
|
284
|
+
{(props) => (
|
|
285
|
+
<FDCalculatorScreen
|
|
286
|
+
onGoBack={() => goBack()}
|
|
287
|
+
onNavigateToReviewKYC={() => navigate('ReviewKYC', { fdData: props.route.params?.fdData })}
|
|
288
|
+
fdData={(props.route.params as any)?.fdData}
|
|
289
|
+
{...props}
|
|
290
|
+
/>
|
|
291
|
+
)}
|
|
292
|
+
</Stack.Screen>
|
|
293
|
+
|
|
294
|
+
<Stack.Screen
|
|
295
|
+
name="ExternalSDK"
|
|
296
|
+
options={{ title: 'External SDK', gestureEnabled: false }}
|
|
297
|
+
>
|
|
298
|
+
{(props) => {
|
|
299
|
+
const { sdkType } = (props.route.params as any) || {};
|
|
300
|
+
const routeParams = (props.route.params as any) || {};
|
|
301
|
+
const externalMasterData = routeParams.masterData;
|
|
302
|
+
// #region agent log
|
|
303
|
+
fetch('http://127.0.0.1:7653/ingest/94b18a39-caf3-48fd-98f5-bf1838d9491a',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'04da7c'},body:JSON.stringify({sessionId:'04da7c',runId:'pending-masterdata-trace',hypothesisId:'H3',location:'fdsdk/navigation/RootNavigator.tsx:295',message:'ExternalSDK route handoff',data:{sdkType:sdkType||null,providerId:routeParams?.providerId||null,onboardingProviderId:routeParams?.onboardingIds?.providerId||null,fdListSelectedProviderId:routeParams?.fdListSelectedData?.providerId||null,hasMasterData:!!externalMasterData,masterDataHasDataKey:!!externalMasterData?.data},timestamp:Date.now()})}).catch(()=>{});
|
|
304
|
+
// #endregion agent log
|
|
305
|
+
console.log('[RootNavigator][DEBUG][ExternalSDK] ENTRY', {
|
|
306
|
+
sdkType,
|
|
307
|
+
providerId: routeParams.providerId,
|
|
308
|
+
onboardingProviderId: routeParams.onboardingIds?.providerId,
|
|
309
|
+
fdListSelectedProviderId: routeParams.fdListSelectedData?.providerId,
|
|
310
|
+
hasMasterData: !!externalMasterData,
|
|
311
|
+
masterDataTopKeys: externalMasterData ? Object.keys(externalMasterData).slice(0, 20) : [],
|
|
312
|
+
nestedDataTopKeys: externalMasterData?.data ? Object.keys(externalMasterData.data).slice(0, 20) : [],
|
|
313
|
+
});
|
|
314
|
+
if (sdkType === 'shriram' || sdkType === 'mahindra') {
|
|
315
|
+
const ok = ensureExternalSdkInitialized(sdkType);
|
|
316
|
+
if (!ok) return null;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// Component to set master data and initial FD context in external SDK
|
|
320
|
+
const ShriramSDKWithMasterData: React.FC<{ masterData: any }> = ({ masterData }) => {
|
|
321
|
+
const { setMasterData } = useShriramMasterData();
|
|
322
|
+
const shriramDispatch = useShriramAppDispatch();
|
|
323
|
+
const routeParams = (props.route.params as any) || {};
|
|
324
|
+
|
|
325
|
+
// Set master data
|
|
326
|
+
React.useEffect(() => {
|
|
327
|
+
if (masterData) {
|
|
328
|
+
const dataToSet = masterData.data || masterData;
|
|
329
|
+
setMasterData(dataToSet);
|
|
330
|
+
}
|
|
331
|
+
}, [masterData, setMasterData]);
|
|
332
|
+
|
|
333
|
+
// Set FDListSelectedData using Shriram setter
|
|
334
|
+
React.useEffect(() => {
|
|
335
|
+
if (routeParams.fdListSelectedData) {
|
|
336
|
+
try {
|
|
337
|
+
shriramDispatch(setShriramFDListSelected(routeParams.fdListSelectedData));
|
|
338
|
+
} catch (e) {
|
|
339
|
+
console.log('[RootNavigator] Error setting Shriram FDListSelected:', e);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}, [routeParams.fdListSelectedData, shriramDispatch]);
|
|
343
|
+
|
|
344
|
+
// Set OnboardingIds using Shriram setter
|
|
345
|
+
React.useEffect(() => {
|
|
346
|
+
if (routeParams.onboardingIds) {
|
|
347
|
+
try {
|
|
348
|
+
shriramDispatch(setShriramOnboardingIds({
|
|
349
|
+
...routeParams.onboardingIds,
|
|
350
|
+
providerId: routeParams.providerId || routeParams.onboardingIds?.providerId,
|
|
351
|
+
}));
|
|
352
|
+
} catch (e) {
|
|
353
|
+
console.log('[RootNavigator] Error setting Shriram OnboardingIds:', e);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}, [routeParams.onboardingIds, shriramDispatch]);
|
|
357
|
+
|
|
358
|
+
// Set GlobalData using Shriram setter if present - only set completeFDData boolean
|
|
359
|
+
React.useEffect(() => {
|
|
360
|
+
if (routeParams.shriramSDKGlobalData) {
|
|
361
|
+
try {
|
|
362
|
+
const completeFDData = !!routeParams.shriramSDKGlobalData;
|
|
363
|
+
setShriramGlobalData({ completeFDData });
|
|
364
|
+
console.log('[RootNavigator] Set ShriramSDKGlobalData completeFDData:', completeFDData);
|
|
365
|
+
} catch (e) {
|
|
366
|
+
console.log('[RootNavigator] Error setting Shriram GlobalData:', e);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}, [routeParams.shriramSDKGlobalData]);
|
|
370
|
+
|
|
371
|
+
return (
|
|
372
|
+
<ShriramRootNavigator
|
|
373
|
+
config={{
|
|
374
|
+
initialRouteName: routeParams.initialRouteName || 'FDCalculator',
|
|
375
|
+
initialPaymentStatusParams: routeParams.initialPaymentStatusParams,
|
|
376
|
+
initialFDContext: {
|
|
377
|
+
providerId: routeParams.providerId,
|
|
378
|
+
fdListSelectedData: routeParams.fdListSelectedData,
|
|
379
|
+
completeFDData: routeParams.completeFDData,
|
|
380
|
+
},
|
|
381
|
+
} as any}
|
|
382
|
+
onExit={(fdDetails?: any) => {
|
|
383
|
+
// When exiting external SDK, go back to FDList
|
|
384
|
+
setExternalSDK(null);
|
|
385
|
+
setExternalSDKFDData(null);
|
|
386
|
+
navigate('FDList');
|
|
387
|
+
if (fdDetails) {
|
|
388
|
+
onExit?.(fdDetails);
|
|
389
|
+
}
|
|
390
|
+
}}
|
|
391
|
+
onPanRequired={() => {
|
|
392
|
+
// Exit full SDK flow back to host app and notify callback
|
|
393
|
+
setExternalSDK(null);
|
|
394
|
+
setExternalSDKFDData(null);
|
|
395
|
+
onPanRequired?.();
|
|
396
|
+
onExit?.();
|
|
397
|
+
}}
|
|
398
|
+
/>
|
|
399
|
+
);
|
|
400
|
+
};
|
|
401
|
+
|
|
402
|
+
const MahindraSDKWithMasterData: React.FC<{ masterData: any }> = ({ masterData }) => {
|
|
403
|
+
const { setMasterData } = useMahindraMasterData();
|
|
404
|
+
const mahindraDispatch = useMahindraAppDispatch();
|
|
405
|
+
|
|
406
|
+
// Set master data
|
|
407
|
+
React.useEffect(() => {
|
|
408
|
+
if (masterData) {
|
|
409
|
+
const dataToSet = masterData.data || masterData;
|
|
410
|
+
setMasterData(dataToSet);
|
|
411
|
+
}
|
|
412
|
+
}, [masterData, setMasterData]);
|
|
413
|
+
|
|
414
|
+
// Set FDListSelectedData using Mahindra setter
|
|
415
|
+
React.useEffect(() => {
|
|
416
|
+
if (routeParams.fdListSelectedData) {
|
|
417
|
+
try {
|
|
418
|
+
mahindraDispatch(setMahindraFDListSelected(routeParams.fdListSelectedData));
|
|
419
|
+
} catch (e) {
|
|
420
|
+
console.log('[RootNavigator] Error setting Mahindra FDListSelected:', e);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}, [routeParams.fdListSelectedData, mahindraDispatch]);
|
|
424
|
+
|
|
425
|
+
// Set OnboardingIds using Mahindra setter
|
|
426
|
+
React.useEffect(() => {
|
|
427
|
+
if (routeParams.onboardingIds) {
|
|
428
|
+
try {
|
|
429
|
+
mahindraDispatch(setMahindraOnboardingIds({
|
|
430
|
+
...routeParams.onboardingIds,
|
|
431
|
+
providerId: routeParams.providerId || routeParams.onboardingIds?.providerId,
|
|
432
|
+
}));
|
|
433
|
+
} catch (e) {
|
|
434
|
+
console.log('[RootNavigator] Error setting Mahindra OnboardingIds:', e);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}, [routeParams.onboardingIds, mahindraDispatch]);
|
|
438
|
+
|
|
439
|
+
return (
|
|
440
|
+
<MahindraRootNavigatorAny
|
|
441
|
+
config={{
|
|
442
|
+
initialRouteName: routeParams.initialRouteName || 'FDCalculator',
|
|
443
|
+
forceFetchCustomerDetails: !!routeParams.forceFetchCustomerDetails,
|
|
444
|
+
initialFDContext: {
|
|
445
|
+
providerId: routeParams.providerId,
|
|
446
|
+
fdListSelectedData: routeParams.fdListSelectedData,
|
|
447
|
+
completeFDData: routeParams.completeFDData,
|
|
448
|
+
},
|
|
449
|
+
}}
|
|
450
|
+
onExit={(fdDetails?: any) => {
|
|
451
|
+
// When exiting external SDK, go back to FDList
|
|
452
|
+
setExternalSDK(null);
|
|
453
|
+
setExternalSDKFDData(null);
|
|
454
|
+
navigate('FDList');
|
|
455
|
+
if (fdDetails) {
|
|
456
|
+
onExit?.(fdDetails);
|
|
457
|
+
}
|
|
458
|
+
}}
|
|
459
|
+
onPanRequired={() => {
|
|
460
|
+
// Exit full SDK flow back to host app and notify callback
|
|
461
|
+
setExternalSDK(null);
|
|
462
|
+
setExternalSDKFDData(null);
|
|
463
|
+
onPanRequired?.();
|
|
464
|
+
onExit?.();
|
|
465
|
+
}}
|
|
466
|
+
/>
|
|
467
|
+
);
|
|
468
|
+
};
|
|
469
|
+
|
|
470
|
+
if (sdkType === 'shriram') {
|
|
471
|
+
return (
|
|
472
|
+
<ShriramApiProvider>
|
|
473
|
+
<ShriramMasterDataProvider>
|
|
474
|
+
<ShriramThemeProvider theme={fdsdkTheme as any} initialTheme={fdsdkThemeName as any}>
|
|
475
|
+
<NavigationIndependentTree>
|
|
476
|
+
<NavigationContainer ref={shriramNavigationRef}>
|
|
477
|
+
<ShriramSDKWithMasterData masterData={externalMasterData} />
|
|
478
|
+
</NavigationContainer>
|
|
479
|
+
</NavigationIndependentTree>
|
|
480
|
+
</ShriramThemeProvider>
|
|
481
|
+
</ShriramMasterDataProvider>
|
|
482
|
+
</ShriramApiProvider>
|
|
483
|
+
);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
if (sdkType === 'mahindra') {
|
|
487
|
+
return (
|
|
488
|
+
<MahindraApiProvider>
|
|
489
|
+
<MahindraMasterDataProvider>
|
|
490
|
+
<MahindraThemeProvider theme={fdsdkTheme as any} initialTheme={fdsdkThemeName as any}>
|
|
491
|
+
<NavigationIndependentTree>
|
|
492
|
+
<NavigationContainer ref={mahindraNavigationRef}>
|
|
493
|
+
<MahindraSDKWithMasterData masterData={externalMasterData} />
|
|
494
|
+
</NavigationContainer>
|
|
495
|
+
</NavigationIndependentTree>
|
|
496
|
+
</MahindraThemeProvider>
|
|
497
|
+
</MahindraMasterDataProvider>
|
|
498
|
+
</MahindraApiProvider>
|
|
499
|
+
);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
return null;
|
|
503
|
+
}}
|
|
504
|
+
</Stack.Screen>
|
|
505
|
+
|
|
506
|
+
<Stack.Screen
|
|
507
|
+
name="AadhaarVerification"
|
|
508
|
+
options={{ title: 'Aadhaar Verification' }}
|
|
509
|
+
>
|
|
510
|
+
{(props) => (
|
|
511
|
+
<AadhaarVerificationScreen
|
|
512
|
+
onGoBack={() => goBack()}
|
|
513
|
+
onVerificationComplete={() => {
|
|
514
|
+
navigate('Employee');
|
|
515
|
+
}}
|
|
516
|
+
{...props}
|
|
517
|
+
/>
|
|
518
|
+
)}
|
|
519
|
+
</Stack.Screen>
|
|
520
|
+
|
|
521
|
+
<Stack.Screen
|
|
522
|
+
name="ReviewKYC"
|
|
523
|
+
options={{ title: 'Review KYC' }}
|
|
524
|
+
>
|
|
525
|
+
{(props) => (
|
|
526
|
+
<ReviewKYCScreen
|
|
527
|
+
onGoBack={() => goBack()}
|
|
528
|
+
onContinue={() => {
|
|
529
|
+
navigate('Employee');
|
|
530
|
+
}}
|
|
531
|
+
{...props}
|
|
532
|
+
/>
|
|
533
|
+
)}
|
|
534
|
+
</Stack.Screen>
|
|
535
|
+
|
|
536
|
+
<Stack.Screen
|
|
537
|
+
name="Employee"
|
|
538
|
+
options={{ title: 'Occupation' }}
|
|
539
|
+
>
|
|
540
|
+
{(props) => (
|
|
541
|
+
<EmployeeScreen
|
|
542
|
+
onGoBack={() => goBack()}
|
|
543
|
+
onContinue={() => {
|
|
544
|
+
navigate('NomineeDetail');
|
|
545
|
+
}}
|
|
546
|
+
{...props}
|
|
547
|
+
/>
|
|
548
|
+
)}
|
|
549
|
+
</Stack.Screen>
|
|
550
|
+
|
|
551
|
+
<Stack.Screen
|
|
552
|
+
name="NomineeDetail"
|
|
553
|
+
options={{ title: 'Nominee Details' }}
|
|
554
|
+
>
|
|
555
|
+
{(props) => (
|
|
556
|
+
<NomineeDetailScreen
|
|
557
|
+
onGoBack={() => goBack()}
|
|
558
|
+
onSave={() => {
|
|
559
|
+
navigate('BankDetail');
|
|
560
|
+
}}
|
|
561
|
+
{...props}
|
|
562
|
+
/>
|
|
563
|
+
)}
|
|
564
|
+
</Stack.Screen>
|
|
565
|
+
|
|
566
|
+
<Stack.Screen
|
|
567
|
+
name="BankDetail"
|
|
568
|
+
options={{ title: 'Bank Details' }}
|
|
569
|
+
>
|
|
570
|
+
{(props) => (
|
|
571
|
+
<BankDetailScreen
|
|
572
|
+
onGoBack={() => goBack()}
|
|
573
|
+
onContinue={() => {
|
|
574
|
+
navigate('PayNow');
|
|
575
|
+
}}
|
|
576
|
+
onAddAccount={() => {
|
|
577
|
+
navigate('AddBankAccount');
|
|
578
|
+
}}
|
|
579
|
+
{...props}
|
|
580
|
+
/>
|
|
581
|
+
)}
|
|
582
|
+
</Stack.Screen>
|
|
583
|
+
|
|
584
|
+
<Stack.Screen
|
|
585
|
+
name="AddBankAccount"
|
|
586
|
+
options={{ title: 'Add Bank Account' }}
|
|
587
|
+
>
|
|
588
|
+
{(props) => (
|
|
589
|
+
<AddBankAccountScreen
|
|
590
|
+
onGoBack={() => goBack()}
|
|
591
|
+
onContinue={() => {
|
|
592
|
+
goBack();
|
|
593
|
+
}}
|
|
594
|
+
onFindIFSC={() => {
|
|
595
|
+
navigate('FindIFSC');
|
|
596
|
+
}}
|
|
597
|
+
selectedIFSC={(() => {
|
|
598
|
+
const params = (props.route.params as any);
|
|
599
|
+
return params?.selectedIFSC;
|
|
600
|
+
})()}
|
|
601
|
+
{...props}
|
|
602
|
+
/>
|
|
603
|
+
)}
|
|
604
|
+
</Stack.Screen>
|
|
605
|
+
|
|
606
|
+
<Stack.Screen
|
|
607
|
+
name="FindIFSC"
|
|
608
|
+
options={{ title: 'Find IFSC' }}
|
|
609
|
+
>
|
|
610
|
+
{(props) => (
|
|
611
|
+
<FindIFSCScreen
|
|
612
|
+
onGoBack={() => goBack()}
|
|
613
|
+
onSelect={(ifscData) => {
|
|
614
|
+
pop(1);
|
|
615
|
+
navigate('AddBankAccount', { selectedIFSC: ifscData });
|
|
616
|
+
}}
|
|
617
|
+
initialSearchTerm={(props.route.params as any)?.initialSearchTerm}
|
|
618
|
+
{...props}
|
|
619
|
+
/>
|
|
620
|
+
)}
|
|
621
|
+
</Stack.Screen>
|
|
622
|
+
|
|
623
|
+
<Stack.Screen
|
|
624
|
+
name="PayNow"
|
|
625
|
+
options={{ title: 'Pay Now' }}
|
|
626
|
+
>
|
|
627
|
+
{(props) => (
|
|
628
|
+
<PayNowScreen
|
|
629
|
+
onGoBack={() => goBack()}
|
|
630
|
+
onConfirm={() => {
|
|
631
|
+
// onConfirm is handled inside PayNow after createFD; keep fallback
|
|
632
|
+
}}
|
|
633
|
+
fdData={(props.route.params as any)?.fdData}
|
|
634
|
+
{...props}
|
|
635
|
+
/>
|
|
636
|
+
)}
|
|
637
|
+
</Stack.Screen>
|
|
638
|
+
|
|
639
|
+
<Stack.Screen
|
|
640
|
+
name="Payment"
|
|
641
|
+
options={{ title: 'Payment' }}
|
|
642
|
+
>
|
|
643
|
+
{(props) => (
|
|
644
|
+
<PaymentScreen
|
|
645
|
+
onGoBack={() => goBack()}
|
|
646
|
+
paymentUrl={(props.route.params as any)?.paymentUrl ?? getPaymentSession().paymentUrl ?? ''}
|
|
647
|
+
onPaymentSuccess={(data) => {
|
|
648
|
+
navigate('PaymentStatus', {
|
|
649
|
+
status: 'success',
|
|
650
|
+
paymentData: data
|
|
651
|
+
} as any);
|
|
652
|
+
}}
|
|
653
|
+
onPaymentFailure={(error) => {
|
|
654
|
+
navigate('PaymentStatus', {
|
|
655
|
+
status: 'failed',
|
|
656
|
+
paymentData: error
|
|
657
|
+
} as any);
|
|
658
|
+
}}
|
|
659
|
+
{...props}
|
|
660
|
+
/>
|
|
661
|
+
)}
|
|
662
|
+
</Stack.Screen>
|
|
663
|
+
|
|
664
|
+
<Stack.Screen
|
|
665
|
+
name="PaymentStatus"
|
|
666
|
+
options={{ title: 'Payment Status' }}
|
|
667
|
+
>
|
|
668
|
+
{(props) => (
|
|
669
|
+
<PaymentStatusScreen
|
|
670
|
+
status={(props.route.params as any)?.status || 'pending'}
|
|
671
|
+
transactionId={(props.route.params as any)?.transactionId}
|
|
672
|
+
fdData={(props.route.params as any)?.fdData}
|
|
673
|
+
onRetry={() => {
|
|
674
|
+
navigate('Payment');
|
|
675
|
+
}}
|
|
676
|
+
onContinue={(fdDetails) => {
|
|
677
|
+
onExit?.(fdDetails);
|
|
678
|
+
}}
|
|
679
|
+
{...props}
|
|
680
|
+
/>
|
|
681
|
+
)}
|
|
682
|
+
</Stack.Screen>
|
|
683
|
+
</Stack.Navigator>
|
|
684
|
+
);
|
|
685
|
+
};
|
|
686
|
+
|
|
687
|
+
export default RootNavigator;
|