@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
@@ -137,17 +137,7 @@ const FindIFSC = ({ onGoBack, onSelect, initialSearchTerm }) => {
137
137
  const handleBackPress = () => {
138
138
  (0, helpers_1.navigate)('AddBankAccount');
139
139
  };
140
- // Handle Android hardware back button
141
- (0, react_1.useEffect)(() => {
142
- if (react_native_1.Platform.OS !== 'android')
143
- return;
144
- const onHardwareBackPress = () => {
145
- handleBackPress();
146
- return true; // Prevent default behavior
147
- };
148
- const backHandler = react_native_1.BackHandler.addEventListener('hardwareBackPress', onHardwareBackPress);
149
- return () => backHandler.remove();
150
- }, []);
140
+ // Removed screen-level hardware back handler to allow only header back button navigation
151
141
  return (react_1.default.createElement(SafeAreaWrapper_1.default, { includeTop: false, bottomPadding: 25, statusBarColor: "#000000", statusBarStyle: "light-content" },
152
142
  react_1.default.createElement(components_1.Header, { title: bank_1.BANK_STRINGS.FIND_IFSC_TITLE, onBackPress: handleBackPress, backgroundColor: colors.primary }),
153
143
  react_1.default.createElement(react_native_1.ScrollView, { style: styles.container, showsVerticalScrollIndicator: false },
@@ -36,26 +36,26 @@ 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 datetimepicker_1 = __importDefault(require("@react-native-community/datetimepicker"));
39
40
  const react_1 = __importStar(require("react"));
40
41
  const react_native_1 = require("react-native");
41
42
  const Ionicons_1 = __importDefault(require("react-native-vector-icons/Ionicons"));
42
- const datetimepicker_1 = __importDefault(require("@react-native-community/datetimepicker"));
43
43
  // import DatePicker from 'react-native-date-picker'; // Commented out old date picker
44
- const SafeAreaWrapper_1 = __importDefault(require("../components/SafeAreaWrapper"));
44
+ const native_1 = require("@react-navigation/native");
45
+ const customerApi_1 = require("../api/customerApi");
46
+ const workflowApi_1 = require("../api/workflowApi");
45
47
  const components_1 = require("../components");
46
48
  const ActionButton_1 = __importDefault(require("../components/ActionButton"));
49
+ const SafeAreaWrapper_1 = __importDefault(require("../components/SafeAreaWrapper"));
47
50
  const TextFieldWithLabel_1 = __importDefault(require("../components/TextFieldWithLabel"));
48
- const ThemeContext_1 = require("../theme/ThemeContext");
49
- const customerApi_1 = require("../api/customerApi");
50
- const MasterDataProvider_1 = require("../providers/MasterDataProvider");
51
- const store_1 = require("../store");
52
51
  const appDataConfig_1 = require("../config/appDataConfig");
53
- const workflowApi_1 = require("../api/workflowApi");
54
- const native_1 = require("@react-navigation/native");
55
- const helpers_1 = require("../navigation/helpers");
56
52
  const base64Images_1 = require("../constants/strings/base64Images");
57
- const nominee_1 = require("../constants/strings/nominee");
58
53
  const common_1 = require("../constants/strings/common");
54
+ const nominee_1 = require("../constants/strings/nominee");
55
+ const helpers_1 = require("../navigation/helpers");
56
+ const MasterDataProvider_1 = require("../providers/MasterDataProvider");
57
+ const store_1 = require("../store");
58
+ const ThemeContext_1 = require("../theme/ThemeContext");
59
59
  const makeNominationOptions = ['Yes', 'No'];
60
60
  const NomineeDetail = ({ onGoBack, onSave, initialData }) => {
61
61
  var _a;
@@ -500,17 +500,7 @@ const NomineeDetail = ({ onGoBack, onSave, initialData }) => {
500
500
  (0, helpers_1.navigate)('Employee');
501
501
  }
502
502
  };
503
- // Handle Android hardware back button
504
- (0, react_1.useEffect)(() => {
505
- if (react_native_1.Platform.OS !== 'android')
506
- return;
507
- const onHardwareBackPress = () => {
508
- handleBackPress();
509
- return true; // Prevent default behavior
510
- };
511
- const backHandler = react_native_1.BackHandler.addEventListener('hardwareBackPress', onHardwareBackPress);
512
- return () => backHandler.remove();
513
- }, [defaultProviderId, workflowInstanceId, applicationId]);
503
+ // Removed screen-level hardware back handler to allow only header back button navigation
514
504
  return (react_1.default.createElement(SafeAreaWrapper_1.default, { includeTop: false, bottomPadding: 25, statusBarColor: "#000000", statusBarStyle: "light-content" },
515
505
  react_1.default.createElement(components_1.Header, { title: nominee_1.NOMINEE_STRINGS.NOMINEE_DETAILS_TITLE, onBackPress: handleBackPress, backgroundColor: colors.primary }),
516
506
  react_1.default.createElement(react_native_1.KeyboardAvoidingView, { behavior: react_native_1.Platform.OS === 'ios' ? 'padding' : undefined, style: styles.keyboardAvoidingView, keyboardVerticalOffset: react_native_1.Platform.OS === 'ios' ? 0 : 0 },
@@ -523,7 +513,7 @@ const NomineeDetail = ({ onGoBack, onSave, initialData }) => {
523
513
  renderDropdown(nominee_1.NOMINEE_STRINGS.RELATIONSHIP_LABEL, form.relationship, 'relationship', nomineeRelationOptions, 'relationship'),
524
514
  renderDateField(nominee_1.NOMINEE_STRINGS.DATE_OF_BIRTH_LABEL, form.dateOfBirth, 'dateOfBirth'),
525
515
  showDatePicker && (react_1.default.createElement(react_native_1.View, { style: styles.datePickerContainer },
526
- react_1.default.createElement(datetimepicker_1.default, { value: selectedDate, mode: "date", display: react_native_1.Platform.OS === 'ios' ? 'spinner' : 'default', onChange: onDateChange, maximumDate: new Date(new Date().getFullYear() - 18, new Date().getMonth(), new Date().getDate()), themeVariant: "light" }))),
516
+ react_1.default.createElement(datetimepicker_1.default, { value: selectedDate, mode: "date", display: react_native_1.Platform.OS === 'ios' ? 'spinner' : 'default', onChange: onDateChange, maximumDate: new Date(new Date().getFullYear() - 18, new Date().getMonth(), new Date().getDate()), minimumDate: new Date(new Date().getFullYear() - 100, 0, 1), themeVariant: "light" }))),
527
517
  react_1.default.createElement(react_native_1.View, { style: styles.checkboxContainer },
528
518
  react_1.default.createElement(react_native_1.TouchableOpacity, { style: styles.checkbox, onPress: () => updateField('printNameOnCertificate', !form.printNameOnCertificate) },
529
519
  react_1.default.createElement(react_native_1.View, { style: [styles.checkboxBox, form.printNameOnCertificate && styles.checkboxChecked] }, form.printNameOnCertificate ? (react_1.default.createElement(react_native_1.Image, { source: { uri: ((0, ThemeContext_1.useTheme)().themeName === 'dark') ? base64Images_1.base64Images.checkBoxDark : base64Images_1.base64Images.filledCheckBox }, style: { width: 22, height: 22 }, resizeMode: "contain" })) : (((0, ThemeContext_1.useTheme)().themeName === 'dark') ? (react_1.default.createElement(react_native_1.Image, { source: { uri: base64Images_1.base64Images.unCheckBoxDark }, style: { width: 22, height: 22 }, resizeMode: "contain" })) : null))),
@@ -148,17 +148,7 @@ const PayNow = ({ onGoBack, onConfirm, fdData }) => {
148
148
  (0, helpers_1.navigate)('BankDetail');
149
149
  }
150
150
  };
151
- // Handle Android hardware back button
152
- (0, react_1.useEffect)(() => {
153
- if (react_native_1.Platform.OS !== 'android')
154
- return;
155
- const onHardwareBackPress = () => {
156
- handleBackPress();
157
- return true; // Prevent default behavior
158
- };
159
- const backHandler = react_native_1.BackHandler.addEventListener('hardwareBackPress', onHardwareBackPress);
160
- return () => backHandler.remove();
161
- }, [defaultProviderId, workflowInstanceId, applicationId, entityId]);
151
+ // Removed screen-level hardware back handler to allow only header back button navigation
162
152
  return (react_1.default.createElement(SafeAreaWrapper_1.default, { includeTop: false, bottomPadding: 25, statusBarColor: "#000000", statusBarStyle: "light-content" },
163
153
  react_1.default.createElement(react_native_1.View, { style: styles.container },
164
154
  react_1.default.createElement(react_native_1.ScrollView, { showsVerticalScrollIndicator: false, contentContainerStyle: styles.scrollContent },
@@ -40,9 +40,9 @@ const react_1 = __importStar(require("react"));
40
40
  const react_native_1 = require("react-native");
41
41
  const react_native_webview_1 = require("react-native-webview");
42
42
  const SafeAreaWrapper_1 = __importDefault(require("../components/SafeAreaWrapper"));
43
+ const encryptionConfig_1 = require("../config/encryptionConfig");
43
44
  const ThemeContext_1 = require("../theme/ThemeContext");
44
45
  const encryption_1 = require("../utils/encryption");
45
- const encryptionConfig_1 = require("../config/encryptionConfig");
46
46
  const Payment = ({ onGoBack, onPaymentSuccess, onPaymentFailure, paymentUrl, successUrl = 'payment/success', failureUrl = 'payment/failure', }) => {
47
47
  const colors = (0, ThemeContext_1.useColors)();
48
48
  const styles = createStyles(colors);
@@ -149,16 +149,7 @@ const Payment = ({ onGoBack, onPaymentSuccess, onPaymentFailure, paymentUrl, suc
149
149
  }
150
150
  };
151
151
  // Disable hardware back button on Payment screen
152
- (0, react_1.useEffect)(() => {
153
- if (react_native_1.Platform.OS !== 'android')
154
- return;
155
- const onBackPress = () => {
156
- // Return true to prevent default behavior (block back button)
157
- return true;
158
- };
159
- const backHandler = react_native_1.BackHandler.addEventListener('hardwareBackPress', onBackPress);
160
- return () => backHandler.remove();
161
- }, []);
152
+ // Removed screen-level hardware back handler to allow only header back button navigation
162
153
  return (react_1.default.createElement(SafeAreaWrapper_1.default, { includeTop: false, bottomPadding: 0, statusBarColor: "#000000", statusBarStyle: "light-content" },
163
154
  react_native_1.Platform.OS === 'ios' && react_1.default.createElement(react_native_1.StatusBar, { barStyle: "light-content" }),
164
155
  react_1.default.createElement(react_native_1.View, { style: styles.container },
@@ -36,24 +36,24 @@ 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 native_1 = require("@react-navigation/native");
39
40
  const react_1 = __importStar(require("react"));
40
41
  const react_native_1 = require("react-native");
41
42
  const Ionicons_1 = __importDefault(require("react-native-vector-icons/Ionicons"));
42
- const base64Images_1 = require("../constants/strings/base64Images");
43
- const SafeAreaWrapper_1 = __importDefault(require("../components/SafeAreaWrapper"));
43
+ const customerApi_1 = require("../api/customerApi");
44
+ const fdApi_1 = require("../api/fdApi");
44
45
  const components_1 = require("../components");
45
46
  const ActionButton_1 = __importDefault(require("../components/ActionButton"));
46
- const ThemeContext_1 = require("../theme/ThemeContext");
47
- const fdApi_1 = require("../api/fdApi");
48
- const customerApi_1 = require("../api/customerApi");
49
- const store_1 = require("../store");
47
+ const SafeAreaWrapper_1 = __importDefault(require("../components/SafeAreaWrapper"));
48
+ const apiConfig_1 = require("../config/apiConfig");
50
49
  const appDataConfig_1 = require("../config/appDataConfig");
51
- const helpers_1 = require("../navigation/helpers");
52
- const paymentSession_1 = require("../state/paymentSession");
53
- const native_1 = require("@react-navigation/native");
54
50
  const bank_1 = require("../constants/strings/bank");
51
+ const base64Images_1 = require("../constants/strings/base64Images");
55
52
  const common_1 = require("../constants/strings/common");
56
- const apiConfig_1 = require("../config/apiConfig");
53
+ const helpers_1 = require("../navigation/helpers");
54
+ const paymentSession_1 = require("../state/paymentSession");
55
+ const store_1 = require("../store");
56
+ const ThemeContext_1 = require("../theme/ThemeContext");
57
57
  const PaymentStatus = ({ onRetry, onContinue, status, transactionId, fdData }) => {
58
58
  var _a;
59
59
  const colors = (0, ThemeContext_1.useColors)();
@@ -301,20 +301,16 @@ const PaymentStatus = ({ onRetry, onContinue, status, transactionId, fdData }) =
301
301
  }
302
302
  }
303
303
  };
304
- // Disable hardware back button on PaymentStatus screen
305
- (0, react_1.useEffect)(() => {
306
- if (react_native_1.Platform.OS !== 'android')
307
- return;
308
- const onBackPress = () => {
309
- // Return true to prevent default behavior (block back button)
310
- return true;
311
- };
312
- const backHandler = react_native_1.BackHandler.addEventListener('hardwareBackPress', onBackPress);
313
- return () => backHandler.remove();
314
- }, []);
304
+ // Back button: navigate to FDList for all statuses
305
+ const handleNavigateToFDList = () => {
306
+ (0, helpers_1.navigate)('FDList');
307
+ };
308
+ // Removed screen-level hardware back handler to allow only header back button navigation
315
309
  return (react_1.default.createElement(SafeAreaWrapper_1.default, { includeTop: true, bottomPadding: 0, statusBarColor: "#000000", statusBarStyle: "light-content" },
316
310
  react_native_1.Platform.OS === 'ios' && react_1.default.createElement(react_native_1.StatusBar, { barStyle: "light-content" }),
317
311
  react_1.default.createElement(react_native_1.View, { style: styles.container },
312
+ react_1.default.createElement(react_native_1.TouchableOpacity, { onPress: handleNavigateToFDList, style: styles.backIconBtn },
313
+ react_1.default.createElement(Ionicons_1.default, { name: "arrow-back", size: 24, color: colors.text })),
318
314
  react_1.default.createElement(react_native_1.ScrollView, { showsVerticalScrollIndicator: false, contentContainerStyle: styles.scrollContent },
319
315
  react_1.default.createElement(react_native_1.View, { style: styles.iconContainer },
320
316
  react_1.default.createElement(react_native_1.View, { style: styles.iconCircleOuter },
@@ -346,6 +342,13 @@ const createStyles = (colors, typography, status) => {
346
342
  flex: 1,
347
343
  backgroundColor: colors.background,
348
344
  },
345
+ backIconBtn: {
346
+ position: 'absolute',
347
+ top: 16,
348
+ left: 16,
349
+ zIndex: 10,
350
+ padding: 8,
351
+ },
349
352
  headerTitle: {
350
353
  fontSize: 14,
351
354
  fontWeight: '600',
@@ -587,17 +587,7 @@ const ReviewKYC = ({ onGoBack, onContinue, initialData, }) => {
587
587
  (0, helpers_1.navigate)('FDCalculator');
588
588
  }
589
589
  };
590
- // Handle Android hardware back button
591
- (0, react_1.useEffect)(() => {
592
- if (react_native_1.Platform.OS !== 'android')
593
- return;
594
- const onHardwareBackPress = () => {
595
- handleBackPress();
596
- return true; // Prevent default behavior
597
- };
598
- const backHandler = react_native_1.BackHandler.addEventListener('hardwareBackPress', onHardwareBackPress);
599
- return () => backHandler.remove();
600
- }, [defaultProviderId, workflowInstanceId, applicationId, entityId]);
590
+ // Removed screen-level hardware back handler to allow only header back button navigation
601
591
  return (react_1.default.createElement(SafeAreaWrapper_1.default, { includeTop: false, bottomPadding: 25, statusBarColor: "#000000", statusBarStyle: "light-content" },
602
592
  react_1.default.createElement(components_1.Header, { title: "Review KYC", onBackPress: handleBackPress, backgroundColor: colors.primary }),
603
593
  react_1.default.createElement(react_native_1.KeyboardAvoidingView, { behavior: react_native_1.Platform.OS === 'ios' ? 'padding' : undefined, style: styles.keyboardAvoidingView, keyboardVerticalOffset: react_native_1.Platform.OS === 'ios' ? 0 : 0 },
@@ -631,7 +621,8 @@ const ReviewKYC = ({ onGoBack, onContinue, initialData, }) => {
631
621
  ] }, kycData.useExistingAddress ? (react_1.default.createElement(react_native_1.Image, { source: { uri: (themeName === 'dark') ? base64Images_1.base64Images.checkBoxDark : base64Images_1.base64Images.filledCheckBox }, resizeMode: "cover", width: 20, height: 20 })) : ((themeName === 'dark') ? (react_1.default.createElement(react_native_1.Image, { source: { uri: base64Images_1.base64Images.unCheckBoxDark }, resizeMode: "cover", width: 20, height: 20 })) : null))),
632
622
  react_1.default.createElement(react_native_1.Text, { style: styles.checkboxText }, "For existing customers, we'll use the address from our records. For new customers, the address from your Aadhar card will be used. To update, please raise a service request with valid address proof.")))))),
633
623
  react_1.default.createElement(ActionButton_1.default, { title: "Continue", onPress: handleContinue, disabled: !kycData.useExistingAddress || isLoadingPanRapid || !validateForm(), loading: isLoadingPanRapid }),
634
- isLoadingPanRapid && (react_1.default.createElement(react_native_1.View, { style: styles.loadingOverlay, pointerEvents: "auto" })),
624
+ isLoadingPanRapid && (react_1.default.createElement(react_native_1.View, { style: styles.loadingOverlay, pointerEvents: "auto" },
625
+ react_1.default.createElement(react_native_1.ActivityIndicator, { size: "large", color: colors.primary }))),
635
626
  isGoingBack && (react_1.default.createElement(react_native_1.View, { style: styles.loadingOverlay, pointerEvents: "auto" },
636
627
  react_1.default.createElement(react_native_1.ActivityIndicator, { size: "large", color: colors.primary })))));
637
628
  };
@@ -1,2 +1,2 @@
1
1
  import { WORKFLOW_STATES } from '../config/workflowConstants';
2
- export type WorkflowStateSriram = typeof WORKFLOW_STATES.START | typeof WORKFLOW_STATES.INITIATION | typeof WORKFLOW_STATES.CREATE_FD | typeof WORKFLOW_STATES.OCCUPATION | typeof WORKFLOW_STATES.NOMINEE | typeof WORKFLOW_STATES.BANK_DETAILS | typeof WORKFLOW_STATES.KYC | typeof WORKFLOW_STATES.PAYMENT | typeof WORKFLOW_STATES.END;
2
+ export type WorkflowStateSriram = typeof WORKFLOW_STATES[keyof typeof WORKFLOW_STATES] | string;
package/package.json CHANGED
@@ -1,51 +1,51 @@
1
1
  {
2
- "name": "@finspringinnovations/fixeddepositsdk",
3
- "version": "1.0.2",
4
- "description": "FD SDK for React Native applications",
5
- "main": "lib/index.js",
6
- "types": "lib/index.d.ts",
7
- "files": [
8
- "lib",
9
- "src",
10
- "README.md"
11
- ],
12
- "scripts": {
13
- "build": "tsc",
14
- "clean": "rm -rf lib",
15
- "prepublishOnly": "yarn clean && yarn build",
16
- "lint": "eslint src --ext .ts,.tsx"
17
- },
18
- "keywords": [
19
- "react-native",
20
- "sdk",
21
- "typescript",
22
- "android",
23
- "ios",
24
- "fd"
25
- ],
26
- "peerDependencies": {
27
- "@finspringinnovations/mahindrafdsdk": ">=1.0.0",
28
- "@finspringinnovations/shriramfdsdk": ">=1.0.0",
29
- "react": ">=16.8.0",
30
- "react-native": ">=0.60.0"
31
- },
32
- "devDependencies": {
33
- "@types/react": "^18.2.0",
34
- "@types/react-native": "^0.72.0",
35
- "@typescript-eslint/eslint-plugin": "^6.0.0",
36
- "@typescript-eslint/parser": "^6.0.0",
37
- "eslint": "^8.0.0",
38
- "typescript": "^5.0.0"
39
- },
40
- "repository": {
41
- "type": "git",
42
- "url": "git+https://github.com/your-org/my-sdks.git",
43
- "directory": "packages/fdsdk"
44
- },
45
- "license": "MIT",
46
- "react-native": "src/index.tsx",
47
- "dependencies": {
48
- "@finspringinnovations/mahindrafdsdk": "^1.0.1",
49
- "@finspringinnovations/shriramfdsdk": "^1.0.1"
50
- }
51
- }
2
+ "name": "@finspringinnovations/fixeddepositsdk",
3
+ "version": "1.0.4",
4
+ "description": "FD SDK for React Native applications",
5
+ "main": "lib/index.js",
6
+ "types": "lib/index.d.ts",
7
+ "files": [
8
+ "lib",
9
+ "src",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "clean": "rm -rf lib",
15
+ "prepublishOnly": "yarn clean && yarn build",
16
+ "lint": "eslint src --ext .ts,.tsx"
17
+ },
18
+ "keywords": [
19
+ "react-native",
20
+ "sdk",
21
+ "typescript",
22
+ "android",
23
+ "ios",
24
+ "fd"
25
+ ],
26
+ "peerDependencies": {
27
+ "@finspringinnovations/mahindrafdsdk": ">=1.0.0",
28
+ "@finspringinnovations/shriramfdsdk": ">=1.0.0",
29
+ "react": ">=16.8.0",
30
+ "react-native": ">=0.60.0"
31
+ },
32
+ "devDependencies": {
33
+ "@types/react": "^18.2.0",
34
+ "@types/react-native": "^0.72.0",
35
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
36
+ "@typescript-eslint/parser": "^6.0.0",
37
+ "eslint": "^8.0.0",
38
+ "typescript": "^5.0.0"
39
+ },
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "git+https://github.com/your-org/my-sdks.git",
43
+ "directory": "packages/fdsdk"
44
+ },
45
+ "license": "MIT",
46
+ "react-native": "src/index.tsx",
47
+ "dependencies": {
48
+ "@finspringinnovations/mahindrafdsdk": "^1.0.1",
49
+ "@finspringinnovations/shriramfdsdk": "^1.0.1"
50
+ }
51
+ }
@@ -123,6 +123,7 @@ export const customerApi = baseApi.injectEndpoints({
123
123
  "customer_id", // ← ADD THIS
124
124
  "current_task",
125
125
  "current_state",
126
+ "current_state_caption",
126
127
  "fd_id",
127
128
  ];
128
129
 
package/src/api/fdApi.ts CHANGED
@@ -142,9 +142,36 @@ export const fdApi = baseApi.injectEndpoints({
142
142
  };
143
143
  },
144
144
  }),
145
+
146
+ getPaymentUrl: builder.query<
147
+ { status?: string; statusCode?: number; message?: string; data?: Array<{ paymentUrl?: string; transactionId?: string }> },
148
+ { providerId?: string; workflowInstanceId?: string; userreferenceid?: string; applicationid?: string; entityid?: string; applicationId: string; panNo: string; isRetry?: boolean }
149
+ >({
150
+ query: (params) => {
151
+ const { providerId, workflowInstanceId, userreferenceid, applicationid, entityid, applicationId, panNo, isRetry = false } = params;
152
+ const qs = new URLSearchParams({
153
+ applicationId,
154
+ panNo,
155
+ isRetry: String(isRetry),
156
+ }).toString();
157
+ return {
158
+ url: `fd/payment/url?${qs}`,
159
+ method: 'GET',
160
+ headers: {
161
+ provider: providerId || '{{shriramprovider}}',
162
+ workflowInstanceId: workflowInstanceId || '{{workflowInstanceId}}',
163
+ userreferenceid: userreferenceid || '{{userreferenceid}}',
164
+ applicationid: applicationid || applicationId || '{{applicationid}}',
165
+ entityid: entityid || '{{entityid}}',
166
+ encryptdecrypt: 'true',
167
+ },
168
+ };
169
+ },
170
+ }),
145
171
  }),
146
172
  });
147
173
 
148
174
  export const { useCreateFDMutation, useFdBankAccountMutation,
149
175
  useFdBankDetailsQuery, useFdBankDetailsSearchMutation,
150
- usePaymentReverseFeedMutation, usePaymentRetryMutation } = fdApi;
176
+ usePaymentReverseFeedMutation, usePaymentRetryMutation,
177
+ useLazyGetPaymentUrlQuery } = fdApi;