@cashfreepayments/react-native-cashfree-cn-sdk 1.0.0-dev.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/LICENSE +21 -0
- package/README.md +79 -0
- package/android/.gradle/7.2/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.2/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.2/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.2/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.2/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.2/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.2/fileHashes/resourceHashesCache.bin +0 -0
- package/android/.gradle/7.2/gc.properties +0 -0
- package/android/.gradle/7.5/checksums/checksums.lock +0 -0
- package/android/.gradle/7.5/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/7.5/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/7.5/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.5/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.5/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.5/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.5/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.5/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.5/fileHashes/resourceHashesCache.bin +0 -0
- package/android/.gradle/7.5/gc.properties +0 -0
- package/android/.gradle/8.5/checksums/checksums.lock +0 -0
- package/android/.gradle/8.5/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/8.5/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/8.5/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/8.5/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.5/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.5/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.5/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/config.properties +2 -0
- package/android/.gradle/nb-cache/trust/5D9F4D2F872AE83553369BAEF9EF62F30CBE0A19F76FE265082C658DB033E1DA +1 -0
- package/android/.gradle/nb-cache/trust/811DB8418F399FDF2AFA5CB6893343C7013E03D6360FA7A8FBFC8B0C8A38EE77 +1 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.idea/compiler.xml +6 -0
- package/android/.idea/gradle.xml +18 -0
- package/android/.idea/migrations.xml +10 -0
- package/android/.idea/misc.xml +9 -0
- package/android/.idea/other.xml +549 -0
- package/android/.idea/vcs.xml +6 -0
- package/android/build.gradle +77 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/local.properties +8 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/java/com/reactnativecashfreecnsdk/CashfreePgApiModule.java +319 -0
- package/android/src/main/java/com/reactnativecashfreecnsdk/CashfreePgApiPackage.java +28 -0
- package/ios/CashfreeEmitter.swift +36 -0
- package/ios/CashfreeEventEmitter.m +16 -0
- package/ios/CashfreeEventEmitter.swift +28 -0
- package/ios/CashfreePgApi-Bridging-Header.h +5 -0
- package/ios/CashfreePgApi.m +21 -0
- package/ios/CashfreePgApi.swift +410 -0
- package/ios/CashfreePgApi.xcodeproj/project.pbxproj +293 -0
- package/ios/CashfreePgApi.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/ios/CashfreePgApi.xcodeproj/project.xcworkspace/xcuserdata/nikhil.kushwah.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/CashfreePgApi.xcodeproj/xcuserdata/nikhil.kushwah.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/lib/commonjs/Card/CFCardComponent.js +287 -0
- package/lib/commonjs/Card/CFCardComponent.js.map +1 -0
- package/lib/commonjs/Card/index.js +14 -0
- package/lib/commonjs/Card/index.js.map +1 -0
- package/lib/commonjs/index.js +168 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/module/Card/CFCardComponent.js +279 -0
- package/lib/module/Card/CFCardComponent.js.map +1 -0
- package/lib/module/Card/index.js +2 -0
- package/lib/module/Card/index.js.map +1 -0
- package/lib/module/index.js +159 -0
- package/lib/module/index.js.map +1 -0
- package/lib/typescript/src/Card/CFCardComponent.d.ts +12 -0
- package/lib/typescript/src/Card/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts +43 -0
- package/package.json +157 -0
- package/react-native-cashfree-cn-sdk.podspec +20 -0
- package/src/Card/CFCardComponent.js +238 -0
- package/src/Card/CFCardComponent.tsx +323 -0
- package/src/Card/index.js +1 -0
- package/src/Card/index.ts +1 -0
- package/src/index.js +167 -0
- package/src/index.ts +219 -0
package/package.json
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
{
|
2
|
+
"name": "@cashfreepayments/react-native-cashfree-cn-sdk",
|
3
|
+
"version": "1.0.0-dev.0",
|
4
|
+
"description": "Cashfree PG Plugin for React Native",
|
5
|
+
"main": "lib/commonjs/index.js",
|
6
|
+
"module": "lib/module/index.js",
|
7
|
+
"types": "lib/typescript/src/index.d.ts",
|
8
|
+
"react-native": "src/index",
|
9
|
+
"source": "src/index",
|
10
|
+
"files": [
|
11
|
+
"src",
|
12
|
+
"lib",
|
13
|
+
"android",
|
14
|
+
"ios",
|
15
|
+
"cpp",
|
16
|
+
"react-native-cashfree-cn-sdk.podspec",
|
17
|
+
"!lib/typescript/example",
|
18
|
+
"!android/build",
|
19
|
+
"!ios/build",
|
20
|
+
"!**/__tests__",
|
21
|
+
"!**/__fixtures__",
|
22
|
+
"!**/__mocks__"
|
23
|
+
],
|
24
|
+
"scripts": {
|
25
|
+
"test": "jest",
|
26
|
+
"typescript": "tsc --noEmit",
|
27
|
+
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
28
|
+
"prepare": "bob build",
|
29
|
+
"release": "release-it",
|
30
|
+
"example": "yarn --cwd example",
|
31
|
+
"pods": "cd example && pod-install --quiet",
|
32
|
+
"bootstrap": "yarn example && yarn && yarn pods"
|
33
|
+
},
|
34
|
+
"keywords": [
|
35
|
+
"react-native",
|
36
|
+
"ios",
|
37
|
+
"android",
|
38
|
+
"cashfree",
|
39
|
+
"react-native-android",
|
40
|
+
"react-native-ios",
|
41
|
+
"cashfree react-native sdk",
|
42
|
+
"react-native payment gateway",
|
43
|
+
"payment gateway",
|
44
|
+
"react-native-cashfree-cn-sdk"
|
45
|
+
],
|
46
|
+
"repository": "https://github.com/cashfree/react-native-cashfree-cn-sdk",
|
47
|
+
"author": "cashfree-payments <developers@cashfree.com> (https://www.cashfree.com/)",
|
48
|
+
"license": "MIT",
|
49
|
+
"bugs": {
|
50
|
+
"url": "https://github.com/cashfree/react-native-cashfree-cn-sdk/issues"
|
51
|
+
},
|
52
|
+
"homepage": "https://docs.cashfree.com/docs/react-native-integration",
|
53
|
+
"publishConfig": {
|
54
|
+
"registry": "https://registry.npmjs.org/"
|
55
|
+
},
|
56
|
+
"devDependencies": {
|
57
|
+
"@commitlint/config-conventional": "^11.0.0",
|
58
|
+
"@react-native-community/eslint-config": "^2.0.0",
|
59
|
+
"@release-it/conventional-changelog": "^2.0.0",
|
60
|
+
"@types/jest": "^26.0.0",
|
61
|
+
"@types/react": "^16.9.19",
|
62
|
+
"@types/react-native": "0.62.13",
|
63
|
+
"commitlint": "^11.0.0",
|
64
|
+
"eslint": "^7.2.0",
|
65
|
+
"eslint-config-prettier": "^7.0.0",
|
66
|
+
"eslint-plugin-prettier": "^3.1.3",
|
67
|
+
"husky": "^6.0.0",
|
68
|
+
"jest": "^26.0.1",
|
69
|
+
"pod-install": "^0.1.0",
|
70
|
+
"prettier": "^2.0.5",
|
71
|
+
"react": "16.13.1",
|
72
|
+
"react-native": "0.63.4",
|
73
|
+
"react-native-builder-bob": "^0.18.0",
|
74
|
+
"release-it": "^14.2.2",
|
75
|
+
"typescript": "^4.1.3"
|
76
|
+
},
|
77
|
+
"peerDependencies": {
|
78
|
+
"react": "*",
|
79
|
+
"react-native": "*"
|
80
|
+
},
|
81
|
+
"jest": {
|
82
|
+
"preset": "react-native",
|
83
|
+
"modulePathIgnorePatterns": [
|
84
|
+
"<rootDir>/example/node_modules",
|
85
|
+
"<rootDir>/lib/"
|
86
|
+
]
|
87
|
+
},
|
88
|
+
"commitlint": {
|
89
|
+
"extends": [
|
90
|
+
"@commitlint/config-conventional"
|
91
|
+
]
|
92
|
+
},
|
93
|
+
"release-it": {
|
94
|
+
"git": {
|
95
|
+
"commitMessage": "chore: release ${version}",
|
96
|
+
"tagName": "v${version}"
|
97
|
+
},
|
98
|
+
"npm": {
|
99
|
+
"publish": true
|
100
|
+
},
|
101
|
+
"github": {
|
102
|
+
"release": true
|
103
|
+
},
|
104
|
+
"plugins": {
|
105
|
+
"@release-it/conventional-changelog": {
|
106
|
+
"preset": "angular"
|
107
|
+
}
|
108
|
+
}
|
109
|
+
},
|
110
|
+
"eslintConfig": {
|
111
|
+
"root": true,
|
112
|
+
"extends": [
|
113
|
+
"@react-native-community",
|
114
|
+
"prettier"
|
115
|
+
],
|
116
|
+
"rules": {
|
117
|
+
"prettier/prettier": [
|
118
|
+
"error",
|
119
|
+
{
|
120
|
+
"quoteProps": "consistent",
|
121
|
+
"singleQuote": true,
|
122
|
+
"tabWidth": 2,
|
123
|
+
"trailingComma": "es5",
|
124
|
+
"useTabs": false
|
125
|
+
}
|
126
|
+
]
|
127
|
+
}
|
128
|
+
},
|
129
|
+
"eslintIgnore": [
|
130
|
+
"node_modules/",
|
131
|
+
"lib/"
|
132
|
+
],
|
133
|
+
"prettier": {
|
134
|
+
"quoteProps": "consistent",
|
135
|
+
"singleQuote": true,
|
136
|
+
"tabWidth": 2,
|
137
|
+
"trailingComma": "es5",
|
138
|
+
"useTabs": false
|
139
|
+
},
|
140
|
+
"react-native-builder-bob": {
|
141
|
+
"source": "src",
|
142
|
+
"output": "lib",
|
143
|
+
"targets": [
|
144
|
+
"commonjs",
|
145
|
+
"module",
|
146
|
+
[
|
147
|
+
"typescript",
|
148
|
+
{
|
149
|
+
"project": "tsconfig.build.json"
|
150
|
+
}
|
151
|
+
]
|
152
|
+
]
|
153
|
+
},
|
154
|
+
"dependencies": {
|
155
|
+
"cashfree-pg-api-contract": "^2.0.7"
|
156
|
+
}
|
157
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
4
|
+
|
5
|
+
Pod::Spec.new do |s|
|
6
|
+
s.name = "react-native-cashfree-cn-sdk"
|
7
|
+
s.version = package["version"]
|
8
|
+
s.summary = package["description"]
|
9
|
+
s.homepage = package["homepage"]
|
10
|
+
s.license = package["license"]
|
11
|
+
s.authors = package["author"]
|
12
|
+
|
13
|
+
s.platforms = { :ios => "10.0" }
|
14
|
+
s.source = { :git => "https://www.cashfree.com/.git", :tag => "#{s.version}" }
|
15
|
+
|
16
|
+
s.source_files = "ios/**/*.{h,m,mm,swift}"
|
17
|
+
|
18
|
+
s.dependency "React-Core"
|
19
|
+
s.dependency "CashfreePG", "2.0.19"
|
20
|
+
end
|
@@ -0,0 +1,238 @@
|
|
1
|
+
import { TextInput } from 'react-native';
|
2
|
+
import React, { forwardRef } from 'react';
|
3
|
+
import { CFCardPayment, CFEnvironment, } from 'cashfree-pg-api-contract';
|
4
|
+
import { CFPaymentGatewayService } from '../index';
|
5
|
+
function luhnCheck(cardNumber) {
|
6
|
+
if (cardNumber.length === 0) {
|
7
|
+
return false;
|
8
|
+
}
|
9
|
+
cardNumber = cardNumber.replace(/\s/g, ''); // Remove spaces
|
10
|
+
let sum = 0;
|
11
|
+
let isAlternate = false;
|
12
|
+
for (let i = cardNumber.length - 1; i >= 0; i--) {
|
13
|
+
let digit = parseInt(cardNumber[i], 10);
|
14
|
+
if (isAlternate) {
|
15
|
+
digit *= 2;
|
16
|
+
if (digit > 9) {
|
17
|
+
digit -= 9;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
sum += digit;
|
21
|
+
isAlternate = !isAlternate;
|
22
|
+
}
|
23
|
+
return sum % 10 === 0;
|
24
|
+
}
|
25
|
+
function getInputValidationDetails(cardBinResponse) {
|
26
|
+
if (!cardBinResponse || !cardBinResponse.scheme) {
|
27
|
+
return null;
|
28
|
+
}
|
29
|
+
let schemeType = cardBinResponse.scheme.toLowerCase();
|
30
|
+
let inputValidationDetails;
|
31
|
+
switch (schemeType) {
|
32
|
+
case 'amex':
|
33
|
+
inputValidationDetails = { max_input_length: 15, cvv_length: 4 };
|
34
|
+
break;
|
35
|
+
case 'diners':
|
36
|
+
inputValidationDetails = { max_input_length: 14, cvv_length: 3 };
|
37
|
+
break;
|
38
|
+
default: // Covers visa, mastercard, rupay, jcb, discover, and unknown schemes
|
39
|
+
inputValidationDetails = { max_input_length: 16, cvv_length: 3 };
|
40
|
+
}
|
41
|
+
return inputValidationDetails;
|
42
|
+
}
|
43
|
+
/**
|
44
|
+
* Fetching Tdr info with card bin data & cfSession object
|
45
|
+
* @param session : for payment sessionId & env
|
46
|
+
* @param bin : for card number
|
47
|
+
*/
|
48
|
+
async function getTDR(session, bin) {
|
49
|
+
const route = `/pg/sdk/js/${session.payment_session_id}/v2/tdr`;
|
50
|
+
const body = JSON.stringify({ code: bin, code_type: 'bin' });
|
51
|
+
return await getInfo(session.environment, route, body);
|
52
|
+
}
|
53
|
+
/**
|
54
|
+
* Fetching CardBin info with card bin data & cfSession object
|
55
|
+
* @param session : for payment sessionId & env
|
56
|
+
* @param bin : for card number
|
57
|
+
*/
|
58
|
+
async function getCardBin(session, bin) {
|
59
|
+
const route = `/pg/sdk/js/${session.payment_session_id}/cardBin`;
|
60
|
+
const body = JSON.stringify({ card_number: bin });
|
61
|
+
return await getInfo(session.environment, route, body);
|
62
|
+
}
|
63
|
+
async function getInfo(env, route, bodyData) {
|
64
|
+
let baseUrl = 'https://api.cashfree.com';
|
65
|
+
if (env === CFEnvironment.SANDBOX) {
|
66
|
+
baseUrl = 'https://sandbox.cashfree.com';
|
67
|
+
}
|
68
|
+
const url = baseUrl + route;
|
69
|
+
try {
|
70
|
+
const response = await fetch(url, {
|
71
|
+
method: 'POST',
|
72
|
+
headers: {
|
73
|
+
'Content-Type': 'application/json',
|
74
|
+
},
|
75
|
+
body: bodyData,
|
76
|
+
});
|
77
|
+
if (!response.ok) {
|
78
|
+
return null;
|
79
|
+
}
|
80
|
+
return await response.json();
|
81
|
+
}
|
82
|
+
catch (error) {
|
83
|
+
return null;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
const CardInput = forwardRef(({ cfSession, cardListener, style, ...props }, ref) => {
|
87
|
+
const [inputNumber, setInputNumber] = React.useState('');
|
88
|
+
const inputNumberRef = React.useRef('');
|
89
|
+
const sessionRef = React.useRef(cfSession);
|
90
|
+
React.useImperativeHandle(ref, () => ({
|
91
|
+
doPayment,
|
92
|
+
doPaymentWithPaymentSessionId,
|
93
|
+
}));
|
94
|
+
const tdrJsonRef = React.useRef(null);
|
95
|
+
const cardBinJsonRef = React.useRef(null);
|
96
|
+
const firstEightDigitsRef = React.useRef('');
|
97
|
+
const handleChange = React.useCallback(async (cardNumber) => {
|
98
|
+
let completeResponse = {};
|
99
|
+
const textWithoutSpaces = cardNumber.replaceAll(' ', '');
|
100
|
+
if (textWithoutSpaces.length === 0)
|
101
|
+
setInputNumber('');
|
102
|
+
let formattedText = '';
|
103
|
+
/**
|
104
|
+
* Code to format card input number & set to input box
|
105
|
+
*/
|
106
|
+
for (let i = 0; i < textWithoutSpaces.length; i += 4) {
|
107
|
+
let end = i + 4;
|
108
|
+
if (end > textWithoutSpaces.length) {
|
109
|
+
end = textWithoutSpaces.length;
|
110
|
+
}
|
111
|
+
formattedText += textWithoutSpaces.substring(i, end);
|
112
|
+
if (end !== textWithoutSpaces.length) {
|
113
|
+
formattedText += ' ';
|
114
|
+
}
|
115
|
+
inputNumberRef.current = formattedText;
|
116
|
+
setInputNumber((prev) => prev === formattedText ? prev : formattedText);
|
117
|
+
}
|
118
|
+
let tdrResponse = null;
|
119
|
+
let cardBinResponse = null;
|
120
|
+
/**
|
121
|
+
* Fetch Tdr & CardBin data & set to local variable
|
122
|
+
*/
|
123
|
+
async function fetchDataAndSet() {
|
124
|
+
await getTDR(cfSession, textWithoutSpaces)
|
125
|
+
.then((response) => {
|
126
|
+
tdrResponse = response;
|
127
|
+
firstEightDigitsRef.current = textWithoutSpaces.substring(0, 8);
|
128
|
+
})
|
129
|
+
.catch(() => {
|
130
|
+
tdrResponse = null;
|
131
|
+
});
|
132
|
+
await getCardBin(cfSession, textWithoutSpaces)
|
133
|
+
.then((response) => {
|
134
|
+
cardBinResponse = response;
|
135
|
+
firstEightDigitsRef.current = textWithoutSpaces.substring(0, 8);
|
136
|
+
})
|
137
|
+
.catch(() => {
|
138
|
+
cardBinResponse = null;
|
139
|
+
});
|
140
|
+
if (tdrResponse) {
|
141
|
+
tdrJsonRef.current = tdrResponse;
|
142
|
+
completeResponse.tdr_info = tdrJsonRef.current;
|
143
|
+
}
|
144
|
+
if (cardBinResponse) {
|
145
|
+
cardBinJsonRef.current = cardBinResponse;
|
146
|
+
completeResponse.card_bin_info = cardBinJsonRef.current;
|
147
|
+
completeResponse.input_validation = getInputValidationDetails(cardBinJsonRef.current);
|
148
|
+
}
|
149
|
+
}
|
150
|
+
if (textWithoutSpaces.length === 8) {
|
151
|
+
await fetchDataAndSet();
|
152
|
+
}
|
153
|
+
else if (textWithoutSpaces.length > 8) {
|
154
|
+
if (firstEightDigitsRef.current === textWithoutSpaces.substring(0, 8)) {
|
155
|
+
completeResponse.tdr_info = tdrJsonRef.current;
|
156
|
+
completeResponse.card_bin_info = cardBinJsonRef.current;
|
157
|
+
completeResponse.input_validation = getInputValidationDetails(cardBinJsonRef.current);
|
158
|
+
}
|
159
|
+
else {
|
160
|
+
tdrJsonRef.current = null;
|
161
|
+
cardBinJsonRef.current = null;
|
162
|
+
await fetchDataAndSet();
|
163
|
+
}
|
164
|
+
}
|
165
|
+
if (textWithoutSpaces.length < 8) {
|
166
|
+
tdrJsonRef.current = null;
|
167
|
+
cardBinJsonRef.current = null;
|
168
|
+
firstEightDigitsRef.current = '';
|
169
|
+
}
|
170
|
+
if (cardBinJsonRef.current !== null) {
|
171
|
+
completeResponse.card_network = cardBinJsonRef.current.scheme;
|
172
|
+
}
|
173
|
+
let luhnStatus = luhnCheck(textWithoutSpaces);
|
174
|
+
if (luhnStatus) {
|
175
|
+
completeResponse.luhn_check_info = 'SUCCESS';
|
176
|
+
if (textWithoutSpaces && textWithoutSpaces.length > 4) {
|
177
|
+
completeResponse.last_four_digit = textWithoutSpaces.substring(textWithoutSpaces.length - 4);
|
178
|
+
}
|
179
|
+
}
|
180
|
+
else {
|
181
|
+
completeResponse.luhn_check_info = 'FAIL';
|
182
|
+
}
|
183
|
+
completeResponse.card_length = textWithoutSpaces.length;
|
184
|
+
return cardListener(JSON.stringify(completeResponse));
|
185
|
+
}, [cfSession, cardListener]);
|
186
|
+
const doPayment = (cardInfo) => {
|
187
|
+
try {
|
188
|
+
let cfCardNumber = inputNumberRef.current;
|
189
|
+
cardInfo.cardNumber = cfCardNumber.replaceAll(' ', '');
|
190
|
+
const cardPayment = new CFCardPayment(sessionRef.current, cardInfo);
|
191
|
+
CFPaymentGatewayService.makePayment(cardPayment, "https://65da-163-116-214-55.ngrok-free.app");
|
192
|
+
}
|
193
|
+
catch (e) {
|
194
|
+
console.log(e.message);
|
195
|
+
}
|
196
|
+
};
|
197
|
+
const doPaymentWithPaymentSessionId = (cardInfo, session) => {
|
198
|
+
try {
|
199
|
+
sessionRef.current = session;
|
200
|
+
doPayment(cardInfo);
|
201
|
+
}
|
202
|
+
catch (e) {
|
203
|
+
console.log(e.message);
|
204
|
+
}
|
205
|
+
};
|
206
|
+
const handleSubmitEditingEvent = (event) => {
|
207
|
+
const newEvent = { ...event };
|
208
|
+
delete newEvent.nativeEvent.text;
|
209
|
+
if (onSubmitEditing) {
|
210
|
+
onSubmitEditing(newEvent);
|
211
|
+
}
|
212
|
+
};
|
213
|
+
const handleEndEditingEvent = (event) => {
|
214
|
+
const newEvent = { ...event };
|
215
|
+
delete newEvent.nativeEvent.text;
|
216
|
+
if (onEndEditing) {
|
217
|
+
onEndEditing(newEvent);
|
218
|
+
}
|
219
|
+
};
|
220
|
+
const handleFocusEvent = (event) => {
|
221
|
+
const newEvent = { ...event };
|
222
|
+
delete newEvent.nativeEvent.text;
|
223
|
+
if (onFocus) {
|
224
|
+
onFocus(newEvent);
|
225
|
+
}
|
226
|
+
};
|
227
|
+
const handleBlurEvent = (event) => {
|
228
|
+
const newEvent = { ...event };
|
229
|
+
delete newEvent.nativeEvent.text;
|
230
|
+
if (onBlur) {
|
231
|
+
onBlur(newEvent);
|
232
|
+
}
|
233
|
+
};
|
234
|
+
const InputComponent = TextInput;
|
235
|
+
const { onChangeText, onChange, onSubmitEditing, onEndEditing, onFocus, onBlur, ...otherProps } = props;
|
236
|
+
return (React.createElement(InputComponent, { keyboardType: "numeric", inputMode: 'numeric', value: inputNumber, onChangeText: handleChange, onSubmitEditing: handleSubmitEditingEvent, onEndEditing: handleEndEditingEvent, onFocus: handleFocusEvent, onBlur: handleBlurEvent, style: style, ...otherProps }));
|
237
|
+
});
|
238
|
+
export default CardInput;
|