@primer-io/react-native 0.16.0 → 2.0.1

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 (233) hide show
  1. package/README.md +114 -24
  2. package/android/build.gradle +10 -2
  3. package/android/gradle.properties +3 -3
  4. package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +124 -150
  5. package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +212 -128
  6. package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +3 -14
  7. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutDataRN.kt +12 -0
  8. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +54 -0
  9. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +3 -9
  10. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEvents.kt +13 -0
  11. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt +4 -4
  12. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentMethodDataRN.kt +8 -0
  13. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +43 -125
  14. package/android/src/main/java/com/primerioreactnative/extensions/Payment.kt +6 -0
  15. package/android/src/main/java/com/primerioreactnative/extensions/PrimerAddress.kt +15 -0
  16. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutData.kt +7 -0
  17. package/android/src/main/java/com/primerioreactnative/extensions/PrimerClientSession.kt +15 -0
  18. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCustomer.kt +13 -0
  19. package/android/src/main/java/com/primerioreactnative/extensions/PrimerLineItem.kt +8 -0
  20. package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +6 -0
  21. package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodData.kt +7 -0
  22. package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +1 -3
  23. package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +45 -0
  24. package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +16 -6
  25. package/ios/DataModels/ImplementedRNCallbacks.swift +31 -0
  26. package/ios/DataModels/PrimerErrorRN.swift +0 -17
  27. package/ios/DataModels/PrimerSettingsRN.swift +70 -147
  28. package/ios/DataModels/PrimerThemeRN.swift +1 -10
  29. package/ios/RNTPrimer.m +26 -12
  30. package/ios/RNTPrimer.swift +295 -249
  31. package/ios/{Core/ReactNative-Bridging-Header.h → ReactNative-Bridging-Header.h} +0 -1
  32. package/ios/ReactNative.xcodeproj/project.pbxproj +14 -14
  33. package/lib/commonjs/Primer.js +201 -150
  34. package/lib/commonjs/Primer.js.map +1 -1
  35. package/lib/commonjs/RNPrimer.js +102 -41
  36. package/lib/commonjs/RNPrimer.js.map +1 -1
  37. package/lib/commonjs/index.js +110 -24
  38. package/lib/commonjs/index.js.map +1 -1
  39. package/lib/commonjs/models/{primer.js → Primer.js} +1 -1
  40. package/lib/commonjs/{headless_checkout/types.js.map → models/Primer.js.map} +0 -0
  41. package/lib/commonjs/models/PrimerCheckoutData.js +9 -0
  42. package/lib/commonjs/models/PrimerCheckoutData.js.map +1 -0
  43. package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js +2 -0
  44. package/lib/commonjs/models/{action-request.js.map → PrimerCheckoutPaymentMethodData.js.map} +0 -0
  45. package/lib/commonjs/models/PrimerClientSession.js +2 -0
  46. package/lib/commonjs/models/{client-session-actions-request.js.map → PrimerClientSession.js.map} +0 -0
  47. package/lib/commonjs/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
  48. package/lib/commonjs/models/PrimerCountryCode.js.map +1 -0
  49. package/lib/commonjs/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
  50. package/lib/commonjs/models/PrimerCurrencyCode.js.map +1 -0
  51. package/lib/commonjs/models/PrimerError.js +28 -0
  52. package/lib/commonjs/models/PrimerError.js.map +1 -0
  53. package/lib/commonjs/models/PrimerPaymentMethodTokenData.js +14 -0
  54. package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +1 -0
  55. package/lib/commonjs/models/PrimerSessionIntent.js +14 -0
  56. package/lib/commonjs/models/PrimerSessionIntent.js.map +1 -0
  57. package/lib/commonjs/models/{primer-config.js → PrimerSettings.js} +1 -1
  58. package/lib/commonjs/models/{primer-callbacks.js.map → PrimerSettings.js.map} +0 -0
  59. package/lib/commonjs/models/PrimerTheme.js +2 -0
  60. package/lib/commonjs/models/{primer-config.js.map → PrimerTheme.js.map} +0 -0
  61. package/lib/commonjs/utils/index.js.map +1 -1
  62. package/lib/module/Primer.js +201 -137
  63. package/lib/module/Primer.js.map +1 -1
  64. package/lib/module/RNPrimer.js +102 -41
  65. package/lib/module/RNPrimer.js.map +1 -1
  66. package/lib/module/index.js +9 -5
  67. package/lib/module/index.js.map +1 -1
  68. package/lib/module/models/Primer.js +2 -0
  69. package/lib/{commonjs/models/primer-request.js.map → module/models/Primer.js.map} +0 -0
  70. package/lib/module/models/PrimerCheckoutData.js +7 -0
  71. package/lib/module/models/PrimerCheckoutData.js.map +1 -0
  72. package/lib/module/models/PrimerCheckoutPaymentMethodData.js +2 -0
  73. package/lib/{commonjs/models/primer-settings.js.map → module/models/PrimerCheckoutPaymentMethodData.js.map} +0 -0
  74. package/lib/module/models/PrimerClientSession.js +2 -0
  75. package/lib/{commonjs/models/primer-theme.js.map → module/models/PrimerClientSession.js.map} +0 -0
  76. package/lib/module/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
  77. package/lib/module/models/PrimerCountryCode.js.map +1 -0
  78. package/lib/module/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
  79. package/lib/module/models/PrimerCurrencyCode.js.map +1 -0
  80. package/lib/module/models/PrimerError.js +19 -0
  81. package/lib/module/models/PrimerError.js.map +1 -0
  82. package/lib/module/models/PrimerPaymentMethodTokenData.js +7 -0
  83. package/lib/module/models/PrimerPaymentMethodTokenData.js.map +1 -0
  84. package/lib/module/models/PrimerSessionIntent.js +7 -0
  85. package/lib/module/models/PrimerSessionIntent.js.map +1 -0
  86. package/lib/module/models/PrimerSettings.js +2 -0
  87. package/lib/{commonjs/models/primer.js.map → module/models/PrimerSettings.js.map} +0 -0
  88. package/lib/module/models/PrimerTheme.js +2 -0
  89. package/lib/module/{headless_checkout/types.js.map → models/PrimerTheme.js.map} +0 -0
  90. package/lib/module/utils/index.js.map +1 -1
  91. package/lib/typescript/Primer.d.ts +2 -15
  92. package/lib/typescript/RNPrimer.d.ts +16 -9
  93. package/lib/typescript/index.d.ts +9 -5
  94. package/lib/typescript/models/Primer.d.ts +26 -0
  95. package/lib/typescript/models/PrimerCheckoutData.d.ts +15 -0
  96. package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +5 -0
  97. package/lib/typescript/models/PrimerClientSession.d.ts +45 -0
  98. package/lib/typescript/models/{utils/countryCode.d.ts → PrimerCountryCode.d.ts} +1 -1
  99. package/lib/typescript/models/{utils/currencyCode.d.ts → PrimerCurrencyCode.d.ts} +1 -1
  100. package/lib/typescript/models/PrimerError.d.ts +11 -0
  101. package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +116 -0
  102. package/lib/typescript/models/PrimerSessionIntent.d.ts +4 -0
  103. package/lib/typescript/models/PrimerSettings.d.ts +73 -0
  104. package/lib/typescript/models/{primer-theme.d.ts → PrimerTheme.d.ts} +1 -1
  105. package/lib/typescript/utils/index.d.ts +1 -1
  106. package/package.json +1 -1
  107. package/primer-io-react-native.podspec +1 -1
  108. package/src/Primer.ts +228 -172
  109. package/src/RNPrimer.ts +135 -51
  110. package/src/index.tsx +33 -7
  111. package/src/models/Primer.ts +35 -0
  112. package/src/models/PrimerCheckoutData.ts +18 -0
  113. package/src/models/PrimerCheckoutPaymentMethodData.ts +5 -0
  114. package/src/models/PrimerClientSession.ts +53 -0
  115. package/src/models/{utils/countryCode.ts → PrimerCountryCode.ts} +1 -1
  116. package/src/models/{utils/currencyCode.ts → PrimerCurrencyCode.ts} +1 -1
  117. package/src/models/PrimerError.ts +20 -0
  118. package/src/models/PrimerPaymentMethodTokenData.ts +130 -0
  119. package/src/models/PrimerSessionIntent.ts +4 -0
  120. package/src/models/PrimerSettings.ts +93 -0
  121. package/src/models/{primer-theme.ts → PrimerTheme.ts} +1 -1
  122. package/src/utils/index.ts +1 -1
  123. package/android/src/main/java/com/primerioreactnative/PrimerCardNumberEditTextManager.kt +0 -83
  124. package/android/src/main/java/com/primerioreactnative/PrimerHeadlessUniversalCheckout.kt +0 -198
  125. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEventsRN.kt +0 -11
  126. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIntentRN.kt +0 -80
  127. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerOnClientSessionActionsRequestRN.kt +0 -65
  128. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerRequestRN.kt +0 -9
  129. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerThemeRN.kt +0 -51
  130. package/android/src/main/java/com/primerioreactnative/huc/assets/AssetsManager.kt +0 -56
  131. package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +0 -11
  132. package/android/src/main/java/com/primerioreactnative/huc/extensions/Map.kt +0 -10
  133. package/android/src/main/java/com/primerioreactnative/utils/Keys.kt +0 -7
  134. package/android/src/main/java/com/primerioreactnative/utils/PrimerEventQueueRN.kt +0 -30
  135. package/ios/DataModels/PrimerIntentRN.swift +0 -10
  136. package/ios/DataModels/PrimerRequestRN.swift +0 -14
  137. package/ios/Headless Universal Checkout/RNTPrimerCardNumberInputElementManager.m +0 -23
  138. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +0 -30
  139. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +0 -241
  140. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.m +0 -14
  141. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +0 -113
  142. package/lib/commonjs/PrimerInput.js +0 -80
  143. package/lib/commonjs/PrimerInput.js.map +0 -1
  144. package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +0 -14
  145. package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +0 -1
  146. package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +0 -110
  147. package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +0 -1
  148. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -117
  149. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
  150. package/lib/commonjs/headless_checkout/types.js +0 -2
  151. package/lib/commonjs/models/action-request.js +0 -2
  152. package/lib/commonjs/models/client-session-actions-request.js +0 -2
  153. package/lib/commonjs/models/payment-instrument-token.js +0 -30
  154. package/lib/commonjs/models/payment-instrument-token.js.map +0 -1
  155. package/lib/commonjs/models/primer-callbacks.js +0 -6
  156. package/lib/commonjs/models/primer-error.js +0 -4
  157. package/lib/commonjs/models/primer-error.js.map +0 -1
  158. package/lib/commonjs/models/primer-intent.js +0 -4
  159. package/lib/commonjs/models/primer-intent.js.map +0 -1
  160. package/lib/commonjs/models/primer-request.js +0 -2
  161. package/lib/commonjs/models/primer-settings.js +0 -6
  162. package/lib/commonjs/models/primer-theme.js +0 -2
  163. package/lib/commonjs/models/utils/countryCode.js.map +0 -1
  164. package/lib/commonjs/models/utils/currencyCode.js.map +0 -1
  165. package/lib/commonjs/models/utils/redirectScheme.js +0 -4
  166. package/lib/commonjs/models/utils/redirectScheme.js.map +0 -1
  167. package/lib/module/PrimerInput.js +0 -46
  168. package/lib/module/PrimerInput.js.map +0 -1
  169. package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +0 -5
  170. package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +0 -1
  171. package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +0 -98
  172. package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +0 -1
  173. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -100
  174. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
  175. package/lib/module/headless_checkout/types.js +0 -2
  176. package/lib/module/models/action-request.js +0 -2
  177. package/lib/module/models/action-request.js.map +0 -1
  178. package/lib/module/models/client-session-actions-request.js +0 -2
  179. package/lib/module/models/client-session-actions-request.js.map +0 -1
  180. package/lib/module/models/payment-instrument-token.js +0 -28
  181. package/lib/module/models/payment-instrument-token.js.map +0 -1
  182. package/lib/module/models/primer-callbacks.js +0 -2
  183. package/lib/module/models/primer-callbacks.js.map +0 -1
  184. package/lib/module/models/primer-config.js +0 -2
  185. package/lib/module/models/primer-config.js.map +0 -1
  186. package/lib/module/models/primer-error.js +0 -2
  187. package/lib/module/models/primer-error.js.map +0 -1
  188. package/lib/module/models/primer-intent.js +0 -2
  189. package/lib/module/models/primer-intent.js.map +0 -1
  190. package/lib/module/models/primer-request.js +0 -2
  191. package/lib/module/models/primer-request.js.map +0 -1
  192. package/lib/module/models/primer-settings.js +0 -2
  193. package/lib/module/models/primer-settings.js.map +0 -1
  194. package/lib/module/models/primer-theme.js +0 -2
  195. package/lib/module/models/primer-theme.js.map +0 -1
  196. package/lib/module/models/primer.js +0 -2
  197. package/lib/module/models/primer.js.map +0 -1
  198. package/lib/module/models/utils/countryCode.js.map +0 -1
  199. package/lib/module/models/utils/currencyCode.js.map +0 -1
  200. package/lib/module/models/utils/redirectScheme.js +0 -2
  201. package/lib/module/models/utils/redirectScheme.js.map +0 -1
  202. package/lib/typescript/PrimerInput.d.ts +0 -15
  203. package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +0 -1
  204. package/lib/typescript/headless_checkout/NativePrimerHeadlessUniversalCheckout.d.ts +0 -13
  205. package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +0 -13
  206. package/lib/typescript/headless_checkout/types.d.ts +0 -16
  207. package/lib/typescript/models/action-request.d.ts +0 -10
  208. package/lib/typescript/models/client-session-actions-request.d.ts +0 -15
  209. package/lib/typescript/models/payment-instrument-token.d.ts +0 -76
  210. package/lib/typescript/models/primer-callbacks.d.ts +0 -10
  211. package/lib/typescript/models/primer-config.d.ts +0 -44
  212. package/lib/typescript/models/primer-error.d.ts +0 -8
  213. package/lib/typescript/models/primer-intent.d.ts +0 -13
  214. package/lib/typescript/models/primer-request.d.ts +0 -7
  215. package/lib/typescript/models/primer-settings.d.ts +0 -65
  216. package/lib/typescript/models/primer.d.ts +0 -33
  217. package/lib/typescript/models/utils/redirectScheme.d.ts +0 -3
  218. package/src/PrimerInput.tsx +0 -73
  219. package/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx +0 -2
  220. package/src/headless_checkout/NativePrimerHeadlessUniversalCheckout.ts +0 -132
  221. package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +0 -140
  222. package/src/headless_checkout/types.ts +0 -18
  223. package/src/models/action-request.ts +0 -12
  224. package/src/models/client-session-actions-request.ts +0 -21
  225. package/src/models/payment-instrument-token.ts +0 -109
  226. package/src/models/primer-callbacks.ts +0 -14
  227. package/src/models/primer-config.ts +0 -55
  228. package/src/models/primer-error.ts +0 -19
  229. package/src/models/primer-intent.ts +0 -49
  230. package/src/models/primer-request.ts +0 -7
  231. package/src/models/primer-settings.ts +0 -73
  232. package/src/models/primer.ts +0 -41
  233. package/src/models/utils/redirectScheme.ts +0 -5
@@ -1,5 +1,5 @@
1
1
  export type PrimerTheme = IPrimerTheme;
2
- interface IPrimerTheme {
2
+ export interface IPrimerTheme {
3
3
  colors?: ColorTheme;
4
4
  darkModeColors?: ColorTheme;
5
5
  }
@@ -1,4 +1,4 @@
1
- import type { RgbaColor } from 'src/models/primer-theme';
1
+ import type { RgbaColor } from "../models/PrimerTheme";
2
2
 
3
3
  export function toRgbColor(hex: string): RgbaColor | null {
4
4
  // Make sure it looks like a proper color hex string
@@ -1,83 +0,0 @@
1
- package com.primerioreactnative
2
-
3
- import android.content.res.ColorStateList
4
- import android.graphics.Color
5
- import android.graphics.drawable.ColorDrawable
6
- import android.graphics.drawable.GradientDrawable
7
- import android.view.ViewGroup
8
- import android.widget.EditText
9
- import android.widget.LinearLayout
10
- import android.widget.TextView
11
- import com.facebook.drawee.backends.pipeline.Fresco
12
- import com.facebook.react.bridge.ReactApplicationContext
13
- import com.facebook.react.uimanager.SimpleViewManager
14
- import com.facebook.react.uimanager.ThemedReactContext
15
- import com.facebook.react.uimanager.ViewProps
16
- import com.facebook.react.uimanager.annotations.ReactProp
17
- import com.facebook.react.views.image.ReactImageView
18
- import io.primer.android.components.manager.PrimerCardManager
19
- import io.primer.android.components.manager.PrimerUniversalCheckoutCardManagerInterface
20
- import io.primer.android.components.ui.widgets.*
21
-
22
- val listOfTextInputs = mutableListOf<PrimerEditText>()
23
-
24
- class PrimerCardNumberEditTextManager : SimpleViewManager<PrimerCardNumberEditText>() {
25
-
26
- override fun getName(): String {
27
- return REACT_CLASS
28
- }
29
-
30
- override fun createViewInstance(reactContext: ThemedReactContext): PrimerCardNumberEditText {
31
- val editText = PrimerCardNumberEditText(reactContext)
32
- return editText
33
- }
34
-
35
- companion object {
36
- const val REACT_CLASS = "PrimerCardNumberEditText"
37
- }
38
- }
39
-
40
- class PrimerCardholderNameEditTextManager : SimpleViewManager<PrimerCardholderNameEditText>() {
41
-
42
- override fun getName(): String {
43
- return REACT_CLASS
44
- }
45
-
46
- override fun createViewInstance(reactContext: ThemedReactContext): PrimerCardholderNameEditText {
47
- return PrimerCardholderNameEditText(reactContext)
48
- }
49
-
50
- companion object {
51
- const val REACT_CLASS = "PrimerCardholderNameEditText"
52
- }
53
- }
54
-
55
- class PrimerExpiryEditTextManager : SimpleViewManager<PrimerExpiryEditText>() {
56
-
57
- override fun getName(): String {
58
- return REACT_CLASS
59
- }
60
-
61
- override fun createViewInstance(reactContext: ThemedReactContext): PrimerExpiryEditText {
62
- return PrimerExpiryEditText(reactContext)
63
- }
64
-
65
- companion object {
66
- const val REACT_CLASS = "PrimerExpiryEditText"
67
- }
68
- }
69
-
70
- class PrimerCvvEditTextManager : SimpleViewManager<PrimerCvvEditText>() {
71
-
72
- override fun getName(): String {
73
- return REACT_CLASS
74
- }
75
-
76
- override fun createViewInstance(reactContext: ThemedReactContext): PrimerCvvEditText {
77
- return PrimerCvvEditText(reactContext)
78
- }
79
-
80
- companion object {
81
- const val REACT_CLASS = "PrimerCvvEditText"
82
- }
83
- }
@@ -1,198 +0,0 @@
1
- package com.primerioreactnative
2
-
3
- import androidx.annotation.Nullable
4
- import androidx.core.content.ContextCompat
5
- import com.facebook.react.bridge.*
6
- import com.facebook.react.modules.core.DeviceEventManagerModule
7
- import com.primerioreactnative.datamodels.*
8
- import com.primerioreactnative.huc.assets.AssetsManager
9
- import com.primerioreactnative.huc.assets.AssetsManager.drawableToBitmap
10
- import com.primerioreactnative.huc.assets.AssetsManager.getFile
11
- import com.primerioreactnative.huc.events.PrimerHeadlessUniversalCheckoutEvent
12
- import com.primerioreactnative.huc.extensions.toArgumentsMap
13
- import com.primerioreactnative.utils.Keys
14
- import com.primerioreactnative.utils.errorTo
15
- import io.primer.android.completion.ResumeHandler
16
- import io.primer.android.components.PrimerHeadlessUniversalCheckout
17
- import io.primer.android.components.PrimerHeadlessUniversalCheckoutListener
18
- import io.primer.android.components.domain.core.models.PrimerHeadlessUniversalCheckoutPaymentMethod
19
- import io.primer.android.components.ui.assets.ImageType
20
- import io.primer.android.model.dto.*
21
- import kotlinx.serialization.decodeFromString
22
- import kotlinx.serialization.encodeToString
23
- import kotlinx.serialization.json.Json
24
- import org.json.JSONObject
25
-
26
- class PrimerHeadlessUniversalCheckout(
27
- private val reactContext: ReactApplicationContext,
28
- private val json: Json,
29
- ) : ReactContextBaseJavaModule(reactContext), PrimerHeadlessUniversalCheckoutListener {
30
-
31
- override fun getName(): String {
32
- return "PrimerHeadlessUniversalCheckout"
33
- }
34
-
35
- private var resumeHandler: ResumeHandler? = null
36
- private var successCallback: Callback? = null
37
-
38
- @ReactMethod
39
- fun startWithClientToken(
40
- clientToken: String,
41
- settingsStr: String?,
42
- errorCallback: Callback,
43
- successCallback: Callback
44
- ) {
45
- try {
46
- val settings = if (settingsStr.isNullOrBlank()) PrimerSettingsRN() else
47
- json.decodeFromString(settingsStr.orEmpty())
48
- this.successCallback = successCallback
49
- PrimerHeadlessUniversalCheckout.current.start(
50
- reactContext,
51
- clientToken,
52
- PrimerConfig(settings = settings.format()),
53
- this
54
- )
55
- } catch (e: Exception) {
56
- errorCallback.invoke(
57
- json.encodeToString(
58
- ErrorTypeRN.InitFailed errorTo
59
- "failed to initialise PrimerHeadlessUniversalCheckout SDK, error: $e",
60
- )
61
- )
62
- }
63
- }
64
-
65
- @ReactMethod
66
- fun resumeWithClientToken(resumeToken: String) {
67
- this.resumeHandler?.handleNewClientToken(resumeToken)
68
- }
69
-
70
- @ReactMethod
71
- fun showPaymentMethod(paymentMethodType: String) {
72
- val primerPaymentMethodType = PrimerPaymentMethodType.safeValueOf(paymentMethodType)
73
- PrimerHeadlessUniversalCheckout.current.showPaymentMethod(
74
- reactContext,
75
- primerPaymentMethodType
76
- )
77
- }
78
-
79
- @ReactMethod
80
- fun disposeHeadlessCheckout() {
81
- PrimerHeadlessUniversalCheckout.current.cleanup()
82
- }
83
-
84
- @ReactMethod
85
- fun getAssetForPaymentMethodType(
86
- paymentMethodType: String,
87
- assetType: String,
88
- errorCallback: Callback,
89
- successCallback: Callback
90
- ) {
91
-
92
- val primerPaymentMethodType = PrimerPaymentMethodType.safeValueOf(paymentMethodType)
93
- val type = ImageType.values().find { it.name.equals(assetType, ignoreCase = true) }
94
- when {
95
- primerPaymentMethodType == PaymentMethodType.UNKNOWN -> {
96
- errorCallback.invoke(
97
- json.encodeToString(
98
- ErrorTypeRN.AssetMissing errorTo
99
- "Asset for $paymentMethodType does not exist, make sure you don't have any typos."
100
- )
101
- )
102
- }
103
- type == null -> {
104
- errorCallback.invoke(
105
- json.encodeToString(
106
- ErrorTypeRN.AssetMismatch errorTo
107
- "You have provided assetType=$assetType, but variable assetType can be 'LOGO' or 'ICON'."
108
- )
109
- )
110
- }
111
- else -> {
112
- PrimerHeadlessUniversalCheckout.getAsset(primerPaymentMethodType, type)?.let { resourceId ->
113
- val file = getFile(reactContext, paymentMethodType)
114
- AssetsManager.saveBitmapToFile(
115
- file,
116
- drawableToBitmap(ContextCompat.getDrawable(reactContext, resourceId)!!),
117
- )
118
- successCallback.invoke("file://${file.absolutePath}")
119
- } ?: run {
120
- errorCallback.invoke(
121
- json.encodeToString(
122
- ErrorTypeRN.AssetMissing errorTo
123
- "Failed to find $paymentMethodType for $assetType"
124
- )
125
- )
126
- }
127
- }
128
- }
129
- }
130
-
131
- override fun onClientSessionSetupSuccessfully(paymentMethods: List<PrimerHeadlessUniversalCheckoutPaymentMethod>) {
132
- sendEvent(PrimerHeadlessUniversalCheckoutEvent.CLIENT_SESSION_SETUP_SUCCESS)
133
- successCallback?.invoke(
134
- Arguments.fromList(paymentMethods.map { it.paymentMethodType.name })
135
- )
136
- }
137
-
138
- override fun onTokenizationPreparation() {
139
- sendEvent(PrimerHeadlessUniversalCheckoutEvent.TOKENIZATION_PREPARATION_STARTED)
140
- }
141
-
142
- override fun onTokenizationStarted() {
143
- sendEvent(PrimerHeadlessUniversalCheckoutEvent.TOKENIZATION_STARTED)
144
- }
145
-
146
- override fun onPaymentMethodShowed() {
147
- sendEvent(PrimerHeadlessUniversalCheckoutEvent.PAYMENT_METH0D_SHOWED)
148
- }
149
-
150
- override fun onTokenizationSuccess(
151
- paymentMethodToken: PaymentMethodToken,
152
- resumeHandler: ResumeHandler
153
- ) {
154
- this.resumeHandler = resumeHandler
155
-
156
- sendEvent(
157
- PrimerHeadlessUniversalCheckoutEvent.TOKENIZATION_SUCCESS,
158
- mapOf(
159
- Keys.PAYMENT_METHOD_TOKEN to json.encodeToString(
160
- PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(
161
- paymentMethodToken
162
- )
163
- )
164
- ).toArgumentsMap()
165
- )
166
- }
167
-
168
- override fun onResumeSuccess(resumeToken: String, resumeHandler: ResumeHandler) {
169
- this.resumeHandler = resumeHandler
170
-
171
- sendEvent(
172
- PrimerHeadlessUniversalCheckoutEvent.RESUME,
173
- mapOf(Keys.RESUME_TOKEN to resumeToken).toArgumentsMap()
174
- )
175
- }
176
-
177
- override fun onError(error: APIError) {
178
- sendEvent(
179
- PrimerHeadlessUniversalCheckoutEvent.ERROR,
180
- mapOf(
181
- Keys.ERROR to json.encodeToString(
182
- ErrorTypeRN.CheckoutFlowFailed errorTo
183
- error.description
184
- )
185
- ).toArgumentsMap()
186
- )
187
- }
188
-
189
-
190
- private fun sendEvent(
191
- event: PrimerHeadlessUniversalCheckoutEvent,
192
- @Nullable params: WritableMap? = null
193
- ) {
194
- reactContext
195
- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
196
- .emit(event.eventName, params)
197
- }
198
- }
@@ -1,11 +0,0 @@
1
- package com.primerioreactnative.datamodels
2
-
3
- sealed class PrimerEventsRN(val string: String) {
4
- object OnClientTokenCallback: PrimerEventsRN("onClientTokenCallback")
5
- object OnClientSessionActions: PrimerEventsRN("onClientSessionActions")
6
- object OnTokenizeSuccessCallback: PrimerEventsRN("onTokenizeSuccessCallback")
7
- object OnResumeSuccess: PrimerEventsRN("onResumeSuccess")
8
- object OnCheckoutDismissed: PrimerEventsRN("onCheckoutDismissed")
9
- object OnError: PrimerEventsRN("onError")
10
- object OnVaultSuccess: PrimerEventsRN("onVaultSuccess")
11
- }
@@ -1,80 +0,0 @@
1
- package com.primerioreactnative.datamodels
2
-
3
- import io.primer.android.PaymentMethod
4
- import io.primer.android.payment.card.Card
5
- import io.primer.android.payment.gocardless.GoCardless
6
- import io.primer.android.payment.google.GooglePay
7
- import io.primer.android.payment.klarna.Klarna
8
- import io.primer.android.payment.paypal.PayPal
9
- import kotlinx.serialization.Serializable
10
-
11
- @Serializable
12
- data class PrimerIntentRN(
13
- val vault: Boolean = false,
14
- val paymentMethod: PrimerPaymentMethodTypeRN = PrimerPaymentMethodTypeRN.Any,
15
- ) {
16
-
17
- fun toPaymentMethods(settings: PrimerSettingsRN): List<PaymentMethod> {
18
- return when (paymentMethod) {
19
- PrimerPaymentMethodTypeRN.Any -> {
20
- val countryCode = settings.order?.countryCode ?: throw Exception()
21
- val currency = settings.order.currency ?: throw Exception()
22
- val amount = settings.order.amount ?: throw Exception()
23
-
24
- val googlePay = GooglePay(
25
- countryCode = countryCode,
26
- currencyCode = currency,
27
- totalPrice = amount.toString(),
28
- )
29
-
30
- listOf(Klarna(), Card(), PayPal(), googlePay)
31
- }
32
- PrimerPaymentMethodTypeRN.Klarna -> listOf(Klarna())
33
- PrimerPaymentMethodTypeRN.Card -> listOf(Card())
34
- PrimerPaymentMethodTypeRN.PayPal -> listOf(PayPal())
35
- PrimerPaymentMethodTypeRN.GooglePay -> {
36
- val countryCode = settings.order?.countryCode ?: throw Exception()
37
- val currency = settings.order.currency ?: throw Exception()
38
- val amount = settings.order.amount ?: throw Exception()
39
-
40
- val googlePay = GooglePay(
41
- countryCode = countryCode,
42
- currencyCode = currency,
43
- totalPrice = amount.toString(),
44
- )
45
- listOf(googlePay)
46
- }
47
- PrimerPaymentMethodTypeRN.GoCardless -> {
48
- val companyName = settings.business?.name ?: throw Exception()
49
- val companyAddress = addressToString(settings.business.address) ?: throw Exception()
50
- val goCardless = GoCardless(
51
- companyName = companyName,
52
- companyAddress = companyAddress
53
- )
54
- return listOf(goCardless)
55
- }
56
- else -> throw Exception()
57
- }
58
- }
59
-
60
- companion object {
61
- fun addressToString(a: PrimerAddressRN?): String? {
62
- if (a == null) return null
63
- val values = listOf<String?>(a.line1, a.line2, a.postalCode, a.city, a.country)
64
- return values.reduce { acc, s ->
65
- s?.let { "$acc$s, " }
66
- }?.dropLast(2)
67
- }
68
- }
69
- }
70
-
71
- @Serializable
72
- enum class PrimerPaymentMethodTypeRN {
73
- Any,
74
- Klarna,
75
- Card,
76
- PayPal,
77
- GooglePay,
78
- ApplePay,
79
- GoCardless,
80
- }
@@ -1,65 +0,0 @@
1
- package com.primerioreactnative.datamodels
2
-
3
- import io.primer.android.data.action.models.ClientSessionActionsRequest
4
- import kotlinx.serialization.Serializable
5
-
6
- @Serializable
7
- data class PrimerOnClientSessionActionsRequestRN(
8
- val actions: List<Action>,
9
- ) {
10
-
11
- @Serializable
12
- data class Action(
13
- val type: String,
14
- val paymentMethodType: String? = null,
15
- val network: String? = null,
16
- val params: Params? = null,
17
- )
18
-
19
- @Serializable
20
- data class Params(
21
- val billingAddress: Map<String, String?>
22
- )
23
-
24
- companion object {
25
- fun build(
26
- request: ClientSessionActionsRequest,
27
- ): PrimerOnClientSessionActionsRequestRN {
28
- return PrimerOnClientSessionActionsRequestRN(
29
- actions = request.actions.map { action ->
30
- when (action) {
31
- is ClientSessionActionsRequest.SetPaymentMethod -> {
32
- Action(
33
- type = "SELECT_PAYMENT_METHOD",
34
- paymentMethodType = action.paymentMethodType,
35
- network = action.network,
36
- )
37
- }
38
- is ClientSessionActionsRequest.UnsetPaymentMethod -> {
39
- Action(
40
- type = "UNSELECT_PAYMENT_METHOD",
41
- )
42
- }
43
- is ClientSessionActionsRequest.SetBillingAddress -> {
44
- Action(
45
- type = "SET_BILLING_ADDRESS",
46
- params = Params(
47
- billingAddress = mapOf(
48
- "firstName" to action.firstName,
49
- "lastName" to action.lastName,
50
- "addressLine1" to action.addressLine1,
51
- "addressLine2" to action.addressLine2,
52
- "city" to action.city,
53
- "postalCode" to action.postalCode,
54
- "state" to action.state,
55
- "countryCode" to action.countryCode
56
- )
57
- )
58
- )
59
- }
60
- }
61
- }
62
- )
63
- }
64
- }
65
- }
@@ -1,9 +0,0 @@
1
- package com.primerioreactnative.datamodels
2
-
3
- import kotlinx.serialization.*
4
-
5
- @Serializable
6
- data class PrimerResumeRequest(
7
- val error: String? = null,
8
- val token: String? = null,
9
- )
@@ -1,51 +0,0 @@
1
- package com.primerioreactnative.datamodels
2
-
3
- import io.primer.android.InputThemeData
4
- import io.primer.android.PrimerTheme
5
- import kotlinx.serialization.Serializable
6
-
7
- @Serializable
8
- class PrimerThemeRN(
9
- private val colors: ColorThemeRN? = null,
10
- val darkModeColors: ColorThemeRN? = null,
11
- ) {
12
- fun format(): PrimerTheme {
13
- return PrimerTheme.build(
14
- input = InputThemeData()
15
- )
16
- }
17
- }
18
-
19
- @Serializable
20
- class ColorThemeRN(
21
- val mainColor: ColorRN? = null,
22
- val contrastingColor: ColorRN? = null,
23
- val background: ColorRN? = null,
24
- val text: ColorRN? = null,
25
- val contrastingText: ColorRN? = null,
26
- val borders: ColorRN? = null,
27
- val disabled: ColorRN? = null,
28
- val error: ColorRN? = null,
29
- )
30
-
31
- @Serializable
32
- class ColorRN(
33
- private val red: Int,
34
- private val green: Int,
35
- private val blue: Int,
36
- private val alpha: Int,
37
- ) {
38
-
39
- val hex: String
40
- get() {
41
- val alpha = pad(Integer.toHexString(alpha))
42
- val red = pad(Integer.toHexString(red))
43
- val green = pad(Integer.toHexString(green))
44
- val blue = pad(Integer.toHexString(blue))
45
- return "#$alpha$red$green$blue"
46
- }
47
-
48
- private fun pad(s: String): String {
49
- return if (s.length == 1) "0$s" else s
50
- }
51
- }
@@ -1,56 +0,0 @@
1
- package com.primerioreactnative.huc.assets
2
-
3
- import android.graphics.Bitmap
4
- import android.graphics.Canvas
5
- import android.graphics.drawable.BitmapDrawable
6
- import android.graphics.drawable.Drawable
7
- import com.facebook.react.bridge.ReactApplicationContext
8
- import java.io.File
9
- import java.io.FileOutputStream
10
- import java.util.*
11
-
12
- internal object AssetsManager {
13
-
14
- private const val ASSETS_DIRECTORY = "primer-sdk"
15
- private const val COMPRESS_QUALITY = 100
16
-
17
- fun drawableToBitmap(drawable: Drawable): Bitmap {
18
- if (drawable is BitmapDrawable) {
19
- return drawable.bitmap
20
- }
21
-
22
- val bitmap = Bitmap.createBitmap(
23
- drawable.intrinsicWidth,
24
- drawable.intrinsicHeight,
25
- Bitmap.Config.ARGB_8888
26
- )
27
- val canvas = Canvas(bitmap)
28
- drawable.setBounds(0, 0, canvas.width, canvas.height)
29
- drawable.draw(canvas)
30
- return bitmap
31
- }
32
-
33
- fun saveBitmapToFile(
34
- file: File,
35
- bitmap: Bitmap,
36
- format: Bitmap.CompressFormat = Bitmap.CompressFormat.PNG,
37
- ) {
38
-
39
- FileOutputStream(file).use {
40
- bitmap.compress(format, COMPRESS_QUALITY, it)
41
- it.close()
42
- }
43
- }
44
-
45
- fun getFile(context: ReactApplicationContext, path: String): File {
46
- val directory = File(context.filesDir, path)
47
- if (!directory.exists()) directory.mkdirs()
48
- val file = File(
49
- context.filesDir,
50
- ASSETS_DIRECTORY + File.pathSeparator + path.toLowerCase(Locale.ROOT)
51
- )
52
- if (!file.exists()) file.createNewFile()
53
- return file
54
- }
55
-
56
- }
@@ -1,11 +0,0 @@
1
- package com.primerioreactnative.huc.events
2
-
3
- internal enum class PrimerHeadlessUniversalCheckoutEvent(val eventName: String) {
4
- CLIENT_SESSION_SETUP_SUCCESS("clientSessionDidSetUpSuccessfully"),
5
- TOKENIZATION_PREPARATION_STARTED("preparationStarted"),
6
- PAYMENT_METH0D_SHOWED("paymentMethodPresented"),
7
- TOKENIZATION_STARTED("tokenizationStarted"),
8
- TOKENIZATION_SUCCESS("tokenizationSucceeded"),
9
- RESUME("resume"),
10
- ERROR("error");
11
- }
@@ -1,10 +0,0 @@
1
- package com.primerioreactnative.huc.extensions
2
-
3
- import com.facebook.react.bridge.Arguments
4
-
5
- internal fun Map<String, String>.toArgumentsMap() =
6
- Arguments.createMap().apply {
7
- entries.forEach {
8
- putString(it.key, it.value)
9
- }
10
- }
@@ -1,7 +0,0 @@
1
- package com.primerioreactnative.utils
2
-
3
- internal object Keys {
4
- const val ERROR = "error"
5
- const val RESUME_TOKEN = "resumeToken"
6
- const val PAYMENT_METHOD_TOKEN = "paymentMethodToken"
7
- }
@@ -1,30 +0,0 @@
1
- package com.primerioreactnative.utils
2
-
3
- import com.facebook.react.bridge.Callback
4
- import java.util.*
5
-
6
- class PrimerEventQueueRN {
7
- private var mQueue: Deque<String> = ArrayDeque()
8
- private var mCallback: Callback? = null
9
-
10
- fun addRequestAndPoll(request: String) {
11
- mQueue.add(request)
12
- poll()
13
- }
14
-
15
- fun poll(cb: Callback? = null) {
16
- if (cb != null) mCallback = cb
17
- val callback = mCallback ?: return
18
- val next = mQueue.poll() ?: return
19
-
20
- callback.invoke(next)
21
-
22
- clear()
23
- }
24
-
25
- fun clear() {
26
- mQueue.clear()
27
- mCallback = null
28
- }
29
- }
30
-
@@ -1,10 +0,0 @@
1
- import PrimerSDK
2
-
3
- struct PrimerIntentRN: Decodable {
4
- let vault: Bool
5
- let paymentMethod: String
6
-
7
- var paymentMethodConfigType: PaymentMethodConfigType {
8
- PaymentMethodConfigType.init(rawValue: paymentMethod)
9
- }
10
- }
@@ -1,14 +0,0 @@
1
- struct PrimerInitRequest: Decodable {
2
- let intent: String;
3
- let token: String;
4
- let metadata: PrimerRequestMetadata?;
5
- }
6
-
7
- struct PrimerResumeRequest: Decodable {
8
- let error: String?
9
- let token: String?
10
- }
11
-
12
- struct PrimerRequestMetadata: Decodable {
13
- let message: String?
14
- }
@@ -1,23 +0,0 @@
1
- //
2
- // RNTPrimerCardNumberInputElementManager.m
3
- // primer-io-react-native
4
- //
5
- // Created by Evangelos on 3/3/22.
6
- //
7
-
8
- #import <React/RCTViewManager.h>
9
- @import PrimerSDK;
10
-
11
- @interface RNTPrimerCardNumberInputElementManager : RCTViewManager
12
- @end
13
-
14
- @implementation RNTPrimerCardNumberInputElementManager
15
-
16
- RCT_EXPORT_MODULE(PrimerCardNumberEditText)
17
-
18
- - (UIView *)view
19
- {
20
- return [[PrimerCardNumberInputElement alloc] init];
21
- }
22
-
23
- @end