@primer-io/react-native 2.21.1 → 2.22.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.
Files changed (178) hide show
  1. package/android/build.gradle +4 -4
  2. package/android/gradle/wrapper/gradle-wrapper.properties +1 -2
  3. package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +2 -2
  4. package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +10 -8
  5. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +2 -2
  6. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +12 -10
  7. package/android/src/main/java/com/primerioreactnative/PrimerRNViewModelStoreOwner.kt +9 -0
  8. package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +9 -1
  9. package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutComponentEvent.kt +10 -0
  10. package/android/src/main/java/com/primerioreactnative/components/manager/asset/PrimerRNHeadlessUniversalCheckoutAssetManager.kt +8 -13
  11. package/android/src/main/java/com/primerioreactnative/components/manager/banks/PrimerRNHeadlessUniversalCheckoutBanksComponent.kt +284 -0
  12. package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerKlarnaPaymentViewManager.kt +103 -0
  13. package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.kt +334 -0
  14. package/android/src/main/java/com/primerioreactnative/components/manager/nativeUi/PrimerRNHeadlessUniversalCheckoutNativeUiManager.kt +10 -8
  15. package/android/src/main/java/com/primerioreactnative/components/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +2 -2
  16. package/android/src/main/java/com/primerioreactnative/components/manager/vault/PrimerRNHeadlessUniversalCheckoutVaultManager.kt +5 -9
  17. package/android/src/main/java/com/primerioreactnative/datamodels/NamedComponentStepRN.kt +7 -0
  18. package/android/src/main/java/com/primerioreactnative/datamodels/NamedComponentValidatableDataRN.kt +7 -0
  19. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +8 -0
  20. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIssuingBankRN.kt +11 -0
  21. package/android/src/main/java/com/primerioreactnative/datamodels/banks/BanksCollectableDataRN.kt +17 -0
  22. package/android/src/main/java/com/primerioreactnative/datamodels/banks/BanksStepRN.kt +20 -0
  23. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksCollectableData.kt +8 -0
  24. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksStep.kt +11 -0
  25. package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCategoryRN.kt +11 -0
  26. package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCollectableDataRN.kt +21 -0
  27. package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentStepRN.kt +31 -0
  28. package/android/src/main/java/com/primerioreactnative/extensions/PrimerError.kt +13 -0
  29. package/android/src/main/java/com/primerioreactnative/extensions/PrimerIssuingBank.kt +7 -0
  30. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategory.kt +12 -0
  31. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategoryRN.kt +12 -0
  32. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCollectableData.kt +14 -0
  33. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentStep.kt +21 -0
  34. package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +3 -2
  35. package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +8 -1
  36. package/ios/ReactNative-Bridging-Header.h +1 -0
  37. package/ios/Sources/DataModels/Banks Component/RNTBanksCollectableData.swift +42 -0
  38. package/ios/Sources/DataModels/Banks Component/RNTBanksStep.swift +36 -0
  39. package/ios/Sources/DataModels/Klarna Component/PrimerHeadlessUniversalCheckoutComponentEvent.swift +36 -0
  40. package/ios/Sources/DataModels/Klarna Component/RNTKlarnaCollectableData.swift +36 -0
  41. package/ios/Sources/DataModels/Klarna Component/RNTKlarnaPaymentCategory.swift +33 -0
  42. package/ios/Sources/DataModels/Klarna Component/RNTKlarnaStep.swift +61 -0
  43. package/ios/Sources/DataModels/Klarna Component/RNTPrimerError.swift +67 -0
  44. package/ios/Sources/Headless Universal Checkout/Managers/Klarna/KlarnaPaymentView Manager/RNTPrimerKlarnaPaymentViewManager.h +14 -0
  45. package/ios/Sources/Headless Universal Checkout/Managers/Klarna/KlarnaPaymentView Manager/RNTPrimerKlarnaPaymentViewManager.m +25 -0
  46. package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.m +27 -0
  47. package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.swift +272 -0
  48. package/ios/Sources/Headless Universal Checkout/Managers/RNTRedirectManager.m +25 -0
  49. package/ios/Sources/Headless Universal Checkout/Managers/RNTRedirectManager.swift +183 -0
  50. package/ios/Sources/version.swift +1 -1
  51. package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js +9 -0
  52. package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -0
  53. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +103 -0
  54. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -0
  55. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js +99 -0
  56. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -0
  57. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +4 -4
  58. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
  59. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js +8 -0
  60. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -0
  61. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +3 -2
  62. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  63. package/lib/commonjs/Primer.js +2 -1
  64. package/lib/commonjs/Primer.js.map +1 -1
  65. package/lib/commonjs/index.js +186 -0
  66. package/lib/commonjs/index.js.map +1 -1
  67. package/lib/commonjs/models/IssuingBank.js +2 -0
  68. package/lib/commonjs/models/IssuingBank.js.map +1 -0
  69. package/lib/commonjs/models/NamedComponentStep.js +2 -0
  70. package/lib/commonjs/models/NamedComponentStep.js.map +1 -0
  71. package/lib/commonjs/models/NamedComponentValidatableData.js +2 -0
  72. package/lib/commonjs/models/NamedComponentValidatableData.js.map +1 -0
  73. package/lib/commonjs/models/PrimerComponentDataValidation.js +6 -0
  74. package/lib/commonjs/models/PrimerComponentDataValidation.js.map +1 -0
  75. package/lib/commonjs/models/PrimerError.js +2 -1
  76. package/lib/commonjs/models/PrimerError.js.map +1 -1
  77. package/lib/commonjs/models/banks/BanksCollectableData.js +6 -0
  78. package/lib/commonjs/models/banks/BanksCollectableData.js.map +1 -0
  79. package/lib/commonjs/models/banks/BanksSteps.js +6 -0
  80. package/lib/commonjs/models/banks/BanksSteps.js.map +1 -0
  81. package/lib/commonjs/models/klarna/KlarnaPaymentCategory.js +2 -0
  82. package/lib/commonjs/models/klarna/KlarnaPaymentCategory.js.map +1 -0
  83. package/lib/commonjs/models/klarna/KlarnaPaymentCollectableData.js +6 -0
  84. package/lib/commonjs/models/klarna/KlarnaPaymentCollectableData.js.map +1 -0
  85. package/lib/commonjs/models/klarna/KlarnaPaymentSteps.js +6 -0
  86. package/lib/commonjs/models/klarna/KlarnaPaymentSteps.js.map +1 -0
  87. package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js +3 -0
  88. package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -0
  89. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +96 -0
  90. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -0
  91. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js +92 -0
  92. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -0
  93. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +4 -4
  94. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
  95. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js +2 -0
  96. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -0
  97. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +3 -2
  98. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  99. package/lib/module/Primer.js +2 -1
  100. package/lib/module/Primer.js.map +1 -1
  101. package/lib/module/index.js +24 -0
  102. package/lib/module/index.js.map +1 -1
  103. package/lib/module/models/IssuingBank.js +2 -0
  104. package/lib/module/models/IssuingBank.js.map +1 -0
  105. package/lib/module/models/NamedComponentStep.js +2 -0
  106. package/lib/module/models/NamedComponentStep.js.map +1 -0
  107. package/lib/module/models/NamedComponentValidatableData.js +2 -0
  108. package/lib/module/models/NamedComponentValidatableData.js.map +1 -0
  109. package/lib/module/models/PrimerComponentDataValidation.js +2 -0
  110. package/lib/module/models/PrimerComponentDataValidation.js.map +1 -0
  111. package/lib/module/models/PrimerError.js +2 -1
  112. package/lib/module/models/PrimerError.js.map +1 -1
  113. package/lib/module/models/banks/BanksCollectableData.js +2 -0
  114. package/lib/module/models/banks/BanksCollectableData.js.map +1 -0
  115. package/lib/module/models/banks/BanksSteps.js +2 -0
  116. package/lib/module/models/banks/BanksSteps.js.map +1 -0
  117. package/lib/module/models/klarna/KlarnaPaymentCategory.js +2 -0
  118. package/lib/module/models/klarna/KlarnaPaymentCategory.js.map +1 -0
  119. package/lib/module/models/klarna/KlarnaPaymentCollectableData.js +2 -0
  120. package/lib/module/models/klarna/KlarnaPaymentCollectableData.js.map +1 -0
  121. package/lib/module/models/klarna/KlarnaPaymentSteps.js +2 -0
  122. package/lib/module/models/klarna/KlarnaPaymentSteps.js.map +1 -0
  123. package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.d.ts +2 -0
  124. package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.d.ts.map +1 -0
  125. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts +54 -0
  126. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts.map +1 -0
  127. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts +50 -0
  128. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts.map +1 -0
  129. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.d.ts +3 -0
  130. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.d.ts.map +1 -0
  131. package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts.map +1 -1
  132. package/lib/typescript/Primer.d.ts.map +1 -1
  133. package/lib/typescript/index.d.ts +26 -2
  134. package/lib/typescript/index.d.ts.map +1 -1
  135. package/lib/typescript/models/IssuingBank.d.ts +9 -0
  136. package/lib/typescript/models/IssuingBank.d.ts.map +1 -0
  137. package/lib/typescript/models/NamedComponentStep.d.ts +12 -0
  138. package/lib/typescript/models/NamedComponentStep.d.ts.map +1 -0
  139. package/lib/typescript/models/NamedComponentValidatableData.d.ts +12 -0
  140. package/lib/typescript/models/NamedComponentValidatableData.d.ts.map +1 -0
  141. package/lib/typescript/models/PrimerComponentDataValidation.d.ts +54 -0
  142. package/lib/typescript/models/PrimerComponentDataValidation.d.ts.map +1 -0
  143. package/lib/typescript/models/PrimerError.d.ts +2 -6
  144. package/lib/typescript/models/PrimerError.d.ts.map +1 -1
  145. package/lib/typescript/models/PrimerValidationError.d.ts +3 -3
  146. package/lib/typescript/models/PrimerValidationError.d.ts.map +1 -1
  147. package/lib/typescript/models/banks/BanksCollectableData.d.ts +23 -0
  148. package/lib/typescript/models/banks/BanksCollectableData.d.ts.map +1 -0
  149. package/lib/typescript/models/banks/BanksSteps.d.ts +20 -0
  150. package/lib/typescript/models/banks/BanksSteps.d.ts.map +1 -0
  151. package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts +24 -0
  152. package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts.map +1 -0
  153. package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts +24 -0
  154. package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts.map +1 -0
  155. package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts +36 -0
  156. package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts.map +1 -0
  157. package/package.json +1 -1
  158. package/src/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.tsx +5 -0
  159. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.ts +161 -0
  160. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.ts +147 -0
  161. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +4 -4
  162. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.ts +10 -0
  163. package/src/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.ts +3 -2
  164. package/src/Primer.ts +2 -1
  165. package/src/index.tsx +62 -62
  166. package/src/models/IssuingBank.ts +8 -0
  167. package/src/models/NamedComponentStep.ts +11 -0
  168. package/src/models/NamedComponentValidatableData.ts +11 -0
  169. package/src/models/PrimerComponentDataValidation.ts +60 -0
  170. package/src/models/PrimerError.ts +8 -14
  171. package/src/models/PrimerValidationError.ts +3 -3
  172. package/src/models/banks/BanksCollectableData.ts +25 -0
  173. package/src/models/banks/BanksSteps.ts +22 -0
  174. package/src/models/klarna/KlarnaPaymentCategory.ts +23 -0
  175. package/src/models/klarna/KlarnaPaymentCollectableData.ts +26 -0
  176. package/src/models/klarna/KlarnaPaymentSteps.ts +36 -0
  177. /package/ios/Sources/Headless Universal Checkout/Managers/{RNTAssetsManager.m → Assets Manager/RNTAssetsManager.m} +0 -0
  178. /package/ios/Sources/Headless Universal Checkout/Managers/{RNTAssetsManager.swift → Assets Manager/RNTAssetsManager.swift} +0 -0
@@ -0,0 +1,272 @@
1
+ //
2
+ // PrimerRNHeadlessUniversalCheckoutKlarnaComponent.k.swift
3
+ // primer-io-react-native
4
+ //
5
+ // Created by Stefan Vrancianu on 01.04.2024.
6
+ //
7
+
8
+ import Foundation
9
+ import UIKit
10
+ import PrimerSDK
11
+
12
+ @objc(RNTPrimerHeadlessUniversalCheckoutKlarnaComponent)
13
+ class RNTPrimerHeadlessUniversalCheckoutKlarnaComponent: RCTEventEmitter {
14
+
15
+ private var klarnaManager: PrimerHeadlessUniversalCheckout.KlarnaManager = PrimerHeadlessUniversalCheckout.KlarnaManager()
16
+ var klarnaComponent: (any KlarnaComponent)?
17
+ var clientToken: String?
18
+
19
+ override class func requiresMainQueueSetup() -> Bool {
20
+ return true
21
+ }
22
+
23
+ override init() {
24
+ super.init()
25
+ }
26
+
27
+ override func supportedEvents() -> [String] {
28
+ return PrimerHeadlessUniversalCheckoutComponentEvent.allCases.compactMap({ $0.stringValue })
29
+ }
30
+
31
+ // MARK: - API
32
+
33
+ @objc
34
+ public func configure(
35
+ _ primerSessionIntent: String,
36
+ resolver: @escaping RCTPromiseResolveBlock,
37
+ rejecter: @escaping RCTPromiseRejectBlock
38
+ ) {
39
+ print("configure")
40
+
41
+ do {
42
+ guard let sessionIntent: PrimerSessionIntent = PrimerSessionIntent(rawValue: primerSessionIntent) else {
43
+ let err = RNTNativeError(
44
+ errorId: "native-ios",
45
+ errorDescription: "Invalid value for 'intent'.",
46
+ recoverySuggestion: "'intent' can be 'CHECKOUT' or 'VAULT'.")
47
+ throw err
48
+ }
49
+
50
+ klarnaComponent = try klarnaManager.provideKlarnaComponent(with: sessionIntent)
51
+ klarnaComponent?.stepDelegate = self
52
+ klarnaComponent?.errorDelegate = self
53
+ klarnaComponent?.validationDelegate = self
54
+
55
+ resolver(nil)
56
+ } catch {
57
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
58
+ }
59
+ }
60
+
61
+ @objc
62
+ public func cleanUp(
63
+ _ resolver: RCTPromiseResolveBlock,
64
+ rejecter: RCTPromiseRejectBlock
65
+ ) {
66
+ klarnaComponent = nil
67
+ resolver(nil)
68
+ }
69
+
70
+ @objc
71
+ public func start(
72
+ _ resolver: RCTPromiseResolveBlock,
73
+ rejecter: RCTPromiseRejectBlock
74
+ ) {
75
+ print("Start Klarna process")
76
+
77
+ guard let klarnaComponent = self.klarnaComponent else {
78
+ rejecter("UNINITIALIZED_ERROR", "Klarna component is uninitialized", nil)
79
+ return
80
+ }
81
+
82
+ klarnaComponent.start()
83
+ resolver(nil)
84
+ }
85
+
86
+ @objc
87
+ public func submit(
88
+ _ resolver: RCTPromiseResolveBlock,
89
+ rejecter: RCTPromiseRejectBlock
90
+ ) {
91
+ guard let klarnaComponent = self.klarnaComponent else {
92
+ rejecter("UNINITIALIZED_ERROR", "Klarna component is uninitialized", nil)
93
+ return
94
+ }
95
+
96
+ klarnaComponent.submit()
97
+ resolver(nil)
98
+ }
99
+
100
+ @objc
101
+ public func onSetPaymentOptions(
102
+ _ paymentOptions: NSDictionary,
103
+ resolver: RCTPromiseResolveBlock,
104
+ rejecter: RCTPromiseRejectBlock
105
+ ) {
106
+ guard let paymentCategoryDict = paymentOptions["paymentCategory"] as? NSDictionary else {
107
+ rejecter("error", "paymentCategory is missing or not a dictionary", nil)
108
+ return
109
+ }
110
+
111
+ guard let klarnaPaymentCategory = getDecodedKlarnaPaymentCategory(paymentCategoryDict) else {
112
+ rejecter("error", "Failed to parse paymentCategory", nil)
113
+ return
114
+ }
115
+
116
+ guard let klarnaComponent = self.klarnaComponent else {
117
+ rejecter("UNINITIALIZED_ERROR", "Klarna component is uninitialized", nil)
118
+ return
119
+ }
120
+
121
+ DispatchQueue.main.async {
122
+ klarnaComponent.updateCollectedData(collectableData: KlarnaCollectableData.paymentCategory(klarnaPaymentCategory, clientToken: self.clientToken))
123
+ }
124
+
125
+ resolver(nil)
126
+ }
127
+
128
+ @objc
129
+ public func onFinalizePayment(
130
+ _ resolver: RCTPromiseResolveBlock,
131
+ rejecter: RCTPromiseRejectBlock
132
+ ) {
133
+ klarnaComponent?.updateCollectedData(collectableData: KlarnaCollectableData.finalizePayment)
134
+ resolver(nil)
135
+ }
136
+
137
+ private func getDecodedKlarnaPaymentCategory(_ dictionary: NSDictionary) -> KlarnaPaymentCategory? {
138
+ let transformedDictionary = transformKey(for: dictionary)
139
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: transformedDictionary, options: []) else { return nil }
140
+ let paymentCategory = try? JSONDecoder().decode(KlarnaPaymentCategory.self, from: jsonData)
141
+ return paymentCategory
142
+ }
143
+
144
+ private func transformKey(for dictionary: NSDictionary) -> [String: Any] {
145
+ let transformedDictionary = dictionary.reduce(into: [String: Any]()) { (result, element) in
146
+ // Check if the current key is "identifier" and change it to "id", otherwise keep the original key
147
+ let key: String = (element.key as? String) == "identifier" ? "id" : (element.key as? String) ?? ""
148
+ result[key] = element.value
149
+ }
150
+
151
+ return transformedDictionary
152
+ }
153
+ }
154
+
155
+ extension RNTPrimerHeadlessUniversalCheckoutKlarnaComponent: PrimerHeadlessSteppableDelegate {
156
+ func didReceiveStep(step: PrimerSDK.PrimerHeadlessStep) {
157
+ guard let step = step as? KlarnaStep else { return }
158
+
159
+ switch step {
160
+ case .paymentSessionCreated(let clientToken , let categories):
161
+ self.clientToken = clientToken
162
+ let rnSessionCreated = try? step.toPaymentSessionCreatedRN(categories: categories).toJsonObject()
163
+
164
+ sendEvent(
165
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onStep.stringValue,
166
+ body: rnSessionCreated
167
+ )
168
+
169
+ case .paymentSessionAuthorized(_ , let checkoutData):
170
+ let rnSessionAuthorized = try? step.toPaymentSessionAuthorizedRN(isFinalized: true).toJsonObject()
171
+
172
+ sendEvent(
173
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onStep.stringValue,
174
+ body: rnSessionAuthorized
175
+ )
176
+
177
+ DispatchQueue.main.async {
178
+ PrimerHeadlessUniversalCheckout.current.delegate?.primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(checkoutData)
179
+ }
180
+
181
+ case .paymentSessionFinalizationRequired:
182
+ let rnSessionAuthorized = try? step.toPaymentSessionAuthorizedRN(isFinalized: false).toJsonObject()
183
+
184
+ sendEvent(
185
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onStep.stringValue,
186
+ body: rnSessionAuthorized
187
+ )
188
+
189
+ case .paymentSessionFinalized(_ , let checkoutData):
190
+ let rnSessionFinalized = try? step.toPaymentSessionFinalizedRN().toJsonObject()
191
+
192
+ sendEvent(
193
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onStep.stringValue,
194
+ body: rnSessionFinalized
195
+ )
196
+
197
+ DispatchQueue.main.async {
198
+ PrimerHeadlessUniversalCheckout.current.delegate?.primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(checkoutData)
199
+ }
200
+
201
+ case .viewLoaded(let view):
202
+ DispatchQueue.main.async {
203
+ RNTPrimerKlarnaPaymentViewManager.updatePrimerKlarnaPaymentView(view)
204
+ }
205
+
206
+ let rnPaymentViewLoaded = try? step.toPaymentViewLoadedRN().toJsonObject()
207
+
208
+ sendEvent(
209
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onStep.stringValue,
210
+ body: rnPaymentViewLoaded
211
+ )
212
+
213
+ default:
214
+ break
215
+ }
216
+
217
+
218
+ }
219
+ }
220
+
221
+ extension RNTPrimerHeadlessUniversalCheckoutKlarnaComponent: PrimerHeadlessValidatableDelegate {
222
+ func didUpdate(validationStatus: PrimerSDK.PrimerValidationStatus, for data: PrimerSDK.PrimerCollectableData?) {
223
+ guard let data = data as? KlarnaCollectableData else { return }
224
+
225
+ let eventName: String
226
+ switch validationStatus {
227
+ case .valid:
228
+ eventName = PrimerHeadlessUniversalCheckoutComponentEvent.onValid.stringValue
229
+ case .validating:
230
+ eventName = PrimerHeadlessUniversalCheckoutComponentEvent.onValidating.stringValue
231
+ case .invalid(let errors):
232
+ let rnErrors = errors.map { $0.toPrimerValidationErrorRN() }
233
+ let serializedData = try? ["errors": rnErrors].toJsonObject()
234
+
235
+ self.sendEvent(
236
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onInvalid.stringValue,
237
+ body: serializedData)
238
+ return
239
+ case .error(let error):
240
+ let rnError = error.toPrimerErrorRN()
241
+ let serializedData = try? ["errors": [rnError]].toJsonObject()
242
+
243
+ self.sendEvent(
244
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onValidationError.stringValue,
245
+ body: serializedData)
246
+ return
247
+ }
248
+
249
+ var serializedData: Any?
250
+ switch data {
251
+ case .paymentCategory(let category, _):
252
+ let rnPaymentCategory = data.toKlarnaPaymentOptionsRN(category: category)
253
+ serializedData = try? ["data": rnPaymentCategory].toJsonObject()
254
+ case .finalizePayment:
255
+ let rnFinalizePayment = data.toFinalizePaymentRN()
256
+ serializedData = try? ["data": rnFinalizePayment].toJsonObject()
257
+ }
258
+
259
+ sendEvent(withName: eventName, body: serializedData)
260
+ }
261
+ }
262
+
263
+ extension RNTPrimerHeadlessUniversalCheckoutKlarnaComponent: PrimerHeadlessErrorableDelegate {
264
+ func didReceiveError(error: PrimerSDK.PrimerError) {
265
+ let rnError = error.toPrimerErrorRN()
266
+ let serializedData = try? ["errors": [rnError]].toJsonObject()
267
+
268
+ self.sendEvent(
269
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onError.stringValue,
270
+ body: serializedData)
271
+ }
272
+ }
@@ -0,0 +1,25 @@
1
+ //
2
+ // RNTPrimerHeadlessUniversalCheckoutBanksComponent.m
3
+ // primer-io-react-native
4
+ //
5
+ // Created by Faisal Iqbal on 15.12.2023.
6
+ //
7
+
8
+ #import <React/RCTBridgeModule.h>
9
+ #import <React/RCTEventEmitter.h>
10
+
11
+ @interface RCT_EXTERN_MODULE(RNTPrimerHeadlessUniversalCheckoutBanksComponent, RCTEventEmitter)
12
+
13
+ RCT_EXTERN_METHOD(configure:(NSString *)paymentMethodTypeStr resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
14
+
15
+ RCT_EXTERN_METHOD(onBankFilterChange:(NSString *)filterText resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
16
+
17
+ RCT_EXTERN_METHOD(onBankSelected:(NSString *)bankId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
18
+
19
+ RCT_EXTERN_METHOD(start:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
20
+
21
+ RCT_EXTERN_METHOD(submit:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
22
+
23
+ RCT_EXTERN_METHOD(cleanUp:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
24
+
25
+ @end
@@ -0,0 +1,183 @@
1
+ //
2
+ // RNTRedirectManager.swift
3
+ // example_0_70_6
4
+ //
5
+ // Created by Faisal Iqbal on 15.12.2023.
6
+ //
7
+
8
+ import Foundation
9
+ import PrimerSDK
10
+
11
+ @objc(RNTPrimerHeadlessUniversalCheckoutBanksComponent)
12
+ class RNTPrimerHeadlessUniversalCheckoutBanksComponent: RCTEventEmitter {
13
+
14
+ private var redirectManager: PrimerHeadlessUniversalCheckout.ComponentWithRedirectManager!
15
+ var banksComponent: (any BanksComponent)?
16
+
17
+ override class func requiresMainQueueSetup() -> Bool {
18
+ return true
19
+ }
20
+
21
+ override init() {
22
+ super.init()
23
+ }
24
+
25
+ override func supportedEvents() -> [String] {
26
+ return PrimerHeadlessUniversalCheckoutComponentEvent.allCases.compactMap({ $0.stringValue })
27
+ }
28
+
29
+ // MARK: - API
30
+
31
+ @objc
32
+ public func configure(
33
+ _ paymentMethodTypeStr: String,
34
+ resolver: @escaping RCTPromiseResolveBlock,
35
+ rejecter: @escaping RCTPromiseRejectBlock
36
+ ) {
37
+ print("configure")
38
+ do {
39
+ redirectManager = PrimerHeadlessUniversalCheckout.ComponentWithRedirectManager()
40
+
41
+ guard let banksComponent: any BanksComponent = try? redirectManager.provide(paymentMethodType: paymentMethodTypeStr) else {
42
+ let err = RNTNativeError(
43
+ errorId: "native-ios",
44
+ errorDescription: "Failed to find asset of \(paymentMethodTypeStr) for this session",
45
+ recoverySuggestion: nil)
46
+ throw err
47
+ }
48
+
49
+ self.banksComponent = banksComponent
50
+
51
+ banksComponent.stepDelegate = self
52
+ banksComponent.validationDelegate = self
53
+ banksComponent.errorDelegate = self
54
+
55
+ resolver(nil)
56
+
57
+ } catch {
58
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
59
+ }
60
+ }
61
+
62
+ @objc
63
+ public func cleanUp(
64
+ _ resolver: RCTPromiseResolveBlock,
65
+ rejecter: RCTPromiseRejectBlock
66
+ ) {
67
+ self.banksComponent = nil
68
+ resolver(nil)
69
+ }
70
+
71
+ @objc
72
+ public func start(
73
+ _ resolver: RCTPromiseResolveBlock,
74
+ rejecter: RCTPromiseRejectBlock
75
+ ) {
76
+ banksComponent?.start()
77
+ resolver(nil)
78
+ }
79
+
80
+ @objc
81
+ public func submit(
82
+ _ resolver: RCTPromiseResolveBlock,
83
+ rejecter: RCTPromiseRejectBlock
84
+ ) {
85
+ banksComponent?.submit()
86
+ resolver(nil)
87
+ }
88
+
89
+ @objc
90
+ public func onBankFilterChange(
91
+ _ filterText: String,
92
+ resolver: RCTPromiseResolveBlock,
93
+ rejecter: RCTPromiseRejectBlock
94
+ ) {
95
+ banksComponent?.updateCollectedData(collectableData: BanksCollectableData.bankFilterText(text: filterText))
96
+ resolver(nil)
97
+ }
98
+
99
+ @objc
100
+ public func onBankSelected(
101
+ _ bankId: String,
102
+ resolver: RCTPromiseResolveBlock,
103
+ rejecter: RCTPromiseRejectBlock
104
+ ) {
105
+ banksComponent?.updateCollectedData(collectableData: BanksCollectableData.bankId(bankId: bankId))
106
+ resolver(nil)
107
+ }
108
+ }
109
+
110
+ extension RNTPrimerHeadlessUniversalCheckoutBanksComponent: PrimerHeadlessSteppableDelegate {
111
+ func didReceiveStep(step: PrimerSDK.PrimerHeadlessStep) {
112
+ guard let step = step as? BanksStep else { return }
113
+ switch step {
114
+ case .loading: // Handle bank list loading being in progress (e.g. show loading indicator)
115
+ let rnLoading = try? step.toLoadingRN().toJsonObject()
116
+
117
+ sendEvent(
118
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onStep.stringValue,
119
+ body: rnLoading
120
+ )
121
+ case .banksRetrieved(banks: let banks): // Display list of banks
122
+ let rnBanks = try? step.toBanksRetrievedRN(banks: banks).toJsonObject()
123
+
124
+ sendEvent(
125
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onStep.stringValue,
126
+ body: rnBanks)
127
+ }
128
+ }
129
+ }
130
+
131
+ extension RNTPrimerHeadlessUniversalCheckoutBanksComponent: PrimerHeadlessValidatableDelegate {
132
+ func didUpdate(validationStatus: PrimerSDK.PrimerValidationStatus, for data: PrimerSDK.PrimerCollectableData?) {
133
+ guard let data = data as? BanksCollectableData else { return }
134
+
135
+ let eventName: String
136
+ switch validationStatus {
137
+ case .valid:
138
+ eventName = PrimerHeadlessUniversalCheckoutComponentEvent.onValid.stringValue
139
+ case .validating:
140
+ eventName = PrimerHeadlessUniversalCheckoutComponentEvent.onValidating.stringValue
141
+ case .invalid(let errors):
142
+ let rnErrors = errors.map { $0.toPrimerValidationErrorRN() }
143
+ let serializedData = try? ["errors": rnErrors].toJsonObject()
144
+
145
+ self.sendEvent(
146
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onInvalid.stringValue,
147
+ body: serializedData)
148
+ return
149
+ case .error(let error):
150
+ let rnError = error.toPrimerErrorRN()
151
+ let serializedData = try? ["errors": [rnError]].toJsonObject()
152
+
153
+ self.sendEvent(
154
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onValidationError.stringValue,
155
+ body: serializedData)
156
+ return
157
+ }
158
+
159
+ var serializedData: Any?
160
+ switch data {
161
+ case .bankId(let bankId):
162
+ let rnBankId = data.toBankIdRN(bankId: bankId)
163
+ serializedData = try? ["data": rnBankId].toJsonObject()
164
+ case .bankFilterText(let text):
165
+ let rnText = data.toFilterRN(text: text)
166
+ serializedData = try? ["data": rnText].toJsonObject()
167
+ }
168
+
169
+ sendEvent(withName: eventName, body: serializedData)
170
+ }
171
+ }
172
+
173
+ extension RNTPrimerHeadlessUniversalCheckoutBanksComponent: PrimerHeadlessErrorableDelegate {
174
+ func didReceiveError(error: PrimerSDK.PrimerError) {
175
+ let rnError = error.toPrimerErrorRN()
176
+ let serializedData = try? ["errors": [rnError]].toJsonObject()
177
+
178
+ self.sendEvent(
179
+ withName: PrimerHeadlessUniversalCheckoutComponentEvent.onError.stringValue,
180
+ body: serializedData)
181
+ }
182
+ }
183
+
@@ -1,2 +1,2 @@
1
1
  // swiftlint:disable:next identifier_name
2
- public let PrimerReactNativeSDKVersion = "2.21.1"
2
+ public let PrimerReactNativeSDKVersion = "2.22.0"
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PrimerKlarnaPaymentView = void 0;
7
+ var _reactNative = require("react-native");
8
+ const PrimerKlarnaPaymentView = exports.PrimerKlarnaPaymentView = (0, _reactNative.requireNativeComponent)('PrimerKlarnaPaymentView');
9
+ //# sourceMappingURL=PrimerKlarnaPaymentView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","PrimerKlarnaPaymentView","exports","requireNativeComponent"],"sourceRoot":"../../../../src","sources":["HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,uBAAuB,GAAAC,OAAA,CAAAD,uBAAA,GAAG,IAAAE,mCAAsB,EACzD,yBACJ,CAAC"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PrimerHeadlessUniversalCheckoutComponentWithRedirectManager = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _EventType = require("./Utils/EventType");
9
+ const {
10
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent
11
+ } = _reactNative.NativeModules;
12
+ const eventEmitter = new _reactNative.NativeEventEmitter(RNTPrimerHeadlessUniversalCheckoutBanksComponent);
13
+ class PrimerHeadlessUniversalCheckoutComponentWithRedirectManager {
14
+ ///////////////////////////////////////////
15
+ // Init
16
+ ///////////////////////////////////////////
17
+ constructor() {}
18
+
19
+ ///////////////////////////////////////////
20
+ // API
21
+ ///////////////////////////////////////////
22
+
23
+ async provide(props) {
24
+ await this.configureListeners(props);
25
+ if (props.paymentMethodType == "ADYEN_IDEAL") {
26
+ const banksComponent = {
27
+ start: async () => {
28
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent.start();
29
+ },
30
+ submit: async () => {
31
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent.submit();
32
+ },
33
+ onBankFilterChange: async filter => {
34
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent.onBankFilterChange(filter);
35
+ },
36
+ onBankSelected: async bankId => {
37
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent.onBankSelected(bankId);
38
+ }
39
+ };
40
+ await RNTPrimerHeadlessUniversalCheckoutBanksComponent.configure(props.paymentMethodType);
41
+ return banksComponent;
42
+ } else {
43
+ return null;
44
+ }
45
+ }
46
+ async configureListeners(props) {
47
+ if (props !== null && props !== void 0 && props.onStep) {
48
+ this.addListener('onStep', data => {
49
+ var _props$onStep;
50
+ (_props$onStep = props.onStep) === null || _props$onStep === void 0 || _props$onStep.call(props, data);
51
+ });
52
+ }
53
+ if (props !== null && props !== void 0 && props.onInvalid) {
54
+ this.addListener('onInvalid', data => {
55
+ var _props$onInvalid;
56
+ (_props$onInvalid = props.onInvalid) === null || _props$onInvalid === void 0 || _props$onInvalid.call(props, data);
57
+ });
58
+ }
59
+ if (props !== null && props !== void 0 && props.onError) {
60
+ this.addListener('onError', data => {
61
+ var _props$onError;
62
+ (_props$onError = props.onError) === null || _props$onError === void 0 || _props$onError.call(props, data);
63
+ });
64
+ }
65
+ if (props !== null && props !== void 0 && props.onValid) {
66
+ this.addListener('onValid', data => {
67
+ var _props$onValid;
68
+ (_props$onValid = props.onValid) === null || _props$onValid === void 0 || _props$onValid.call(props, data);
69
+ });
70
+ }
71
+ if (props !== null && props !== void 0 && props.onValidating) {
72
+ this.addListener('onValidating', data => {
73
+ var _props$onValidating;
74
+ (_props$onValidating = props.onValidating) === null || _props$onValidating === void 0 || _props$onValidating.call(props, data);
75
+ });
76
+ }
77
+ if (props !== null && props !== void 0 && props.onValidationError) {
78
+ this.addListener('onValidationError', data => {
79
+ var _props$onValidationEr;
80
+ (_props$onValidationEr = props.onValidationError) === null || _props$onValidationEr === void 0 || _props$onValidationEr.call(props, data);
81
+ });
82
+ }
83
+ }
84
+
85
+ ///////////////////////////////////////////
86
+ // HELPERS
87
+ ///////////////////////////////////////////
88
+
89
+ async addListener(eventType, listener) {
90
+ return eventEmitter.addListener(eventType, listener);
91
+ }
92
+ removeListener(subscription) {
93
+ return subscription.remove();
94
+ }
95
+ removeAllListenersForEvent(eventType) {
96
+ eventEmitter.removeAllListeners(eventType);
97
+ }
98
+ removeAllListeners() {
99
+ _EventType.eventTypes.forEach(eventType => this.removeAllListenersForEvent(eventType));
100
+ }
101
+ }
102
+ exports.PrimerHeadlessUniversalCheckoutComponentWithRedirectManager = PrimerHeadlessUniversalCheckoutComponentWithRedirectManager;
103
+ //# sourceMappingURL=ComponentWithRedirectManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_EventType","RNTPrimerHeadlessUniversalCheckoutBanksComponent","NativeModules","eventEmitter","NativeEventEmitter","PrimerHeadlessUniversalCheckoutComponentWithRedirectManager","constructor","provide","props","configureListeners","paymentMethodType","banksComponent","start","submit","onBankFilterChange","filter","onBankSelected","bankId","configure","onStep","addListener","data","_props$onStep","call","onInvalid","_props$onInvalid","onError","_props$onError","onValid","_props$onValid","onValidating","_props$onValidating","onValidationError","_props$onValidationEr","eventType","listener","removeListener","subscription","remove","removeAllListenersForEvent","removeAllListeners","eventTypes","forEach","exports"],"sourceRoot":"../../../../../src","sources":["HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.ts"],"mappings":"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"}