iamport-react-native 1.6.4 → 2.0.0-rc.2

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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -320
  3. package/android/build.gradle +114 -24
  4. package/android/gradle.properties +4 -0
  5. package/android/src/main/AndroidManifest.xml +1 -3
  6. package/android/src/main/java/com/iamportreactnative/IamportReactNativePackage.kt +17 -0
  7. package/android/src/main/java/com/iamportreactnative/IamportReactNativeViewManager.kt +20 -0
  8. package/iamport-react-native.podspec +19 -0
  9. package/ios/IamportReactNative-Bridging-Header.h +1 -0
  10. package/ios/IamportReactNative.xcodeproj/project.pbxproj +47 -20
  11. package/ios/IamportReactNativeViewManager.m +12 -0
  12. package/ios/IamportReactNativeViewManager.swift +32 -0
  13. package/lib/commonjs/components/Certification/index.js +154 -0
  14. package/lib/commonjs/components/Certification/index.js.map +1 -0
  15. package/lib/commonjs/components/ErrorOnParams/index.js +66 -0
  16. package/lib/commonjs/components/ErrorOnParams/index.js.map +1 -0
  17. package/lib/commonjs/components/Loading/index.js +50 -0
  18. package/lib/commonjs/components/Loading/index.js.map +1 -0
  19. package/lib/commonjs/components/Payment/index.js +288 -0
  20. package/lib/commonjs/components/Payment/index.js.map +1 -0
  21. package/lib/commonjs/constants/index.js +103 -0
  22. package/lib/commonjs/constants/index.js.map +1 -0
  23. package/{android/src/main/assets → lib/commonjs}/img/iamport-logo.png +0 -0
  24. package/lib/commonjs/index.js +36 -0
  25. package/lib/commonjs/index.js.map +1 -0
  26. package/lib/commonjs/styles.js +31 -0
  27. package/lib/commonjs/styles.js.map +1 -0
  28. package/lib/commonjs/utils/IamportUrl.js +334 -0
  29. package/lib/commonjs/utils/IamportUrl.js.map +1 -0
  30. package/lib/commonjs/utils/Validation.js +72 -0
  31. package/lib/commonjs/utils/Validation.js.map +1 -0
  32. package/lib/commonjs/utils/ValidationForPayment.js +143 -0
  33. package/lib/commonjs/utils/ValidationForPayment.js.map +1 -0
  34. package/lib/module/components/Certification/index.js +132 -0
  35. package/lib/module/components/Certification/index.js.map +1 -0
  36. package/lib/module/components/ErrorOnParams/index.js +55 -0
  37. package/lib/module/components/ErrorOnParams/index.js.map +1 -0
  38. package/lib/module/components/Loading/index.js +38 -0
  39. package/lib/module/components/Loading/index.js.map +1 -0
  40. package/lib/module/components/Payment/index.js +266 -0
  41. package/lib/module/components/Payment/index.js.map +1 -0
  42. package/lib/module/constants/index.js +98 -0
  43. package/lib/module/constants/index.js.map +1 -0
  44. package/lib/module/img/iamport-logo.png +0 -0
  45. package/lib/module/index.js +10 -0
  46. package/lib/module/index.js.map +1 -0
  47. package/lib/module/styles.js +21 -0
  48. package/lib/module/styles.js.map +1 -0
  49. package/lib/module/utils/IamportUrl.js +322 -0
  50. package/lib/module/utils/IamportUrl.js.map +1 -0
  51. package/{src → lib/module}/utils/Validation.js +25 -9
  52. package/lib/module/utils/Validation.js.map +1 -0
  53. package/{src → lib/module}/utils/ValidationForPayment.js +23 -13
  54. package/lib/module/utils/ValidationForPayment.js.map +1 -0
  55. package/lib/typescript/components/Certification/index.d.ts +10 -0
  56. package/lib/typescript/components/ErrorOnParams/index.d.ts +5 -0
  57. package/lib/typescript/components/Loading/index.d.ts +2 -0
  58. package/lib/typescript/components/Payment/index.d.ts +10 -0
  59. package/lib/typescript/constants/index.d.ts +76 -0
  60. package/lib/typescript/index.d.ts +9 -0
  61. package/lib/typescript/styles.d.ts +19 -0
  62. package/lib/typescript/utils/IamportUrl.d.ts +19 -0
  63. package/lib/typescript/utils/Validation.d.ts +58 -0
  64. package/lib/typescript/utils/ValidationForPayment.d.ts +7 -0
  65. package/package.json +98 -20
  66. package/src/components/Certification/index.tsx +112 -0
  67. package/src/components/ErrorOnParams/{index.js → index.tsx} +20 -25
  68. package/src/components/Loading/{index.js → index.tsx} +9 -10
  69. package/src/components/Payment/index.tsx +243 -0
  70. package/src/constants/index.ts +150 -0
  71. package/src/{index.js → index.tsx} +4 -1
  72. package/src/{styles.js → styles.ts} +3 -1
  73. package/src/utils/IamportUrl.ts +319 -0
  74. package/src/utils/Validation.ts +101 -0
  75. package/src/utils/ValidationForPayment.ts +146 -0
  76. package/IamportReactNative.podspec +0 -19
  77. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  78. package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  79. package/android/gradlew +0 -172
  80. package/android/gradlew.bat +0 -84
  81. package/android/src/main/java/com/iamport/IamportModule.java +0 -88
  82. package/android/src/main/java/com/iamport/IamportPackage.java +0 -23
  83. package/ios/IamportReactNative.h +0 -11
  84. package/ios/IamportReactNative.m +0 -23
  85. package/ios/IamportReactNative.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  86. package/ios/IamportReactNative.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  87. package/ios/IamportReactNative.xcworkspace/contents.xcworkspacedata +0 -9
  88. package/manuals/CALLBACK.md +0 -68
  89. package/manuals/EXAMPLE.md +0 -175
  90. package/manuals/EXPO.md +0 -66
  91. package/manuals/INSTALL.md +0 -72
  92. package/manuals/SETTING.md +0 -72
  93. package/manuals/SUPPORT.md +0 -30
  94. package/manuals/TRANS.md +0 -122
  95. package/manuals/VERSION.md +0 -114
  96. package/manuals/assets/webview-peer-dependency.png +0 -0
  97. package/src/components/Certification/index.js +0 -99
  98. package/src/components/Payment/PaymentWebView.js +0 -285
  99. package/src/components/Payment/index.android.js +0 -51
  100. package/src/components/Payment/index.ios.js +0 -30
  101. package/src/constants/index.js +0 -83
  102. package/src/img/after-linking-iamport.png +0 -0
  103. package/src/img/after-linking-webview.png +0 -0
  104. package/src/img/allow-arbitrary.gif +0 -0
  105. package/src/img/android-studio-avd-manager.png +0 -0
  106. package/src/img/android-studio-build.png +0 -0
  107. package/src/img/app-scheme-registry.gif +0 -0
  108. package/src/img/expo-eject.png +0 -0
  109. package/src/img/ios-emulator-certification.png +0 -0
  110. package/src/img/ios-emulator-home.png +0 -0
  111. package/src/img/ios-emulator-payment.png +0 -0
  112. package/src/img/ios-trans-create-header-file-1.png +0 -0
  113. package/src/img/ios-trans-create-header-file-2.png +0 -0
  114. package/src/img/ios-trans-create-objectivec-file-1.png +0 -0
  115. package/src/img/ios-trans-create-objectivec-file-2.png +0 -0
  116. package/src/img/ios-trans-result.png +0 -0
  117. package/src/utils/IamportUrl.js +0 -103
@@ -7,15 +7,18 @@
7
7
  objects = {
8
8
 
9
9
  /* Begin PBXBuildFile section */
10
- B3E7B58A1CC2AC0600A0062D /* IamportReactNative.m in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* IamportReactNative.m */; };
10
+
11
+ 5E555C0D2413F4C50049A1A2 /* IamportReactNative.m in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* IamportReactNative.m */; };
12
+ F4FF95D7245B92E800C19C63 /* IamportReactNative.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4FF95D6245B92E800C19C63 /* IamportReactNative.swift */; };
13
+
11
14
  /* End PBXBuildFile section */
12
15
 
13
16
  /* Begin PBXCopyFilesBuildPhase section */
14
- 5A12659222C9D8080036BC8D /* CopyFiles */ = {
17
+ 58B511D91A9E6C8500147676 /* CopyFiles */ = {
15
18
  isa = PBXCopyFilesBuildPhase;
16
19
  buildActionMask = 2147483647;
17
- dstPath = "";
18
- dstSubfolderSpec = 7;
20
+ dstPath = "include/$(PRODUCT_NAME)";
21
+ dstSubfolderSpec = 16;
19
22
  files = (
20
23
  );
21
24
  runOnlyForDeploymentPostprocessing = 0;
@@ -24,12 +27,15 @@
24
27
 
25
28
  /* Begin PBXFileReference section */
26
29
  134814201AA4EA6300B7C361 /* libIamportReactNative.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libIamportReactNative.a; sourceTree = BUILT_PRODUCTS_DIR; };
27
- B3E7B5881CC2AC0600A0062D /* IamportReactNative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IamportReactNative.h; sourceTree = "<group>"; };
30
+
28
31
  B3E7B5891CC2AC0600A0062D /* IamportReactNative.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IamportReactNative.m; sourceTree = "<group>"; };
32
+ F4FF95D5245B92E700C19C63 /* IamportReactNative-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "IamportReactNative-Bridging-Header.h"; sourceTree = "<group>"; };
33
+ F4FF95D6245B92E800C19C63 /* IamportReactNative.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IamportReactNative.swift; sourceTree = "<group>"; };
34
+
29
35
  /* End PBXFileReference section */
30
36
 
31
37
  /* Begin PBXFrameworksBuildPhase section */
32
- 5A12659322C9D8140036BC8D /* Frameworks */ = {
38
+ 58B511D81A9E6C8500147676 /* Frameworks */ = {
33
39
  isa = PBXFrameworksBuildPhase;
34
40
  buildActionMask = 2147483647;
35
41
  files = (
@@ -50,8 +56,11 @@
50
56
  58B511D21A9E6C8500147676 = {
51
57
  isa = PBXGroup;
52
58
  children = (
53
- B3E7B5881CC2AC0600A0062D /* IamportReactNative.h */,
59
+
60
+ F4FF95D6245B92E800C19C63 /* IamportReactNative.swift */,
54
61
  B3E7B5891CC2AC0600A0062D /* IamportReactNative.m */,
62
+ F4FF95D5245B92E700C19C63 /* IamportReactNative-Bridging-Header.h */,
63
+
55
64
  134814211AA4EA7D00B7C361 /* Products */,
56
65
  );
57
66
  sourceTree = "<group>";
@@ -64,8 +73,8 @@
64
73
  buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "IamportReactNative" */;
65
74
  buildPhases = (
66
75
  58B511D71A9E6C8500147676 /* Sources */,
67
- 5A12659322C9D8140036BC8D /* Frameworks */,
68
- 5A12659222C9D8080036BC8D /* CopyFiles */,
76
+ 58B511D81A9E6C8500147676 /* Frameworks */,
77
+ 58B511D91A9E6C8500147676 /* CopyFiles */,
69
78
  );
70
79
  buildRules = (
71
80
  );
@@ -82,7 +91,7 @@
82
91
  58B511D31A9E6C8500147676 /* Project object */ = {
83
92
  isa = PBXProject;
84
93
  attributes = {
85
- LastUpgradeCheck = 830;
94
+ LastUpgradeCheck = 0920;
86
95
  ORGANIZATIONNAME = Facebook;
87
96
  TargetAttributes = {
88
97
  58B511DA1A9E6C8500147676 = {
@@ -113,7 +122,10 @@
113
122
  isa = PBXSourcesBuildPhase;
114
123
  buildActionMask = 2147483647;
115
124
  files = (
125
+
126
+ F4FF95D7245B92E800C19C63 /* IamportReactNative.swift in Sources */,
116
127
  B3E7B58A1CC2AC0600A0062D /* IamportReactNative.m in Sources */,
128
+
117
129
  );
118
130
  runOnlyForDeploymentPostprocessing = 0;
119
131
  };
@@ -128,14 +140,20 @@
128
140
  CLANG_CXX_LIBRARY = "libc++";
129
141
  CLANG_ENABLE_MODULES = YES;
130
142
  CLANG_ENABLE_OBJC_ARC = YES;
143
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
131
144
  CLANG_WARN_BOOL_CONVERSION = YES;
145
+ CLANG_WARN_COMMA = YES;
132
146
  CLANG_WARN_CONSTANT_CONVERSION = YES;
133
147
  CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
134
148
  CLANG_WARN_EMPTY_BODY = YES;
135
149
  CLANG_WARN_ENUM_CONVERSION = YES;
136
150
  CLANG_WARN_INFINITE_RECURSION = YES;
137
151
  CLANG_WARN_INT_CONVERSION = YES;
152
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
153
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
138
154
  CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
155
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
156
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
139
157
  CLANG_WARN_SUSPICIOUS_MOVE = YES;
140
158
  CLANG_WARN_UNREACHABLE_CODE = YES;
141
159
  CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -172,14 +190,20 @@
172
190
  CLANG_CXX_LIBRARY = "libc++";
173
191
  CLANG_ENABLE_MODULES = YES;
174
192
  CLANG_ENABLE_OBJC_ARC = YES;
193
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
175
194
  CLANG_WARN_BOOL_CONVERSION = YES;
195
+ CLANG_WARN_COMMA = YES;
176
196
  CLANG_WARN_CONSTANT_CONVERSION = YES;
177
197
  CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
178
198
  CLANG_WARN_EMPTY_BODY = YES;
179
199
  CLANG_WARN_ENUM_CONVERSION = YES;
180
200
  CLANG_WARN_INFINITE_RECURSION = YES;
181
201
  CLANG_WARN_INT_CONVERSION = YES;
202
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
203
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
182
204
  CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
205
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
206
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
183
207
  CLANG_WARN_SUSPICIOUS_MOVE = YES;
184
208
  CLANG_WARN_UNREACHABLE_CODE = YES;
185
209
  CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -209,14 +233,16 @@
209
233
  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
210
234
  "$(SRCROOT)/../../../React/**",
211
235
  "$(SRCROOT)/../../react-native/React/**",
212
- "$(SRCROOT)/../../react-native-webview/ios/**",
213
- );
214
- LIBRARY_SEARCH_PATHS = (
215
- "$(inherited)",
216
- "\"$(SRCROOT)/IamportReactNative\"",
217
236
  );
237
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
238
+ OTHER_LDFLAGS = "-ObjC";
218
239
  PRODUCT_NAME = IamportReactNative;
219
240
  SKIP_INSTALL = YES;
241
+
242
+ SWIFT_OBJC_BRIDGING_HEADER = "IamportReactNative-Bridging-Header.h";
243
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
244
+ SWIFT_VERSION = 5.0;
245
+
220
246
  };
221
247
  name = Debug;
222
248
  };
@@ -228,14 +254,15 @@
228
254
  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
229
255
  "$(SRCROOT)/../../../React/**",
230
256
  "$(SRCROOT)/../../react-native/React/**",
231
- "$(SRCROOT)/../../react-native-webview/ios/**",
232
- );
233
- LIBRARY_SEARCH_PATHS = (
234
- "$(inherited)",
235
- "\"$(SRCROOT)/IamportReactNative\"",
236
257
  );
258
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
259
+ OTHER_LDFLAGS = "-ObjC";
237
260
  PRODUCT_NAME = IamportReactNative;
238
261
  SKIP_INSTALL = YES;
262
+
263
+ SWIFT_OBJC_BRIDGING_HEADER = "IamportReactNative-Bridging-Header.h";
264
+ SWIFT_VERSION = 5.0;
265
+
239
266
  };
240
267
  name = Release;
241
268
  };
@@ -0,0 +1,12 @@
1
+ #import "React/RCTViewManager.h"
2
+
3
+ @interface RCT_EXTERN_MODULE(IamportReactNativeViewManager, RCTViewManager)
4
+
5
+ RCT_EXPORT_VIEW_PROPERTY(color, NSString)
6
+
7
+ + (BOOL)requiresMainQueueSetup
8
+ {
9
+ return YES;
10
+ }
11
+
12
+ @end
@@ -0,0 +1,32 @@
1
+ @objc(IamportReactNativeViewManager)
2
+ class IamportReactNativeViewManager: RCTViewManager {
3
+
4
+ override func view() -> (IamportReactNativeView) {
5
+ return IamportReactNativeView()
6
+ }
7
+ }
8
+
9
+ class IamportReactNativeView : UIView {
10
+
11
+ @objc var color: String = "" {
12
+ didSet {
13
+ self.backgroundColor = hexStringToUIColor(hexColor: color)
14
+ }
15
+ }
16
+
17
+ func hexStringToUIColor(hexColor: String) -> UIColor {
18
+ let stringScanner = Scanner(string: hexColor)
19
+
20
+ if(hexColor.hasPrefix("#")) {
21
+ stringScanner.scanLocation = 1
22
+ }
23
+ var color: UInt32 = 0
24
+ stringScanner.scanHexInt32(&color)
25
+
26
+ let r = CGFloat(Int(color >> 16) & 0x000000FF)
27
+ let g = CGFloat(Int(color >> 8) & 0x000000FF)
28
+ let b = CGFloat(Int(color) & 0x000000FF)
29
+
30
+ return UIColor(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: 1)
31
+ }
32
+ }
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ var _reactNativeWebview = require("react-native-webview");
13
+
14
+ var _Loading = _interopRequireDefault(require("../Loading"));
15
+
16
+ var _ErrorOnParams = _interopRequireDefault(require("../ErrorOnParams"));
17
+
18
+ var _Validation = require("../../utils/Validation");
19
+
20
+ var _constants = require("../../constants");
21
+
22
+ var _styles = _interopRequireDefault(require("../../styles"));
23
+
24
+ var _IamportUrl = _interopRequireDefault(require("../../utils/IamportUrl"));
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
+
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+
32
+ function Certification({
33
+ userCode,
34
+ tierCode,
35
+ data,
36
+ loading,
37
+ callback
38
+ }) {
39
+ const [isWebViewLoaded, setIsWebViewLoaded] = (0, _react.useState)(false);
40
+ const webview = (0, _react.useRef)();
41
+ const validation = new _Validation.Validation(userCode, loading);
42
+
43
+ if (validation.getIsValid()) {
44
+ const {
45
+ wrapper,
46
+ loadingContainer,
47
+ webViewContainer
48
+ } = _styles.default;
49
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
50
+ style: wrapper
51
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
52
+ style: webViewContainer
53
+ }, /*#__PURE__*/_react.default.createElement(_reactNativeWebview.WebView, {
54
+ ref: ref => {
55
+ if (ref !== null) {
56
+ webview.current = ref;
57
+ }
58
+ },
59
+ useWebKit: true,
60
+ source: {
61
+ html: _constants.IMPConst.WEBVIEW_SOURCE_HTML
62
+ },
63
+ onLoadEnd: () => {
64
+ if (!isWebViewLoaded) {
65
+ var _webview$current3;
66
+
67
+ // html이 load되고 최초 한번만 inject javascript
68
+ if (tierCode) {
69
+ var _webview$current;
70
+
71
+ (_webview$current = webview.current) === null || _webview$current === void 0 ? void 0 : _webview$current.injectJavaScript(`
72
+ setTimeout(function() { IMP.agency("${userCode}", "${tierCode}"); });
73
+ `);
74
+ } else {
75
+ var _webview$current2;
76
+
77
+ (_webview$current2 = webview.current) === null || _webview$current2 === void 0 ? void 0 : _webview$current2.injectJavaScript(`
78
+ setTimeout(function() { IMP.init("${userCode}"); });
79
+ `);
80
+ }
81
+
82
+ (_webview$current3 = webview.current) === null || _webview$current3 === void 0 ? void 0 : _webview$current3.injectJavaScript(`
83
+ setTimeout(function() {
84
+ IMP.certification(${JSON.stringify(data)}, function(response) {
85
+ window.ReactNativeWebView.postMessage(JSON.stringify(response));
86
+ });
87
+ });
88
+ `);
89
+ setIsWebViewLoaded(true);
90
+ }
91
+ },
92
+ onMessage: e => {
93
+ const {
94
+ data
95
+ } = e.nativeEvent;
96
+ let response = data;
97
+
98
+ while (decodeURIComponent(response) !== response) {
99
+ response = decodeURIComponent(response);
100
+ }
101
+
102
+ response = JSON.parse(response);
103
+
104
+ if (typeof callback === 'function') {
105
+ callback(response);
106
+ }
107
+ },
108
+ startInLoadingState: true,
109
+ renderLoading: () => /*#__PURE__*/_react.default.createElement(_reactNative.View, {
110
+ style: loadingContainer
111
+ }, loading || /*#__PURE__*/_react.default.createElement(_Loading.default, null)),
112
+ originWhitelist: ['*'] // https://github.com/facebook/react-native/issues/19986
113
+ ,
114
+ onShouldStartLoadWithRequest: request => {
115
+ const {
116
+ url
117
+ } = request; // console.log('url: ' + url);
118
+
119
+ const iamportUrl = new _IamportUrl.default(url);
120
+
121
+ if (iamportUrl.isAppUrl()) {
122
+ /* 3rd-party 앱 오픈 */
123
+ iamportUrl.launchApp().catch(e => {
124
+ const {
125
+ code,
126
+ message
127
+ } = e;
128
+ callback({
129
+ imp_success: false,
130
+ error_code: code,
131
+ error_msg: message
132
+ });
133
+ });
134
+ return false;
135
+ }
136
+
137
+ if (iamportUrl.isPaymentOver()) {
138
+ callback(iamportUrl.getQuery());
139
+ return false;
140
+ }
141
+
142
+ return true;
143
+ }
144
+ })));
145
+ }
146
+
147
+ return /*#__PURE__*/_react.default.createElement(_ErrorOnParams.default, {
148
+ message: validation.getMessage()
149
+ });
150
+ }
151
+
152
+ var _default = Certification;
153
+ exports.default = _default;
154
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.tsx"],"names":["Certification","userCode","tierCode","data","loading","callback","isWebViewLoaded","setIsWebViewLoaded","webview","validation","Validation","getIsValid","wrapper","loadingContainer","webViewContainer","viewStyles","ref","current","html","IMPConst","WEBVIEW_SOURCE_HTML","injectJavaScript","JSON","stringify","e","nativeEvent","response","decodeURIComponent","parse","request","url","iamportUrl","IamportUrl","isAppUrl","launchApp","catch","code","message","imp_success","error_code","error_msg","isPaymentOver","getQuery","getMessage"],"mappings":"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","sourcesContent":["import React, { useRef, useState } from 'react';\nimport { View } from 'react-native';\nimport { WebView } from 'react-native-webview';\n\nimport Loading from '../Loading';\nimport ErrorOnParams from '../ErrorOnParams';\n\nimport { IMPData, Validation } from '../../utils/Validation';\nimport { IMPConst } from '../../constants';\n\nimport viewStyles from '../../styles';\nimport IamportUrl from '../../utils/IamportUrl';\n\ntype Props = {\n userCode: string;\n tierCode?: string;\n data: IMPData.CertificationData;\n loading: any;\n callback: (response: any) => any;\n};\n\nfunction Certification({ userCode, tierCode, data, loading, callback }: Props) {\n const [isWebViewLoaded, setIsWebViewLoaded] = useState(false);\n const webview = useRef<WebView>();\n\n const validation = new Validation(userCode, loading);\n if (validation.getIsValid()) {\n const { wrapper, loadingContainer, webViewContainer } = viewStyles;\n return (\n <View style={wrapper}>\n <View style={webViewContainer}>\n <WebView\n ref={(ref) => {\n if (ref !== null) {\n webview.current = ref;\n }\n }}\n useWebKit\n source={{ html: IMPConst.WEBVIEW_SOURCE_HTML }}\n onLoadEnd={() => {\n if (!isWebViewLoaded) {\n // html이 load되고 최초 한번만 inject javascript\n if (tierCode) {\n webview.current?.injectJavaScript(`\n setTimeout(function() { IMP.agency(\"${userCode}\", \"${tierCode}\"); });\n `);\n } else {\n webview.current?.injectJavaScript(`\n setTimeout(function() { IMP.init(\"${userCode}\"); });\n `);\n }\n webview.current?.injectJavaScript(`\n setTimeout(function() {\n IMP.certification(${JSON.stringify(data)}, function(response) {\n window.ReactNativeWebView.postMessage(JSON.stringify(response));\n });\n });\n `);\n setIsWebViewLoaded(true);\n }\n }}\n onMessage={(e) => {\n const { data } = e.nativeEvent;\n let response = data;\n while (decodeURIComponent(response) !== response) {\n response = decodeURIComponent(response);\n }\n response = JSON.parse(response);\n\n if (typeof callback === 'function') {\n callback(response);\n }\n }}\n startInLoadingState\n renderLoading={() => (\n <View style={loadingContainer}>{loading || <Loading />}</View>\n )}\n originWhitelist={['*']} // https://github.com/facebook/react-native/issues/19986\n onShouldStartLoadWithRequest={(request) => {\n const { url } = request;\n // console.log('url: ' + url);\n const iamportUrl = new IamportUrl(url);\n if (iamportUrl.isAppUrl()) {\n /* 3rd-party 앱 오픈 */\n iamportUrl.launchApp().catch((e) => {\n const { code, message } = e;\n callback({\n imp_success: false,\n error_code: code,\n error_msg: message,\n });\n });\n\n return false;\n }\n if (iamportUrl.isPaymentOver()) {\n callback(iamportUrl.getQuery());\n return false;\n }\n\n return true;\n }}\n />\n </View>\n </View>\n );\n }\n\n return <ErrorOnParams message={validation.getMessage()} />;\n}\n\nexport default Certification;\n"]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const logo = require('../../img/iamport-logo.png');
15
+
16
+ function ErrorOnParams({
17
+ message
18
+ }) {
19
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
20
+ style: styles.container
21
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
22
+ style: styles.contents
23
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Image, {
24
+ style: styles.contents,
25
+ source: logo
26
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
27
+ style: styles.text
28
+ }, message)));
29
+ }
30
+
31
+ const styles = _reactNative.StyleSheet.create({
32
+ container: {
33
+ flex: 1,
34
+ alignItems: 'center',
35
+ flexDirection: 'row',
36
+ justifyContent: 'center'
37
+ },
38
+ contents: {
39
+ flex: 1,
40
+ alignItems: 'center',
41
+ justifyContent: 'center'
42
+ },
43
+ text: {
44
+ fontSize: 16,
45
+ marginTop: 20,
46
+ lineHeight: 25
47
+ },
48
+ button: {
49
+ backgroundColor: '#fff',
50
+ color: '#ff0000',
51
+ borderColor: '#333',
52
+ borderWidth: 1,
53
+ borderRadius: 3,
54
+ paddingTop: 10,
55
+ paddingBottom: 10,
56
+ paddingLeft: 20,
57
+ paddingRight: 20,
58
+ fontSize: 14,
59
+ marginTop: 20,
60
+ fontWeight: 'bold'
61
+ }
62
+ });
63
+
64
+ var _default = ErrorOnParams;
65
+ exports.default = _default;
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.tsx"],"names":["logo","require","ErrorOnParams","message","styles","container","contents","text","StyleSheet","create","flex","alignItems","flexDirection","justifyContent","fontSize","marginTop","lineHeight","button","backgroundColor","color","borderColor","borderWidth","borderRadius","paddingTop","paddingBottom","paddingLeft","paddingRight","fontWeight"],"mappings":";;;;;;;AAAA;;AACA;;;;AAQA,MAAMA,IAAI,GAAGC,OAAO,CAAC,4BAAD,CAApB;;AAIA,SAASC,aAAT,CAAuB;AAAEC,EAAAA;AAAF,CAAvB,EAAgD;AAC9C,sBACE,6BAAC,iBAAD;AAAM,IAAA,KAAK,EAAEC,MAAM,CAACC;AAApB,kBACE,6BAAC,iBAAD;AAAM,IAAA,KAAK,EAAED,MAAM,CAACE;AAApB,kBACE,6BAAC,kBAAD;AAAO,IAAA,KAAK,EAAEF,MAAM,CAACE,QAArB;AAA+B,IAAA,MAAM,EAAEN;AAAvC,IADF,eAEE,6BAAC,iBAAD;AAAM,IAAA,KAAK,EAAEI,MAAM,CAACG;AAApB,KAA2BJ,OAA3B,CAFF,CADF,CADF;AAcD;;AAED,MAAMC,MAAM,GAAGI,wBAAWC,MAAX,CAAkB;AAC/BJ,EAAAA,SAAS,EAAE;AACTK,IAAAA,IAAI,EAAE,CADG;AAETC,IAAAA,UAAU,EAAE,QAFH;AAGTC,IAAAA,aAAa,EAAE,KAHN;AAITC,IAAAA,cAAc,EAAE;AAJP,GADoB;AAO/BP,EAAAA,QAAQ,EAAE;AACRI,IAAAA,IAAI,EAAE,CADE;AAERC,IAAAA,UAAU,EAAE,QAFJ;AAGRE,IAAAA,cAAc,EAAE;AAHR,GAPqB;AAY/BN,EAAAA,IAAI,EAAE;AACJO,IAAAA,QAAQ,EAAE,EADN;AAEJC,IAAAA,SAAS,EAAE,EAFP;AAGJC,IAAAA,UAAU,EAAE;AAHR,GAZyB;AAiB/BC,EAAAA,MAAM,EAAE;AACNC,IAAAA,eAAe,EAAE,MADX;AAENC,IAAAA,KAAK,EAAE,SAFD;AAGNC,IAAAA,WAAW,EAAE,MAHP;AAINC,IAAAA,WAAW,EAAE,CAJP;AAKNC,IAAAA,YAAY,EAAE,CALR;AAMNC,IAAAA,UAAU,EAAE,EANN;AAONC,IAAAA,aAAa,EAAE,EAPT;AAQNC,IAAAA,WAAW,EAAE,EARP;AASNC,IAAAA,YAAY,EAAE,EATR;AAUNZ,IAAAA,QAAQ,EAAE,EAVJ;AAWNC,IAAAA,SAAS,EAAE,EAXL;AAYNY,IAAAA,UAAU,EAAE;AAZN;AAjBuB,CAAlB,CAAf;;eAiCezB,a","sourcesContent":["import React from 'react';\nimport {\n View,\n Image,\n Text,\n // TouchableOpacity,\n StyleSheet,\n} from 'react-native';\n\nconst logo = require('../../img/iamport-logo.png');\n\ntype ErrorProps = { message: string };\n\nfunction ErrorOnParams({ message }: ErrorProps) {\n return (\n <View style={styles.container}>\n <View style={styles.contents}>\n <Image style={styles.contents} source={logo} />\n <Text style={styles.text}>{message}</Text>\n {/*<TouchableOpacity\n style={button}\n onPress={}\n >\n <Text>돌아가기</Text>\n </TouchableOpacity>*/}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'center',\n },\n contents: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n fontSize: 16,\n marginTop: 20,\n lineHeight: 25,\n },\n button: {\n backgroundColor: '#fff',\n color: '#ff0000',\n borderColor: '#333',\n borderWidth: 1,\n borderRadius: 3,\n paddingTop: 10,\n paddingBottom: 10,\n paddingLeft: 20,\n paddingRight: 20,\n fontSize: 14,\n marginTop: 20,\n fontWeight: 'bold',\n },\n});\n\nexport default ErrorOnParams;\n"]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const logo = require('../../img/iamport-logo.png');
15
+
16
+ function Loading() {
17
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
18
+ style: styles.container
19
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
20
+ style: styles.contents
21
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Image, {
22
+ style: styles.contents,
23
+ source: logo
24
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
25
+ style: styles.text
26
+ }, "\uC7A0\uC2DC\uB9CC \uAE30\uB2E4\uB824\uC8FC\uC138\uC694...")));
27
+ }
28
+
29
+ const styles = _reactNative.StyleSheet.create({
30
+ container: { ..._reactNative.StyleSheet.absoluteFillObject,
31
+ flex: 1,
32
+ alignItems: 'center',
33
+ flexDirection: 'row',
34
+ justifyContent: 'center'
35
+ },
36
+ contents: {
37
+ flex: 1,
38
+ alignItems: 'center',
39
+ justifyContent: 'center'
40
+ },
41
+ text: {
42
+ fontSize: 20,
43
+ marginTop: 20,
44
+ lineHeight: 25
45
+ }
46
+ });
47
+
48
+ var _default = Loading;
49
+ exports.default = _default;
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.tsx"],"names":["logo","require","Loading","styles","container","contents","text","StyleSheet","create","absoluteFillObject","flex","alignItems","flexDirection","justifyContent","fontSize","marginTop","lineHeight"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA,MAAMA,IAAI,GAAGC,OAAO,CAAC,4BAAD,CAApB;;AAEA,SAASC,OAAT,GAAmB;AACjB,sBACE,6BAAC,iBAAD;AAAM,IAAA,KAAK,EAAEC,MAAM,CAACC;AAApB,kBACE,6BAAC,iBAAD;AAAM,IAAA,KAAK,EAAED,MAAM,CAACE;AAApB,kBACE,6BAAC,kBAAD;AAAO,IAAA,KAAK,EAAEF,MAAM,CAACE,QAArB;AAA+B,IAAA,MAAM,EAAEL;AAAvC,IADF,eAEE,6BAAC,iBAAD;AAAM,IAAA,KAAK,EAAEG,MAAM,CAACG;AAApB,kEAFF,CADF,CADF;AAQD;;AAED,MAAMH,MAAM,GAAGI,wBAAWC,MAAX,CAAkB;AAC/BJ,EAAAA,SAAS,EAAE,EACT,GAAGG,wBAAWE,kBADL;AAETC,IAAAA,IAAI,EAAE,CAFG;AAGTC,IAAAA,UAAU,EAAE,QAHH;AAITC,IAAAA,aAAa,EAAE,KAJN;AAKTC,IAAAA,cAAc,EAAE;AALP,GADoB;AAQ/BR,EAAAA,QAAQ,EAAE;AACRK,IAAAA,IAAI,EAAE,CADE;AAERC,IAAAA,UAAU,EAAE,QAFJ;AAGRE,IAAAA,cAAc,EAAE;AAHR,GARqB;AAa/BP,EAAAA,IAAI,EAAE;AACJQ,IAAAA,QAAQ,EAAE,EADN;AAEJC,IAAAA,SAAS,EAAE,EAFP;AAGJC,IAAAA,UAAU,EAAE;AAHR;AAbyB,CAAlB,CAAf;;eAoBed,O","sourcesContent":["import React from 'react';\nimport { View, Image, Text, StyleSheet } from 'react-native';\n\nconst logo = require('../../img/iamport-logo.png');\n\nfunction Loading() {\n return (\n <View style={styles.container}>\n <View style={styles.contents}>\n <Image style={styles.contents} source={logo} />\n <Text style={styles.text}>잠시만 기다려주세요...</Text>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n ...StyleSheet.absoluteFillObject,\n flex: 1,\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'center',\n },\n contents: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n fontSize: 20,\n marginTop: 20,\n lineHeight: 25,\n },\n});\n\nexport default Loading;\n"]}