react-native-purchases-ui 7.20.0 → 7.21.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -59,7 +59,7 @@ android {
59
59
  minSdkVersion getExtOrIntegerDefault("minSdkVersion")
60
60
  targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
61
61
  versionCode 1
62
- versionName '7.20.0'
62
+ versionName '7.21.0'
63
63
  }
64
64
 
65
65
  buildTypes {
@@ -2,13 +2,29 @@ package com.revenuecat.purchases.react.ui
2
2
 
3
3
  import android.view.View
4
4
  import com.facebook.react.bridge.ReadableMap
5
+ import com.facebook.react.bridge.WritableNativeMap
6
+ import com.facebook.react.common.MapBuilder
5
7
  import com.facebook.react.uimanager.SimpleViewManager
8
+ import com.facebook.react.uimanager.ThemedReactContext
6
9
  import com.facebook.react.uimanager.annotations.ReactProp
10
+ import com.facebook.react.uimanager.events.RCTEventEmitter
11
+ import com.revenuecat.purchases.hybridcommon.ui.PaywallListenerWrapper
7
12
 
8
13
  internal abstract class BasePaywallViewManager<T : View> : SimpleViewManager<T>() {
9
14
 
10
15
  abstract fun setOfferingId(view: T, identifier: String)
11
16
 
17
+ override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any>? {
18
+ return MapBuilder.builder<String, Any>()
19
+ .putEvent(PaywallEvent.ON_PURCHASE_COMPLETED)
20
+ .putEvent(PaywallEvent.ON_PURCHASE_ERROR)
21
+ .putEvent(PaywallEvent.ON_PURCHASE_CANCELLED)
22
+ .putEvent(PaywallEvent.ON_RESTORE_COMPLETED)
23
+ .putEvent(PaywallEvent.ON_RESTORE_ERROR)
24
+ .putEvent(PaywallEvent.ON_DISMISS)
25
+ .build()
26
+ }
27
+
12
28
  @ReactProp(name = "options")
13
29
  fun setOptions(view: T, options: ReadableMap?) {
14
30
  options?.let { props ->
@@ -21,5 +37,103 @@ internal abstract class BasePaywallViewManager<T : View> : SimpleViewManager<T>(
21
37
  }
22
38
  }
23
39
  }
40
+
41
+ // TODO: RCTEventEmitter is deprecated, and RCTModernEventEmitter should be used instead
42
+ // but documentation is not clear on how to use it so keeping this for now
43
+ internal fun createPaywallListenerWrapper(
44
+ themedReactContext: ThemedReactContext,
45
+ view: View
46
+ ) = object : PaywallListenerWrapper() {
47
+
48
+ override fun onPurchaseStarted(rcPackage: Map<String, Any?>) {
49
+ // Will implement when iOS sends package as argument
50
+ }
51
+
52
+ override fun onPurchaseCompleted(
53
+ customerInfo: Map<String, Any?>,
54
+ storeTransaction: Map<String, Any?>
55
+ ) {
56
+ val payload = mapOf(
57
+ PaywallEventKey.CUSTOMER_INFO to customerInfo,
58
+ PaywallEventKey.STORE_TRANSACTION to storeTransaction
59
+ )
60
+ emitEvent(themedReactContext, view.id, PaywallEvent.ON_PURCHASE_COMPLETED, payload)
61
+ }
62
+
63
+ override fun onPurchaseError(error: Map<String, Any?>) {
64
+ val payload = mapOf(PaywallEventKey.ERROR to error)
65
+ emitEvent(themedReactContext, view.id, PaywallEvent.ON_PURCHASE_ERROR, payload)
66
+ }
67
+
68
+ override fun onPurchaseCancelled() {
69
+ emitEvent(themedReactContext, view.id, PaywallEvent.ON_PURCHASE_CANCELLED)
70
+ }
71
+
72
+ override fun onRestoreStarted() {
73
+ // Will implement when iOS starts sending this event
74
+ }
75
+
76
+ override fun onRestoreCompleted(customerInfo: Map<String, Any?>) {
77
+ val payload = mapOf(PaywallEventKey.CUSTOMER_INFO to customerInfo)
78
+ emitEvent(themedReactContext, view.id, PaywallEvent.ON_RESTORE_COMPLETED, payload)
79
+ }
80
+
81
+ override fun onRestoreError(error: Map<String, Any?>) {
82
+ val payload = mapOf(PaywallEventKey.ERROR to error)
83
+ emitEvent(themedReactContext, view.id, PaywallEvent.ON_RESTORE_ERROR, payload)
84
+ }
85
+
86
+ }
87
+
88
+ internal fun getDismissHandler(
89
+ themedReactContext: ThemedReactContext,
90
+ view: T
91
+ ): (() -> Unit) {
92
+ return {
93
+ emitEvent(themedReactContext, view.id, PaywallEvent.ON_DISMISS)
94
+ }
95
+ }
96
+
97
+ private fun MapBuilder.Builder<String, Any>.putEvent(
98
+ paywallEvent: PaywallEvent
99
+ ): MapBuilder.Builder<String, Any> {
100
+ val registrationName = MapBuilder.of("registrationName", paywallEvent.eventName)
101
+ return this.put(paywallEvent.eventName, registrationName)
102
+ }
103
+
104
+ private fun WritableNativeMap.putMap(keyMap: PaywallEventKey, dictionary: Map<String, Any?>) {
105
+ putMap(
106
+ keyMap.key,
107
+ RNPurchasesConverters.convertMapToWriteableMap(dictionary)
108
+ )
109
+ }
110
+
111
+ private fun emitEvent(
112
+ context: ThemedReactContext,
113
+ viewId: Int,
114
+ event: PaywallEvent,
115
+ payload: Map<PaywallEventKey, Map<String, Any?>>,
116
+ ) {
117
+ val convertedPayload = WritableNativeMap().apply {
118
+ payload.forEach { (key, value) ->
119
+ putMap(key.key, RNPurchasesConverters.convertMapToWriteableMap(value))
120
+ }
121
+ }
122
+ emitEvent(context, viewId, event, convertedPayload)
123
+ }
124
+
125
+ @Suppress("DEPRECATION")
126
+ private fun emitEvent(
127
+ context: ThemedReactContext,
128
+ viewId: Int,
129
+ event: PaywallEvent,
130
+ payload: WritableNativeMap? = null
131
+ ) {
132
+ context.getJSModule(RCTEventEmitter::class.java).receiveEvent(
133
+ viewId,
134
+ event.eventName,
135
+ payload
136
+ )
137
+ }
24
138
  }
25
139
 
@@ -0,0 +1,16 @@
1
+ package com.revenuecat.purchases.react.ui
2
+
3
+ internal enum class PaywallEvent(val eventName: String) {
4
+ ON_PURCHASE_COMPLETED("onPurchaseCompleted"),
5
+ ON_PURCHASE_ERROR("onPurchaseError"),
6
+ ON_PURCHASE_CANCELLED("onPurchaseCancelled"),
7
+ ON_RESTORE_COMPLETED("onRestoreCompleted"),
8
+ ON_RESTORE_ERROR("onRestoreError"),
9
+ ON_DISMISS("onDismiss");
10
+ }
11
+
12
+ internal enum class PaywallEventKey(val key: String) {
13
+ CUSTOMER_INFO("customerInfo"),
14
+ STORE_TRANSACTION("storeTransaction"),
15
+ ERROR("error")
16
+ }
@@ -1,15 +1,13 @@
1
1
  package com.revenuecat.purchases.react.ui
2
2
 
3
- import android.annotation.SuppressLint
4
3
  import androidx.core.view.children
5
- import com.facebook.react.bridge.ReadableMap
6
- import com.facebook.react.uimanager.SimpleViewManager
7
4
  import com.facebook.react.uimanager.ThemedReactContext
8
5
  import com.facebook.react.uimanager.UIManagerModule
9
- import com.facebook.react.uimanager.annotations.ReactProp
6
+ import com.facebook.react.uimanager.events.RCTEventEmitter
10
7
  import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI
11
8
  import com.revenuecat.purchases.ui.revenuecatui.views.PaywallFooterView
12
9
 
10
+
13
11
  @OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class)
14
12
  internal class PaywallFooterViewManager : BasePaywallViewManager<PaywallFooterView>() {
15
13
 
@@ -17,9 +15,8 @@ internal class PaywallFooterViewManager : BasePaywallViewManager<PaywallFooterVi
17
15
  return "RCPaywallFooterView"
18
16
  }
19
17
 
20
- @SuppressLint("UnsafeOptInUsageError")
21
18
  override fun createViewInstance(themedReactContext: ThemedReactContext): PaywallFooterView {
22
- val paywallFooterView: PaywallFooterView = object : PaywallFooterView(themedReactContext) {
19
+ return object : PaywallFooterView(themedReactContext) {
23
20
 
24
21
  // This is required so the change from Loading to Loaded resizes the view
25
22
  // https://github.com/facebook/react-native/issues/17968#issuecomment-1672111483
@@ -59,9 +56,10 @@ internal class PaywallFooterViewManager : BasePaywallViewManager<PaywallFooterVi
59
56
  }
60
57
  }
61
58
  }
59
+ }.also {
60
+ it.setPaywallListener(createPaywallListenerWrapper(themedReactContext, it))
61
+ it.setDismissHandler(getDismissHandler(themedReactContext, it))
62
62
  }
63
-
64
- return paywallFooterView
65
63
  }
66
64
 
67
65
  override fun setOfferingId(view: PaywallFooterView, identifier: String) {
@@ -1,9 +1,7 @@
1
1
  package com.revenuecat.purchases.react.ui
2
2
 
3
- import com.facebook.react.bridge.ReadableMap
4
- import com.facebook.react.uimanager.SimpleViewManager
5
3
  import com.facebook.react.uimanager.ThemedReactContext
6
- import com.facebook.react.uimanager.annotations.ReactProp
4
+ import com.facebook.react.uimanager.events.RCTEventEmitter
7
5
  import com.revenuecat.purchases.ui.revenuecatui.ExperimentalPreviewRevenueCatUIPurchasesAPI
8
6
  import com.revenuecat.purchases.ui.revenuecatui.views.PaywallView
9
7
 
@@ -19,7 +17,10 @@ internal class PaywallViewManager : BasePaywallViewManager<PaywallView>() {
19
17
  }
20
18
 
21
19
  override fun createViewInstance(themedReactContext: ThemedReactContext): PaywallView {
22
- return PaywallView(themedReactContext)
20
+ return PaywallView(themedReactContext).also {
21
+ it.setPaywallListener(createPaywallListenerWrapper(themedReactContext, it))
22
+ it.setDismissHandler(getDismissHandler(themedReactContext, it))
23
+ }
23
24
  }
24
25
 
25
26
  override fun createShadowNodeInstance(): PaywallViewShadowNode {
@@ -0,0 +1,48 @@
1
+ package com.revenuecat.purchases.react.ui
2
+
3
+ import com.facebook.react.bridge.WritableArray
4
+ import com.facebook.react.bridge.WritableMap
5
+ import com.facebook.react.bridge.WritableNativeArray
6
+ import com.facebook.react.bridge.WritableNativeMap
7
+
8
+ internal object RNPurchasesConverters {
9
+
10
+ @JvmStatic
11
+ @Suppress("UNCHECKED_CAST")
12
+ fun convertMapToWriteableMap(map: Map<String, *>): WritableMap {
13
+ val writableMap: WritableMap = WritableNativeMap()
14
+ for ((key, value) in map) {
15
+ when (value) {
16
+ null -> writableMap.putNull(key)
17
+ is Boolean -> writableMap.putBoolean(key, value)
18
+ is Int -> writableMap.putInt(key, value)
19
+ is Long -> writableMap.putDouble(key, value.toDouble())
20
+ is Double -> writableMap.putDouble(key, value)
21
+ is String -> writableMap.putString(key, value)
22
+ is Map<*, *> -> writableMap.putMap(key, convertMapToWriteableMap(value as Map<String, *>))
23
+ is Array<*> -> writableMap.putArray(key, convertArrayToWritableArray(value as Array<Any?>))
24
+ is List<*> -> writableMap.putArray(key, convertArrayToWritableArray(value.toTypedArray()))
25
+ }
26
+ }
27
+ return writableMap
28
+ }
29
+
30
+ @Suppress("UNCHECKED_CAST")
31
+ private fun convertArrayToWritableArray(array: Array<Any?>): WritableArray {
32
+ val writableArray: WritableArray = WritableNativeArray()
33
+ for (item in array) {
34
+ when (item) {
35
+ null -> writableArray.pushNull()
36
+ is Boolean -> writableArray.pushBoolean(item)
37
+ is Int -> writableArray.pushInt(item)
38
+ is Long -> writableArray.pushDouble(item.toDouble())
39
+ is Double -> writableArray.pushDouble(item)
40
+ is String -> writableArray.pushString(item)
41
+ is Map<*, *> -> writableArray.pushMap(convertMapToWriteableMap(item as Map<String, *>))
42
+ is Array<*> -> writableArray.pushArray(convertArrayToWritableArray(item as Array<Any?>))
43
+ is List<*> -> writableArray.pushArray(convertArrayToWritableArray(item.toTypedArray()))
44
+ }
45
+ }
46
+ return writableArray
47
+ }
48
+ }
@@ -12,22 +12,55 @@
12
12
  @import PurchasesHybridCommonUI;
13
13
  @import RevenueCatUI;
14
14
 
15
+ @interface PaywallViewManager ()
16
+
17
+ @property (nonatomic, strong) id proxyIfAvailable;
18
+
19
+ @end
20
+
15
21
  @implementation PaywallViewManager
16
22
 
17
23
  RCT_EXPORT_VIEW_PROPERTY(options, NSDictionary);
18
24
 
25
+ RCT_EXPORT_VIEW_PROPERTY(onPurchaseCompleted, RCTDirectEventBlock)
26
+ RCT_EXPORT_VIEW_PROPERTY(onPurchaseError, RCTDirectEventBlock)
27
+ RCT_EXPORT_VIEW_PROPERTY(onPurchaseCancelled, RCTDirectEventBlock)
28
+ RCT_EXPORT_VIEW_PROPERTY(onRestoreCompleted, RCTDirectEventBlock)
29
+ RCT_EXPORT_VIEW_PROPERTY(onRestoreError, RCTDirectEventBlock)
30
+ RCT_EXPORT_VIEW_PROPERTY(onDismiss, RCTDirectEventBlock)
31
+
19
32
  RCT_EXPORT_MODULE(Paywall)
20
33
 
34
+ - (instancetype)init {
35
+ if ((self = [super init])) {
36
+ if (@available(iOS 15.0, *)) {
37
+ _proxyIfAvailable = [[PaywallProxy alloc] init];
38
+ }
39
+ }
40
+
41
+ return self;
42
+ }
43
+
44
+ - (PaywallProxy *)proxy API_AVAILABLE(ios(15.0)){
45
+ return (PaywallProxy *)self.proxyIfAvailable;
46
+ }
47
+
21
48
  - (UIView *)view
22
49
  {
23
50
  if (@available(iOS 15.0, *)) {
24
- PaywallProxy *proxy = [[PaywallProxy alloc] init];
51
+ UIViewController *viewController = [self.proxy createPaywallView];
52
+ PaywallViewWrapper *wrapper = [[PaywallViewWrapper alloc] initWithPaywallViewController:viewController];
53
+ self.proxy.delegate = wrapper;
25
54
 
26
- return [[PaywallViewWrapper alloc] initWithPaywallViewController:[proxy createPaywallView]];
55
+ return wrapper;
27
56
  } else {
28
57
  NSLog(@"Error: attempted to present paywalls on unsupported iOS version.");
29
58
  return nil;
30
59
  }
31
60
  }
32
61
 
62
+ + (BOOL)requiresMainQueueSetup {
63
+ return YES;
64
+ }
65
+
33
66
  @end
@@ -6,10 +6,19 @@
6
6
  //
7
7
 
8
8
  #import <UIKit/UIKit.h>
9
+ #import <React/RCTComponent.h>
10
+ @import PurchasesHybridCommonUI;
9
11
 
10
12
  NS_ASSUME_NONNULL_BEGIN
11
13
 
12
- @interface PaywallViewWrapper : UIView
14
+ @interface PaywallViewWrapper : UIView <RCPaywallViewControllerDelegateWrapper>
15
+
16
+ @property (nonatomic, copy) RCTDirectEventBlock onPurchaseCompleted;
17
+ @property (nonatomic, copy) RCTDirectEventBlock onPurchaseError;
18
+ @property (nonatomic, copy) RCTDirectEventBlock onPurchaseCancelled;
19
+ @property (nonatomic, copy) RCTDirectEventBlock onRestoreCompleted;
20
+ @property (nonatomic, copy) RCTDirectEventBlock onRestoreError;
21
+ @property (nonatomic, copy) RCTDirectEventBlock onDismiss;
13
22
 
14
23
  - (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
15
24
  - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
@@ -6,24 +6,26 @@
6
6
  //
7
7
 
8
8
  #import "PaywallViewWrapper.h"
9
-
10
9
  #import "UIView+Extensions.h"
11
10
 
12
11
  @import PurchasesHybridCommonUI;
13
12
  @import RevenueCatUI;
14
13
 
15
- API_AVAILABLE(ios(15.0))
16
- @interface PaywallViewWrapper () <RCPaywallViewControllerDelegate>
14
+ static NSString *const KeyCustomerInfo = @"customerInfo";
15
+ static NSString *const KeyStoreTransaction = @"storeTransaction";
16
+ static NSString *const KeyError = @"error";
17
17
 
18
- @property (strong, nonatomic) RCPaywallViewController *paywallViewController;
18
+ API_AVAILABLE(ios(15.0))
19
+ @interface PaywallViewWrapper ()
19
20
 
20
- @property (nonatomic) BOOL addedToHierarchy;
21
+ @property(strong, nonatomic) RCPaywallViewController *paywallViewController;
22
+ @property(nonatomic) BOOL addedToHierarchy;
21
23
 
22
24
  @end
23
25
 
24
26
  @implementation PaywallViewWrapper
25
27
 
26
- - (instancetype)initWithPaywallViewController:(RCPaywallViewController *)paywallViewController API_AVAILABLE(ios(15.0)){
28
+ - (instancetype)initWithPaywallViewController:(RCPaywallViewController *)paywallViewController API_AVAILABLE(ios(15.0)) {
27
29
  NSParameterAssert(paywallViewController);
28
30
 
29
31
  if ((self = [super initWithFrame:paywallViewController.view.bounds])) {
@@ -35,7 +37,7 @@ API_AVAILABLE(ios(15.0))
35
37
 
36
38
  - (void)layoutSubviews {
37
39
  [super layoutSubviews];
38
-
40
+
39
41
  // Need to wait for this view to be in the hierarchy to look for the parent UIVC.
40
42
  // This is required to add a SwiftUI `UIHostingController` to the hierarchy in a way that allows
41
43
  // UIKit to read properties from the environment, like traits and safe area.
@@ -73,4 +75,46 @@ API_AVAILABLE(ios(15.0))
73
75
  }
74
76
  }
75
77
 
78
+ - (void)paywallViewControllerDidStartPurchase:(RCPaywallViewController *)controller API_AVAILABLE(ios(15.0)) {
79
+ // TODO: We need to send the package being purchased to match Android
80
+ }
81
+
82
+ - (void)paywallViewController:(RCPaywallViewController *)controller
83
+ didFinishPurchasingWithCustomerInfoDictionary:(NSDictionary *)customerInfoDictionary
84
+ transactionDictionary:(NSDictionary *)transactionDictionary API_AVAILABLE(ios(15.0)) {
85
+ self.onPurchaseCompleted(@{
86
+ KeyCustomerInfo: customerInfoDictionary,
87
+ KeyStoreTransaction: transactionDictionary,
88
+ });
89
+ }
90
+
91
+ - (void)paywallViewControllerDidCancelPurchase:(RCPaywallViewController *)controller API_AVAILABLE(ios(15.0)) {
92
+ self.onPurchaseCancelled(nil);
93
+ }
94
+
95
+ - (void)paywallViewController:(RCPaywallViewController *)controller
96
+ didFailPurchasingWithErrorDictionary:(NSDictionary *)errorDictionary API_AVAILABLE(ios(15.0)) {
97
+ self.onPurchaseError(@{
98
+ KeyError: errorDictionary
99
+ });
100
+ }
101
+
102
+ - (void)paywallViewController:(RCPaywallViewController *)controller
103
+ didFinishRestoringWithCustomerInfoDictionary:(NSDictionary *)customerInfoDictionary API_AVAILABLE(ios(15.0)) {
104
+ self.onRestoreCompleted(@{
105
+ KeyCustomerInfo: customerInfoDictionary
106
+ });
107
+ }
108
+
109
+ - (void)paywallViewController:(RCPaywallViewController *)controller
110
+ didFailRestoringWithErrorDictionary:(NSDictionary *)errorDictionary API_AVAILABLE(ios(15.0)) {
111
+ self.onRestoreError(@{
112
+ KeyError: errorDictionary
113
+ });
114
+ }
115
+
116
+ - (void)paywallViewControllerWasDismissed:(RCPaywallViewController *)controller API_AVAILABLE(ios(15.0)) {
117
+ self.onDismiss(nil);
118
+ }
119
+
76
120
  @end
@@ -17,8 +17,6 @@
17
17
  #import <React/RCTUIManager.h>
18
18
  #import <React/RCTBridge.h>
19
19
  #import <React/RCTRootViewDelegate.h>
20
- #import <React/RCTEventEmitter.h>
21
-
22
20
 
23
21
  NS_ASSUME_NONNULL_BEGIN
24
22
 
@@ -31,7 +29,7 @@ NS_ASSUME_NONNULL_BEGIN
31
29
 
32
30
  NS_ASSUME_NONNULL_END
33
31
 
34
- @interface FooterViewWrapper () <RCPaywallViewControllerDelegate>
32
+ @interface FooterViewWrapper ()
35
33
 
36
34
  @property (strong, nonatomic) RCTBridge *bridge;
37
35
 
@@ -53,8 +51,8 @@ NS_ASSUME_NONNULL_END
53
51
  // Get the safe area insets, for example
54
52
  UIEdgeInsets safeAreaInsets = self.safeAreaInsets;
55
53
 
56
- // TODO: figure out a better way of sending event, since this is deprecated
57
- // It's probably better to create a singleton from the module that this view manager can call and use to send events
54
+ // TODO: figure out a better way of sending event, since this is deprecated
55
+ // It's probably better to create a singleton from the module that this view manager can call and use to send events
58
56
  #pragma clang diagnostic push
59
57
  #pragma clang diagnostic ignored "-Wdeprecated-declarations"
60
58
  [self.bridge.eventDispatcher sendAppEventWithName:safeAreaInsetsDidChangeEvent
@@ -65,7 +63,7 @@ NS_ASSUME_NONNULL_END
65
63
  #pragma clang diagnostic pop
66
64
  }
67
65
 
68
- - (void)paywallViewController:(RCPaywallViewController *)controller didChangeSizeTo:(CGSize)size API_AVAILABLE(ios(15.0)){
66
+ - (void)paywallViewController:(RCPaywallViewController *)controller didChangeSizeTo:(CGSize)size API_AVAILABLE(ios(15.0)) {
69
67
  [_bridge.uiManager setIntrinsicContentSize:CGSizeMake(UIViewNoIntrinsicMetric, size.height) forView:self];
70
68
  }
71
69
 
@@ -81,6 +79,13 @@ NS_ASSUME_NONNULL_END
81
79
 
82
80
  RCT_EXPORT_VIEW_PROPERTY(options, NSDictionary);
83
81
 
82
+ RCT_EXPORT_VIEW_PROPERTY(onPurchaseCompleted, RCTDirectEventBlock)
83
+ RCT_EXPORT_VIEW_PROPERTY(onPurchaseError, RCTDirectEventBlock)
84
+ RCT_EXPORT_VIEW_PROPERTY(onPurchaseCancelled, RCTDirectEventBlock)
85
+ RCT_EXPORT_VIEW_PROPERTY(onRestoreCompleted, RCTDirectEventBlock)
86
+ RCT_EXPORT_VIEW_PROPERTY(onRestoreError, RCTDirectEventBlock)
87
+ RCT_EXPORT_VIEW_PROPERTY(onDismiss, RCTDirectEventBlock)
88
+
84
89
  RCT_EXPORT_MODULE(RCPaywallFooterView)
85
90
 
86
91
  - (instancetype)init {
@@ -101,7 +106,7 @@ RCT_EXPORT_MODULE(RCPaywallFooterView)
101
106
  {
102
107
  if (@available(iOS 15.0, *)) {
103
108
  UIViewController *footerViewController = [self.proxy createFooterPaywallView];
104
- FooterViewWrapper *wrapper = [[FooterViewWrapper alloc] initWithPaywallViewController:footerViewController
109
+ FooterViewWrapper *wrapper = [[FooterViewWrapper alloc] initWithPaywallViewController:footerViewController
105
110
  bridge:self.bridge];
106
111
  self.proxy.delegate = wrapper;
107
112
 
@@ -15,7 +15,6 @@ var _purchasesTypescriptInternal = require("@revenuecat/purchases-typescript-int
15
15
  var _react = _interopRequireWildcard(require("react"));
16
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
17
17
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
19
18
  const LINKING_ERROR = `The package 'react-native-purchases-ui' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
20
19
  ios: "- You have run 'pod install'\n",
21
20
  default: ''
@@ -83,15 +82,39 @@ class RevenueCatUI {
83
82
  }) {
84
83
  return RNPaywalls.presentPaywallIfNeeded(requiredEntitlementIdentifier, (offering === null || offering === void 0 ? void 0 : offering.identifier) ?? null, displayCloseButton);
85
84
  }
86
- static Paywall = props => /*#__PURE__*/_react.default.createElement(InternalPaywall, _extends({}, props, {
85
+ static Paywall = ({
86
+ style,
87
+ children,
88
+ options,
89
+ onPurchaseCompleted,
90
+ onPurchaseError,
91
+ onPurchaseCancelled,
92
+ onRestoreCompleted,
93
+ onRestoreError,
94
+ onDismiss
95
+ }) => /*#__PURE__*/_react.default.createElement(InternalPaywall, {
96
+ options: options,
97
+ children: children,
98
+ onPurchaseCompleted: event => onPurchaseCompleted && onPurchaseCompleted(event.nativeEvent),
99
+ onPurchaseError: event => onPurchaseError && onPurchaseError(event.nativeEvent),
100
+ onPurchaseCancelled: () => onPurchaseCancelled && onPurchaseCancelled(),
101
+ onRestoreCompleted: event => onRestoreCompleted && onRestoreCompleted(event.nativeEvent),
102
+ onRestoreError: event => onRestoreError && onRestoreError(event.nativeEvent),
103
+ onDismiss: () => onDismiss && onDismiss(),
87
104
  style: [{
88
105
  flex: 1
89
- }, props.style]
90
- }));
106
+ }, style]
107
+ });
91
108
  static PaywallFooterContainerView = ({
92
109
  style,
93
110
  children,
94
- options
111
+ options,
112
+ onPurchaseCompleted,
113
+ onPurchaseError,
114
+ onPurchaseCancelled,
115
+ onRestoreCompleted,
116
+ onRestoreError,
117
+ onDismiss
95
118
  }) => {
96
119
  // We use 20 as the default paddingBottom because that's the corner radius in the Android native SDK.
97
120
  // We also listen to safeAreaInsetsDidChange which is only sent from iOS and which is triggered when the
@@ -122,7 +145,13 @@ class RevenueCatUI {
122
145
  style: {
123
146
  marginTop: -20
124
147
  },
125
- options: options
148
+ options: options,
149
+ onPurchaseCompleted: event => onPurchaseCompleted && onPurchaseCompleted(event.nativeEvent),
150
+ onPurchaseError: event => onPurchaseError && onPurchaseError(event.nativeEvent),
151
+ onPurchaseCancelled: () => onPurchaseCancelled && onPurchaseCancelled(),
152
+ onRestoreCompleted: event => onRestoreCompleted && onRestoreCompleted(event.nativeEvent),
153
+ onRestoreError: event => onRestoreError && onRestoreError(event.nativeEvent),
154
+ onDismiss: () => onDismiss && onDismiss()
126
155
  }));
127
156
  };
128
157
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_purchasesTypescriptInternal","_react","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","LINKING_ERROR","Platform","select","ios","RNPaywalls","NativeModules","Error","eventEmitter","NativeEventEmitter","InternalPaywall","UIManager","getViewManagerConfig","requireNativeComponent","InternalPaywallFooterView","RevenueCatUI","Defaults","PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON","PAYWALL_RESULT","presentPaywall","offering","displayCloseButton","identifier","presentPaywallIfNeeded","requiredEntitlementIdentifier","Paywall","props","createElement","style","flex","PaywallFooterContainerView","children","options","paddingBottom","setPaddingBottom","useState","useEffect","handleSafeAreaInsetsChange","bottom","subscription","addListener","remove","View","ScrollView","contentContainerStyle","flexGrow","marginTop","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNative","require","_purchasesTypescriptInternal","_react","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","LINKING_ERROR","Platform","select","ios","RNPaywalls","NativeModules","Error","eventEmitter","NativeEventEmitter","InternalPaywall","UIManager","getViewManagerConfig","requireNativeComponent","InternalPaywallFooterView","RevenueCatUI","Defaults","PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON","PAYWALL_RESULT","presentPaywall","offering","displayCloseButton","identifier","presentPaywallIfNeeded","requiredEntitlementIdentifier","Paywall","style","children","options","onPurchaseCompleted","onPurchaseError","onPurchaseCancelled","onRestoreCompleted","onRestoreError","onDismiss","createElement","event","nativeEvent","flex","PaywallFooterContainerView","paddingBottom","setPaddingBottom","useState","useEffect","handleSafeAreaInsetsChange","bottom","subscription","addListener","remove","View","ScrollView","contentContainerStyle","flexGrow","marginTop","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
1
  import { NativeEventEmitter, NativeModules, Platform, requireNativeComponent, ScrollView, UIManager, View } from "react-native";
3
2
  import { PAYWALL_RESULT } from "@revenuecat/purchases-typescript-internal";
4
3
  import React, { useEffect, useState } from "react";
@@ -70,15 +69,39 @@ export default class RevenueCatUI {
70
69
  }) {
71
70
  return RNPaywalls.presentPaywallIfNeeded(requiredEntitlementIdentifier, (offering === null || offering === void 0 ? void 0 : offering.identifier) ?? null, displayCloseButton);
72
71
  }
73
- static Paywall = props => /*#__PURE__*/React.createElement(InternalPaywall, _extends({}, props, {
72
+ static Paywall = ({
73
+ style,
74
+ children,
75
+ options,
76
+ onPurchaseCompleted,
77
+ onPurchaseError,
78
+ onPurchaseCancelled,
79
+ onRestoreCompleted,
80
+ onRestoreError,
81
+ onDismiss
82
+ }) => /*#__PURE__*/React.createElement(InternalPaywall, {
83
+ options: options,
84
+ children: children,
85
+ onPurchaseCompleted: event => onPurchaseCompleted && onPurchaseCompleted(event.nativeEvent),
86
+ onPurchaseError: event => onPurchaseError && onPurchaseError(event.nativeEvent),
87
+ onPurchaseCancelled: () => onPurchaseCancelled && onPurchaseCancelled(),
88
+ onRestoreCompleted: event => onRestoreCompleted && onRestoreCompleted(event.nativeEvent),
89
+ onRestoreError: event => onRestoreError && onRestoreError(event.nativeEvent),
90
+ onDismiss: () => onDismiss && onDismiss(),
74
91
  style: [{
75
92
  flex: 1
76
- }, props.style]
77
- }));
93
+ }, style]
94
+ });
78
95
  static PaywallFooterContainerView = ({
79
96
  style,
80
97
  children,
81
- options
98
+ options,
99
+ onPurchaseCompleted,
100
+ onPurchaseError,
101
+ onPurchaseCancelled,
102
+ onRestoreCompleted,
103
+ onRestoreError,
104
+ onDismiss
82
105
  }) => {
83
106
  // We use 20 as the default paddingBottom because that's the corner radius in the Android native SDK.
84
107
  // We also listen to safeAreaInsetsDidChange which is only sent from iOS and which is triggered when the
@@ -109,7 +132,13 @@ export default class RevenueCatUI {
109
132
  style: {
110
133
  marginTop: -20
111
134
  },
112
- options: options
135
+ options: options,
136
+ onPurchaseCompleted: event => onPurchaseCompleted && onPurchaseCompleted(event.nativeEvent),
137
+ onPurchaseError: event => onPurchaseError && onPurchaseError(event.nativeEvent),
138
+ onPurchaseCancelled: () => onPurchaseCancelled && onPurchaseCancelled(),
139
+ onRestoreCompleted: event => onRestoreCompleted && onRestoreCompleted(event.nativeEvent),
140
+ onRestoreError: event => onRestoreError && onRestoreError(event.nativeEvent),
141
+ onDismiss: () => onDismiss && onDismiss()
113
142
  }));
114
143
  };
115
144
  }
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","NativeModules","Platform","requireNativeComponent","ScrollView","UIManager","View","PAYWALL_RESULT","React","useEffect","useState","LINKING_ERROR","select","ios","default","RNPaywalls","Error","eventEmitter","InternalPaywall","getViewManagerConfig","InternalPaywallFooterView","RevenueCatUI","Defaults","PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON","presentPaywall","offering","displayCloseButton","identifier","presentPaywallIfNeeded","requiredEntitlementIdentifier","Paywall","props","createElement","_extends","style","flex","PaywallFooterContainerView","children","options","paddingBottom","setPaddingBottom","handleSafeAreaInsetsChange","bottom","subscription","addListener","remove","contentContainerStyle","flexGrow","marginTop"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["NativeEventEmitter","NativeModules","Platform","requireNativeComponent","ScrollView","UIManager","View","PAYWALL_RESULT","React","useEffect","useState","LINKING_ERROR","select","ios","default","RNPaywalls","Error","eventEmitter","InternalPaywall","getViewManagerConfig","InternalPaywallFooterView","RevenueCatUI","Defaults","PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON","presentPaywall","offering","displayCloseButton","identifier","presentPaywallIfNeeded","requiredEntitlementIdentifier","Paywall","style","children","options","onPurchaseCompleted","onPurchaseError","onPurchaseCancelled","onRestoreCompleted","onRestoreError","onDismiss","createElement","event","nativeEvent","flex","PaywallFooterContainerView","paddingBottom","setPaddingBottom","handleSafeAreaInsetsChange","bottom","subscription","addListener","remove","contentContainerStyle","flexGrow","marginTop"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type StyleProp, type ViewStyle } from "react-native";
2
- import { PAYWALL_RESULT, type PurchasesOffering } from "@revenuecat/purchases-typescript-internal";
2
+ import { type CustomerInfo, PAYWALL_RESULT, type PurchasesError, type PurchasesOffering, type PurchasesStoreTransaction } from "@revenuecat/purchases-typescript-internal";
3
3
  import React, { type ReactNode } from "react";
4
4
  export { PAYWALL_RESULT } from "@revenuecat/purchases-typescript-internal";
5
5
  export interface PresentPaywallParams {
@@ -29,11 +29,41 @@ type FullScreenPaywallViewProps = {
29
29
  style?: StyleProp<ViewStyle>;
30
30
  children?: ReactNode;
31
31
  options?: FullScreenPaywallViewOptions;
32
+ onPurchaseCompleted?: ({ customerInfo, storeTransaction }: {
33
+ customerInfo: CustomerInfo;
34
+ storeTransaction: PurchasesStoreTransaction;
35
+ }) => void;
36
+ onPurchaseError?: ({ error }: {
37
+ error: PurchasesError;
38
+ }) => void;
39
+ onPurchaseCancelled?: () => void;
40
+ onRestoreCompleted?: ({ customerInfo }: {
41
+ customerInfo: CustomerInfo;
42
+ }) => void;
43
+ onRestoreError?: ({ error }: {
44
+ error: PurchasesError;
45
+ }) => void;
46
+ onDismiss?: () => void;
32
47
  };
33
48
  type FooterPaywallViewProps = {
34
49
  style?: StyleProp<ViewStyle>;
35
50
  children?: ReactNode;
36
51
  options?: FooterPaywallViewOptions;
52
+ onPurchaseCompleted?: ({ customerInfo, storeTransaction }: {
53
+ customerInfo: CustomerInfo;
54
+ storeTransaction: PurchasesStoreTransaction;
55
+ }) => void;
56
+ onPurchaseError?: ({ error }: {
57
+ error: PurchasesError;
58
+ }) => void;
59
+ onPurchaseCancelled?: () => void;
60
+ onRestoreCompleted?: ({ customerInfo }: {
61
+ customerInfo: CustomerInfo;
62
+ }) => void;
63
+ onRestoreError?: ({ error }: {
64
+ error: PurchasesError;
65
+ }) => void;
66
+ onDismiss?: () => void;
37
67
  };
38
68
  export default class RevenueCatUI {
39
69
  private static Defaults;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EAGd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AACnG,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AA6B3E,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,MAAM,MAAM,4BAA4B,GAAG,oBAAoB,GAAG;IAChE;;OAEG;IACH,6BAA6B,EAAE,MAAM,CAAC;CACvC,CAAA;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,4BAA6B,SAAQ,kBAAkB;CAEvE;AAGD,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;CAEnE;AAED,KAAK,0BAA0B,GAAG;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,4BAA4B,CAAC;CACxC,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACpC,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,YAAY;IAE/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAEtB;IAED;;;;OAIG;IACH,OAAc,cAAc,wBAAkB;IAE9C;;;;;;;;;OASG;WACW,cAAc,CAAC,EACE,QAAQ,EACR,kBAA+E,EAChF,GAAE,oBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAInF;;;;;;;;;;;;OAYG;WACW,sBAAsB,CAAC,EACE,6BAA6B,EAC7B,QAAQ,EACR,kBAA+E,EAChF,EAAE,4BAA4B,GAAG,OAAO,CAAC,cAAc,CAAC;IAI9F,OAAc,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAEzD;IAEF,OAAc,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAmCxE;CACH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-purchases-ui",
3
3
  "title": "React Native Purchases UI",
4
- "version": "7.20.0",
4
+ "version": "7.21.0",
5
5
  "description": "React Native in-app purchases and subscriptions made easy. Supports iOS and Android.",
6
6
  "main": "lib/commonjs/index",
7
7
  "module": "lib/module/index",
@@ -114,6 +114,6 @@
114
114
  },
115
115
  "dependencies": {
116
116
  "@revenuecat/purchases-typescript-internal": "8.10.1",
117
- "react-native-purchases": "7.20.0"
117
+ "react-native-purchases": "7.21.0"
118
118
  }
119
119
  }
package/src/index.tsx CHANGED
@@ -9,7 +9,12 @@ import {
9
9
  View,
10
10
  type ViewStyle,
11
11
  } from "react-native";
12
- import { PAYWALL_RESULT, type PurchasesOffering } from "@revenuecat/purchases-typescript-internal";
12
+ import {
13
+ type CustomerInfo,
14
+ PAYWALL_RESULT, type PurchasesError,
15
+ type PurchasesOffering,
16
+ type PurchasesStoreTransaction
17
+ } from "@revenuecat/purchases-typescript-internal";
13
18
  import React, { type ReactNode, useEffect, useState } from "react";
14
19
 
15
20
  export { PAYWALL_RESULT } from "@revenuecat/purchases-typescript-internal";
@@ -77,12 +82,30 @@ type FullScreenPaywallViewProps = {
77
82
  style?: StyleProp<ViewStyle>;
78
83
  children?: ReactNode;
79
84
  options?: FullScreenPaywallViewOptions;
85
+ onPurchaseCompleted?: ({
86
+ customerInfo,
87
+ storeTransaction
88
+ }: { customerInfo: CustomerInfo, storeTransaction: PurchasesStoreTransaction }) => void;
89
+ onPurchaseError?: ({error}: { error: PurchasesError }) => void;
90
+ onPurchaseCancelled?: () => void;
91
+ onRestoreCompleted?: ({customerInfo}: { customerInfo: CustomerInfo }) => void;
92
+ onRestoreError?: ({error}: { error: PurchasesError }) => void;
93
+ onDismiss?: () => void;
80
94
  };
81
95
 
82
96
  type FooterPaywallViewProps = {
83
97
  style?: StyleProp<ViewStyle>;
84
98
  children?: ReactNode;
85
99
  options?: FooterPaywallViewOptions;
100
+ onPurchaseCompleted?: ({
101
+ customerInfo,
102
+ storeTransaction
103
+ }: { customerInfo: CustomerInfo, storeTransaction: PurchasesStoreTransaction }) => void;
104
+ onPurchaseError?: ({error}: { error: PurchasesError }) => void;
105
+ onPurchaseCancelled?: () => void;
106
+ onRestoreCompleted?: ({customerInfo}: { customerInfo: CustomerInfo }) => void;
107
+ onRestoreError?: ({error}: { error: PurchasesError }) => void;
108
+ onDismiss?: () => void;
86
109
  };
87
110
 
88
111
  export default class RevenueCatUI {
@@ -136,11 +159,39 @@ export default class RevenueCatUI {
136
159
  return RNPaywalls.presentPaywallIfNeeded(requiredEntitlementIdentifier, offering?.identifier ?? null, displayCloseButton)
137
160
  }
138
161
 
139
- public static Paywall: React.FC<FullScreenPaywallViewProps> = (props) => (
140
- <InternalPaywall {...props} style={[{flex: 1}, props.style]}/>
162
+ public static Paywall: React.FC<FullScreenPaywallViewProps> = ({
163
+ style,
164
+ children,
165
+ options,
166
+ onPurchaseCompleted,
167
+ onPurchaseError,
168
+ onPurchaseCancelled,
169
+ onRestoreCompleted,
170
+ onRestoreError,
171
+ onDismiss,
172
+ }) => (
173
+ <InternalPaywall options={options}
174
+ children={children}
175
+ onPurchaseCompleted={(event: any) => onPurchaseCompleted && onPurchaseCompleted(event.nativeEvent)}
176
+ onPurchaseError={(event: any) => onPurchaseError && onPurchaseError(event.nativeEvent)}
177
+ onPurchaseCancelled={() => onPurchaseCancelled && onPurchaseCancelled()}
178
+ onRestoreCompleted={(event: any) => onRestoreCompleted && onRestoreCompleted(event.nativeEvent)}
179
+ onRestoreError={(event: any) => onRestoreError && onRestoreError(event.nativeEvent)}
180
+ onDismiss={() => onDismiss && onDismiss()}
181
+ style={[{flex: 1}, style]}/>
141
182
  );
142
183
 
143
- public static PaywallFooterContainerView: React.FC<FooterPaywallViewProps> = ({style, children, options}) => {
184
+ public static PaywallFooterContainerView: React.FC<FooterPaywallViewProps> = ({
185
+ style,
186
+ children,
187
+ options,
188
+ onPurchaseCompleted,
189
+ onPurchaseError,
190
+ onPurchaseCancelled,
191
+ onRestoreCompleted,
192
+ onRestoreError,
193
+ onDismiss,
194
+ }) => {
144
195
  // We use 20 as the default paddingBottom because that's the corner radius in the Android native SDK.
145
196
  // We also listen to safeAreaInsetsDidChange which is only sent from iOS and which is triggered when the
146
197
  // safe area insets change. Not adding this extra padding on iOS will cause the content of the scrollview
@@ -172,7 +223,16 @@ export default class RevenueCatUI {
172
223
  {children}
173
224
  </ScrollView>
174
225
  {/*Adding negative margin to the footer view to make it overlap with the extra padding of the scroll*/}
175
- <InternalPaywallFooterView style={{marginTop: -20}} options={options}/>
226
+ <InternalPaywallFooterView
227
+ style={{marginTop: -20}}
228
+ options={options}
229
+ onPurchaseCompleted={(event: any) => onPurchaseCompleted && onPurchaseCompleted(event.nativeEvent)}
230
+ onPurchaseError={(event: any) => onPurchaseError && onPurchaseError(event.nativeEvent)}
231
+ onPurchaseCancelled={() => onPurchaseCancelled && onPurchaseCancelled()}
232
+ onRestoreCompleted={(event: any) => onRestoreCompleted && onRestoreCompleted(event.nativeEvent)}
233
+ onRestoreError={(event: any) => onRestoreError && onRestoreError(event.nativeEvent)}
234
+ onDismiss={() => onDismiss && onDismiss()}
235
+ />
176
236
  </View>
177
237
  );
178
238
  };