react-native-klarna-inapp-sdk 2.4.10 → 2.5.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 (121) hide show
  1. package/README.md +2 -1
  2. package/android/build.gradle +3 -1
  3. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/KlarnaMobileSDKPackage.java +5 -1
  4. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/checkout/KlarnaCheckoutViewManager.java +4 -10
  5. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/WebViewResizeObserver.java +28 -0
  6. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/event/ComponentEventSender.java +5 -1
  7. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/ui/ResizeObserverWrapperView.java +2 -2
  8. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/ui/WrapperView.java +2 -2
  9. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/ui/YogaLayoutHelper.java +39 -0
  10. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/expresscheckout/KlarnaExpressCheckoutViewCallback.kt +30 -0
  11. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/expresscheckout/KlarnaExpressCheckoutViewEventSender.kt +80 -0
  12. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/expresscheckout/KlarnaExpressCheckoutViewManager.java +544 -0
  13. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewEventHandler.java +30 -0
  14. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewEventSender.java +64 -0
  15. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewManager.java +356 -0
  16. package/android/src/newarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaExpressCheckoutViewSpec.java +31 -0
  17. package/android/src/newarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaOSMViewSpec.java +31 -0
  18. package/android/src/oldarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaExpressCheckoutViewSpec.java +36 -0
  19. package/android/src/oldarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaOSMViewSpec.java +32 -0
  20. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/KlarnaMobileSDKPackageTest.java +5 -1
  21. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/common/ui/YogaLayoutHelperTest.java +79 -0
  22. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/expresscheckout/KlarnaExpressCheckoutViewManagerTest.java +259 -0
  23. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewEventHandlerTest.java +136 -0
  24. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewEventSenderTest.java +184 -0
  25. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewManagerTest.java +385 -0
  26. package/ios/RNKlarnaMobileSDK.xcodeproj/project.pbxproj +55 -1
  27. package/ios/Sources/KlarnaExpressCheckoutViewManager.h +5 -0
  28. package/ios/Sources/KlarnaExpressCheckoutViewManager.mm +39 -0
  29. package/ios/Sources/KlarnaOSMViewManager.h +5 -0
  30. package/ios/Sources/KlarnaOSMViewManager.mm +59 -0
  31. package/ios/Sources/view/KlarnaExpressCheckoutButtonDelegateProxy.swift +145 -0
  32. package/ios/Sources/view/KlarnaExpressCheckoutViewWrapper.h +41 -0
  33. package/ios/Sources/view/KlarnaOSMViewWrapper.h +48 -0
  34. package/ios/Sources/view/newarch/KlarnaExpressCheckoutViewWrapper.mm +228 -0
  35. package/ios/Sources/view/newarch/KlarnaOSMViewWrapper.mm +294 -0
  36. package/ios/Sources/view/newarch/KlarnaStandaloneWebViewWrapper.mm +20 -13
  37. package/ios/Sources/view/oldarch/KlarnaExpressCheckoutViewWrapper.mm +222 -0
  38. package/ios/Sources/view/oldarch/KlarnaOSMViewWrapper.mm +273 -0
  39. package/ios/Sources/view/oldarch/KlarnaStandaloneWebViewWrapper.mm +11 -13
  40. package/ios/Tests/KlarnaExpressCheckoutViewWrapperTests.m +391 -0
  41. package/ios/Tests/KlarnaOSMViewWrapperTests.m +450 -0
  42. package/ios/Tests/KlarnaStandaloneWebViewWrapperTests.m +105 -0
  43. package/lib/commonjs/KlarnaExpressCheckoutView.js +75 -0
  44. package/lib/commonjs/KlarnaExpressCheckoutView.js.map +1 -0
  45. package/lib/commonjs/KlarnaOSMView.js +94 -0
  46. package/lib/commonjs/KlarnaOSMView.js.map +1 -0
  47. package/lib/commonjs/index.js +99 -0
  48. package/lib/commonjs/index.js.map +1 -1
  49. package/lib/commonjs/specs/KlarnaExpressCheckoutViewNativeComponent.js +11 -0
  50. package/lib/commonjs/specs/KlarnaExpressCheckoutViewNativeComponent.js.map +1 -0
  51. package/lib/commonjs/specs/KlarnaOSMViewNativeComponent.js +16 -0
  52. package/lib/commonjs/specs/KlarnaOSMViewNativeComponent.js.map +1 -0
  53. package/lib/commonjs/types/button/KlarnaButtonShape.js +14 -0
  54. package/lib/commonjs/types/button/KlarnaButtonShape.js.map +1 -0
  55. package/lib/commonjs/types/button/KlarnaButtonStyle.js +13 -0
  56. package/lib/commonjs/types/button/KlarnaButtonStyle.js.map +1 -0
  57. package/lib/commonjs/types/button/KlarnaButtonTheme.js +14 -0
  58. package/lib/commonjs/types/button/KlarnaButtonTheme.js.map +1 -0
  59. package/lib/commonjs/types/common/KlarnaExpressCheckoutSessionOptions.js +9 -0
  60. package/lib/commonjs/types/common/KlarnaExpressCheckoutSessionOptions.js.map +1 -0
  61. package/lib/commonjs/types/common/KlarnaOSMPlacementKey.js +2 -0
  62. package/lib/commonjs/types/common/KlarnaOSMPlacementKey.js.map +1 -0
  63. package/lib/commonjs/types/common/KlarnaTheme.js +14 -0
  64. package/lib/commonjs/types/common/KlarnaTheme.js.map +1 -0
  65. package/lib/module/KlarnaExpressCheckoutView.js +64 -0
  66. package/lib/module/KlarnaExpressCheckoutView.js.map +1 -0
  67. package/lib/module/KlarnaOSMView.js +84 -0
  68. package/lib/module/KlarnaOSMView.js.map +1 -0
  69. package/lib/module/index.js +9 -0
  70. package/lib/module/index.js.map +1 -1
  71. package/lib/module/specs/KlarnaExpressCheckoutViewNativeComponent.js +3 -0
  72. package/lib/module/specs/KlarnaExpressCheckoutViewNativeComponent.js.map +1 -0
  73. package/lib/module/specs/KlarnaOSMViewNativeComponent.js +7 -0
  74. package/lib/module/specs/KlarnaOSMViewNativeComponent.js.map +1 -0
  75. package/lib/module/types/button/KlarnaButtonShape.js +7 -0
  76. package/lib/module/types/button/KlarnaButtonShape.js.map +1 -0
  77. package/lib/module/types/button/KlarnaButtonStyle.js +6 -0
  78. package/lib/module/types/button/KlarnaButtonStyle.js.map +1 -0
  79. package/lib/module/types/button/KlarnaButtonTheme.js +7 -0
  80. package/lib/module/types/button/KlarnaButtonTheme.js.map +1 -0
  81. package/lib/module/types/common/KlarnaExpressCheckoutSessionOptions.js +2 -0
  82. package/lib/module/types/common/KlarnaExpressCheckoutSessionOptions.js.map +1 -0
  83. package/lib/module/types/common/KlarnaOSMPlacementKey.js +2 -0
  84. package/lib/module/types/common/KlarnaOSMPlacementKey.js.map +1 -0
  85. package/lib/module/types/common/KlarnaTheme.js +7 -0
  86. package/lib/module/types/common/KlarnaTheme.js.map +1 -0
  87. package/lib/typescript/KlarnaExpressCheckoutView.d.ts +47 -0
  88. package/lib/typescript/KlarnaExpressCheckoutView.d.ts.map +1 -0
  89. package/lib/typescript/KlarnaOSMView.d.ts +36 -0
  90. package/lib/typescript/KlarnaOSMView.d.ts.map +1 -0
  91. package/lib/typescript/index.d.ts +9 -0
  92. package/lib/typescript/index.d.ts.map +1 -1
  93. package/lib/typescript/specs/KlarnaExpressCheckoutViewNativeComponent.d.ts +45 -0
  94. package/lib/typescript/specs/KlarnaExpressCheckoutViewNativeComponent.d.ts.map +1 -0
  95. package/lib/typescript/specs/KlarnaOSMViewNativeComponent.d.ts +35 -0
  96. package/lib/typescript/specs/KlarnaOSMViewNativeComponent.d.ts.map +1 -0
  97. package/lib/typescript/types/button/KlarnaButtonShape.d.ts +6 -0
  98. package/lib/typescript/types/button/KlarnaButtonShape.d.ts.map +1 -0
  99. package/lib/typescript/types/button/KlarnaButtonStyle.d.ts +5 -0
  100. package/lib/typescript/types/button/KlarnaButtonStyle.d.ts.map +1 -0
  101. package/lib/typescript/types/button/KlarnaButtonTheme.d.ts +6 -0
  102. package/lib/typescript/types/button/KlarnaButtonTheme.d.ts.map +1 -0
  103. package/lib/typescript/types/common/KlarnaExpressCheckoutSessionOptions.d.ts +10 -0
  104. package/lib/typescript/types/common/KlarnaExpressCheckoutSessionOptions.d.ts.map +1 -0
  105. package/lib/typescript/types/common/KlarnaOSMPlacementKey.d.ts +2 -0
  106. package/lib/typescript/types/common/KlarnaOSMPlacementKey.d.ts.map +1 -0
  107. package/lib/typescript/types/common/KlarnaTheme.d.ts +6 -0
  108. package/lib/typescript/types/common/KlarnaTheme.d.ts.map +1 -0
  109. package/package.json +5 -3
  110. package/react-native-klarna-inapp-sdk.podspec +2 -1
  111. package/src/KlarnaExpressCheckoutView.tsx +169 -0
  112. package/src/KlarnaOSMView.tsx +157 -0
  113. package/src/index.tsx +9 -0
  114. package/src/specs/KlarnaExpressCheckoutViewNativeComponent.ts +66 -0
  115. package/src/specs/KlarnaOSMViewNativeComponent.ts +50 -0
  116. package/src/types/button/KlarnaButtonShape.ts +5 -0
  117. package/src/types/button/KlarnaButtonStyle.ts +4 -0
  118. package/src/types/button/KlarnaButtonTheme.ts +5 -0
  119. package/src/types/common/KlarnaExpressCheckoutSessionOptions.ts +13 -0
  120. package/src/types/common/KlarnaOSMPlacementKey.ts +3 -0
  121. package/src/types/common/KlarnaTheme.ts +5 -0
@@ -0,0 +1,385 @@
1
+ package com.klarna.mobile.sdk.reactnative.osm;
2
+
3
+ import static com.klarna.mobile.sdk.reactnative.osm.KlarnaOSMViewManager.COMMAND_RENDER_OSM;
4
+ import static com.klarna.mobile.sdk.reactnative.osm.KlarnaOSMViewManager.KLARNA_OSM_VIEW_REACT_CLASS;
5
+
6
+ import com.facebook.react.bridge.Arguments;
7
+ import com.facebook.react.bridge.JavaOnlyArray;
8
+ import com.facebook.react.bridge.JavaOnlyMap;
9
+ import com.facebook.react.bridge.ReadableArray;
10
+ import com.klarna.mobile.sdk.api.KlarnaEnvironment;
11
+ import com.klarna.mobile.sdk.api.KlarnaRegion;
12
+ import com.klarna.mobile.sdk.api.KlarnaTheme;
13
+ import com.klarna.mobile.sdk.api.osm.KlarnaOSMView;
14
+ import com.klarna.mobile.sdk.reactnative.common.ui.WrapperView;
15
+
16
+ import org.junit.After;
17
+ import org.junit.Assert;
18
+ import org.junit.Before;
19
+ import org.junit.Test;
20
+ import org.junit.runner.RunWith;
21
+ import org.mockito.MockedStatic;
22
+ import org.mockito.Mockito;
23
+ import org.robolectric.RobolectricTestRunner;
24
+
25
+ @RunWith(RobolectricTestRunner.class)
26
+ public class KlarnaOSMViewManagerTest {
27
+
28
+ private MockedStatic<Arguments> mockedStaticArguments;
29
+ private KlarnaOSMViewManager manager;
30
+ private WrapperView<KlarnaOSMView> wrapper;
31
+ private KlarnaOSMView osmView;
32
+
33
+ @SuppressWarnings("unchecked")
34
+ @Before
35
+ public void setup() {
36
+ manager = new KlarnaOSMViewManager();
37
+
38
+ osmView = Mockito.mock(KlarnaOSMView.class);
39
+ wrapper = Mockito.mock(WrapperView.class);
40
+ Mockito.when(wrapper.getView()).thenReturn(osmView);
41
+
42
+ mockedStaticArguments = Mockito.mockStatic(Arguments.class);
43
+ Mockito.when(Arguments.createArray())
44
+ .thenAnswer(invocation -> new JavaOnlyArray());
45
+ Mockito.when(Arguments.createMap())
46
+ .thenAnswer(invocation -> new JavaOnlyMap());
47
+ }
48
+
49
+ @After
50
+ public void teardown() {
51
+ Mockito.reset(wrapper, osmView);
52
+ mockedStaticArguments.close();
53
+ }
54
+
55
+ // --- getName ---
56
+
57
+ @Test
58
+ public void testReactClassName() {
59
+ Assert.assertEquals("RNKlarnaOSMView", manager.getName());
60
+ Assert.assertEquals("RNKlarnaOSMView", KLARNA_OSM_VIEW_REACT_CLASS);
61
+ }
62
+
63
+ // --- Prop setters: string props ---
64
+
65
+ @Test
66
+ public void testSetClientId() {
67
+ manager.setClientId(wrapper, "test-client-id");
68
+ Mockito.verify(osmView).setClientId("test-client-id");
69
+ }
70
+
71
+ @Test
72
+ public void testSetClientIdNull() {
73
+ manager.setClientId(wrapper, null);
74
+ Mockito.verify(osmView, Mockito.never()).setClientId(Mockito.anyString());
75
+ }
76
+
77
+ @Test
78
+ public void testSetClientIdEmpty() {
79
+ manager.setClientId(wrapper, "");
80
+ Mockito.verify(osmView, Mockito.never()).setClientId(Mockito.anyString());
81
+ }
82
+
83
+ @Test
84
+ public void testSetPlacementKey() {
85
+ manager.setPlacementKey(wrapper, "test-placement-key");
86
+ Mockito.verify(osmView).setPlacementKey("test-placement-key");
87
+ }
88
+
89
+ @Test
90
+ public void testSetPlacementKeyNull() {
91
+ manager.setPlacementKey(wrapper, null);
92
+ Mockito.verify(osmView, Mockito.never()).setPlacementKey(Mockito.anyString());
93
+ }
94
+
95
+ @Test
96
+ public void testSetPlacementKeyEmpty() {
97
+ manager.setPlacementKey(wrapper, "");
98
+ Mockito.verify(osmView, Mockito.never()).setPlacementKey(Mockito.anyString());
99
+ }
100
+
101
+ @Test
102
+ public void testSetLocale() {
103
+ manager.setLocale(wrapper, "en-US");
104
+ Mockito.verify(osmView).setLocale("en-US");
105
+ }
106
+
107
+ @Test
108
+ public void testSetLocaleNull() {
109
+ manager.setLocale(wrapper, null);
110
+ Mockito.verify(osmView, Mockito.never()).setLocale(Mockito.anyString());
111
+ }
112
+
113
+ @Test
114
+ public void testSetLocaleEmpty() {
115
+ manager.setLocale(wrapper, "");
116
+ Mockito.verify(osmView, Mockito.never()).setLocale(Mockito.anyString());
117
+ }
118
+
119
+ // --- Prop setter: purchaseAmount ---
120
+
121
+ @Test
122
+ public void testSetPurchaseAmountValid() {
123
+ manager.setPurchaseAmount(wrapper, "9999");
124
+ Mockito.verify(osmView).setPurchaseAmount(9999L);
125
+ }
126
+
127
+ @Test
128
+ public void testSetPurchaseAmountNull() {
129
+ manager.setPurchaseAmount(wrapper, null);
130
+ Mockito.verify(osmView, Mockito.never()).setPurchaseAmount(Mockito.anyLong());
131
+ }
132
+
133
+ @Test
134
+ public void testSetPurchaseAmountEmpty() {
135
+ manager.setPurchaseAmount(wrapper, "");
136
+ Mockito.verify(osmView, Mockito.never()).setPurchaseAmount(Mockito.anyLong());
137
+ }
138
+
139
+ @Test
140
+ public void testSetPurchaseAmountInvalid() {
141
+ // Should not throw, but should not set the value either
142
+ manager.setPurchaseAmount(wrapper, "not-a-number");
143
+ Mockito.verify(osmView, Mockito.never()).setPurchaseAmount(Mockito.anyLong());
144
+ }
145
+
146
+ @Test
147
+ public void testSetPurchaseAmountLargeNumber() {
148
+ manager.setPurchaseAmount(wrapper, "999999999999");
149
+ Mockito.verify(osmView).setPurchaseAmount(999999999999L);
150
+ }
151
+
152
+ // --- Prop setter: environment ---
153
+
154
+ @Test
155
+ public void testSetEnvironmentPlayground() {
156
+ manager.setEnvironment(wrapper, "playground");
157
+ Mockito.verify(osmView).setEnvironment(KlarnaEnvironment.PLAYGROUND);
158
+ }
159
+
160
+ @Test
161
+ public void testSetEnvironmentProduction() {
162
+ manager.setEnvironment(wrapper, "production");
163
+ Mockito.verify(osmView).setEnvironment(KlarnaEnvironment.PRODUCTION);
164
+ }
165
+
166
+ @Test
167
+ public void testSetEnvironmentStaging() {
168
+ manager.setEnvironment(wrapper, "staging");
169
+ Mockito.verify(osmView).setEnvironment(KlarnaEnvironment.STAGING);
170
+ }
171
+
172
+ @Test
173
+ public void testSetEnvironmentUnknown() {
174
+ manager.setEnvironment(wrapper, "unknown");
175
+ Mockito.verify(osmView, Mockito.never()).setEnvironment(Mockito.any());
176
+ }
177
+
178
+ @Test
179
+ public void testSetEnvironmentNull() {
180
+ manager.setEnvironment(wrapper, null);
181
+ Mockito.verify(osmView, Mockito.never()).setEnvironment(Mockito.any());
182
+ }
183
+
184
+ @Test
185
+ public void testSetEnvironmentEmpty() {
186
+ manager.setEnvironment(wrapper, "");
187
+ Mockito.verify(osmView, Mockito.never()).setEnvironment(Mockito.any());
188
+ }
189
+
190
+ // --- Prop setter: region ---
191
+
192
+ @Test
193
+ public void testSetRegionEu() {
194
+ manager.setRegion(wrapper, "eu");
195
+ Mockito.verify(osmView).setRegion(KlarnaRegion.EU);
196
+ }
197
+
198
+ @Test
199
+ public void testSetRegionNa() {
200
+ manager.setRegion(wrapper, "na");
201
+ Mockito.verify(osmView).setRegion(KlarnaRegion.NA);
202
+ }
203
+
204
+ @Test
205
+ public void testSetRegionOc() {
206
+ manager.setRegion(wrapper, "oc");
207
+ Mockito.verify(osmView).setRegion(KlarnaRegion.OC);
208
+ }
209
+
210
+ @Test
211
+ public void testSetRegionUnknown() {
212
+ manager.setRegion(wrapper, "unknown");
213
+ Mockito.verify(osmView, Mockito.never()).setRegion(Mockito.any());
214
+ }
215
+
216
+ @Test
217
+ public void testSetRegionNull() {
218
+ manager.setRegion(wrapper, null);
219
+ Mockito.verify(osmView, Mockito.never()).setRegion(Mockito.any());
220
+ }
221
+
222
+ // --- Prop setter: theme ---
223
+
224
+ @Test
225
+ public void testSetThemeLight() {
226
+ manager.setTheme(wrapper, "light");
227
+ Mockito.verify(osmView).setTheme(KlarnaTheme.LIGHT);
228
+ }
229
+
230
+ @Test
231
+ public void testSetThemeDark() {
232
+ manager.setTheme(wrapper, "dark");
233
+ Mockito.verify(osmView).setTheme(KlarnaTheme.DARK);
234
+ }
235
+
236
+ @Test
237
+ public void testSetThemeAutomatic() {
238
+ manager.setTheme(wrapper, "automatic");
239
+ Mockito.verify(osmView).setTheme(KlarnaTheme.AUTOMATIC);
240
+ }
241
+
242
+ @Test
243
+ public void testSetThemeUnknown() {
244
+ manager.setTheme(wrapper, "unknown");
245
+ Mockito.verify(osmView, Mockito.never()).setTheme(Mockito.any());
246
+ }
247
+
248
+ @Test
249
+ public void testSetThemeNull() {
250
+ manager.setTheme(wrapper, null);
251
+ Mockito.verify(osmView, Mockito.never()).setTheme(Mockito.any());
252
+ }
253
+
254
+ // --- Prop setter: returnUrl (no-op) ---
255
+
256
+ @Test
257
+ public void testSetReturnUrlIsNoOp() {
258
+ // returnUrl is intentionally ignored for OSM
259
+ manager.setReturnUrl(wrapper, "https://return.example.com");
260
+ // Verify no interaction with osmView for returnUrl
261
+ Mockito.verifyNoInteractions(osmView);
262
+ }
263
+
264
+ // --- Prop setter: backgroundColor / textColor ---
265
+
266
+ @Test
267
+ public void testSetBackgroundColor() {
268
+ manager.setBackgroundColor(wrapper, "#FF0000");
269
+ Mockito.verify(osmView).setStyleConfiguration(Mockito.any());
270
+ }
271
+
272
+ @Test
273
+ public void testSetTextColor() {
274
+ manager.setTextColor(wrapper, "#00FF00");
275
+ Mockito.verify(osmView).setStyleConfiguration(Mockito.any());
276
+ }
277
+
278
+ @Test
279
+ public void testSetBackgroundColorNull() {
280
+ manager.setBackgroundColor(wrapper, null);
281
+ // null color means null style configuration
282
+ Mockito.verify(osmView).setStyleConfiguration(null);
283
+ }
284
+
285
+ @Test
286
+ public void testSetTextColorNull() {
287
+ manager.setTextColor(wrapper, null);
288
+ Mockito.verify(osmView).setStyleConfiguration(null);
289
+ }
290
+
291
+ @Test
292
+ public void testSetBackgroundColorInvalid() {
293
+ manager.setBackgroundColor(wrapper, "not-a-color");
294
+ // Invalid color should result in null style configuration
295
+ Mockito.verify(osmView).setStyleConfiguration(null);
296
+ }
297
+
298
+ @Test
299
+ public void testSetColorWithoutHash() {
300
+ // parseColor should auto-prefix "#"
301
+ manager.setBackgroundColor(wrapper, "FF0000");
302
+ Mockito.verify(osmView).setStyleConfiguration(Mockito.any());
303
+ }
304
+
305
+ // --- receiveCommand ---
306
+
307
+ @Test
308
+ public void testReceiveCommandRender() {
309
+ // receiveCommand with "render" requires context for render(),
310
+ // but we can verify the command routing by mocking the context
311
+ ReadableArray args = new JavaOnlyArray();
312
+ // render() calls view.getView() and then needs ReactContext, so this will
313
+ // exercise the command dispatch path; the actual render is tested separately
314
+ try {
315
+ manager.receiveCommand(wrapper, COMMAND_RENDER_OSM, args);
316
+ } catch (Exception e) {
317
+ // Expected: render() tries to cast wrapper.getContext() to ReactContext
318
+ }
319
+ }
320
+
321
+ @Test
322
+ public void testReceiveCommandUnknown() {
323
+ // Unknown command should be silently ignored
324
+ ReadableArray args = new JavaOnlyArray();
325
+ manager.receiveCommand(wrapper, "unknownCommand", args);
326
+ // No exception should be thrown
327
+ }
328
+
329
+ // --- getExportedCustomDirectEventTypeConstants ---
330
+
331
+ @Test
332
+ public void testExportedEvents() {
333
+ java.util.Map<String, Object> events = manager.getExportedCustomDirectEventTypeConstants();
334
+ Assert.assertNotNull(events);
335
+ Assert.assertEquals(3, events.size());
336
+ Assert.assertTrue(events.containsKey("onError"));
337
+ Assert.assertTrue(events.containsKey("onResized"));
338
+ Assert.assertTrue(events.containsKey("onOSMViewReady"));
339
+ }
340
+
341
+ // --- Null view edge case ---
342
+
343
+ @Test
344
+ public void testSetClientIdNullInnerView() {
345
+ Mockito.when(wrapper.getView()).thenReturn(null);
346
+ // Should not throw
347
+ manager.setClientId(wrapper, "test-client-id");
348
+ }
349
+
350
+ @Test
351
+ public void testSetPurchaseAmountNullInnerView() {
352
+ Mockito.when(wrapper.getView()).thenReturn(null);
353
+ manager.setPurchaseAmount(wrapper, "9999");
354
+ }
355
+
356
+ @Test
357
+ public void testSetEnvironmentNullInnerView() {
358
+ Mockito.when(wrapper.getView()).thenReturn(null);
359
+ manager.setEnvironment(wrapper, "production");
360
+ }
361
+
362
+ @Test
363
+ public void testSetRegionNullInnerView() {
364
+ Mockito.when(wrapper.getView()).thenReturn(null);
365
+ manager.setRegion(wrapper, "eu");
366
+ }
367
+
368
+ @Test
369
+ public void testSetThemeNullInnerView() {
370
+ Mockito.when(wrapper.getView()).thenReturn(null);
371
+ manager.setTheme(wrapper, "light");
372
+ }
373
+
374
+ @Test
375
+ public void testSetBackgroundColorNullInnerView() {
376
+ Mockito.when(wrapper.getView()).thenReturn(null);
377
+ manager.setBackgroundColor(wrapper, "#FF0000");
378
+ }
379
+
380
+ @Test
381
+ public void testSetTextColorNullInnerView() {
382
+ Mockito.when(wrapper.getView()).thenReturn(null);
383
+ manager.setTextColor(wrapper, "#00FF00");
384
+ }
385
+ }
@@ -7,9 +7,11 @@
7
7
  objects = {
8
8
 
9
9
  /* Begin PBXBuildFile section */
10
+ 0DB3516A77E13682BFCA4E64 /* KlarnaExpressCheckoutViewWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33C84BA7615CC01128CA31E5 /* KlarnaExpressCheckoutViewWrapper.mm */; };
10
11
  42BC05FF2AC57E110044A9FE /* KlarnaStandaloneWebViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42BC05FE2AC57E110044A9FE /* KlarnaStandaloneWebViewManager.mm */; };
11
12
  42BC06032AC586C50044A9FE /* KlarnaStandaloneWebViewWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42BC06022AC586C50044A9FE /* KlarnaStandaloneWebViewWrapper.mm */; };
12
13
  42BC06052AC588180044A9FE /* KlarnaStandaloneWebViewWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42BC06042AC588180044A9FE /* KlarnaStandaloneWebViewWrapper.mm */; };
14
+ 5EF79F343E41AF25BCF0FB57 /* KlarnaExpressCheckoutViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC11876CCED1F9FF63141F96 /* KlarnaExpressCheckoutViewManager.mm */; };
13
15
  7917D755255C45FB00E16799 /* PaymentViewWrapperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7917D754255C45FB00E16799 /* PaymentViewWrapperTests.m */; };
14
16
  7917D757255C45FB00E16799 /* libRNKlarnaMobileSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 134814201AA4EA6300B7C361 /* libRNKlarnaMobileSDK.a */; };
15
17
  792F67C02AB8AD7D00675E18 /* PaymentViewWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 792F67BB2AB8AD7D00675E18 /* PaymentViewWrapper.mm */; };
@@ -18,9 +20,17 @@
18
20
  79BD25FC2BC97B0900D2D92A /* KlarnaCheckoutViewWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 79BD25FB2BC97B0900D2D92A /* KlarnaCheckoutViewWrapper.mm */; };
19
21
  79BD26002BCD4F6C00D2D92A /* KlarnaCheckoutViewWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 79BD25FF2BCD4F6C00D2D92A /* KlarnaCheckoutViewWrapper.mm */; };
20
22
  79BD26042BCD572600D2D92A /* RNMobileSDKUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 79BD26032BCD572600D2D92A /* RNMobileSDKUtils.mm */; };
23
+ 9F9101C8D59ECF439818302A /* KlarnaExpressCheckoutButtonDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 162FB3924FC0CAB605BB10A7 /* KlarnaExpressCheckoutButtonDelegateProxy.swift */; };
24
+ A1B2C3D42D8600010000001A /* KlarnaOSMViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D42D8600010000001F /* KlarnaOSMViewManager.mm */; };
25
+ A1B2C3D42D8600010000001B /* KlarnaOSMViewWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D42D8600010000002B /* KlarnaOSMViewWrapper.mm */; };
26
+ A1B2C3D42D8600010000001C /* KlarnaOSMViewWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D42D8600010000002C /* KlarnaOSMViewWrapper.mm */; };
27
+ A1B2C3D52602130000AABBCC /* KlarnaStandaloneWebViewWrapperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D42602130000AABBCC /* KlarnaStandaloneWebViewWrapperTests.m */; };
28
+ A1B2C3D62D8700010000003A /* KlarnaOSMViewWrapperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D62D8700010000003B /* KlarnaOSMViewWrapperTests.m */; };
29
+ AB2E3AF1EF7D600B7C2BB129 /* KlarnaExpressCheckoutViewWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9E25B2ABA81ABBC6F987AF54 /* KlarnaExpressCheckoutViewWrapper.mm */; };
21
30
  B3E7B58A1CC2AC0600A0062D /* KlarnaPaymentViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* KlarnaPaymentViewManager.mm */; };
22
31
  C950FFE559BF35928E94BF8D /* libPods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F7837F2C76927FD0EC420C40 /* libPods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.a */; };
23
32
  DF4C69429315E34435B953E8 /* libPods-RNKlarnaMobileSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FF5062264E440DC969A15ACA /* libPods-RNKlarnaMobileSDK.a */; };
33
+ F3A8B9C202AB3456000DECBA /* KlarnaExpressCheckoutViewWrapperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F3A8B9C102AB3456000DECBA /* KlarnaExpressCheckoutViewWrapperTests.m */; };
24
34
  /* End PBXBuildFile section */
25
35
 
26
36
  /* Begin PBXContainerItemProxy section */
@@ -46,8 +56,11 @@
46
56
  /* End PBXCopyFilesBuildPhase section */
47
57
 
48
58
  /* Begin PBXFileReference section */
59
+ 12F2DBCAAC01A760C139AA95 /* KlarnaExpressCheckoutViewWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KlarnaExpressCheckoutViewWrapper.h; sourceTree = "<group>"; };
49
60
  134814201AA4EA6300B7C361 /* libRNKlarnaMobileSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRNKlarnaMobileSDK.a; sourceTree = BUILT_PRODUCTS_DIR; };
61
+ 162FB3924FC0CAB605BB10A7 /* KlarnaExpressCheckoutButtonDelegateProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlarnaExpressCheckoutButtonDelegateProxy.swift; sourceTree = "<group>"; };
50
62
  19C9876CD048B49EB4361DB8 /* Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.release.xcconfig"; path = "Target Support Files/Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests/Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.release.xcconfig"; sourceTree = "<group>"; };
63
+ 33C84BA7615CC01128CA31E5 /* KlarnaExpressCheckoutViewWrapper.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = KlarnaExpressCheckoutViewWrapper.mm; sourceTree = "<group>"; };
51
64
  3FC0A2F5614F1B06C1249CA3 /* Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.debug.xcconfig"; path = "Target Support Files/Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests/Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.debug.xcconfig"; sourceTree = "<group>"; };
52
65
  42BC05FD2AC57D950044A9FE /* KlarnaStandaloneWebViewManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KlarnaStandaloneWebViewManager.h; sourceTree = "<group>"; };
53
66
  42BC05FE2AC57E110044A9FE /* KlarnaStandaloneWebViewManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = KlarnaStandaloneWebViewManager.mm; sourceTree = "<group>"; };
@@ -69,9 +82,20 @@
69
82
  79BD26032BCD572600D2D92A /* RNMobileSDKUtils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RNMobileSDKUtils.mm; sourceTree = "<group>"; };
70
83
  79E2A0B02BFBA653002923A5 /* PrefixHeader.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = "<group>"; };
71
84
  7A4208B9D3B0F45669A2E06F /* Pods-RNKlarnaMobileSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNKlarnaMobileSDK.release.xcconfig"; path = "Target Support Files/Pods-RNKlarnaMobileSDK/Pods-RNKlarnaMobileSDK.release.xcconfig"; sourceTree = "<group>"; };
85
+ 9E25B2ABA81ABBC6F987AF54 /* KlarnaExpressCheckoutViewWrapper.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = KlarnaExpressCheckoutViewWrapper.mm; sourceTree = "<group>"; };
86
+ A1B2C3D42602130000AABBCC /* KlarnaStandaloneWebViewWrapperTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KlarnaStandaloneWebViewWrapperTests.m; sourceTree = "<group>"; };
87
+ A1B2C3D42D8600010000001E /* KlarnaOSMViewManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KlarnaOSMViewManager.h; sourceTree = "<group>"; };
88
+ A1B2C3D42D8600010000001F /* KlarnaOSMViewManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = KlarnaOSMViewManager.mm; sourceTree = "<group>"; };
89
+ A1B2C3D42D8600010000002A /* KlarnaOSMViewWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KlarnaOSMViewWrapper.h; sourceTree = "<group>"; };
90
+ A1B2C3D42D8600010000002B /* KlarnaOSMViewWrapper.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = KlarnaOSMViewWrapper.mm; sourceTree = "<group>"; };
91
+ A1B2C3D42D8600010000002C /* KlarnaOSMViewWrapper.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = KlarnaOSMViewWrapper.mm; sourceTree = "<group>"; };
92
+ A1B2C3D62D8700010000003B /* KlarnaOSMViewWrapperTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KlarnaOSMViewWrapperTests.m; sourceTree = "<group>"; };
72
93
  B074D4744315BBCD94D119E9 /* Pods-RNKlarnaMobileSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNKlarnaMobileSDK.debug.xcconfig"; path = "Target Support Files/Pods-RNKlarnaMobileSDK/Pods-RNKlarnaMobileSDK.debug.xcconfig"; sourceTree = "<group>"; };
73
94
  B3E7B5881CC2AC0600A0062D /* KlarnaPaymentViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KlarnaPaymentViewManager.h; sourceTree = "<group>"; };
74
95
  B3E7B5891CC2AC0600A0062D /* KlarnaPaymentViewManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = KlarnaPaymentViewManager.mm; sourceTree = "<group>"; };
96
+ BC11876CCED1F9FF63141F96 /* KlarnaExpressCheckoutViewManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = KlarnaExpressCheckoutViewManager.mm; sourceTree = "<group>"; };
97
+ D18B14E1C87FBEC83B253DF6 /* KlarnaExpressCheckoutViewManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KlarnaExpressCheckoutViewManager.h; sourceTree = "<group>"; };
98
+ F3A8B9C102AB3456000DECBA /* KlarnaExpressCheckoutViewWrapperTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KlarnaExpressCheckoutViewWrapperTests.m; sourceTree = "<group>"; };
75
99
  F7837F2C76927FD0EC420C40 /* libPods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
76
100
  FF5062264E440DC969A15ACA /* libPods-RNKlarnaMobileSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNKlarnaMobileSDK.a"; sourceTree = BUILT_PRODUCTS_DIR; };
77
101
  /* End PBXFileReference section */
@@ -138,8 +162,12 @@
138
162
  79BD25F92BC97A3000D2D92A /* KlarnaCheckoutViewManager.mm */,
139
163
  B3E7B5881CC2AC0600A0062D /* KlarnaPaymentViewManager.h */,
140
164
  B3E7B5891CC2AC0600A0062D /* KlarnaPaymentViewManager.mm */,
165
+ D18B14E1C87FBEC83B253DF6 /* KlarnaExpressCheckoutViewManager.h */,
166
+ BC11876CCED1F9FF63141F96 /* KlarnaExpressCheckoutViewManager.mm */,
141
167
  42BC05FD2AC57D950044A9FE /* KlarnaStandaloneWebViewManager.h */,
142
168
  42BC05FE2AC57E110044A9FE /* KlarnaStandaloneWebViewManager.mm */,
169
+ A1B2C3D42D8600010000001E /* KlarnaOSMViewManager.h */,
170
+ A1B2C3D42D8600010000001F /* KlarnaOSMViewManager.mm */,
143
171
  79E2A0B02BFBA653002923A5 /* PrefixHeader.pch */,
144
172
  );
145
173
  path = Sources;
@@ -148,7 +176,10 @@
148
176
  7917D753255C45FB00E16799 /* Tests */ = {
149
177
  isa = PBXGroup;
150
178
  children = (
179
+ A1B2C3D62D8700010000003B /* KlarnaOSMViewWrapperTests.m */,
180
+ A1B2C3D42602130000AABBCC /* KlarnaStandaloneWebViewWrapperTests.m */,
151
181
  7917D754255C45FB00E16799 /* PaymentViewWrapperTests.m */,
182
+ F3A8B9C102AB3456000DECBA /* KlarnaExpressCheckoutViewWrapperTests.m */,
152
183
  );
153
184
  path = Tests;
154
185
  sourceTree = "<group>";
@@ -173,8 +204,10 @@
173
204
  isa = PBXGroup;
174
205
  children = (
175
206
  79BD25FF2BCD4F6C00D2D92A /* KlarnaCheckoutViewWrapper.mm */,
207
+ 33C84BA7615CC01128CA31E5 /* KlarnaExpressCheckoutViewWrapper.mm */,
176
208
  792F67BB2AB8AD7D00675E18 /* PaymentViewWrapper.mm */,
177
209
  42BC06022AC586C50044A9FE /* KlarnaStandaloneWebViewWrapper.mm */,
210
+ A1B2C3D42D8600010000002B /* KlarnaOSMViewWrapper.mm */,
178
211
  );
179
212
  path = newarch;
180
213
  sourceTree = "<group>";
@@ -183,8 +216,10 @@
183
216
  isa = PBXGroup;
184
217
  children = (
185
218
  79BD25FB2BC97B0900D2D92A /* KlarnaCheckoutViewWrapper.mm */,
219
+ 9E25B2ABA81ABBC6F987AF54 /* KlarnaExpressCheckoutViewWrapper.mm */,
186
220
  792F67BE2AB8AD7D00675E18 /* PaymentViewWrapper.mm */,
187
221
  42BC06042AC588180044A9FE /* KlarnaStandaloneWebViewWrapper.mm */,
222
+ A1B2C3D42D8600010000002C /* KlarnaOSMViewWrapper.mm */,
188
223
  );
189
224
  path = oldarch;
190
225
  sourceTree = "<group>";
@@ -202,8 +237,11 @@
202
237
  isa = PBXGroup;
203
238
  children = (
204
239
  796795862C1B39E700BAB0C1 /* KlarnaCheckoutViewWrapper.h */,
240
+ 12F2DBCAAC01A760C139AA95 /* KlarnaExpressCheckoutViewWrapper.h */,
241
+ 162FB3924FC0CAB605BB10A7 /* KlarnaExpressCheckoutButtonDelegateProxy.swift */,
205
242
  796795872C1B39F100BAB0C1 /* KlarnaStandaloneWebViewWrapper.h */,
206
243
  796795882C1B39FB00BAB0C1 /* PaymentViewWrapper.h */,
244
+ A1B2C3D42D8600010000002A /* KlarnaOSMViewWrapper.h */,
207
245
  792F67BA2AB8AD7D00675E18 /* newarch */,
208
246
  792F67BD2AB8AD7D00675E18 /* oldarch */,
209
247
  );
@@ -340,12 +378,14 @@
340
378
  "${PODS_ROOT}/Target Support Files/Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests/Pods-RNKlarnaMobileSDK-RNKlarnaMobileSDKTests-frameworks.sh",
341
379
  "${PODS_XCFRAMEWORKS_BUILD_DIR}/KlarnaMobileSDK/basic/KlarnaCore.framework/KlarnaCore",
342
380
  "${PODS_XCFRAMEWORKS_BUILD_DIR}/KlarnaMobileSDK/basic/KlarnaMobileSDK.framework/KlarnaMobileSDK",
381
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/KlarnaMobileSDK/basic/KlarnaPayments.framework/KlarnaPayments",
343
382
  "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
344
383
  );
345
384
  name = "[CP] Embed Pods Frameworks";
346
385
  outputPaths = (
347
386
  "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KlarnaCore.framework",
348
387
  "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KlarnaMobileSDK.framework",
388
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KlarnaPayments.framework",
349
389
  "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
350
390
  );
351
391
  runOnlyForDeploymentPostprocessing = 0;
@@ -400,16 +440,23 @@
400
440
  isa = PBXSourcesBuildPhase;
401
441
  buildActionMask = 2147483647;
402
442
  files = (
443
+ 5EF79F343E41AF25BCF0FB57 /* KlarnaExpressCheckoutViewManager.mm in Sources */,
444
+ 9F9101C8D59ECF439818302A /* KlarnaExpressCheckoutButtonDelegateProxy.swift in Sources */,
445
+ 0DB3516A77E13682BFCA4E64 /* KlarnaExpressCheckoutViewWrapper.mm in Sources */,
446
+ AB2E3AF1EF7D600B7C2BB129 /* KlarnaExpressCheckoutViewWrapper.mm in Sources */,
403
447
  42BC06032AC586C50044A9FE /* KlarnaStandaloneWebViewWrapper.mm in Sources */,
448
+ 42BC06052AC588180044A9FE /* KlarnaStandaloneWebViewWrapper.mm in Sources */,
404
449
  79BD25FC2BC97B0900D2D92A /* KlarnaCheckoutViewWrapper.mm in Sources */,
405
450
  79BD26002BCD4F6C00D2D92A /* KlarnaCheckoutViewWrapper.mm in Sources */,
406
451
  79BD26042BCD572600D2D92A /* RNMobileSDKUtils.mm in Sources */,
407
452
  B3E7B58A1CC2AC0600A0062D /* KlarnaPaymentViewManager.mm in Sources */,
408
453
  792F67C02AB8AD7D00675E18 /* PaymentViewWrapper.mm in Sources */,
409
- 42BC06052AC588180044A9FE /* KlarnaStandaloneWebViewWrapper.mm in Sources */,
410
454
  79BD25FA2BC97A3000D2D92A /* KlarnaCheckoutViewManager.mm in Sources */,
411
455
  42BC05FF2AC57E110044A9FE /* KlarnaStandaloneWebViewManager.mm in Sources */,
412
456
  792F67C12AB8AD7D00675E18 /* PaymentViewWrapper.mm in Sources */,
457
+ A1B2C3D42D8600010000001A /* KlarnaOSMViewManager.mm in Sources */,
458
+ A1B2C3D42D8600010000001B /* KlarnaOSMViewWrapper.mm in Sources */,
459
+ A1B2C3D42D8600010000001C /* KlarnaOSMViewWrapper.mm in Sources */,
413
460
  );
414
461
  runOnlyForDeploymentPostprocessing = 0;
415
462
  };
@@ -417,7 +464,10 @@
417
464
  isa = PBXSourcesBuildPhase;
418
465
  buildActionMask = 2147483647;
419
466
  files = (
467
+ A1B2C3D62D8700010000003A /* KlarnaOSMViewWrapperTests.m in Sources */,
468
+ A1B2C3D52602130000AABBCC /* KlarnaStandaloneWebViewWrapperTests.m in Sources */,
420
469
  7917D755255C45FB00E16799 /* PaymentViewWrapperTests.m in Sources */,
470
+ F3A8B9C202AB3456000DECBA /* KlarnaExpressCheckoutViewWrapperTests.m in Sources */,
421
471
  );
422
472
  runOnlyForDeploymentPostprocessing = 0;
423
473
  };
@@ -537,6 +587,7 @@
537
587
  isa = XCBuildConfiguration;
538
588
  baseConfigurationReference = B074D4744315BBCD94D119E9 /* Pods-RNKlarnaMobileSDK.debug.xcconfig */;
539
589
  buildSettings = {
590
+ DEFINES_MODULE = YES;
540
591
  HEADER_SEARCH_PATHS = (
541
592
  "$(inherited)",
542
593
  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
@@ -547,6 +598,7 @@
547
598
  OTHER_LDFLAGS = "-ObjC";
548
599
  PRODUCT_NAME = RNKlarnaMobileSDK;
549
600
  SKIP_INSTALL = YES;
601
+ SWIFT_VERSION = 5.0;
550
602
  };
551
603
  name = Debug;
552
604
  };
@@ -554,6 +606,7 @@
554
606
  isa = XCBuildConfiguration;
555
607
  baseConfigurationReference = 7A4208B9D3B0F45669A2E06F /* Pods-RNKlarnaMobileSDK.release.xcconfig */;
556
608
  buildSettings = {
609
+ DEFINES_MODULE = YES;
557
610
  HEADER_SEARCH_PATHS = (
558
611
  "$(inherited)",
559
612
  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
@@ -564,6 +617,7 @@
564
617
  OTHER_LDFLAGS = "-ObjC";
565
618
  PRODUCT_NAME = RNKlarnaMobileSDK;
566
619
  SKIP_INSTALL = YES;
620
+ SWIFT_VERSION = 5.0;
567
621
  };
568
622
  name = Release;
569
623
  };
@@ -0,0 +1,5 @@
1
+ #import <React/RCTViewManager.h>
2
+
3
+ @interface KlarnaExpressCheckoutViewManager : RCTViewManager
4
+
5
+ @end
@@ -0,0 +1,39 @@
1
+ #import <React/RCTUIManager.h>
2
+ #import <React/RCTLog.h>
3
+ #import "KlarnaExpressCheckoutViewManager.h"
4
+ #import "view/KlarnaExpressCheckoutViewWrapper.h"
5
+
6
+ @implementation KlarnaExpressCheckoutViewManager
7
+
8
+ RCT_EXPORT_MODULE(RNKlarnaExpressCheckoutView)
9
+
10
+ #pragma mark - View Properties
11
+
12
+ RCT_EXPORT_VIEW_PROPERTY(sessionType, NSString)
13
+ RCT_EXPORT_VIEW_PROPERTY(clientId, NSString)
14
+ RCT_EXPORT_VIEW_PROPERTY(clientToken, NSString)
15
+ RCT_EXPORT_VIEW_PROPERTY(locale, NSString)
16
+ RCT_EXPORT_VIEW_PROPERTY(environment, NSString)
17
+ RCT_EXPORT_VIEW_PROPERTY(region, NSString)
18
+ RCT_EXPORT_VIEW_PROPERTY(returnUrl, NSString)
19
+ RCT_EXPORT_VIEW_PROPERTY(theme, NSString)
20
+ RCT_EXPORT_VIEW_PROPERTY(shape, NSString)
21
+ RCT_EXPORT_VIEW_PROPERTY(buttonStyle, NSString)
22
+ RCT_EXPORT_VIEW_PROPERTY(autoFinalize, BOOL)
23
+ RCT_EXPORT_VIEW_PROPERTY(collectShippingAddress, BOOL)
24
+ RCT_EXPORT_VIEW_PROPERTY(sessionData, NSString)
25
+
26
+ RCT_EXPORT_VIEW_PROPERTY(onAuthorized, RCTDirectEventBlock)
27
+ RCT_EXPORT_VIEW_PROPERTY(onError, RCTDirectEventBlock)
28
+ RCT_EXPORT_VIEW_PROPERTY(onResized, RCTDirectEventBlock)
29
+
30
+ #pragma mark - View Creation
31
+
32
+ - (UIView *)view
33
+ {
34
+ KlarnaExpressCheckoutViewWrapper* wrapper = [KlarnaExpressCheckoutViewWrapper new];
35
+ wrapper.uiManager = self.bridge.uiManager;
36
+ return wrapper;
37
+ }
38
+
39
+ @end
@@ -0,0 +1,5 @@
1
+ #import <React/RCTViewManager.h>
2
+
3
+ @interface KlarnaOSMViewManager : RCTViewManager
4
+
5
+ @end