react-native-klarna-inapp-sdk 2.4.0 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/checkout/KlarnaCheckoutViewEventSender.java +7 -2
  3. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/checkout/KlarnaCheckoutViewManager.java +51 -18
  4. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/WebViewResizeObserver.java +9 -4
  5. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/ui/ResizeObserverWrapperView.java +3 -2
  6. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/payments/PaymentViewWrapper.java +1 -1
  7. package/ios/Sources/KlarnaCheckoutViewManager.mm +32 -24
  8. package/ios/Sources/view/KlarnaCheckoutViewWrapper.h +1 -3
  9. package/ios/Sources/view/newarch/KlarnaCheckoutViewWrapper.mm +53 -29
  10. package/ios/Sources/view/oldarch/KlarnaCheckoutViewWrapper.mm +58 -20
  11. package/lib/commonjs/KlarnaCheckoutView.js +16 -3
  12. package/lib/commonjs/KlarnaCheckoutView.js.map +1 -1
  13. package/lib/commonjs/specs/KlarnaCheckoutViewNativeComponent.js.map +1 -1
  14. package/lib/module/KlarnaCheckoutView.js +16 -3
  15. package/lib/module/KlarnaCheckoutView.js.map +1 -1
  16. package/lib/module/specs/KlarnaCheckoutViewNativeComponent.js.map +1 -1
  17. package/lib/typescript/KlarnaCheckoutView.d.ts +2 -0
  18. package/lib/typescript/KlarnaCheckoutView.d.ts.map +1 -1
  19. package/lib/typescript/specs/KlarnaCheckoutViewNativeComponent.d.ts +1 -0
  20. package/lib/typescript/specs/KlarnaCheckoutViewNativeComponent.d.ts.map +1 -1
  21. package/package.json +1 -1
  22. package/src/KlarnaCheckoutView.tsx +16 -3
  23. package/src/specs/KlarnaCheckoutViewNativeComponent.ts +1 -0
@@ -109,7 +109,7 @@ dependencies {
109
109
  //noinspection GradleDynamicVersion
110
110
  implementation "com.facebook.react:react-native:${getExtOrFallback('reactnativeVersion', '+')}"
111
111
 
112
- implementation 'com.klarna.mobile:sdk:2.6.28'
112
+ implementation 'com.klarna.mobile:sdk:2.6.29'
113
113
 
114
114
  testImplementation "junit:junit:4.13.2"
115
115
  testImplementation 'androidx.test:core:1.5.0'
@@ -8,7 +8,6 @@ import com.facebook.react.uimanager.events.EventDispatcher;
8
8
  import com.klarna.mobile.sdk.KlarnaMobileSDKError;
9
9
  import com.klarna.mobile.sdk.api.KlarnaProductEvent;
10
10
  import com.klarna.mobile.sdk.api.checkout.KlarnaCheckoutView;
11
- import com.klarna.mobile.sdk.reactnative.common.event.ComponentEvent;
12
11
  import com.klarna.mobile.sdk.reactnative.common.event.ComponentEventSender;
13
12
  import com.klarna.mobile.sdk.reactnative.common.event.KlarnaEventHandlerEventsUtil;
14
13
  import com.klarna.mobile.sdk.reactnative.common.ui.ResizeObserverWrapperView;
@@ -23,6 +22,7 @@ import java.util.Map;
23
22
  public class KlarnaCheckoutViewEventSender extends ComponentEventSender<ResizeObserverWrapperView<KlarnaCheckoutView>> {
24
23
 
25
24
  private static final String EVENT_NAME_ON_RESIZED = "onResized";
25
+ private static final String EVENT_NAME_ON_CHECKOUT_VIEW_READY = "onCheckoutViewReady";
26
26
 
27
27
  KlarnaCheckoutViewEventSender(@NonNull final Map<WeakReference<ResizeObserverWrapperView<KlarnaCheckoutView>>, EventDispatcher> viewToDispatcher) {
28
28
  super(viewToDispatcher);
@@ -33,7 +33,8 @@ public class KlarnaCheckoutViewEventSender extends ComponentEventSender<ResizeOb
33
33
  return Arrays.asList(
34
34
  KlarnaEventHandlerEventsUtil.EVENT_NAME_ON_EVENT,
35
35
  KlarnaEventHandlerEventsUtil.EVENT_NAME_ON_ERROR,
36
- EVENT_NAME_ON_RESIZED
36
+ EVENT_NAME_ON_RESIZED,
37
+ EVENT_NAME_ON_CHECKOUT_VIEW_READY
37
38
  );
38
39
  }
39
40
 
@@ -53,4 +54,8 @@ public class KlarnaCheckoutViewEventSender extends ComponentEventSender<ResizeOb
53
54
  );
54
55
  postEventForView(view, EVENT_NAME_ON_RESIZED, params);
55
56
  }
57
+
58
+ public void sendOnKlarnaCheckoutViewReadyEvent(@Nullable KlarnaCheckoutView view) {
59
+ postEventForView(view, EVENT_NAME_ON_CHECKOUT_VIEW_READY, null);
60
+ }
56
61
  }
@@ -1,6 +1,8 @@
1
1
  package com.klarna.mobile.sdk.reactnative.checkout;
2
2
 
3
3
  import android.os.Handler;
4
+ import android.os.Looper;
5
+ import android.view.View;
4
6
 
5
7
  import androidx.annotation.NonNull;
6
8
  import androidx.annotation.Nullable;
@@ -12,7 +14,6 @@ import com.facebook.react.uimanager.ThemedReactContext;
12
14
  import com.facebook.react.uimanager.UIManagerHelper;
13
15
  import com.facebook.react.uimanager.annotations.ReactProp;
14
16
  import com.facebook.react.uimanager.events.EventDispatcher;
15
- import com.klarna.mobile.sdk.api.KlarnaLoggingLevel;
16
17
  import com.klarna.mobile.sdk.api.checkout.KlarnaCheckoutView;
17
18
  import com.klarna.mobile.sdk.reactnative.common.WebViewResizeObserver;
18
19
  import com.klarna.mobile.sdk.reactnative.common.ui.ResizeObserverWrapperView;
@@ -41,13 +42,15 @@ public class KlarnaCheckoutViewManager extends RNKlarnaCheckoutViewSpec<ResizeOb
41
42
 
42
43
  private final KlarnaCheckoutViewEventSender eventSender;
43
44
  private final KlarnaCheckoutViewEventHandler eventHandler;
45
+ private Runnable javascriptInterfaceInjectionRunnable;
46
+ private final Handler handler = new Handler(Looper.getMainLooper());
44
47
 
45
48
  public KlarnaCheckoutViewManager(ReactApplicationContext reactApplicationContext) {
46
49
  super();
47
- this.viewToDispatcher = new HashMap<>();
48
- this.reactAppContext = reactApplicationContext;
49
- this.eventSender = new KlarnaCheckoutViewEventSender(viewToDispatcher);
50
- this.eventHandler = new KlarnaCheckoutViewEventHandler(eventSender);
50
+ viewToDispatcher = new HashMap<>();
51
+ reactAppContext = reactApplicationContext;
52
+ eventSender = new KlarnaCheckoutViewEventSender(viewToDispatcher);
53
+ eventHandler = new KlarnaCheckoutViewEventHandler(eventSender);
51
54
  }
52
55
 
53
56
  @NonNull
@@ -60,7 +63,6 @@ public class KlarnaCheckoutViewManager extends RNKlarnaCheckoutViewSpec<ResizeOb
60
63
  @Override
61
64
  protected ResizeObserverWrapperView<KlarnaCheckoutView> createViewInstance(@NonNull ThemedReactContext themedReactContext) {
62
65
  KlarnaCheckoutView klarnaCheckoutView = new KlarnaCheckoutView(reactAppContext.getCurrentActivity(), null, 0, eventHandler);
63
- klarnaCheckoutView.setLoggingLevel(KlarnaLoggingLevel.Verbose);
64
66
  ResizeObserverWrapperView<KlarnaCheckoutView> view = new ResizeObserverWrapperView<>(reactAppContext, null, klarnaCheckoutView);
65
67
 
66
68
  // Each view has its own event dispatcher.
@@ -68,15 +70,24 @@ public class KlarnaCheckoutViewManager extends RNKlarnaCheckoutViewSpec<ResizeOb
68
70
  viewToDispatcher.put(new WeakReference<>(view), eventDispatcher);
69
71
 
70
72
  view.initiateWebViewResizeObserver(WebViewResizeObserver.TargetElement.CHECKOUT_CONTAINER, (resizeObserverWrapperView, newHeight) -> {
71
- if (resizeObserverWrapperView == null) {
72
- return;
73
- }
74
- if (eventDispatcher == null) {
73
+ if (resizeObserverWrapperView == null || eventDispatcher == null) {
75
74
  return;
76
75
  }
77
76
  eventSender.sendOnResizedEvent(resizeObserverWrapperView.getView(), newHeight);
78
77
  });
79
- view.addInterfaceToWebView();
78
+ view.addJavascriptInterfaceToWebView();
79
+
80
+ view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
81
+ @Override
82
+ public void onViewAttachedToWindow(@NonNull View v) {
83
+ eventSender.sendOnKlarnaCheckoutViewReadyEvent(view.getView());
84
+ v.removeOnAttachStateChangeListener(this);
85
+ }
86
+
87
+ @Override
88
+ public void onViewDetachedFromWindow(@NonNull View v) {
89
+ }
90
+ });
80
91
 
81
92
  return view;
82
93
  }
@@ -128,20 +139,42 @@ public class KlarnaCheckoutViewManager extends RNKlarnaCheckoutViewSpec<ResizeOb
128
139
 
129
140
  @Override
130
141
  public void setSnippet(ResizeObserverWrapperView<KlarnaCheckoutView> view, String snippet) {
131
- view.getView().setSnippet(snippet);
132
- view.addInterfaceToWebView();
133
- // Delay the injection of the resize observer to ensure the web view is ready
134
- final Handler handler = new Handler();
135
- handler.postDelayed(view::injectListenerToWebView, 500);
142
+ if (view == null) {
143
+ return;
144
+ }
145
+
146
+ KlarnaCheckoutView klarnaCheckoutView = view.getView();
147
+ if (klarnaCheckoutView == null) {
148
+ return;
149
+ }
150
+
151
+ if (snippet == null || snippet.isEmpty()) {
152
+ return;
153
+ }
154
+
155
+ klarnaCheckoutView.setSnippet(snippet);
156
+ view.addJavascriptInterfaceToWebView();
157
+
158
+ if (javascriptInterfaceInjectionRunnable != null) {
159
+ handler.removeCallbacks(javascriptInterfaceInjectionRunnable);
160
+ }
161
+ javascriptInterfaceInjectionRunnable = view::injectListenerToWebView;
162
+ handler.postDelayed(javascriptInterfaceInjectionRunnable, 500);
136
163
  }
137
164
 
138
165
  @Override
139
166
  public void suspend(ResizeObserverWrapperView<KlarnaCheckoutView> view) {
140
- view.getView().suspend();
167
+ KlarnaCheckoutView klarnaCheckoutView = view.getView();
168
+ if (klarnaCheckoutView != null) {
169
+ klarnaCheckoutView.suspend();
170
+ }
141
171
  }
142
172
 
143
173
  @Override
144
174
  public void resume(ResizeObserverWrapperView<KlarnaCheckoutView> view) {
145
- view.getView().resume();
175
+ KlarnaCheckoutView klarnaCheckoutView = view.getView();
176
+ if (klarnaCheckoutView != null) {
177
+ klarnaCheckoutView.resume();
178
+ }
146
179
  }
147
180
  }
@@ -29,8 +29,10 @@ public class WebViewResizeObserver {
29
29
  this.targetElement = targetElement;
30
30
  }
31
31
 
32
- public void addInterface(WebView webView) {
33
- webView.addJavascriptInterface(this, JS_INTERFACE_NAME);
32
+ public void addJavascriptInterface(WebView webView) {
33
+ if (webView != null) {
34
+ webView.addJavascriptInterface(this, JS_INTERFACE_NAME);
35
+ }
34
36
  }
35
37
 
36
38
  public void injectListener(WebView webView) {
@@ -62,12 +64,12 @@ public class WebViewResizeObserver {
62
64
  }
63
65
 
64
66
  private void injectScript(WebView webView, String script) {
65
- String tryCatchScript = "try {\n" +
67
+ String scriptWrappedInTryCatch = "try {\n" +
66
68
  " " + script + "\n" +
67
69
  "} catch (error) {\n" +
68
70
  " console.error(\"inject failed\")\n" +
69
71
  "}";
70
- evaluateJSCompat(webView, tryCatchScript);
72
+ evaluateJSCompat(webView, scriptWrappedInTryCatch);
71
73
  }
72
74
 
73
75
  /**
@@ -77,6 +79,9 @@ public class WebViewResizeObserver {
77
79
  * @param script The script to be evaluated
78
80
  */
79
81
  private void evaluateJSCompat(WebView webView, String script) {
82
+ if (webView == null) {
83
+ return;
84
+ }
80
85
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
81
86
  webView.evaluateJavascript(script, null);
82
87
  } else {
@@ -49,10 +49,10 @@ public class ResizeObserverWrapperView<T extends ViewGroup> extends WrapperView<
49
49
  this.webViewResizeObserver = new WebViewResizeObserver(webViewResizeObserverCallback, targetElement);
50
50
  }
51
51
 
52
- public void addInterfaceToWebView() {
52
+ public void addJavascriptInterfaceToWebView() {
53
53
  WebView webView = findWebView(getView());
54
54
  if (webView != null && webViewResizeObserver != null) {
55
- webViewResizeObserver.addInterface(webView);
55
+ webViewResizeObserver.addJavascriptInterface(webView);
56
56
  }
57
57
  }
58
58
 
@@ -63,6 +63,7 @@ public class ResizeObserverWrapperView<T extends ViewGroup> extends WrapperView<
63
63
  }
64
64
  }
65
65
 
66
+ @Nullable
66
67
  private WebView findWebView(T view) {
67
68
  if (view == null) {
68
69
  return null;
@@ -36,7 +36,7 @@ public class PaymentViewWrapper extends LinearLayout implements WebViewResizeObs
36
36
  resizeObserver = new WebViewResizeObserver(this, WebViewResizeObserver.TargetElement.PAYMENT_CONTAINER);
37
37
  WebView webView = getPaymentViewWebView();
38
38
  if (webView != null) {
39
- resizeObserver.addInterface(webView);
39
+ resizeObserver.addJavascriptInterface(webView);
40
40
  }
41
41
  }
42
42
 
@@ -1,20 +1,21 @@
1
- #import "KlarnaCheckoutViewManager.h"
2
-
3
1
  #import <React/RCTUIManager.h>
4
2
  #import <React/RCTLog.h>
5
-
3
+ #import "KlarnaCheckoutViewManager.h"
6
4
  #import "view/KlarnaCheckoutViewWrapper.h"
7
5
 
8
6
  @implementation KlarnaCheckoutViewManager
9
7
 
10
8
  RCT_EXPORT_MODULE(RNKlarnaCheckoutView)
11
9
 
12
- #pragma mark - View
10
+ #pragma mark - View Properties
13
11
 
14
12
  RCT_EXPORT_VIEW_PROPERTY(returnUrl, NSString)
15
13
  RCT_EXPORT_VIEW_PROPERTY(onEvent, RCTDirectEventBlock)
16
14
  RCT_EXPORT_VIEW_PROPERTY(onError, RCTDirectEventBlock)
17
15
  RCT_EXPORT_VIEW_PROPERTY(onResized, RCTDirectEventBlock)
16
+ RCT_EXPORT_VIEW_PROPERTY(onCheckoutViewReady, RCTDirectEventBlock)
17
+
18
+ #pragma mark - View Creation
18
19
 
19
20
  - (UIView *)view
20
21
  {
@@ -23,39 +24,46 @@ RCT_EXPORT_VIEW_PROPERTY(onResized, RCTDirectEventBlock)
23
24
  return wrapper;
24
25
  }
25
26
 
26
- #pragma mark - Exported Methods
27
+ #pragma mark - Exported Methods to React Native
27
28
 
28
- RCT_EXPORT_METHOD(setSnippet:(nonnull NSNumber*)reactTag snippet:(NSString*)snippet) {
29
- [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) {
30
- KlarnaCheckoutViewWrapper* view = (KlarnaCheckoutViewWrapper*) viewRegistry[reactTag];
31
- if (!view || ![view isKindOfClass:KlarnaCheckoutViewWrapper.class]) {
32
- RCTLogError(@"Can't find KlarnaCheckoutViewWrapper with tag #%@", reactTag);
33
- return;
29
+ RCT_EXPORT_METHOD(setSnippet:(nonnull NSNumber *)reactTag snippet:(NSString *)snippet)
30
+ {
31
+ [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
32
+ KlarnaCheckoutViewWrapper *view = [self checkoutViewWrapperForTag:reactTag fromRegistry:viewRegistry];
33
+ if (view) {
34
+ [view setSnippet:snippet];
34
35
  }
35
- [view setSnippet:snippet];
36
36
  }];
37
37
  }
38
38
 
39
- RCT_EXPORT_METHOD(suspend:(nonnull NSNumber*)reactTag) {
39
+ RCT_EXPORT_METHOD(suspend:(nonnull NSNumber *)reactTag) {
40
40
  [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) {
41
- KlarnaCheckoutViewWrapper* view = (KlarnaCheckoutViewWrapper*) viewRegistry[reactTag];
42
- if (!view || ![view isKindOfClass:KlarnaCheckoutViewWrapper.class]) {
43
- RCTLogError(@"Can't find KlarnaCheckoutViewWrapper with tag #%@", reactTag);
44
- return;
41
+ KlarnaCheckoutViewWrapper *view = [self checkoutViewWrapperForTag:reactTag fromRegistry:viewRegistry];
42
+ if (view) {
43
+ [view suspend];
45
44
  }
46
- [view suspend];
47
45
  }];
48
46
  }
49
47
 
50
- RCT_EXPORT_METHOD(resume:(nonnull NSNumber*)reactTag) {
48
+ RCT_EXPORT_METHOD(resume:(nonnull NSNumber *)reactTag) {
51
49
  [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) {
52
- KlarnaCheckoutViewWrapper* view = (KlarnaCheckoutViewWrapper*) viewRegistry[reactTag];
53
- if (!view || ![view isKindOfClass:KlarnaCheckoutViewWrapper.class]) {
54
- RCTLogError(@"Can't find KlarnaCheckoutViewWrapper with tag #%@", reactTag);
55
- return;
50
+ KlarnaCheckoutViewWrapper *view = [self checkoutViewWrapperForTag:reactTag fromRegistry:viewRegistry];
51
+ if (view) {
52
+ [view resume];
56
53
  }
57
- [view resume];
58
54
  }];
59
55
  }
60
56
 
57
+ #pragma mark - Private Helper Methods
58
+
59
+ - (KlarnaCheckoutViewWrapper *)checkoutViewWrapperForTag:(NSNumber *)reactTag fromRegistry:(NSDictionary<NSNumber *, UIView *> *)viewRegistry
60
+ {
61
+ UIView *view = viewRegistry[reactTag];
62
+ if (!view || ![view isKindOfClass:[KlarnaCheckoutViewWrapper class]]) {
63
+ RCTLogError(@"Can't find KlarnaCheckoutViewWrapper with tag #%@", reactTag);
64
+ return nil;
65
+ }
66
+ return (KlarnaCheckoutViewWrapper *)view;
67
+ }
68
+
61
69
  @end
@@ -8,10 +8,8 @@
8
8
  #import <React/RCTView.h>
9
9
  #endif
10
10
 
11
-
12
11
  NS_ASSUME_NONNULL_BEGIN
13
12
 
14
-
15
13
  #if RCT_NEW_ARCH_ENABLED
16
14
  @interface KlarnaCheckoutViewWrapper : RCTViewComponentView
17
15
  #else
@@ -20,6 +18,7 @@ NS_ASSUME_NONNULL_BEGIN
20
18
  @property (nonatomic, copy) RCTDirectEventBlock onEvent;
21
19
  @property (nonatomic, copy) RCTDirectEventBlock onError;
22
20
  @property (nonatomic, copy) RCTDirectEventBlock onResized;
21
+ @property (nonatomic, copy) RCTDirectEventBlock onCheckoutViewReady;
23
22
 
24
23
  @property (nonatomic, strong) NSString* returnUrl;
25
24
 
@@ -38,5 +37,4 @@ NS_ASSUME_NONNULL_BEGIN
38
37
 
39
38
  @end
40
39
 
41
-
42
40
  NS_ASSUME_NONNULL_END
@@ -1,35 +1,34 @@
1
1
  #if RCT_NEW_ARCH_ENABLED
2
2
 
3
- #import "../KlarnaCheckoutViewWrapper.h"
4
- #import "../../common/RNMobileSDKUtils.h"
5
-
6
3
  #import <AVFoundation/AVFoundation.h>
7
- #import <KlarnaMobileSDK/KlarnaMobileSDK-Swift.h>
8
4
  #import <React/RCTLog.h>
9
-
10
5
  #import <react/renderer/components/RNKlarnaMobileSDK/ComponentDescriptors.h>
11
6
  #import <react/renderer/components/RNKlarnaMobileSDK/EventEmitters.h>
12
7
  #import <react/renderer/components/RNKlarnaMobileSDK/Props.h>
13
8
  #import <react/renderer/components/RNKlarnaMobileSDK/RCTComponentViewHelpers.h>
14
-
9
+ #import "../KlarnaCheckoutViewWrapper.h"
10
+ #import "../../common/RNMobileSDKUtils.h"
15
11
  #import "RCTFabricComponentsPlugins.h"
12
+ #import <KlarnaMobileSDK/KlarnaMobileSDK-Swift.h>
16
13
 
17
14
  using namespace facebook::react;
18
15
 
19
16
  @interface KlarnaCheckoutViewWrapper () <KlarnaEventHandler, KlarnaSizingDelegate, RCTRNKlarnaCheckoutViewViewProtocol>
20
17
 
21
- @property (nonatomic, strong) KlarnaCheckoutView* actualCheckoutView;
18
+ @property (nonatomic, strong) KlarnaCheckoutView* klarnaCheckoutView;
19
+ @property (nonatomic, assign) BOOL isCheckoutViewReadyEventSent;
22
20
 
23
21
  @end
24
22
 
25
23
  @implementation KlarnaCheckoutViewWrapper
26
24
 
27
- #pragma mark - RN Klarna Checout View
25
+ #pragma mark - Initialization
28
26
 
29
27
  - (instancetype)initWithFrame:(CGRect)frame
30
28
  {
31
29
  self = [super initWithFrame:frame];
32
30
  if (self) {
31
+ self.isCheckoutViewReadyEventSent = NO;
33
32
  static const auto defaultProps = std::make_shared<const RNKlarnaCheckoutViewProps>();
34
33
  _props = defaultProps;
35
34
  }
@@ -51,7 +50,7 @@ Class<RCTComponentViewProtocol> RNKlarnaCheckoutViewCls(void)
51
50
  RCTRNKlarnaCheckoutViewHandleCommand(self, commandName, args);
52
51
  }
53
52
 
54
- #pragma mark - RN Klarna Checout View Props
53
+ #pragma mark - KlarnaCheckoutView Props Update
55
54
 
56
55
  - (void)updateProps:(const facebook::react::Props::Shared &)props oldProps:(const facebook::react::Props::Shared &)oldProps {
57
56
  const auto &oldViewProps = *std::static_pointer_cast<RNKlarnaCheckoutViewProps const>(_props);
@@ -59,45 +58,70 @@ Class<RCTComponentViewProtocol> RNKlarnaCheckoutViewCls(void)
59
58
 
60
59
  if (oldViewProps.returnUrl != newViewProps.returnUrl) {
61
60
  NSString * newReturnUrl = [[NSString alloc] initWithUTF8String: newViewProps.returnUrl.c_str()];
62
- if (self.actualCheckoutView != nil) {
63
- self.actualCheckoutView.returnURL = [NSURL URLWithString:newReturnUrl];
61
+ if (self.klarnaCheckoutView != nil) {
62
+ self.klarnaCheckoutView.returnURL = [NSURL URLWithString:newReturnUrl];
64
63
  } else {
65
- [self initializeActualCheckoutView:newReturnUrl];
64
+ [self initializeKlarnaCheckoutView:newReturnUrl];
66
65
  }
67
66
  }
68
67
 
69
68
  [super updateProps:props oldProps:oldProps];
70
69
  }
71
70
 
71
+ - (void)updateEventEmitter:(const facebook::react::EventEmitter::Shared &)eventEmitter
72
+ {
73
+ [super updateEventEmitter:eventEmitter];
72
74
 
73
- #pragma mark - RN Klarna Checout View Methods
75
+ if (!self.isCheckoutViewReadyEventSent && self.klarnaCheckoutView != nil && _eventEmitter) {
76
+ RCTLogInfo(@"Sending onCheckoutViewReady event.");
77
+ std::dynamic_pointer_cast<const RNKlarnaCheckoutViewEventEmitter>(_eventEmitter)
78
+ ->onCheckoutViewReady({});
79
+ self.isCheckoutViewReadyEventSent = YES;
80
+ } else {
81
+ RCTLogInfo(@"Could not send onCheckoutViewReady event.");
82
+ }
83
+ }
74
84
 
75
- - (void)initializeActualCheckoutView:(NSString*)returnUrl {
76
- self.actualCheckoutView = [[KlarnaCheckoutView alloc] initWithReturnURL:[NSURL URLWithString:returnUrl] eventHandler:self];
77
- self.actualCheckoutView.sizingDelegate = self;
85
+ #pragma mark - KlarnaCheckoutView Setup
86
+
87
+ - (void)initializeKlarnaCheckoutView:(NSString*)returnUrl {
88
+ self.isCheckoutViewReadyEventSent = NO;
89
+ self.klarnaCheckoutView = [[KlarnaCheckoutView alloc] initWithReturnURL:[NSURL URLWithString:returnUrl] eventHandler:self];
90
+ self.klarnaCheckoutView.sizingDelegate = self;
78
91
 
79
- self.actualCheckoutView.translatesAutoresizingMaskIntoConstraints = NO;
92
+ self.klarnaCheckoutView.translatesAutoresizingMaskIntoConstraints = NO;
80
93
 
81
- [self addSubview:self.actualCheckoutView];
94
+ [self addSubview:self.klarnaCheckoutView];
82
95
 
83
96
  [NSLayoutConstraint activateConstraints:[[NSArray alloc] initWithObjects:
84
- [self.actualCheckoutView.topAnchor constraintEqualToAnchor:self.topAnchor],
85
- [self.actualCheckoutView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
86
- [self.actualCheckoutView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],
87
- [self.actualCheckoutView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], nil
97
+ [self.klarnaCheckoutView.topAnchor constraintEqualToAnchor:self.topAnchor],
98
+ [self.klarnaCheckoutView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
99
+ [self.klarnaCheckoutView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],
100
+ [self.klarnaCheckoutView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], nil
88
101
  ]];
89
102
  }
90
103
 
104
+ #pragma mark - Methods Exposed to React Native
105
+
91
106
  - (void)setSnippet:(NSString *)snippet {
92
- [self.actualCheckoutView setSnippet:snippet];
107
+ [self.klarnaCheckoutView setSnippet:snippet];
93
108
  }
94
109
 
95
110
  - (void)suspend {
96
- [self.actualCheckoutView suspend];
111
+ [self.klarnaCheckoutView suspend];
97
112
  }
98
113
 
99
114
  - (void)resume {
100
- [self.actualCheckoutView resume];
115
+ [self.klarnaCheckoutView resume];
116
+ }
117
+
118
+ #pragma mark - UIView Lifecycle
119
+
120
+ - (void)didMoveToWindow {
121
+ [super didMoveToWindow];
122
+ if (!self.window) {
123
+ self.isCheckoutViewReadyEventSent = NO;
124
+ }
101
125
  }
102
126
 
103
127
  #pragma mark - KlarnaEventHandler
@@ -114,13 +138,13 @@ Class<RCTComponentViewProtocol> RNKlarnaCheckoutViewCls(void)
114
138
  }
115
139
  });
116
140
  } else {
117
- RCTLogInfo(@"_eventEmitter is nil!");
141
+ RCTLogInfo(@"Could not send onEvent event. _eventEmitter is nil!");
118
142
  }
119
143
  }
120
144
 
121
145
  - (void)klarnaComponent:(id<KlarnaComponent>)klarnaComponent encounteredError:(KlarnaError *)error {
122
146
  if (_eventEmitter) {
123
- RCTLogInfo(@"Sending onEvent event");
147
+ RCTLogInfo(@"Sending onError event");
124
148
  std::dynamic_pointer_cast<const RNKlarnaCheckoutViewEventEmitter>(_eventEmitter)
125
149
  ->onError(RNKlarnaCheckoutViewEventEmitter::OnError{
126
150
  .error = {
@@ -130,7 +154,7 @@ Class<RCTComponentViewProtocol> RNKlarnaCheckoutViewCls(void)
130
154
  }
131
155
  });
132
156
  } else {
133
- RCTLogInfo(@"_eventEmitter is nil!");
157
+ RCTLogInfo(@"Could not send onError event. _eventEmitter is nil!");
134
158
  }
135
159
  }
136
160
 
@@ -144,7 +168,7 @@ Class<RCTComponentViewProtocol> RNKlarnaCheckoutViewCls(void)
144
168
  .height = std::string([[[NSNumber numberWithFloat:height] stringValue] UTF8String]),
145
169
  });
146
170
  } else {
147
- RCTLogInfo(@"_eventEmitter is nil!");
171
+ RCTLogInfo(@"Could not send onResized event. _eventEmitter is nil!");
148
172
  }
149
173
  }
150
174
 
@@ -1,25 +1,36 @@
1
1
  #if !RCT_NEW_ARCH_ENABLED
2
2
 
3
+ #import <React/RCTLog.h>
3
4
  #import "../KlarnaCheckoutViewWrapper.h"
4
5
  #import "../../common/RNMobileSDKUtils.h"
5
-
6
6
  #import <KlarnaMobileSDK/KlarnaMobileSDK-Swift.h>
7
- #import <React/RCTLog.h>
8
7
 
9
8
  @interface KlarnaCheckoutViewWrapper () <KlarnaEventHandler, KlarnaSizingDelegate>
10
9
 
11
- @property (nonatomic, strong) KlarnaCheckoutView* actualCheckoutView;
10
+ @property (nonatomic, strong) KlarnaCheckoutView* klarnaCheckoutView;
11
+ @property (nonatomic, assign) BOOL isCheckoutViewReadyEventSent;
12
12
 
13
13
  @end
14
14
 
15
15
  @implementation KlarnaCheckoutViewWrapper
16
16
 
17
- #pragma mark - React Native Overrides
17
+ #pragma mark - Initialization
18
+
19
+ - (instancetype)initWithFrame:(CGRect)frame
20
+ {
21
+ self = [super initWithFrame:frame];
22
+ if (self) {
23
+ self.isCheckoutViewReadyEventSent = NO;
24
+ }
25
+ return self;
26
+ }
27
+
28
+ #pragma mark - React Native Property Setters
18
29
 
19
30
  - (void) setReturnUrl:(NSString *)returnUrl {
20
31
  _returnUrl = returnUrl;
21
32
  if (returnUrl.length > 0) {
22
- self.actualCheckoutView.returnURL = [NSURL URLWithString:self.returnUrl];
33
+ self.klarnaCheckoutView.returnURL = [NSURL URLWithString:self.returnUrl];
23
34
  }
24
35
  [self evaluateProps];
25
36
  }
@@ -28,43 +39,70 @@
28
39
  [self initializeActualCheckoutView];
29
40
  }
30
41
 
42
+ #pragma mark - KlarnaCheckoutView Setup
43
+
31
44
  - (void) initializeActualCheckoutView {
32
- self.actualCheckoutView = [[KlarnaCheckoutView alloc] initWithReturnURL:[NSURL URLWithString:self.returnUrl] eventHandler:self];
33
- self.actualCheckoutView.sizingDelegate = self;
45
+ self.isCheckoutViewReadyEventSent = NO;
46
+ self.klarnaCheckoutView = [[KlarnaCheckoutView alloc] initWithReturnURL:[NSURL URLWithString:self.returnUrl] eventHandler:self];
47
+ self.klarnaCheckoutView.sizingDelegate = self;
34
48
 
35
- self.actualCheckoutView.translatesAutoresizingMaskIntoConstraints = NO;
49
+ self.klarnaCheckoutView.translatesAutoresizingMaskIntoConstraints = NO;
36
50
 
37
- [self addSubview:self.actualCheckoutView];
51
+ [self addSubview:self.klarnaCheckoutView];
38
52
 
39
53
  [NSLayoutConstraint activateConstraints:[[NSArray alloc] initWithObjects:
40
- [self.actualCheckoutView.topAnchor constraintEqualToAnchor:self.topAnchor],
41
- [self.actualCheckoutView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
42
- [self.actualCheckoutView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],
43
- [self.actualCheckoutView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], nil
54
+ [self.klarnaCheckoutView.topAnchor constraintEqualToAnchor:self.topAnchor],
55
+ [self.klarnaCheckoutView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
56
+ [self.klarnaCheckoutView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],
57
+ [self.klarnaCheckoutView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], nil
44
58
  ]];
45
59
  }
46
60
 
61
+ #pragma mark - Layout
62
+
47
63
  - (void)layoutSubviews {
48
64
  [super layoutSubviews];
49
- self.actualCheckoutView.frame = self.bounds;
50
- [self.actualCheckoutView layoutSubviews];
65
+ self.klarnaCheckoutView.frame = self.bounds;
66
+ [self.klarnaCheckoutView layoutSubviews];
67
+ }
68
+
69
+ #pragma mark - UIView Lifecycle
70
+
71
+ - (void)didMoveToWindow {
72
+ [super didMoveToWindow];
73
+ if (!self.window) {
74
+ self.isCheckoutViewReadyEventSent = NO;
75
+ }
76
+ }
77
+
78
+ #pragma mark - React Native Lifecycle
79
+
80
+ - (void)didSetProps:(NSArray<NSString *> *)changedProps {
81
+ [super didSetProps:changedProps];
82
+ [self sendCheckoutViewReadyEvent];
51
83
  }
52
84
 
53
- #pragma mark - KlarnaCheckoutView Methods
85
+ - (void)sendCheckoutViewReadyEvent {
86
+ if (self.klarnaCheckoutView && self.onCheckoutViewReady && !self.isCheckoutViewReadyEventSent) {
87
+ self.isCheckoutViewReadyEventSent = YES;
88
+ self.onCheckoutViewReady(@{});
89
+ }
90
+ }
91
+
92
+ #pragma mark - Methods Exposed to React Native
54
93
 
55
94
  - (void)setSnippet:(NSString *)snippet {
56
- [self.actualCheckoutView setSnippet:snippet];
95
+ [self.klarnaCheckoutView setSnippet:snippet];
57
96
  }
58
97
 
59
98
  - (void)suspend {
60
- [self.actualCheckoutView suspend];
99
+ [self.klarnaCheckoutView suspend];
61
100
  }
62
101
 
63
102
  - (void)resume {
64
- [self.actualCheckoutView resume];
103
+ [self.klarnaCheckoutView resume];
65
104
  }
66
105
 
67
-
68
106
  #pragma mark - KlarnaEventHandler
69
107
 
70
108
  - (void)klarnaComponent:(id<KlarnaComponent>)klarnaComponent dispatchedEvent:(KlarnaProductEvent *)event {
@@ -9,12 +9,15 @@ var _KlarnaCheckoutViewNativeComponent = _interopRequireWildcard(require("./spec
9
9
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10
10
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
11
11
  class KlarnaCheckoutView extends _react.Component {
12
+ snippet = null;
13
+ isCheckoutViewReady = false;
12
14
  constructor(props) {
13
15
  super(props);
14
16
  this.state = {
15
17
  nativeViewHeight: 0
16
18
  };
17
19
  this.checkoutViewRef = /*#__PURE__*/_react.default.createRef();
20
+ this.isCheckoutViewReady = false;
18
21
  }
19
22
  render() {
20
23
  return /*#__PURE__*/_react.default.createElement(_KlarnaCheckoutViewNativeComponent.default, {
@@ -57,24 +60,34 @@ class KlarnaCheckoutView extends _react.Component {
57
60
  nativeViewHeight: newHeight
58
61
  });
59
62
  }
63
+ },
64
+ onCheckoutViewReady: () => {
65
+ this.isCheckoutViewReady = true;
66
+ console.log('onCheckoutViewReady');
67
+ if (this.snippet) {
68
+ console.log('Setting the snippet...');
69
+ this.setSnippet(this.snippet);
70
+ this.snippet = null;
71
+ }
60
72
  }
61
73
  });
62
74
  }
63
75
  setSnippet = snippet => {
76
+ this.snippet = snippet;
64
77
  const view = this.checkoutViewRef.current;
65
- if (view != null) {
78
+ if (view != null && this.isCheckoutViewReady) {
66
79
  _KlarnaCheckoutViewNativeComponent.Commands.setSnippet(view, snippet);
67
80
  }
68
81
  };
69
82
  suspend = () => {
70
83
  const view = this.checkoutViewRef.current;
71
- if (view != null) {
84
+ if (view != null && this.isCheckoutViewReady) {
72
85
  _KlarnaCheckoutViewNativeComponent.Commands.suspend(view);
73
86
  }
74
87
  };
75
88
  resume = () => {
76
89
  const view = this.checkoutViewRef.current;
77
- if (view != null) {
90
+ if (view != null && this.isCheckoutViewReady) {
78
91
  _KlarnaCheckoutViewNativeComponent.Commands.resume(view);
79
92
  }
80
93
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_KlarnaCheckoutViewNativeComponent","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","KlarnaCheckoutView","Component","constructor","props","state","nativeViewHeight","checkoutViewRef","React","createRef","render","createElement","ref","style","width","height","flexShrink","returnUrl","onEvent","event","_this$props$onEvent","_this$props","params","JSON","parse","nativeEvent","productEvent","e","console","error","action","onError","_this$props$onError","_this$props2","mobileSdkError","isFatal","message","name","onResized","newHeight","Number","log","setState","setSnippet","snippet","view","current","RNKlarnaCheckoutViewCommands","suspend","resume","exports","_default"],"sourceRoot":"../../src","sources":["KlarnaCheckoutView.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAQA,IAAAC,kCAAA,GAAAF,uBAAA,CAAAC,OAAA;AAGmD,SAAAE,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAJ,wBAAAQ,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAa5C,MAAMW,kBAAkB,SAASC,gBAAS,CAG/C;EAKAC,WAAWA,CAACC,KAA8B,EAAE;IAC1C,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,KAAK,GAAG;MACXC,gBAAgB,EAAE;IACpB,CAAC;IACD,IAAI,CAACC,eAAe,gBAAGC,cAAK,CAACC,SAAS,CAAC,CAAC;EAC1C;EAEAC,MAAMA,CAAA,EAAG;IACP,oBACEnC,MAAA,CAAAW,OAAA,CAAAyB,aAAA,CAACjC,kCAAA,CAAAQ,OAAoB;MACnB0B,GAAG,EAAE,IAAI,CAACL;MACV;MACAM,KAAK,EAAE;QACLC,KAAK,EAAE,MAAM;QACbC,MAAM,EAAE,IAAI,CAACV,KAAK,CAACC,gBAAgB;QACnCU,UAAU,EAAE;MACd,CAAE;MACFC,SAAS,EAAE,IAAI,CAACb,KAAK,CAACa,SAAS,IAAI,EAAG;MACtCC,OAAO,EACLC,KAOC,IACE;QAAA,IAAAC,mBAAA,EAAAC,WAAA;QACH,IAAIC,MAAM,GAAG,CAAC,CAAC;QACf,IAAI;UACFA,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACL,KAAK,CAACM,WAAW,CAACC,YAAY,CAACJ,MAAM,CAAC;QAC5D,CAAC,CAAC,OAAOK,CAAC,EAAE;UACVC,OAAO,CAACC,KAAK,CAAC,qCAAqC,EAAEF,CAAC,CAAC;QACzD;QACA,MAAMD,YAAgC,GAAG;UACvCI,MAAM,EAAEX,KAAK,CAACM,WAAW,CAACC,YAAY,CAACI,MAAM;UAC7CR,MAAM,EAAEA;QACV,CAAC;QACD,CAAAF,mBAAA,IAAAC,WAAA,OAAI,CAACjB,KAAK,EAACc,OAAO,cAAAE,mBAAA,eAAlBA,mBAAA,CAAAtB,IAAA,CAAAuB,WAAA,EAAqBK,YAAY,CAAC;MACpC,CAAE;MACFK,OAAO,EACLZ,KAQC,IACE;QAAA,IAAAa,mBAAA,EAAAC,YAAA;QACH,MAAMC,cAAoC,GAAG;UAC3CC,OAAO,EAAEhB,KAAK,CAACM,WAAW,CAACI,KAAK,CAACM,OAAO;UACxCC,OAAO,EAAEjB,KAAK,CAACM,WAAW,CAACI,KAAK,CAACO,OAAO;UACxCC,IAAI,EAAElB,KAAK,CAACM,WAAW,CAACI,KAAK,CAACQ;QAChC,CAAC;QACD,CAAAL,mBAAA,IAAAC,YAAA,OAAI,CAAC7B,KAAK,EAAC2B,OAAO,cAAAC,mBAAA,eAAlBA,mBAAA,CAAAlC,IAAA,CAAAmC,YAAA,EAAqBC,cAAc,CAAC;MACtC,CAAE;MACFI,SAAS,EACPnB,KAIC,IACE;QACH,MAAMoB,SAAS,GAAGC,MAAM,CAACrB,KAAK,CAACM,WAAW,CAACV,MAAM,CAAC;QAClD,IAAIwB,SAAS,KAAK,IAAI,CAAClC,KAAK,CAACC,gBAAgB,EAAE;UAC7CsB,OAAO,CAACa,GAAG,CAAC,WAAW,EAAEF,SAAS,CAAC;UACnC,IAAI,CAACG,QAAQ,CAAC;YAAEpC,gBAAgB,EAAEiC;UAAU,CAAC,CAAC;QAChD;MACF;IAAE,CACH,CAAC;EAEN;EAEAI,UAAU,GAAIC,OAAe,IAAK;IAChC,MAAMC,IAAI,GAAG,IAAI,CAACtC,eAAe,CAACuC,OAAO;IACzC,IAAID,IAAI,IAAI,IAAI,EAAE;MAChBE,2CAA4B,CAACJ,UAAU,CAACE,IAAI,EAAED,OAAO,CAAC;IACxD;EACF,CAAC;EAEDI,OAAO,GAAGA,CAAA,KAAM;IACd,MAAMH,IAAI,GAAG,IAAI,CAACtC,eAAe,CAACuC,OAAO;IACzC,IAAID,IAAI,IAAI,IAAI,EAAE;MAChBE,2CAA4B,CAACC,OAAO,CAACH,IAAI,CAAC;IAC5C;EACF,CAAC;EAEDI,MAAM,GAAGA,CAAA,KAAM;IACb,MAAMJ,IAAI,GAAG,IAAI,CAACtC,eAAe,CAACuC,OAAO;IACzC,IAAID,IAAI,IAAI,IAAI,EAAE;MAChBE,2CAA4B,CAACE,MAAM,CAACJ,IAAI,CAAC;IAC3C;EACF,CAAC;AACH;AAACK,OAAA,CAAAjD,kBAAA,GAAAA,kBAAA;AAAA,IAAAkD,QAAA,GAEclD,kBAAkB;AAAAiD,OAAA,CAAAhE,OAAA,GAAAiE,QAAA"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_KlarnaCheckoutViewNativeComponent","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","KlarnaCheckoutView","Component","snippet","isCheckoutViewReady","constructor","props","state","nativeViewHeight","checkoutViewRef","React","createRef","render","createElement","ref","style","width","height","flexShrink","returnUrl","onEvent","event","_this$props$onEvent","_this$props","params","JSON","parse","nativeEvent","productEvent","e","console","error","action","onError","_this$props$onError","_this$props2","mobileSdkError","isFatal","message","name","onResized","newHeight","Number","log","setState","onCheckoutViewReady","setSnippet","view","current","RNKlarnaCheckoutViewCommands","suspend","resume","exports","_default"],"sourceRoot":"../../src","sources":["KlarnaCheckoutView.tsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["_codegenNativeCommands","_interopRequireDefault","require","_codegenNativeComponent","obj","__esModule","default","Commands","codegenNativeCommands","supportedCommands","exports","_default","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["specs/KlarnaCheckoutViewNativeComponent.ts"],"mappings":";;;;;;AAIA,IAAAA,sBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AA6CtF,MAAMG,QAA4C,GACvD,IAAAC,8BAAqB,EAAqC;EACxDC,iBAAiB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ;AACvD,CAAC,CAAC;AAACC,OAAA,CAAAH,QAAA,GAAAA,QAAA;AAAA,IAAAI,QAAA,GAEU,IAAAC,+BAAsB,EACnC,sBACF,CAAC;AAAAF,OAAA,CAAAJ,OAAA,GAAAK,QAAA"}
1
+ {"version":3,"names":["_codegenNativeCommands","_interopRequireDefault","require","_codegenNativeComponent","obj","__esModule","default","Commands","codegenNativeCommands","supportedCommands","exports","_default","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["specs/KlarnaCheckoutViewNativeComponent.ts"],"mappings":";;;;;;AAIA,IAAAA,sBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AA8CtF,MAAMG,QAA4C,GACvD,IAAAC,8BAAqB,EAAqC;EACxDC,iBAAiB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ;AACvD,CAAC,CAAC;AAACC,OAAA,CAAAH,QAAA,GAAAA,QAAA;AAAA,IAAAI,QAAA,GAEU,IAAAC,+BAAsB,EACnC,sBACF,CAAC;AAAAF,OAAA,CAAAJ,OAAA,GAAAK,QAAA"}
@@ -1,12 +1,15 @@
1
1
  import React, { Component } from 'react';
2
2
  import RNKlarnaCheckoutView, { Commands as RNKlarnaCheckoutViewCommands } from './specs/KlarnaCheckoutViewNativeComponent';
3
3
  export class KlarnaCheckoutView extends Component {
4
+ snippet = null;
5
+ isCheckoutViewReady = false;
4
6
  constructor(props) {
5
7
  super(props);
6
8
  this.state = {
7
9
  nativeViewHeight: 0
8
10
  };
9
11
  this.checkoutViewRef = /*#__PURE__*/React.createRef();
12
+ this.isCheckoutViewReady = false;
10
13
  }
11
14
  render() {
12
15
  return /*#__PURE__*/React.createElement(RNKlarnaCheckoutView, {
@@ -49,24 +52,34 @@ export class KlarnaCheckoutView extends Component {
49
52
  nativeViewHeight: newHeight
50
53
  });
51
54
  }
55
+ },
56
+ onCheckoutViewReady: () => {
57
+ this.isCheckoutViewReady = true;
58
+ console.log('onCheckoutViewReady');
59
+ if (this.snippet) {
60
+ console.log('Setting the snippet...');
61
+ this.setSnippet(this.snippet);
62
+ this.snippet = null;
63
+ }
52
64
  }
53
65
  });
54
66
  }
55
67
  setSnippet = snippet => {
68
+ this.snippet = snippet;
56
69
  const view = this.checkoutViewRef.current;
57
- if (view != null) {
70
+ if (view != null && this.isCheckoutViewReady) {
58
71
  RNKlarnaCheckoutViewCommands.setSnippet(view, snippet);
59
72
  }
60
73
  };
61
74
  suspend = () => {
62
75
  const view = this.checkoutViewRef.current;
63
- if (view != null) {
76
+ if (view != null && this.isCheckoutViewReady) {
64
77
  RNKlarnaCheckoutViewCommands.suspend(view);
65
78
  }
66
79
  };
67
80
  resume = () => {
68
81
  const view = this.checkoutViewRef.current;
69
- if (view != null) {
82
+ if (view != null && this.isCheckoutViewReady) {
70
83
  RNKlarnaCheckoutViewCommands.resume(view);
71
84
  }
72
85
  };
@@ -1 +1 @@
1
- {"version":3,"names":["React","Component","RNKlarnaCheckoutView","Commands","RNKlarnaCheckoutViewCommands","KlarnaCheckoutView","constructor","props","state","nativeViewHeight","checkoutViewRef","createRef","render","createElement","ref","style","width","height","flexShrink","returnUrl","onEvent","event","_this$props$onEvent","_this$props","params","JSON","parse","nativeEvent","productEvent","e","console","error","action","call","onError","_this$props$onError","_this$props2","mobileSdkError","isFatal","message","name","onResized","newHeight","Number","log","setState","setSnippet","snippet","view","current","suspend","resume"],"sourceRoot":"../../src","sources":["KlarnaCheckoutView.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["React","Component","RNKlarnaCheckoutView","Commands","RNKlarnaCheckoutViewCommands","KlarnaCheckoutView","snippet","isCheckoutViewReady","constructor","props","state","nativeViewHeight","checkoutViewRef","createRef","render","createElement","ref","style","width","height","flexShrink","returnUrl","onEvent","event","_this$props$onEvent","_this$props","params","JSON","parse","nativeEvent","productEvent","e","console","error","action","call","onError","_this$props$onError","_this$props2","mobileSdkError","isFatal","message","name","onResized","newHeight","Number","log","setState","onCheckoutViewReady","setSnippet","view","current","suspend","resume"],"sourceRoot":"../../src","sources":["KlarnaCheckoutView.tsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["codegenNativeCommands","codegenNativeComponent","Commands","supportedCommands"],"sourceRoot":"../../../src","sources":["specs/KlarnaCheckoutViewNativeComponent.ts"],"mappings":"AAIA,OAAOA,qBAAqB,MAAM,wDAAwD;AAC1F,OAAOC,sBAAsB,MAAM,yDAAyD;AA6C5F,OAAO,MAAMC,QAA4C,GACvDF,qBAAqB,CAAqC;EACxDG,iBAAiB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ;AACvD,CAAC,CAAC;AAEJ,eAAeF,sBAAsB,CACnC,sBACF,CAAC"}
1
+ {"version":3,"names":["codegenNativeCommands","codegenNativeComponent","Commands","supportedCommands"],"sourceRoot":"../../../src","sources":["specs/KlarnaCheckoutViewNativeComponent.ts"],"mappings":"AAIA,OAAOA,qBAAqB,MAAM,wDAAwD;AAC1F,OAAOC,sBAAsB,MAAM,yDAAyD;AA8C5F,OAAO,MAAMC,QAA4C,GACvDF,qBAAqB,CAAqC;EACxDG,iBAAiB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ;AACvD,CAAC,CAAC;AAEJ,eAAeF,sBAAsB,CACnC,sBACF,CAAC"}
@@ -14,6 +14,8 @@ interface KlarnaCheckoutViewState {
14
14
  }
15
15
  export declare class KlarnaCheckoutView extends Component<KlarnaCheckoutViewProps, KlarnaCheckoutViewState> {
16
16
  checkoutViewRef: RefObject<Component<RNKlarnaCheckoutViewProps> & Readonly<NativeMethods>>;
17
+ private snippet;
18
+ private isCheckoutViewReady;
17
19
  constructor(props: KlarnaCheckoutViewProps);
18
20
  render(): React.JSX.Element;
19
21
  setSnippet: (snippet: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"KlarnaCheckoutView.d.ts","sourceRoot":"","sources":["../../src/KlarnaCheckoutView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EACV,aAAa,EAEb,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAA6B,EAE3B,KAAK,yBAAyB,EAC/B,MAAM,2CAA2C,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC1D;AAED,UAAU,uBAAuB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,kBAAmB,SAAQ,SAAS,CAC/C,uBAAuB,EACvB,uBAAuB,CACxB;IACC,eAAe,EAAE,SAAS,CACxB,SAAS,CAAC,yBAAyB,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAC/D,CAAC;gBAEU,KAAK,EAAE,uBAAuB;IAQ1C,MAAM;IAoEN,UAAU,YAAa,MAAM,UAK3B;IAEF,OAAO,aAKL;IAEF,MAAM,aAKJ;CACH;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"KlarnaCheckoutView.d.ts","sourceRoot":"","sources":["../../src/KlarnaCheckoutView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EACV,aAAa,EAEb,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAA6B,EAE3B,KAAK,yBAAyB,EAC/B,MAAM,2CAA2C,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC1D;AAED,UAAU,uBAAuB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,kBAAmB,SAAQ,SAAS,CAC/C,uBAAuB,EACvB,uBAAuB,CACxB;IACC,eAAe,EAAE,SAAS,CACxB,SAAS,CAAC,yBAAyB,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAC/D,CAAC;IACF,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,mBAAmB,CAAS;gBAExB,KAAK,EAAE,uBAAuB;IAS1C,MAAM;IA6EN,UAAU,YAAa,MAAM,UAM3B;IAEF,OAAO,aAKL;IAEF,MAAM,aAKJ;CACH;AAED,eAAe,kBAAkB,CAAC"}
@@ -20,6 +20,7 @@ export interface RNKlarnaCheckoutViewProps extends ViewProps {
20
20
  readonly onResized: DirectEventHandler<Readonly<{
21
21
  readonly height: string;
22
22
  }>>;
23
+ readonly onCheckoutViewReady?: DirectEventHandler<{}>;
23
24
  }
24
25
  type KlarnaCheckoutViewNativeComponentType = HostComponent<RNKlarnaCheckoutViewProps>;
25
26
  interface RNKlarnaCheckoutViewNativeCommands {
@@ -1 +1 @@
1
- {"version":3,"file":"KlarnaCheckoutViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/specs/KlarnaCheckoutViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sDAAsD,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,yBAA0B,SAAQ,SAAS;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAClC,QAAQ,CAAC;QACP,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;YAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;YACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;SACzB,CAAC,CAAC;KACJ,CAAC,CACH,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAClC,QAAQ,CAAC;QACP,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;YACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;YAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;SACvB,CAAC,CAAC;KACJ,CAAC,CACH,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CACpC,QAAQ,CAAC;QAEP,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC,CACH,CAAC;CACH;AAED,KAAK,qCAAqC,GACxC,aAAa,CAAC,yBAAyB,CAAC,CAAC;AAE3C,UAAU,kCAAkC;IAC1C,UAAU,EAAE,CACV,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,qCAAqC,CAAC,EAChE,OAAO,EAAE,MAAM,KACZ,IAAI,CAAC;IACV,OAAO,EAAE,CACP,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,qCAAqC,CAAC,KAC7D,IAAI,CAAC;IACV,MAAM,EAAE,CACN,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,qCAAqC,CAAC,KAC7D,IAAI,CAAC;CACX;AAED,eAAO,MAAM,QAAQ,EAAE,kCAGnB,CAAC;;AAEL,wBAE2C"}
1
+ {"version":3,"file":"KlarnaCheckoutViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/specs/KlarnaCheckoutViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sDAAsD,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,yBAA0B,SAAQ,SAAS;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAClC,QAAQ,CAAC;QACP,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;YAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;YACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;SACzB,CAAC,CAAC;KACJ,CAAC,CACH,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAClC,QAAQ,CAAC;QACP,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;YACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;YAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;SACvB,CAAC,CAAC;KACJ,CAAC,CACH,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CACpC,QAAQ,CAAC;QAEP,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC,CACH,CAAC;IACF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;CACvD;AAED,KAAK,qCAAqC,GACxC,aAAa,CAAC,yBAAyB,CAAC,CAAC;AAE3C,UAAU,kCAAkC;IAC1C,UAAU,EAAE,CACV,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,qCAAqC,CAAC,EAChE,OAAO,EAAE,MAAM,KACZ,IAAI,CAAC;IACV,OAAO,EAAE,CACP,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,qCAAqC,CAAC,KAC7D,IAAI,CAAC;IACV,MAAM,EAAE,CACN,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,qCAAqC,CAAC,KAC7D,IAAI,CAAC;CACX;AAED,eAAO,MAAM,QAAQ,EAAE,kCAGnB,CAAC;;AAEL,wBAE2C"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-klarna-inapp-sdk",
3
3
  "title": "Klarna Mobile SDK React Native",
4
- "version": "2.4.0",
4
+ "version": "2.4.2",
5
5
  "description": "This library wraps Klarna Mobile SDK and exposes its functionality as React Native components.",
6
6
  "main": "lib/commonjs/index",
7
7
  "module": "lib/module/index",
@@ -29,6 +29,8 @@ export class KlarnaCheckoutView extends Component<
29
29
  checkoutViewRef: RefObject<
30
30
  Component<RNKlarnaCheckoutViewProps> & Readonly<NativeMethods>
31
31
  >;
32
+ private snippet: string | null = null;
33
+ private isCheckoutViewReady = false;
32
34
 
33
35
  constructor(props: KlarnaCheckoutViewProps) {
34
36
  super(props);
@@ -36,6 +38,7 @@ export class KlarnaCheckoutView extends Component<
36
38
  nativeViewHeight: 0,
37
39
  };
38
40
  this.checkoutViewRef = React.createRef();
41
+ this.isCheckoutViewReady = false;
39
42
  }
40
43
 
41
44
  render() {
@@ -102,27 +105,37 @@ export class KlarnaCheckoutView extends Component<
102
105
  this.setState({ nativeViewHeight: newHeight });
103
106
  }
104
107
  }}
108
+ onCheckoutViewReady={() => {
109
+ this.isCheckoutViewReady = true;
110
+ console.log('onCheckoutViewReady');
111
+ if (this.snippet) {
112
+ console.log('Setting the snippet...');
113
+ this.setSnippet(this.snippet);
114
+ this.snippet = null;
115
+ }
116
+ }}
105
117
  />
106
118
  );
107
119
  }
108
120
 
109
121
  setSnippet = (snippet: string) => {
122
+ this.snippet = snippet;
110
123
  const view = this.checkoutViewRef.current;
111
- if (view != null) {
124
+ if (view != null && this.isCheckoutViewReady) {
112
125
  RNKlarnaCheckoutViewCommands.setSnippet(view, snippet);
113
126
  }
114
127
  };
115
128
 
116
129
  suspend = () => {
117
130
  const view = this.checkoutViewRef.current;
118
- if (view != null) {
131
+ if (view != null && this.isCheckoutViewReady) {
119
132
  RNKlarnaCheckoutViewCommands.suspend(view);
120
133
  }
121
134
  };
122
135
 
123
136
  resume = () => {
124
137
  const view = this.checkoutViewRef.current;
125
- if (view != null) {
138
+ if (view != null && this.isCheckoutViewReady) {
126
139
  RNKlarnaCheckoutViewCommands.resume(view);
127
140
  }
128
141
  };
@@ -30,6 +30,7 @@ export interface RNKlarnaCheckoutViewProps extends ViewProps {
30
30
  readonly height: string;
31
31
  }>
32
32
  >;
33
+ readonly onCheckoutViewReady?: DirectEventHandler<{}>;
33
34
  }
34
35
 
35
36
  type KlarnaCheckoutViewNativeComponentType =