@finspringinnovations/fixeddepositsdk 1.0.2 → 1.0.4

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.
Files changed (50) hide show
  1. package/lib/api/customerApi.js +1 -0
  2. package/lib/api/fdApi.d.ts +401 -1
  3. package/lib/api/fdApi.js +24 -2
  4. package/lib/components/PendingFDBottomSheet.js +27 -18
  5. package/lib/config/appDataConfig.js +3 -2
  6. package/lib/config/workflowConstants.d.ts +40 -30
  7. package/lib/config/workflowConstants.js +35 -24
  8. package/lib/constants/strings/fd.d.ts +2 -2
  9. package/lib/constants/strings/fd.js +2 -2
  10. package/lib/navigation/RootNavigator.js +167 -196
  11. package/lib/navigation/types.d.ts +4 -1
  12. package/lib/navigation/workflowNavigator.d.ts +1 -1
  13. package/lib/navigation/workflowNavigator.js +107 -26
  14. package/lib/screens/AadhaarVerification.js +1 -11
  15. package/lib/screens/AddBankAccount.js +1 -11
  16. package/lib/screens/BankDetail.js +1 -11
  17. package/lib/screens/Employee.js +1 -11
  18. package/lib/screens/FDCalculator.js +2 -12
  19. package/lib/screens/FDList.js +531 -417
  20. package/lib/screens/FindIFSC.js +1 -11
  21. package/lib/screens/NomineeDetail.js +12 -22
  22. package/lib/screens/PayNow.js +1 -11
  23. package/lib/screens/Payment.js +2 -11
  24. package/lib/screens/PaymentStatus.js +24 -21
  25. package/lib/screens/ReviewKYC.js +3 -12
  26. package/lib/types/workflowTypes.d.ts +1 -1
  27. package/package.json +50 -50
  28. package/src/api/customerApi.ts +1 -0
  29. package/src/api/fdApi.ts +28 -1
  30. package/src/components/PendingFDBottomSheet.tsx +151 -123
  31. package/src/config/appDataConfig.ts +245 -242
  32. package/src/config/workflowConstants.ts +51 -39
  33. package/src/constants/strings/bank.ts +80 -80
  34. package/src/constants/strings/fd.ts +2 -2
  35. package/src/navigation/RootNavigator.tsx +667 -651
  36. package/src/navigation/types.ts +4 -1
  37. package/src/navigation/workflowNavigator.ts +170 -107
  38. package/src/screens/AadhaarVerification.tsx +1 -15
  39. package/src/screens/AddBankAccount.tsx +2 -16
  40. package/src/screens/BankDetail.tsx +1 -15
  41. package/src/screens/Employee.tsx +1 -15
  42. package/src/screens/FDCalculator.tsx +4 -18
  43. package/src/screens/FDList.tsx +2311 -2170
  44. package/src/screens/FindIFSC.tsx +2 -16
  45. package/src/screens/NomineeDetail.tsx +762 -775
  46. package/src/screens/PayNow.tsx +2 -16
  47. package/src/screens/Payment.tsx +190 -203
  48. package/src/screens/PaymentStatus.tsx +574 -576
  49. package/src/screens/ReviewKYC.tsx +2 -15
  50. package/src/types/workflowTypes.ts +1 -10
@@ -36,41 +36,168 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- const react_1 = __importStar(require("react"));
40
39
  const stack_1 = require("@react-navigation/stack");
40
+ const react_1 = __importStar(require("react"));
41
41
  const react_native_1 = require("react-native");
42
- const helpers_1 = require("./helpers");
43
42
  // Import screens
44
- const FDList_1 = __importDefault(require("../screens/FDList"));
45
- const FDCalculator_1 = __importDefault(require("../screens/FDCalculator"));
46
43
  const AadhaarVerification_1 = __importDefault(require("../screens/AadhaarVerification"));
47
- const ReviewKYC_1 = __importDefault(require("../screens/ReviewKYC"));
48
- const Employee_1 = __importDefault(require("../screens/Employee"));
49
- const NomineeDetail_1 = __importDefault(require("../screens/NomineeDetail"));
50
- const BankDetail_1 = __importDefault(require("../screens/BankDetail"));
51
44
  const AddBankAccount_1 = __importDefault(require("../screens/AddBankAccount"));
45
+ const BankDetail_1 = __importDefault(require("../screens/BankDetail"));
46
+ const Employee_1 = __importDefault(require("../screens/Employee"));
47
+ const FDCalculator_1 = __importDefault(require("../screens/FDCalculator"));
48
+ const FDList_1 = __importDefault(require("../screens/FDList"));
52
49
  const FindIFSC_1 = __importDefault(require("../screens/FindIFSC"));
50
+ const NomineeDetail_1 = __importDefault(require("../screens/NomineeDetail"));
53
51
  const PayNow_1 = __importDefault(require("../screens/PayNow"));
54
52
  const Payment_1 = __importDefault(require("../screens/Payment"));
55
53
  const PaymentStatus_1 = __importDefault(require("../screens/PaymentStatus"));
54
+ const ReviewKYC_1 = __importDefault(require("../screens/ReviewKYC"));
56
55
  // Import full SDK navigators and initialization functions
57
- const shriramfdsdk_1 = require("@finspringinnovations/shriramfdsdk");
58
56
  const mahindrafdsdk_1 = require("@finspringinnovations/mahindrafdsdk");
57
+ const shriramfdsdk_1 = require("@finspringinnovations/shriramfdsdk");
59
58
  // Import NavigationContainer and tree wrappers
60
59
  const native_1 = require("@react-navigation/native");
61
60
  // Import navigation helpers
62
- const helpers_2 = require("./helpers");
63
61
  const paymentSession_1 = require("../state/paymentSession");
62
+ const helpers_1 = require("./helpers");
64
63
  // Import data getters from fdsdk
65
64
  const appDataConfig_1 = require("../config/appDataConfig");
66
65
  const MasterDataProvider_1 = require("../providers/MasterDataProvider");
67
66
  const ThemeContext_1 = require("../theme/ThemeContext");
68
67
  const Stack = (0, stack_1.createStackNavigator)();
69
68
  const MahindraRootNavigatorAny = mahindrafdsdk_1.RootNavigator;
69
+ const ShriramSDKContent = ({ masterData, routeParams, onSDKExit, onSDKPanRequired, }) => {
70
+ const { setMasterData } = (0, shriramfdsdk_1.useMasterData)();
71
+ const shriramDispatch = (0, shriramfdsdk_1.useAppDispatch)();
72
+ const [initialized, setInitialized] = react_1.default.useState(false);
73
+ react_1.default.useEffect(() => {
74
+ var _a;
75
+ // Perform all dispatches sequentially to ensure state is ready
76
+ if (masterData) {
77
+ const dataToSet = masterData.data || masterData;
78
+ setMasterData(dataToSet);
79
+ }
80
+ if (routeParams.fdListSelectedData) {
81
+ try {
82
+ shriramDispatch((0, shriramfdsdk_1.setFDListSelected)(routeParams.fdListSelectedData));
83
+ }
84
+ catch (e) {
85
+ console.log('[RootNavigator] Error setting Shriram FDListSelected:', e);
86
+ }
87
+ }
88
+ if (routeParams.onboardingIds) {
89
+ try {
90
+ shriramDispatch((0, shriramfdsdk_1.setOnboardingIds)(Object.assign(Object.assign({}, routeParams.onboardingIds), { providerId: routeParams.providerId || ((_a = routeParams.onboardingIds) === null || _a === void 0 ? void 0 : _a.providerId) })));
91
+ }
92
+ catch (e) {
93
+ console.log('[RootNavigator] Error setting Shriram OnboardingIds:', e);
94
+ }
95
+ }
96
+ if (routeParams.shriramSDKGlobalData) {
97
+ try {
98
+ const completeFDData = !!routeParams.shriramSDKGlobalData;
99
+ (0, shriramfdsdk_1.setGlobalData)({ completeFDData });
100
+ }
101
+ catch (e) {
102
+ console.log('[RootNavigator] Error setting Shriram GlobalData:', e);
103
+ }
104
+ }
105
+ setInitialized(true);
106
+ }, [masterData, routeParams, shriramDispatch, setMasterData]);
107
+ if (!initialized) {
108
+ return null; // Or a loading spinner if preferred
109
+ }
110
+ return (react_1.default.createElement(shriramfdsdk_1.RootNavigator, { config: {
111
+ initialRouteName: routeParams.initialRouteName || 'FDCalculator',
112
+ initialPaymentStatusParams: routeParams.initialPaymentStatusParams,
113
+ initialFDContext: {
114
+ providerId: routeParams.providerId,
115
+ fdListSelectedData: routeParams.fdListSelectedData,
116
+ completeFDData: routeParams.completeFDData,
117
+ },
118
+ }, onExit: onSDKExit, onPanRequired: onSDKPanRequired }));
119
+ };
120
+ const MahindraSDKContent = ({ masterData, routeParams, onSDKExit, onSDKPanRequired, }) => {
121
+ const { setMasterData } = (0, mahindrafdsdk_1.useMasterData)();
122
+ const mahindraDispatch = (0, mahindrafdsdk_1.useAppDispatch)();
123
+ const [initialized, setInitialized] = react_1.default.useState(false);
124
+ react_1.default.useEffect(() => {
125
+ var _a;
126
+ // Perform all dispatches sequentially to ensure state is ready
127
+ if (masterData) {
128
+ const dataToSet = masterData.data || masterData;
129
+ setMasterData(dataToSet);
130
+ }
131
+ if (routeParams.fdListSelectedData) {
132
+ try {
133
+ mahindraDispatch((0, mahindrafdsdk_1.setFDListSelected)(routeParams.fdListSelectedData));
134
+ }
135
+ catch (e) {
136
+ console.log('[RootNavigator] Error setting Mahindra FDListSelected:', e);
137
+ }
138
+ }
139
+ if (routeParams.onboardingIds) {
140
+ try {
141
+ mahindraDispatch((0, mahindrafdsdk_1.setOnboardingIds)(Object.assign(Object.assign({}, routeParams.onboardingIds), { providerId: routeParams.providerId || ((_a = routeParams.onboardingIds) === null || _a === void 0 ? void 0 : _a.providerId) })));
142
+ }
143
+ catch (e) {
144
+ console.log('[RootNavigator] Error setting Mahindra OnboardingIds:', e);
145
+ }
146
+ }
147
+ if (routeParams.initialPaymentUrl) {
148
+ (0, mahindrafdsdk_1.setPaymentSession)({
149
+ paymentUrl: routeParams.initialPaymentUrl,
150
+ transactionId: routeParams.initialPaymentTransactionId,
151
+ });
152
+ }
153
+ setInitialized(true);
154
+ }, [masterData, routeParams, mahindraDispatch, setMasterData]);
155
+ if (!initialized) {
156
+ return null;
157
+ }
158
+ return (react_1.default.createElement(MahindraRootNavigatorAny, { config: {
159
+ initialRouteName: routeParams.initialRouteName || 'FDCalculator',
160
+ forceFetchCustomerDetails: !!routeParams.forceFetchCustomerDetails,
161
+ initialPaymentStatusParams: routeParams.initialPaymentStatusParams,
162
+ initialFDContext: {
163
+ providerId: routeParams.providerId,
164
+ fdListSelectedData: routeParams.fdListSelectedData,
165
+ completeFDData: routeParams.completeFDData,
166
+ },
167
+ }, onExit: onSDKExit, onPanRequired: onSDKPanRequired }));
168
+ };
70
169
  const RootNavigator = ({ config = {}, onExit, onPanRequired, }) => {
71
170
  // State to track external SDK navigation
72
171
  const [externalSDK, setExternalSDK] = react_1.default.useState(null);
73
172
  const [externalSDKFDData, setExternalSDKFDData] = react_1.default.useState(null);
173
+ // Stable exit callbacks — defined here so they're memoized across renders
174
+ // and can be passed as stable props to the module-level SDK content components.
175
+ const handleShriramExit = react_1.default.useCallback((fdDetails) => {
176
+ setExternalSDK(null);
177
+ setExternalSDKFDData(null);
178
+ (0, helpers_1.navigate)('FDList');
179
+ if (fdDetails)
180
+ onExit === null || onExit === void 0 ? void 0 : onExit(fdDetails);
181
+ }, [onExit]);
182
+ const handleShriramPanRequired = react_1.default.useCallback(() => {
183
+ setExternalSDK(null);
184
+ setExternalSDKFDData(null);
185
+ onPanRequired === null || onPanRequired === void 0 ? void 0 : onPanRequired();
186
+ onExit === null || onExit === void 0 ? void 0 : onExit();
187
+ }, [onExit, onPanRequired]);
188
+ const handleMahindraExit = react_1.default.useCallback((fdDetails) => {
189
+ setExternalSDK(null);
190
+ setExternalSDKFDData(null);
191
+ (0, helpers_1.navigate)('FDList');
192
+ if (fdDetails)
193
+ onExit === null || onExit === void 0 ? void 0 : onExit(fdDetails);
194
+ }, [onExit]);
195
+ const handleMahindraPanRequired = react_1.default.useCallback(() => {
196
+ setExternalSDK(null);
197
+ setExternalSDKFDData(null);
198
+ onPanRequired === null || onPanRequired === void 0 ? void 0 : onPanRequired();
199
+ onExit === null || onExit === void 0 ? void 0 : onExit();
200
+ }, [onExit, onPanRequired]);
74
201
  // Get master data and theme from fdsdk – same theme (and themeName for dark/primary) is passed to Shriram and Mahindra
75
202
  const { masterData } = (0, MasterDataProvider_1.useMasterData)();
76
203
  const { theme: fdsdkTheme, themeName: fdsdkThemeName } = (0, ThemeContext_1.useTheme)();
@@ -78,35 +205,8 @@ const RootNavigator = ({ config = {}, onExit, onPanRequired, }) => {
78
205
  (0, react_1.useEffect)(() => {
79
206
  if (react_native_1.Platform.OS !== 'android')
80
207
  return;
81
- let lastBackPressTime = 0;
82
208
  const onBackPress = () => {
83
- var _a, _b, _c;
84
- // Check if navigation is ready
85
- if (!((_a = helpers_1.navigationRef.current) === null || _a === void 0 ? void 0 : _a.isReady())) {
86
- return false;
87
- }
88
- const now = Date.now();
89
- // Ignore synthetic back events triggered during forward navigation (debounce)
90
- if (now - lastBackPressTime < 300) {
91
- return false;
92
- }
93
- lastBackPressTime = now;
94
- const currentRoute = (_c = (_b = helpers_1.navigationRef.current) === null || _b === void 0 ? void 0 : _b.getCurrentRoute()) === null || _c === void 0 ? void 0 : _c.name;
95
- // Block back on Payment and PaymentStatus screens
96
- if (currentRoute === "Payment" || currentRoute === "PaymentStatus") {
97
- return true; // block hardware back
98
- }
99
- // FD Calculator should always redirect to FD List
100
- if (currentRoute === "FDCalculator") {
101
- helpers_1.navigationRef.current.navigate('FDList');
102
- return true;
103
- }
104
- // Skip FDList - let screen-specific handler handle it
105
- if (currentRoute === "FDList") {
106
- return false; // Let screen-specific handler handle it
107
- }
108
- // Enable back navigation everywhere else - use the same goBack() helper that header back buttons use
109
- (0, helpers_2.goBack)(); // This calls the same function as the header back button
209
+ // Return true to consume the event and do nothing (stop back navigation)
110
210
  return true;
111
211
  };
112
212
  const subscription = react_native_1.BackHandler.addEventListener("hardwareBackPress", onBackPress);
@@ -144,14 +244,14 @@ const RootNavigator = ({ config = {}, onExit, onPanRequired, }) => {
144
244
  }
145
245
  }, []);
146
246
  // Default screen options
147
- const defaultScreenOptions = Object.assign({ headerShown: false, cardStyle: { backgroundColor: '#f8f9fa' }, animationEnabled: true, gestureEnabled: true }, customScreenOptions);
247
+ const defaultScreenOptions = Object.assign({ headerShown: false, cardStyle: { backgroundColor: '#f8f9fa' }, animationEnabled: true, gestureEnabled: false }, customScreenOptions);
148
248
  return (react_1.default.createElement(Stack.Navigator, { initialRouteName: initialRouteName, screenOptions: defaultScreenOptions },
149
249
  react_1.default.createElement(Stack.Screen, { name: "FDList", options: { title: 'Fixed Deposits' } }, (props) => (react_1.default.createElement(FDList_1.default, Object.assign({ onGoBack: () => {
150
250
  onExit === null || onExit === void 0 ? void 0 : onExit();
151
251
  }, onSelectFD: (fdId) => {
152
252
  // FD selected
153
253
  }, onNavigateToFDCalculator: (fdData) => {
154
- (0, helpers_2.navigate)('FDCalculator', { fdData });
254
+ (0, helpers_1.navigate)('FDCalculator', { fdData });
155
255
  }, onNavigateToExternalSDK: (sdkType, fdData, context) => {
156
256
  try {
157
257
  // Get app data and environment data from fdsdk
@@ -177,7 +277,7 @@ const RootNavigator = ({ config = {}, onExit, onPanRequired, }) => {
177
277
  // Navigate to external SDK
178
278
  setExternalSDK('shriram');
179
279
  setExternalSDKFDData(fdData);
180
- (0, helpers_2.navigate)('ExternalSDK', {
280
+ (0, helpers_1.navigate)('ExternalSDK', {
181
281
  sdkType: 'shriram',
182
282
  fdData,
183
283
  providerId: context === null || context === void 0 ? void 0 : context.providerId,
@@ -199,7 +299,7 @@ const RootNavigator = ({ config = {}, onExit, onPanRequired, }) => {
199
299
  // Navigate to external SDK
200
300
  setExternalSDK('mahindra');
201
301
  setExternalSDKFDData(fdData);
202
- (0, helpers_2.navigate)('ExternalSDK', {
302
+ (0, helpers_1.navigate)('ExternalSDK', {
203
303
  sdkType: 'mahindra',
204
304
  fdData,
205
305
  providerId: context === null || context === void 0 ? void 0 : context.providerId,
@@ -224,7 +324,7 @@ const RootNavigator = ({ config = {}, onExit, onPanRequired, }) => {
224
324
  } }, props)))),
225
325
  react_1.default.createElement(Stack.Screen, { name: "FDCalculator", options: { title: 'FD Calculator' } }, (props) => {
226
326
  var _a;
227
- return (react_1.default.createElement(FDCalculator_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), onNavigateToReviewKYC: () => { var _a; return (0, helpers_2.navigate)('ReviewKYC', { fdData: (_a = props.route.params) === null || _a === void 0 ? void 0 : _a.fdData }); }, fdData: (_a = props.route.params) === null || _a === void 0 ? void 0 : _a.fdData }, props)));
327
+ return (react_1.default.createElement(FDCalculator_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), onNavigateToReviewKYC: () => { var _a; return (0, helpers_1.navigate)('ReviewKYC', { fdData: (_a = props.route.params) === null || _a === void 0 ? void 0 : _a.fdData }); }, fdData: (_a = props.route.params) === null || _a === void 0 ? void 0 : _a.fdData }, props)));
228
328
  }),
229
329
  react_1.default.createElement(Stack.Screen, { name: "ExternalSDK", options: { title: 'External SDK', gestureEnabled: false } }, (props) => {
230
330
  var _a, _b, _c, _d;
@@ -248,142 +348,13 @@ const RootNavigator = ({ config = {}, onExit, onPanRequired, }) => {
248
348
  if (!ok)
249
349
  return null;
250
350
  }
251
- // Component to set master data and initial FD context in external SDK
252
- const ShriramSDKWithMasterData = ({ masterData }) => {
253
- const { setMasterData } = (0, shriramfdsdk_1.useMasterData)();
254
- const shriramDispatch = (0, shriramfdsdk_1.useAppDispatch)();
255
- const routeParams = props.route.params || {};
256
- // Set master data
257
- react_1.default.useEffect(() => {
258
- if (masterData) {
259
- const dataToSet = masterData.data || masterData;
260
- setMasterData(dataToSet);
261
- }
262
- }, [masterData, setMasterData]);
263
- // Set FDListSelectedData using Shriram setter
264
- react_1.default.useEffect(() => {
265
- if (routeParams.fdListSelectedData) {
266
- try {
267
- shriramDispatch((0, shriramfdsdk_1.setFDListSelected)(routeParams.fdListSelectedData));
268
- }
269
- catch (e) {
270
- console.log('[RootNavigator] Error setting Shriram FDListSelected:', e);
271
- }
272
- }
273
- }, [routeParams.fdListSelectedData, shriramDispatch]);
274
- // Set OnboardingIds using Shriram setter
275
- react_1.default.useEffect(() => {
276
- var _a;
277
- if (routeParams.onboardingIds) {
278
- try {
279
- shriramDispatch((0, shriramfdsdk_1.setOnboardingIds)(Object.assign(Object.assign({}, routeParams.onboardingIds), { providerId: routeParams.providerId || ((_a = routeParams.onboardingIds) === null || _a === void 0 ? void 0 : _a.providerId) })));
280
- }
281
- catch (e) {
282
- console.log('[RootNavigator] Error setting Shriram OnboardingIds:', e);
283
- }
284
- }
285
- }, [routeParams.onboardingIds, shriramDispatch]);
286
- // Set GlobalData using Shriram setter if present - only set completeFDData boolean
287
- react_1.default.useEffect(() => {
288
- if (routeParams.shriramSDKGlobalData) {
289
- try {
290
- const completeFDData = !!routeParams.shriramSDKGlobalData;
291
- (0, shriramfdsdk_1.setGlobalData)({ completeFDData });
292
- console.log('[RootNavigator] Set ShriramSDKGlobalData completeFDData:', completeFDData);
293
- }
294
- catch (e) {
295
- console.log('[RootNavigator] Error setting Shriram GlobalData:', e);
296
- }
297
- }
298
- }, [routeParams.shriramSDKGlobalData]);
299
- return (react_1.default.createElement(shriramfdsdk_1.RootNavigator, { config: {
300
- initialRouteName: routeParams.initialRouteName || 'FDCalculator',
301
- initialPaymentStatusParams: routeParams.initialPaymentStatusParams,
302
- initialFDContext: {
303
- providerId: routeParams.providerId,
304
- fdListSelectedData: routeParams.fdListSelectedData,
305
- completeFDData: routeParams.completeFDData,
306
- },
307
- }, onExit: (fdDetails) => {
308
- // When exiting external SDK, go back to FDList
309
- setExternalSDK(null);
310
- setExternalSDKFDData(null);
311
- (0, helpers_2.navigate)('FDList');
312
- if (fdDetails) {
313
- onExit === null || onExit === void 0 ? void 0 : onExit(fdDetails);
314
- }
315
- }, onPanRequired: () => {
316
- // Exit full SDK flow back to host app and notify callback
317
- setExternalSDK(null);
318
- setExternalSDKFDData(null);
319
- onPanRequired === null || onPanRequired === void 0 ? void 0 : onPanRequired();
320
- onExit === null || onExit === void 0 ? void 0 : onExit();
321
- } }));
322
- };
323
- const MahindraSDKWithMasterData = ({ masterData }) => {
324
- const { setMasterData } = (0, mahindrafdsdk_1.useMasterData)();
325
- const mahindraDispatch = (0, mahindrafdsdk_1.useAppDispatch)();
326
- // Set master data
327
- react_1.default.useEffect(() => {
328
- if (masterData) {
329
- const dataToSet = masterData.data || masterData;
330
- setMasterData(dataToSet);
331
- }
332
- }, [masterData, setMasterData]);
333
- // Set FDListSelectedData using Mahindra setter
334
- react_1.default.useEffect(() => {
335
- if (routeParams.fdListSelectedData) {
336
- try {
337
- mahindraDispatch((0, mahindrafdsdk_1.setFDListSelected)(routeParams.fdListSelectedData));
338
- }
339
- catch (e) {
340
- console.log('[RootNavigator] Error setting Mahindra FDListSelected:', e);
341
- }
342
- }
343
- }, [routeParams.fdListSelectedData, mahindraDispatch]);
344
- // Set OnboardingIds using Mahindra setter
345
- react_1.default.useEffect(() => {
346
- var _a;
347
- if (routeParams.onboardingIds) {
348
- try {
349
- mahindraDispatch((0, mahindrafdsdk_1.setOnboardingIds)(Object.assign(Object.assign({}, routeParams.onboardingIds), { providerId: routeParams.providerId || ((_a = routeParams.onboardingIds) === null || _a === void 0 ? void 0 : _a.providerId) })));
350
- }
351
- catch (e) {
352
- console.log('[RootNavigator] Error setting Mahindra OnboardingIds:', e);
353
- }
354
- }
355
- }, [routeParams.onboardingIds, mahindraDispatch]);
356
- return (react_1.default.createElement(MahindraRootNavigatorAny, { config: {
357
- initialRouteName: routeParams.initialRouteName || 'FDCalculator',
358
- forceFetchCustomerDetails: !!routeParams.forceFetchCustomerDetails,
359
- initialFDContext: {
360
- providerId: routeParams.providerId,
361
- fdListSelectedData: routeParams.fdListSelectedData,
362
- completeFDData: routeParams.completeFDData,
363
- },
364
- }, onExit: (fdDetails) => {
365
- // When exiting external SDK, go back to FDList
366
- setExternalSDK(null);
367
- setExternalSDKFDData(null);
368
- (0, helpers_2.navigate)('FDList');
369
- if (fdDetails) {
370
- onExit === null || onExit === void 0 ? void 0 : onExit(fdDetails);
371
- }
372
- }, onPanRequired: () => {
373
- // Exit full SDK flow back to host app and notify callback
374
- setExternalSDK(null);
375
- setExternalSDKFDData(null);
376
- onPanRequired === null || onPanRequired === void 0 ? void 0 : onPanRequired();
377
- onExit === null || onExit === void 0 ? void 0 : onExit();
378
- } }));
379
- };
380
351
  if (sdkType === 'shriram') {
381
352
  return (react_1.default.createElement(shriramfdsdk_1.ApiProvider, null,
382
353
  react_1.default.createElement(shriramfdsdk_1.MasterDataProvider, null,
383
354
  react_1.default.createElement(shriramfdsdk_1.ThemeProvider, { theme: fdsdkTheme, initialTheme: fdsdkThemeName },
384
355
  react_1.default.createElement(native_1.NavigationIndependentTree, null,
385
356
  react_1.default.createElement(native_1.NavigationContainer, { ref: shriramfdsdk_1.navigationRef },
386
- react_1.default.createElement(ShriramSDKWithMasterData, { masterData: externalMasterData })))))));
357
+ react_1.default.createElement(ShriramSDKContent, { masterData: externalMasterData, routeParams: routeParams, onSDKExit: handleShriramExit, onSDKPanRequired: handleShriramPanRequired })))))));
387
358
  }
388
359
  if (sdkType === 'mahindra') {
389
360
  return (react_1.default.createElement(mahindrafdsdk_1.ApiProvider, null,
@@ -391,57 +362,57 @@ const RootNavigator = ({ config = {}, onExit, onPanRequired, }) => {
391
362
  react_1.default.createElement(mahindrafdsdk_1.ThemeProvider, { theme: fdsdkTheme, initialTheme: fdsdkThemeName },
392
363
  react_1.default.createElement(native_1.NavigationIndependentTree, null,
393
364
  react_1.default.createElement(native_1.NavigationContainer, { ref: mahindrafdsdk_1.navigationRef },
394
- react_1.default.createElement(MahindraSDKWithMasterData, { masterData: externalMasterData })))))));
365
+ react_1.default.createElement(MahindraSDKContent, { masterData: externalMasterData, routeParams: routeParams, onSDKExit: handleMahindraExit, onSDKPanRequired: handleMahindraPanRequired })))))));
395
366
  }
396
367
  return null;
397
368
  }),
398
- react_1.default.createElement(Stack.Screen, { name: "AadhaarVerification", options: { title: 'Aadhaar Verification' } }, (props) => (react_1.default.createElement(AadhaarVerification_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), onVerificationComplete: () => {
399
- (0, helpers_2.navigate)('Employee');
369
+ react_1.default.createElement(Stack.Screen, { name: "AadhaarVerification", options: { title: 'Aadhaar Verification' } }, (props) => (react_1.default.createElement(AadhaarVerification_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), onVerificationComplete: () => {
370
+ (0, helpers_1.navigate)('Employee');
400
371
  } }, props)))),
401
- react_1.default.createElement(Stack.Screen, { name: "ReviewKYC", options: { title: 'Review KYC' } }, (props) => (react_1.default.createElement(ReviewKYC_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), onContinue: () => {
402
- (0, helpers_2.navigate)('Employee');
372
+ react_1.default.createElement(Stack.Screen, { name: "ReviewKYC", options: { title: 'Review KYC' } }, (props) => (react_1.default.createElement(ReviewKYC_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), onContinue: () => {
373
+ (0, helpers_1.navigate)('Employee');
403
374
  } }, props)))),
404
- react_1.default.createElement(Stack.Screen, { name: "Employee", options: { title: 'Occupation' } }, (props) => (react_1.default.createElement(Employee_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), onContinue: () => {
405
- (0, helpers_2.navigate)('NomineeDetail');
375
+ react_1.default.createElement(Stack.Screen, { name: "Employee", options: { title: 'Occupation' } }, (props) => (react_1.default.createElement(Employee_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), onContinue: () => {
376
+ (0, helpers_1.navigate)('NomineeDetail');
406
377
  } }, props)))),
407
- react_1.default.createElement(Stack.Screen, { name: "NomineeDetail", options: { title: 'Nominee Details' } }, (props) => (react_1.default.createElement(NomineeDetail_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), onSave: () => {
408
- (0, helpers_2.navigate)('BankDetail');
378
+ react_1.default.createElement(Stack.Screen, { name: "NomineeDetail", options: { title: 'Nominee Details' } }, (props) => (react_1.default.createElement(NomineeDetail_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), onSave: () => {
379
+ (0, helpers_1.navigate)('BankDetail');
409
380
  } }, props)))),
410
- react_1.default.createElement(Stack.Screen, { name: "BankDetail", options: { title: 'Bank Details' } }, (props) => (react_1.default.createElement(BankDetail_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), onContinue: () => {
411
- (0, helpers_2.navigate)('PayNow');
381
+ react_1.default.createElement(Stack.Screen, { name: "BankDetail", options: { title: 'Bank Details' } }, (props) => (react_1.default.createElement(BankDetail_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), onContinue: () => {
382
+ (0, helpers_1.navigate)('PayNow');
412
383
  }, onAddAccount: () => {
413
- (0, helpers_2.navigate)('AddBankAccount');
384
+ (0, helpers_1.navigate)('AddBankAccount');
414
385
  } }, props)))),
415
- react_1.default.createElement(Stack.Screen, { name: "AddBankAccount", options: { title: 'Add Bank Account' } }, (props) => (react_1.default.createElement(AddBankAccount_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), onContinue: () => {
416
- (0, helpers_2.goBack)();
386
+ react_1.default.createElement(Stack.Screen, { name: "AddBankAccount", options: { title: 'Add Bank Account' } }, (props) => (react_1.default.createElement(AddBankAccount_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), onContinue: () => {
387
+ (0, helpers_1.goBack)();
417
388
  }, onFindIFSC: () => {
418
- (0, helpers_2.navigate)('FindIFSC');
389
+ (0, helpers_1.navigate)('FindIFSC');
419
390
  }, selectedIFSC: (() => {
420
391
  const params = props.route.params;
421
392
  return params === null || params === void 0 ? void 0 : params.selectedIFSC;
422
393
  })() }, props)))),
423
394
  react_1.default.createElement(Stack.Screen, { name: "FindIFSC", options: { title: 'Find IFSC' } }, (props) => {
424
395
  var _a;
425
- return (react_1.default.createElement(FindIFSC_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), onSelect: (ifscData) => {
426
- (0, helpers_2.pop)(1);
427
- (0, helpers_2.navigate)('AddBankAccount', { selectedIFSC: ifscData });
396
+ return (react_1.default.createElement(FindIFSC_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), onSelect: (ifscData) => {
397
+ (0, helpers_1.pop)(1);
398
+ (0, helpers_1.navigate)('AddBankAccount', { selectedIFSC: ifscData });
428
399
  }, initialSearchTerm: (_a = props.route.params) === null || _a === void 0 ? void 0 : _a.initialSearchTerm }, props)));
429
400
  }),
430
401
  react_1.default.createElement(Stack.Screen, { name: "PayNow", options: { title: 'Pay Now' } }, (props) => {
431
402
  var _a;
432
- return (react_1.default.createElement(PayNow_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), onConfirm: () => {
403
+ return (react_1.default.createElement(PayNow_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), onConfirm: () => {
433
404
  // onConfirm is handled inside PayNow after createFD; keep fallback
434
405
  }, fdData: (_a = props.route.params) === null || _a === void 0 ? void 0 : _a.fdData }, props)));
435
406
  }),
436
407
  react_1.default.createElement(Stack.Screen, { name: "Payment", options: { title: 'Payment' } }, (props) => {
437
408
  var _a, _b, _c;
438
- return (react_1.default.createElement(Payment_1.default, Object.assign({ onGoBack: () => (0, helpers_2.goBack)(), paymentUrl: (_c = (_b = (_a = props.route.params) === null || _a === void 0 ? void 0 : _a.paymentUrl) !== null && _b !== void 0 ? _b : (0, paymentSession_1.getPaymentSession)().paymentUrl) !== null && _c !== void 0 ? _c : '', onPaymentSuccess: (data) => {
439
- (0, helpers_2.navigate)('PaymentStatus', {
409
+ return (react_1.default.createElement(Payment_1.default, Object.assign({ onGoBack: () => (0, helpers_1.goBack)(), paymentUrl: (_c = (_b = (_a = props.route.params) === null || _a === void 0 ? void 0 : _a.paymentUrl) !== null && _b !== void 0 ? _b : (0, paymentSession_1.getPaymentSession)().paymentUrl) !== null && _c !== void 0 ? _c : '', onPaymentSuccess: (data) => {
410
+ (0, helpers_1.navigate)('PaymentStatus', {
440
411
  status: 'success',
441
412
  paymentData: data
442
413
  });
443
414
  }, onPaymentFailure: (error) => {
444
- (0, helpers_2.navigate)('PaymentStatus', {
415
+ (0, helpers_1.navigate)('PaymentStatus', {
445
416
  status: 'failed',
446
417
  paymentData: error
447
418
  });
@@ -450,7 +421,7 @@ const RootNavigator = ({ config = {}, onExit, onPanRequired, }) => {
450
421
  react_1.default.createElement(Stack.Screen, { name: "PaymentStatus", options: { title: 'Payment Status' } }, (props) => {
451
422
  var _a, _b, _c;
452
423
  return (react_1.default.createElement(PaymentStatus_1.default, Object.assign({ status: ((_a = props.route.params) === null || _a === void 0 ? void 0 : _a.status) || 'pending', transactionId: (_b = props.route.params) === null || _b === void 0 ? void 0 : _b.transactionId, fdData: (_c = props.route.params) === null || _c === void 0 ? void 0 : _c.fdData, onRetry: () => {
453
- (0, helpers_2.navigate)('Payment');
424
+ (0, helpers_1.navigate)('Payment');
454
425
  }, onContinue: (fdDetails) => {
455
426
  onExit === null || onExit === void 0 ? void 0 : onExit(fdDetails);
456
427
  } }, props)));
@@ -105,12 +105,15 @@ export type RootStackParamList = {
105
105
  masterData?: any;
106
106
  onboardingIds?: any;
107
107
  initialRouteName?: string;
108
- /** When opening Shriram with initialRouteName 'PaymentStatus', pass status/transactionId/fdData here */
108
+ /** When opening Shriram/Mahindra with initialRouteName 'PaymentStatus', pass status/transactionId/fdData here */
109
109
  initialPaymentStatusParams?: {
110
110
  status?: 'success' | 'failed' | 'pending';
111
111
  transactionId?: string;
112
112
  fdData?: any;
113
113
  };
114
+ /** When opening Mahindra with initialRouteName 'Payment', pass the resolved payment URL and transactionId here */
115
+ initialPaymentUrl?: string;
116
+ initialPaymentTransactionId?: string;
114
117
  shriramSDKGlobalData?: any;
115
118
  mahindraSDKGlobalData?: any;
116
119
  forceFetchCustomerDetails?: boolean;
@@ -1,4 +1,4 @@
1
- import type { InvestmentData, CustomerData, AppData, FDData } from '../types/dataTypes';
1
+ import type { AppData, CustomerData, FDData, InvestmentData } from '../types/dataTypes';
2
2
  import type { WorkflowStateSriram } from '../types/workflowTypes';
3
3
  /**
4
4
  * Centralized navigation for FD workflow based on Flutter implementation