@primer-io/react-native 2.21.0 → 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 (186) 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 +36 -13
  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/PrimerPaymentMethodDataRN.kt +1 -1
  22. package/android/src/main/java/com/primerioreactnative/datamodels/banks/BanksCollectableDataRN.kt +17 -0
  23. package/android/src/main/java/com/primerioreactnative/datamodels/banks/BanksStepRN.kt +20 -0
  24. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksCollectableData.kt +8 -0
  25. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksStep.kt +11 -0
  26. package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCategoryRN.kt +11 -0
  27. package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCollectableDataRN.kt +21 -0
  28. package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentStepRN.kt +31 -0
  29. package/android/src/main/java/com/primerioreactnative/extensions/PrimerError.kt +13 -0
  30. package/android/src/main/java/com/primerioreactnative/extensions/PrimerIssuingBank.kt +7 -0
  31. package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodData.kt +1 -1
  32. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategory.kt +12 -0
  33. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategoryRN.kt +12 -0
  34. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCollectableData.kt +14 -0
  35. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentStep.kt +21 -0
  36. package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +3 -2
  37. package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +8 -1
  38. package/ios/ReactNative-Bridging-Header.h +1 -0
  39. package/ios/Sources/DataModels/Banks Component/RNTBanksCollectableData.swift +42 -0
  40. package/ios/Sources/DataModels/Banks Component/RNTBanksStep.swift +36 -0
  41. package/ios/Sources/DataModels/Klarna Component/PrimerHeadlessUniversalCheckoutComponentEvent.swift +36 -0
  42. package/ios/Sources/DataModels/Klarna Component/RNTKlarnaCollectableData.swift +36 -0
  43. package/ios/Sources/DataModels/Klarna Component/RNTKlarnaPaymentCategory.swift +33 -0
  44. package/ios/Sources/DataModels/Klarna Component/RNTKlarnaStep.swift +61 -0
  45. package/ios/Sources/DataModels/Klarna Component/RNTPrimerError.swift +67 -0
  46. package/ios/Sources/Headless Universal Checkout/Managers/Klarna/KlarnaPaymentView Manager/RNTPrimerKlarnaPaymentViewManager.h +14 -0
  47. package/ios/Sources/Headless Universal Checkout/Managers/Klarna/KlarnaPaymentView Manager/RNTPrimerKlarnaPaymentViewManager.m +25 -0
  48. package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.m +27 -0
  49. package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.swift +272 -0
  50. package/ios/Sources/Headless Universal Checkout/Managers/RNTRedirectManager.m +25 -0
  51. package/ios/Sources/Headless Universal Checkout/Managers/RNTRedirectManager.swift +183 -0
  52. package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +3 -1
  53. package/ios/Sources/Helpers/PrimerCheckoutPaymentMethodData+RN.swift +21 -0
  54. package/ios/Sources/RNTPrimer.swift +4 -2
  55. package/ios/Sources/version.swift +1 -1
  56. package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js +9 -0
  57. package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -0
  58. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +103 -0
  59. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -0
  60. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js +99 -0
  61. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -0
  62. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +4 -4
  63. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
  64. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js +8 -0
  65. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -0
  66. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +3 -2
  67. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  68. package/lib/commonjs/Primer.js +2 -1
  69. package/lib/commonjs/Primer.js.map +1 -1
  70. package/lib/commonjs/index.js +186 -0
  71. package/lib/commonjs/index.js.map +1 -1
  72. package/lib/commonjs/models/IssuingBank.js +2 -0
  73. package/lib/commonjs/models/IssuingBank.js.map +1 -0
  74. package/lib/commonjs/models/NamedComponentStep.js +2 -0
  75. package/lib/commonjs/models/NamedComponentStep.js.map +1 -0
  76. package/lib/commonjs/models/NamedComponentValidatableData.js +2 -0
  77. package/lib/commonjs/models/NamedComponentValidatableData.js.map +1 -0
  78. package/lib/commonjs/models/PrimerComponentDataValidation.js +6 -0
  79. package/lib/commonjs/models/PrimerComponentDataValidation.js.map +1 -0
  80. package/lib/commonjs/models/PrimerError.js +2 -1
  81. package/lib/commonjs/models/PrimerError.js.map +1 -1
  82. package/lib/commonjs/models/banks/BanksCollectableData.js +6 -0
  83. package/lib/commonjs/models/banks/BanksCollectableData.js.map +1 -0
  84. package/lib/commonjs/models/banks/BanksSteps.js +6 -0
  85. package/lib/commonjs/models/banks/BanksSteps.js.map +1 -0
  86. package/lib/commonjs/models/klarna/KlarnaPaymentCategory.js +2 -0
  87. package/lib/commonjs/models/klarna/KlarnaPaymentCategory.js.map +1 -0
  88. package/lib/commonjs/models/klarna/KlarnaPaymentCollectableData.js +6 -0
  89. package/lib/commonjs/models/klarna/KlarnaPaymentCollectableData.js.map +1 -0
  90. package/lib/commonjs/models/klarna/KlarnaPaymentSteps.js +6 -0
  91. package/lib/commonjs/models/klarna/KlarnaPaymentSteps.js.map +1 -0
  92. package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js +3 -0
  93. package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -0
  94. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +96 -0
  95. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -0
  96. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js +92 -0
  97. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -0
  98. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +4 -4
  99. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
  100. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js +2 -0
  101. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -0
  102. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +3 -2
  103. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  104. package/lib/module/Primer.js +2 -1
  105. package/lib/module/Primer.js.map +1 -1
  106. package/lib/module/index.js +24 -0
  107. package/lib/module/index.js.map +1 -1
  108. package/lib/module/models/IssuingBank.js +2 -0
  109. package/lib/module/models/IssuingBank.js.map +1 -0
  110. package/lib/module/models/NamedComponentStep.js +2 -0
  111. package/lib/module/models/NamedComponentStep.js.map +1 -0
  112. package/lib/module/models/NamedComponentValidatableData.js +2 -0
  113. package/lib/module/models/NamedComponentValidatableData.js.map +1 -0
  114. package/lib/module/models/PrimerComponentDataValidation.js +2 -0
  115. package/lib/module/models/PrimerComponentDataValidation.js.map +1 -0
  116. package/lib/module/models/PrimerError.js +2 -1
  117. package/lib/module/models/PrimerError.js.map +1 -1
  118. package/lib/module/models/banks/BanksCollectableData.js +2 -0
  119. package/lib/module/models/banks/BanksCollectableData.js.map +1 -0
  120. package/lib/module/models/banks/BanksSteps.js +2 -0
  121. package/lib/module/models/banks/BanksSteps.js.map +1 -0
  122. package/lib/module/models/klarna/KlarnaPaymentCategory.js +2 -0
  123. package/lib/module/models/klarna/KlarnaPaymentCategory.js.map +1 -0
  124. package/lib/module/models/klarna/KlarnaPaymentCollectableData.js +2 -0
  125. package/lib/module/models/klarna/KlarnaPaymentCollectableData.js.map +1 -0
  126. package/lib/module/models/klarna/KlarnaPaymentSteps.js +2 -0
  127. package/lib/module/models/klarna/KlarnaPaymentSteps.js.map +1 -0
  128. package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.d.ts +2 -0
  129. package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.d.ts.map +1 -0
  130. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts +54 -0
  131. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts.map +1 -0
  132. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts +50 -0
  133. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts.map +1 -0
  134. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.d.ts +3 -0
  135. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.d.ts.map +1 -0
  136. package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts.map +1 -1
  137. package/lib/typescript/Primer.d.ts.map +1 -1
  138. package/lib/typescript/index.d.ts +26 -2
  139. package/lib/typescript/index.d.ts.map +1 -1
  140. package/lib/typescript/models/IssuingBank.d.ts +9 -0
  141. package/lib/typescript/models/IssuingBank.d.ts.map +1 -0
  142. package/lib/typescript/models/NamedComponentStep.d.ts +12 -0
  143. package/lib/typescript/models/NamedComponentStep.d.ts.map +1 -0
  144. package/lib/typescript/models/NamedComponentValidatableData.d.ts +12 -0
  145. package/lib/typescript/models/NamedComponentValidatableData.d.ts.map +1 -0
  146. package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +1 -0
  147. package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts.map +1 -1
  148. package/lib/typescript/models/PrimerComponentDataValidation.d.ts +54 -0
  149. package/lib/typescript/models/PrimerComponentDataValidation.d.ts.map +1 -0
  150. package/lib/typescript/models/PrimerError.d.ts +2 -6
  151. package/lib/typescript/models/PrimerError.d.ts.map +1 -1
  152. package/lib/typescript/models/PrimerValidationError.d.ts +3 -3
  153. package/lib/typescript/models/PrimerValidationError.d.ts.map +1 -1
  154. package/lib/typescript/models/banks/BanksCollectableData.d.ts +23 -0
  155. package/lib/typescript/models/banks/BanksCollectableData.d.ts.map +1 -0
  156. package/lib/typescript/models/banks/BanksSteps.d.ts +20 -0
  157. package/lib/typescript/models/banks/BanksSteps.d.ts.map +1 -0
  158. package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts +24 -0
  159. package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts.map +1 -0
  160. package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts +24 -0
  161. package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts.map +1 -0
  162. package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts +36 -0
  163. package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts.map +1 -0
  164. package/package.json +1 -1
  165. package/src/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.tsx +5 -0
  166. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.ts +161 -0
  167. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.ts +147 -0
  168. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +4 -4
  169. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.ts +10 -0
  170. package/src/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.ts +3 -2
  171. package/src/Primer.ts +2 -1
  172. package/src/index.tsx +62 -62
  173. package/src/models/IssuingBank.ts +8 -0
  174. package/src/models/NamedComponentStep.ts +11 -0
  175. package/src/models/NamedComponentValidatableData.ts +11 -0
  176. package/src/models/PrimerCheckoutPaymentMethodData.ts +6 -1
  177. package/src/models/PrimerComponentDataValidation.ts +60 -0
  178. package/src/models/PrimerError.ts +8 -14
  179. package/src/models/PrimerValidationError.ts +3 -3
  180. package/src/models/banks/BanksCollectableData.ts +25 -0
  181. package/src/models/banks/BanksSteps.ts +22 -0
  182. package/src/models/klarna/KlarnaPaymentCategory.ts +23 -0
  183. package/src/models/klarna/KlarnaPaymentCollectableData.ts +26 -0
  184. package/src/models/klarna/KlarnaPaymentSteps.ts +36 -0
  185. /package/ios/Sources/Headless Universal Checkout/Managers/{RNTAssetsManager.m → Assets Manager/RNTAssetsManager.m} +0 -0
  186. /package/ios/Sources/Headless Universal Checkout/Managers/{RNTAssetsManager.swift → Assets Manager/RNTAssetsManager.swift} +0 -0
@@ -0,0 +1,161 @@
1
+ import {
2
+ NativeEventEmitter,
3
+ NativeModules,
4
+ EmitterSubscription,
5
+ } from 'react-native';
6
+ import { BanksValidatableData } from 'src/models/banks/BanksCollectableData';
7
+ import { NamedComponentStep } from 'src/models/NamedComponentStep';
8
+ import { IssuingBank } from 'src/models/IssuingBank';
9
+ import { PrimerComponentDataValidationError, PrimerInvalidComponentData, PrimerValidComponentData, PrimerValidatingComponentData } from 'src/models/PrimerComponentDataValidation';
10
+ import { PrimerError } from 'src/models/PrimerError';
11
+ import { BanksStep } from 'src/models/banks/BanksSteps';
12
+ import { EventType, eventTypes } from './Utils/EventType';
13
+
14
+ const { RNTPrimerHeadlessUniversalCheckoutBanksComponent } =
15
+ NativeModules;
16
+
17
+ const eventEmitter = new NativeEventEmitter(
18
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent
19
+ );
20
+
21
+ export interface ComponentWithRedirectManagerProps {
22
+ paymentMethodType: string;
23
+ onStep?: (data: BanksStep) => void;
24
+ onError?: (error: PrimerError) => void;
25
+ onInvalid?: (data: PrimerInvalidComponentData<BanksValidatableData>) => void;
26
+ onValid?: (data: PrimerValidComponentData<BanksValidatableData>) => void;
27
+ onValidating?: (data: PrimerValidatingComponentData<BanksValidatableData>) => void;
28
+ onValidationError?: (data: PrimerComponentDataValidationError<BanksValidatableData>) => void;
29
+ }
30
+
31
+ export interface BanksComponent {
32
+ /**
33
+ * Starts the component, causing step emissions.
34
+ * First, with a {@link NamedComponentStep} instance where
35
+ * {@link NamedComponentStep.name} has a value of 'loading', followed
36
+ * by another emission that contains the list of banks in the form of an
37
+ * {@link IssuingBank} array.
38
+ */
39
+ start(): Promise<void>;
40
+
41
+ /**
42
+ * Selects the bank with the given {@link bankId}, triggering the
43
+ * validation flow.
44
+ * @param bankId The id of the selected bank.
45
+ */
46
+ onBankSelected(bankId: string): Promise<void>;
47
+
48
+ /**
49
+ * Filters down the bank list with the given {@link filter}, triggering
50
+ * the validation flow and a new step emission that contains the filtered
51
+ * list of banks in the form of an {@link IssuingBank} array.
52
+ * @param filter The text to filter the bank list by.
53
+ */
54
+ onBankFilterChange(filter: string): Promise<void>;
55
+
56
+ /**
57
+ * Submits the component, triggering tokenization and a redirect to the
58
+ * bank's page for finalizing the payment. This function should only be
59
+ * called after selecting a bank via {@link onBankSelected}.
60
+ */
61
+ submit(): Promise<void>;
62
+ }
63
+
64
+ export class PrimerHeadlessUniversalCheckoutComponentWithRedirectManager {
65
+ ///////////////////////////////////////////
66
+ // Init
67
+ ///////////////////////////////////////////
68
+ constructor() { }
69
+
70
+ ///////////////////////////////////////////
71
+ // API
72
+ ///////////////////////////////////////////
73
+
74
+ async provide(props: ComponentWithRedirectManagerProps): Promise<BanksComponent | any> {
75
+ await this.configureListeners(props);
76
+
77
+ if (props.paymentMethodType == "ADYEN_IDEAL") {
78
+ const banksComponent: BanksComponent = {
79
+ start: async () => {
80
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent.start();
81
+ },
82
+ submit: async () => {
83
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent.submit();
84
+ },
85
+ onBankFilterChange: async (filter: String) => {
86
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent.onBankFilterChange(filter);
87
+ },
88
+ onBankSelected: async (bankId: String) => {
89
+ RNTPrimerHeadlessUniversalCheckoutBanksComponent.onBankSelected(bankId);
90
+ },
91
+ }
92
+ await RNTPrimerHeadlessUniversalCheckoutBanksComponent.configure(props.paymentMethodType);
93
+ return banksComponent;
94
+ } else {
95
+ return null;
96
+ }
97
+ }
98
+
99
+ private async configureListeners(props: ComponentWithRedirectManagerProps): Promise<void> {
100
+ if (props?.onStep) {
101
+ this.addListener('onStep', (data) => {
102
+ props.onStep?.(data);
103
+ });
104
+ }
105
+
106
+ if (props?.onInvalid) {
107
+ this.addListener('onInvalid', (data) => {
108
+ props.onInvalid?.(data);
109
+ });
110
+ }
111
+
112
+ if (props?.onError) {
113
+ this.addListener('onError', (data) => {
114
+ props.onError?.(data);
115
+ });
116
+ }
117
+
118
+ if (props?.onValid) {
119
+ this.addListener('onValid', (data) => {
120
+ props.onValid?.(data);
121
+ });
122
+ }
123
+
124
+ if (props?.onValidating) {
125
+ this.addListener('onValidating', (data) => {
126
+ props.onValidating?.(data);
127
+ });
128
+ }
129
+
130
+ if (props?.onValidationError) {
131
+ this.addListener('onValidationError', (data) => {
132
+ props.onValidationError?.(data);
133
+ });
134
+ }
135
+ }
136
+
137
+ ///////////////////////////////////////////
138
+ // HELPERS
139
+ ///////////////////////////////////////////
140
+
141
+ async addListener(
142
+ eventType: EventType,
143
+ listener: (...args: any[]) => any
144
+ ): Promise<EmitterSubscription> {
145
+ return eventEmitter.addListener(eventType, listener);
146
+ }
147
+
148
+ removeListener(subscription: EmitterSubscription): void {
149
+ return subscription.remove();
150
+ }
151
+
152
+ removeAllListenersForEvent(eventType: EventType) {
153
+ eventEmitter.removeAllListeners(eventType);
154
+ }
155
+
156
+ removeAllListeners() {
157
+ eventTypes.forEach((eventType) =>
158
+ this.removeAllListenersForEvent(eventType)
159
+ );
160
+ }
161
+ }
@@ -0,0 +1,147 @@
1
+ import {
2
+ NativeEventEmitter,
3
+ NativeModules,
4
+ EmitterSubscription,
5
+ } from 'react-native';
6
+ import { PrimerComponentDataValidationError, PrimerInvalidComponentData, PrimerValidComponentData, PrimerValidatingComponentData } from 'src/models/PrimerComponentDataValidation';
7
+ import { PrimerError } from 'src/models/PrimerError';
8
+ import { KlarnaPaymentOptions, KlarnaPaymentValidatableData } from 'src/models/klarna/KlarnaPaymentCollectableData';
9
+ import { KlarnaPaymentStep, PaymentSessionCreated } from 'src/models/klarna/KlarnaPaymentSteps';
10
+ import { EventType, eventTypes } from './Utils/EventType';
11
+ import { PrimerSessionIntent } from 'src/models/PrimerSessionIntent';
12
+
13
+ const { RNTPrimerHeadlessUniversalCheckoutKlarnaComponent } = NativeModules;
14
+
15
+ const eventEmitter = new NativeEventEmitter(RNTPrimerHeadlessUniversalCheckoutKlarnaComponent);
16
+ export interface KlarnaManagerProps {
17
+ primerSessionIntent: PrimerSessionIntent;
18
+ onStep?: (data: KlarnaPaymentStep) => void;
19
+ onError?: (error: PrimerError) => void;
20
+ onInvalid?: (data: PrimerInvalidComponentData<KlarnaPaymentValidatableData>) => void;
21
+ onValid?: (data: PrimerValidComponentData<KlarnaPaymentValidatableData>) => void;
22
+ onValidating?: (data: PrimerValidatingComponentData<KlarnaPaymentValidatableData>) => void;
23
+ onValidationError?: (data: PrimerComponentDataValidationError<KlarnaPaymentValidatableData>) => void;
24
+ }
25
+
26
+ export interface KlarnaComponent {
27
+ /**
28
+ * Starts the component, causing the {@link PaymentSessionCreated} step
29
+ * to be emitted.
30
+ */
31
+ start(): Promise<void>;
32
+
33
+ /**
34
+ * Sets the options to use when initializing the Klarna payment view,
35
+ * triggering the validation flow.
36
+ * @param paymentOptions The options to use when initializing the Klarna
37
+ * payment view.
38
+ */
39
+ onSetPaymentOptions(paymentOptions: KlarnaPaymentOptions): Promise<void>;
40
+
41
+ /**
42
+ * Finalizes the payment.
43
+ */
44
+ onFinalizePayment(): Promise<void>;
45
+
46
+ /**
47
+ * Submits the component, initiating the payment authorization process.
48
+ * This function should only be called after setting the payment options
49
+ * {@link onSetPaymentOptions}.
50
+ */
51
+ submit(): Promise<void>;
52
+ }
53
+
54
+ export class PrimerHeadlessUniversalCheckoutKlarnaManager {
55
+ ///////////////////////////////////////////
56
+ // Init
57
+ ///////////////////////////////////////////
58
+ constructor() { }
59
+
60
+ ///////////////////////////////////////////
61
+ // API
62
+ ///////////////////////////////////////////
63
+
64
+ async provide(props: KlarnaManagerProps): Promise<KlarnaComponent> {
65
+ await this.configureListeners(props);
66
+
67
+ const klarnaComponent: KlarnaComponent = {
68
+ start: async () => {
69
+ RNTPrimerHeadlessUniversalCheckoutKlarnaComponent.start();
70
+ },
71
+ submit: async () => {
72
+ RNTPrimerHeadlessUniversalCheckoutKlarnaComponent.submit();
73
+ },
74
+ onSetPaymentOptions: async (paymentOptions: KlarnaPaymentOptions) => {
75
+ RNTPrimerHeadlessUniversalCheckoutKlarnaComponent.onSetPaymentOptions(paymentOptions);
76
+ },
77
+ onFinalizePayment: async () => {
78
+ RNTPrimerHeadlessUniversalCheckoutKlarnaComponent.onFinalizePayment();
79
+ },
80
+ }
81
+ await RNTPrimerHeadlessUniversalCheckoutKlarnaComponent.configure(props.primerSessionIntent);
82
+ return klarnaComponent;
83
+ }
84
+
85
+ private async configureListeners(props: KlarnaManagerProps): Promise<void> {
86
+ if (props?.onStep) {
87
+ this.addListener('onStep', (data) => {
88
+ props.onStep?.(data);
89
+ });
90
+ }
91
+
92
+ if (props?.onInvalid) {
93
+ this.addListener('onInvalid', (data) => {
94
+ props.onInvalid?.(data);
95
+ });
96
+ }
97
+
98
+ if (props?.onError) {
99
+ this.addListener('onError', (data) => {
100
+ props.onError?.(data);
101
+ });
102
+ }
103
+
104
+ if (props?.onValid) {
105
+ this.addListener('onValid', (data) => {
106
+ props.onValid?.(data);
107
+ });
108
+ }
109
+
110
+ if (props?.onValidating) {
111
+ this.addListener('onValidating', (data) => {
112
+ props.onValidating?.(data);
113
+ });
114
+ }
115
+
116
+ if (props?.onValidationError) {
117
+ this.addListener('onValidationError', (data) => {
118
+ props.onValidationError?.(data);
119
+ });
120
+ }
121
+ }
122
+
123
+ ///////////////////////////////////////////
124
+ // HELPERS
125
+ ///////////////////////////////////////////
126
+
127
+ async addListener(
128
+ eventType: EventType,
129
+ listener: (...args: any[]) => any
130
+ ): Promise<EmitterSubscription> {
131
+ return eventEmitter.addListener(eventType, listener);
132
+ }
133
+
134
+ removeListener(subscription: EmitterSubscription): void {
135
+ return subscription.remove();
136
+ }
137
+
138
+ removeAllListenersForEvent(eventType: EventType) {
139
+ eventEmitter.removeAllListeners(eventType);
140
+ }
141
+
142
+ removeAllListeners() {
143
+ eventTypes.forEach((eventType) =>
144
+ this.removeAllListenersForEvent(eventType)
145
+ );
146
+ }
147
+ }
@@ -86,7 +86,7 @@ class PrimerHeadlessUniversalCheckoutRawDataManager {
86
86
  reject(err);
87
87
  }
88
88
  } else {
89
- const err = new PrimerError("manager-not-configured", "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.", undefined);
89
+ const err = new PrimerError("manager-not-configured", undefined, "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.", undefined);
90
90
  reject(err);
91
91
  }
92
92
  });
@@ -102,7 +102,7 @@ class PrimerHeadlessUniversalCheckoutRawDataManager {
102
102
  reject(err);
103
103
  }
104
104
  } else {
105
- const err = new PrimerError("manager-not-configured", "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.", undefined);
105
+ const err = new PrimerError("manager-not-configured", undefined, "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.", undefined);
106
106
  reject(err);
107
107
  }
108
108
  });
@@ -118,7 +118,7 @@ class PrimerHeadlessUniversalCheckoutRawDataManager {
118
118
  reject(err);
119
119
  }
120
120
  } else {
121
- const err = new PrimerError("manager-not-configured", "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.", undefined);
121
+ const err = new PrimerError("manager-not-configured", undefined, "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.", undefined);
122
122
  reject(err);
123
123
  }
124
124
  });
@@ -134,7 +134,7 @@ class PrimerHeadlessUniversalCheckoutRawDataManager {
134
134
  reject(err);
135
135
  }
136
136
  } else {
137
- const err = new PrimerError("manager-not-configured", "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.", undefined);
137
+ const err = new PrimerError("manager-not-configured", undefined, "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.", undefined);
138
138
  reject(err);
139
139
  }
140
140
  });
@@ -0,0 +1,10 @@
1
+ export type EventType = 'onStep' | 'onError' | 'onInvalid' | 'onValid' | 'onValidating' | 'onValidationError';
2
+
3
+ export const eventTypes: EventType[] = [
4
+ 'onStep',
5
+ 'onError',
6
+ 'onInvalid',
7
+ 'onValid',
8
+ 'onValidating',
9
+ 'onValidationError'
10
+ ];
@@ -266,10 +266,11 @@ async function configureListeners(): Promise<void> {
266
266
  if (primerSettings?.headlessUniversalCheckoutCallbacks?.onError) {
267
267
  if (data && data.error && data.error.errorId && primerSettings) {
268
268
  const errorId: string = data.error.errorId;
269
+ const errorCode: string | undefined = data.error.errorCode;
269
270
  const description: string | undefined = data.error.description;
270
271
  const recoverySuggestion: string | undefined = data.error.recoverySuggestion;
271
272
  const diagnosticsId: string | undefined = data.error.diagnosticsId;
272
- const primerError = new PrimerError(errorId, description || 'Unknown error', recoverySuggestion, diagnosticsId);
273
+ const primerError = new PrimerError(errorId, errorCode, description || 'Unknown error', recoverySuggestion, diagnosticsId);
273
274
 
274
275
  const checkoutData: PrimerCheckoutData = data.checkoutData;
275
276
  primerSettings.headlessUniversalCheckoutCallbacks.onError(primerError, checkoutData);
@@ -316,7 +317,7 @@ class PrimerHeadlessUniversalCheckoutClass {
316
317
  const availablePaymentMethods: IPrimerHeadlessUniversalCheckoutPaymentMethod[] = res["availablePaymentMethods"];
317
318
  resolve(availablePaymentMethods);
318
319
  } else {
319
- const err = new PrimerError("primer-rn-sdk", "Failed to find availablePaymentMethods", "Create another client session", undefined);
320
+ const err = new PrimerError("primer-rn-sdk", undefined, "Failed to find availablePaymentMethods", "Create another client session", undefined);
320
321
  reject(err);
321
322
  }
322
323
  } catch (err) {
package/src/Primer.ts CHANGED
@@ -224,10 +224,11 @@ async function configureListeners(): Promise<void> {
224
224
  RNPrimer.addListener('onError', data => {
225
225
  if (data && data.error && data.error.errorId && primerSettings && primerSettings.onError) {
226
226
  const errorId: string = data.error.errorId;
227
+ const errorCode: string | undefined = data.error.errorCode;
227
228
  const description: string | undefined = data.error.description;
228
229
  const recoverySuggestion: string | undefined = data.error.recoverySuggestion;
229
230
  const diagnosticsId: string | undefined = data.error.diagnosticsId;
230
- const primerError = new PrimerError(errorId, description || 'Unknown error', recoverySuggestion, diagnosticsId);
231
+ const primerError = new PrimerError(errorId, errorCode, description || 'Unknown error', recoverySuggestion, diagnosticsId);
231
232
  primerSettings.onError(primerError, data.checkoutData || null, errorHandler);
232
233
  }
233
234
  });
package/src/index.tsx CHANGED
@@ -1,89 +1,89 @@
1
- export {
2
- Primer
3
- } from './Primer';
4
- export {
5
- PrimerSettings
6
- } from './models/PrimerSettings';
7
- export {
8
- PrimerInputElementType as InputElementType
9
- } from './models/PrimerInputElementType';
10
- export {
11
- PrimerSessionIntent as SessionIntent
12
- } from './models/PrimerSessionIntent';
13
- export {
14
- PrimerPaymentCreationHandler as PaymentCreationHandler,
15
- PrimerTokenizationHandler as TokenizationHandler,
16
- PrimerResumeHandler as ResumeHandler,
17
- PrimerErrorHandler as ErrorHandler,
1
+ export { Primer } from './Primer';
2
+ export { PrimerSettings } from './models/PrimerSettings';
3
+ export { PrimerInputElementType as InputElementType } from './models/PrimerInputElementType';
4
+ export { PrimerSessionIntent as SessionIntent } from './models/PrimerSessionIntent';
5
+ export {
6
+ PrimerPaymentCreationHandler as PaymentCreationHandler,
7
+ PrimerTokenizationHandler as TokenizationHandler,
8
+ PrimerResumeHandler as ResumeHandler,
9
+ PrimerErrorHandler as ErrorHandler,
18
10
  } from './models/PrimerHandlers';
19
11
  export { PrimerPaymentMethodTokenData } from './models/PrimerPaymentMethodTokenData';
20
12
  export {
21
- PrimerClientSession as ClientSession,
22
- PrimerOrder as Order,
23
- PrimerLineItem as LineItem,
24
- PrimerCustomer as Customer,
25
- PrimerAddress as Address,
13
+ PrimerClientSession as ClientSession,
14
+ PrimerOrder as Order,
15
+ PrimerLineItem as LineItem,
16
+ PrimerCustomer as Customer,
17
+ PrimerAddress as Address,
26
18
  } from './models/PrimerClientSession';
27
19
  export {
28
- PrimerRawData as RawData,
29
- PrimerCardData as CardData,
30
- PrimerBancontactCardData as BancontactCardData,
31
- PrimerPhoneNumberData as PhoneNumberData,
32
- PrimerRetailerData as RetailerData
20
+ PrimerRawData as RawData,
21
+ PrimerCardData as CardData,
22
+ PrimerBancontactCardData as BancontactCardData,
23
+ PrimerPhoneNumberData as PhoneNumberData,
24
+ PrimerRetailerData as RetailerData,
33
25
  } from './models/PrimerRawData';
34
26
  export {
35
- PrimerCheckoutAdditionalInfo as CheckoutAdditionalInfo,
36
- MultibancoCheckoutAdditionalInfo
27
+ PrimerCheckoutAdditionalInfo as CheckoutAdditionalInfo,
28
+ MultibancoCheckoutAdditionalInfo,
37
29
  } from './models/PrimerCheckoutAdditionalInfo';
30
+ export { RetailOutletsRetail } from './models/RetailOutletsRetail';
38
31
  export {
39
- RetailOutletsRetail
40
- } from './models/RetailOutletsRetail';
41
- export {
42
- PrimerCheckoutData as CheckoutData,
43
- PrimerCheckoutDataPayment as CheckoutDataPayment,
32
+ PrimerCheckoutData as CheckoutData,
33
+ PrimerCheckoutDataPayment as CheckoutDataPayment,
44
34
  } from './models/PrimerCheckoutData';
45
- export {
46
- PrimerCheckoutPaymentMethodData as CheckoutPaymentMethodData
47
- } from './models/PrimerCheckoutPaymentMethodData';
48
- export {
49
- PrimerError
50
- } from './models/PrimerError';
51
- export type {
52
- IPrimerAsset as Asset
53
- } from './models/PrimerAsset';
54
- export {
55
- PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout
56
- } from './HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout';
57
- export type {
58
- IPrimerHeadlessUniversalCheckoutPaymentMethod as PaymentMethod
59
- } from './models/PrimerHeadlessUniversalCheckoutPaymentMethod';
35
+ export { PrimerCheckoutPaymentMethodData as CheckoutPaymentMethodData } from './models/PrimerCheckoutPaymentMethodData';
36
+ export { PrimerError } from './models/PrimerError';
37
+ export type { IPrimerAsset as Asset } from './models/PrimerAsset';
38
+ export { PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout } from './HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout';
39
+ export type { IPrimerHeadlessUniversalCheckoutPaymentMethod as PaymentMethod } from './models/PrimerHeadlessUniversalCheckoutPaymentMethod';
60
40
 
61
41
  import PrimerHeadlessUniversalCheckoutAssetsManager from './HeadlessUniversalCheckout/Managers/AssetsManager';
62
- export {
63
- PrimerHeadlessUniversalCheckoutAssetsManager as AssetsManager
64
- }
42
+ export { PrimerHeadlessUniversalCheckoutAssetsManager as AssetsManager };
65
43
  import PrimerHeadlessUniversalCheckoutPaymentMethodNativeUIManager from './HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager';
66
- export {
67
- PrimerHeadlessUniversalCheckoutPaymentMethodNativeUIManager as NativeUIManager
68
- }
44
+ export { PrimerHeadlessUniversalCheckoutPaymentMethodNativeUIManager as NativeUIManager };
69
45
  import PrimerHeadlessUniversalCheckoutRawDataManager from './HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager';
70
46
  export {
71
- PrimerHeadlessUniversalCheckoutRawDataManager as RawDataManager
47
+ PrimerHeadlessUniversalCheckoutRawDataManager as RawDataManager
72
48
  }
73
-
74
49
  export {
75
- IPrimerVaultedPaymentMethod as VaultedPaymentMethod
50
+ IPrimerVaultedPaymentMethod as VaultedPaymentMethod
76
51
  } from './models/PrimerVaultedPaymentMethod'
77
52
 
78
53
  export {
79
- IPrimerVaultedPaymentMethodAdditonalData as VaultedPaymentMethodAdditionalData
54
+ IPrimerVaultedPaymentMethodAdditonalData as VaultedPaymentMethodAdditionalData
80
55
  } from './models/PrimerVaultedPaymentMethodAdditionalData'
81
56
 
82
57
  export {
83
- IPrimerValidationError as ValidationError
58
+ IPrimerValidationError as ValidationError
84
59
  } from './models/PrimerValidationError'
85
60
 
86
61
  import PrimerHeadlessUniversalCheckoutVaultManager from './HeadlessUniversalCheckout/Managers/VaultManager'
87
62
  export {
88
- PrimerHeadlessUniversalCheckoutVaultManager as VaultManager
89
- }
63
+ PrimerHeadlessUniversalCheckoutVaultManager as VaultManager
64
+ }
65
+ import { PrimerHeadlessUniversalCheckoutKlarnaManager, KlarnaComponent, KlarnaManagerProps } from './HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager';
66
+ export { PrimerHeadlessUniversalCheckoutKlarnaManager as KlarnaManager, KlarnaComponent, KlarnaManagerProps };
67
+ import { NamedComponentStep } from './models/NamedComponentStep';
68
+ export { NamedComponentStep };
69
+ import { KlarnaPaymentCategory } from './models/klarna/KlarnaPaymentCategory';
70
+ export { KlarnaPaymentCategory };
71
+ import { PrimerValidComponentData, PrimerValidatingComponentData, PrimerInvalidComponentData, PrimerComponentDataValidationError } from './models/PrimerComponentDataValidation';
72
+ export { PrimerValidComponentData, PrimerValidatingComponentData, PrimerInvalidComponentData, PrimerComponentDataValidationError };
73
+ import { KlarnaPaymentOptions, KlarnaPaymentFinalization, KlarnaPaymentValidatableData } from './models/klarna/KlarnaPaymentCollectableData';
74
+ export { KlarnaPaymentOptions, KlarnaPaymentFinalization, KlarnaPaymentValidatableData };
75
+ import { PaymentSessionCreated, PaymentSessionAuthorized, PaymentSessionFinalized, PaymentViewLoaded, KlarnaPaymentStep } from './models/klarna/KlarnaPaymentSteps';
76
+ export { PaymentSessionCreated, PaymentSessionAuthorized, PaymentSessionFinalized, PaymentViewLoaded, KlarnaPaymentStep };
77
+ import { PrimerKlarnaPaymentView } from './HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView'
78
+ export { PrimerKlarnaPaymentView }
79
+
80
+ import { PrimerHeadlessUniversalCheckoutComponentWithRedirectManager, BanksComponent, ComponentWithRedirectManagerProps } from './HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager';
81
+ export { PrimerHeadlessUniversalCheckoutComponentWithRedirectManager as ComponentWithRedirectManager, BanksComponent, ComponentWithRedirectManagerProps };
82
+ import { IssuingBank } from './models/IssuingBank';
83
+ export { IssuingBank };
84
+ import { BankId, BankListFilter, BanksValidatableData } from './models/banks/BanksCollectableData';
85
+ export { BankId, BankListFilter, BanksValidatableData };
86
+ import { BanksLoading, BanksRetrieved, BanksStep } from './models/banks/BanksSteps';
87
+ export { BanksLoading, BanksRetrieved, BanksStep };
88
+ import { NamedComponentValidatableData } from './models/NamedComponentValidatableData';
89
+ export { NamedComponentValidatableData };
@@ -0,0 +1,8 @@
1
+ export type IssuingBank = IIssuingBank;
2
+
3
+ interface IIssuingBank {
4
+ id: string;
5
+ name: string;
6
+ iconUrl: string;
7
+ disabled: boolean
8
+ }
@@ -0,0 +1,11 @@
1
+ export type NamedComponentStep = INamedComponentStep;
2
+
3
+ /**
4
+ * A component step that can be identified via its name.
5
+ */
6
+ interface INamedComponentStep {
7
+ /**
8
+ * The name of this component step.
9
+ */
10
+ stepName: string
11
+ }
@@ -0,0 +1,11 @@
1
+ export type NamedComponentValidatableData = INamedComponentValidatableData;
2
+
3
+ /**
4
+ * A component-validatable data that can be identified via its name.
5
+ */
6
+ interface INamedComponentValidatableData {
7
+ /**
8
+ * The name of this component-validatable data.
9
+ */
10
+ validatableDataName: string
11
+ }
@@ -1,5 +1,10 @@
1
1
  export type PrimerCheckoutPaymentMethodData = IPrimerCheckoutPaymentMethodData;
2
2
 
3
3
  interface IPrimerCheckoutPaymentMethodData {
4
+ /*
5
+ * @deprecated use paymentMethod field instead
6
+ */
4
7
  paymentMethodType: string;
5
- }
8
+
9
+ paymentMethod: string;
10
+ }
@@ -0,0 +1,60 @@
1
+ import { NamedComponentValidatableData } from "./NamedComponentValidatableData";
2
+ import { PrimerError } from "./PrimerError";
3
+ import { PrimerValidationError } from "./PrimerValidationError";
4
+
5
+ export type PrimerValidatingComponentData<T extends NamedComponentValidatableData> = IPrimerValidatingComponentData<T>;
6
+ export type PrimerValidComponentData<T extends NamedComponentValidatableData> = IPrimerValidComponentData<T>;
7
+ export type PrimerInvalidComponentData<T extends NamedComponentValidatableData> = IPrimerInvalidComponentData<T>;
8
+ export type PrimerComponentDataValidationError<T extends NamedComponentValidatableData> = IPrimerComponentDataValidationError<T>;
9
+
10
+ /**
11
+ * Interface that indicates that data is currently in the process of being validated.
12
+ */
13
+ interface IPrimerValidatingComponentData<T extends NamedComponentValidatableData> {
14
+ /**
15
+ * The data being validated.
16
+ */
17
+ data: T;
18
+ }
19
+
20
+ /**
21
+ * Interface that indicates that the data has been successfully validated.
22
+ */
23
+ interface IPrimerValidComponentData<T extends NamedComponentValidatableData> {
24
+ /**
25
+ * The successfully validated data.
26
+ */
27
+ data: T;
28
+ }
29
+
30
+ /**
31
+ * Interface that indicates that the data has been considered invalid after validation.
32
+ */
33
+ interface IPrimerInvalidComponentData<T extends NamedComponentValidatableData> {
34
+ /**
35
+ * The data that failed validation.
36
+ */
37
+ data: T;
38
+
39
+ /**
40
+ * A list of PrimerValidationError explaining why the data is
41
+ * considered invalid.
42
+ */
43
+ errors: PrimerValidationError[];
44
+ }
45
+
46
+ /**
47
+ * Interface that represents an error that occurred during the validation process.
48
+ */
49
+ interface IPrimerComponentDataValidationError<T extends NamedComponentValidatableData> {
50
+ /**
51
+ * The data for which an error ocurred during validation.
52
+ */
53
+ data: T;
54
+
55
+
56
+ /**
57
+ * The PrimerError that ocurred during the validation attempt.
58
+ */
59
+ error: PrimerError;
60
+ }