rn-onboarding-analytics 1.7.0 → 1.7.1

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.
package/README.md CHANGED
@@ -28,14 +28,25 @@ npm install rn-onboarding-analytics
28
28
  The library requires these dependencies for animations and safe area context:
29
29
 
30
30
  ```sh
31
- npm install react-native-reanimated react-native-safe-area-context expo-constants expo-localization
31
+ npm install react-native-reanimated react-native-safe-area-context expo-constants expo-localization react-native-iap
32
32
  ```
33
33
 
34
+ ```
35
+ Add on the babel config:
36
+ ```
37
+
38
+ plugins: [
39
+ // should be always the last plugin
40
+ 'react-native-reanimated/plugin',
41
+ ],
42
+
43
+ ````
44
+
34
45
  Optionally for image support, install one of:
35
46
 
36
47
  ```sh
37
48
  npm install expo-image
38
- ```
49
+ ````
39
50
 
40
51
  ```sh
41
52
  npm install react-native-svg
@@ -348,6 +359,112 @@ skipButton={({ onPress }) => (
348
359
  )}
349
360
  ```
350
361
 
362
+ #### `paywallPanel`
363
+
364
+ **Type:** `OnboardingPaywallPanelConfig`
365
+ **Optional** - Configuration for the paywall screen shown after the last step.
366
+
367
+ The paywall panel can be either:
368
+
369
+ - **Configuration object**: Pass an object with properties to use the default paywall
370
+ - **Custom component**: Pass a component that receives `onPressContinue` callback
371
+
372
+ **Option 1: Configuration Object**
373
+
374
+ You can use the streamlined configuration by passing `products` with the required parameters. The `SKus` can be defined either as a platform-specific object or a simple array of strings.
375
+
376
+ ```tsx
377
+ paywallPanel={{
378
+ title: "Unlock Premium",
379
+ subtitle: "Get access to all features",
380
+ button: "Subscribe",
381
+ image: require('./assets/paywall.png'),
382
+ onPressContinue: (planId) => console.log('Purchased:', planId),
383
+ // Optional links
384
+ onRestorePurchase: {
385
+ text: "Restore",
386
+ onPress: () => console.log("Restore clicked"),
387
+ },
388
+ onTerms: {
389
+ text: "Terms",
390
+ onPress: () => console.log("Terms clicked"),
391
+ },
392
+ onPrivacy: {
393
+ text: "Privacy",
394
+ onPress: () => console.log("Privacy clicked"),
395
+ },
396
+ products: [
397
+ {
398
+ // Platform specific SKUs (Recommended)
399
+ SKus: {
400
+ ios: ['pro_monthly_ios'],
401
+ android: ['pro_monthly_android']
402
+ },
403
+ title: "Monthly Pro",
404
+ featues: ["Unlimited Access", "No Ads"],
405
+ sortOrder: 1
406
+ },
407
+ {
408
+ // Simple array (The library will attempt to match these SKus)
409
+ SKus: ['pro_yearly'],
410
+ title: "Yearly Pro",
411
+ featues: ["Unlimited Access", "No Ads", "Save 20%"],
412
+ sortOrder: 2
413
+ }
414
+ ]
415
+ }}
416
+ ```
417
+
418
+ **Option 2: Custom Component**
419
+
420
+ For complete control, you can pass a custom component. This is useful if you want to wrap the paywall in your own layout or use `OnboardingPaywallPanel` directly with custom logic.
421
+
422
+ ```tsx
423
+ import { OnboardingPaywallPanel } from 'rn-onboarding-analytics';
424
+
425
+ function PaywallScreen({ onPressContinue }) {
426
+ return (
427
+ <OnboardingPaywallPanel
428
+ title="Unlock Premium Features"
429
+ subtitle="Get unlimited lists and more"
430
+ image={require('./assets/paywall.png')}
431
+ onPressContinue={onPressContinue}
432
+ products={[
433
+ {
434
+ SKus: { ios: ['weeklyDose'] },
435
+ title: 'Weekly',
436
+ featues: ['Unlimited lists', 'Priority support'],
437
+ sortOrder: 1,
438
+ },
439
+ ]}
440
+ onRestorePurchase={{
441
+ text: 'Restore',
442
+ onPress: () => console.log('Restore'),
443
+ }}
444
+ />
445
+ );
446
+ }
447
+
448
+ // In your Onboarding usage:
449
+ <Onboarding
450
+ // ...
451
+ paywallPanel={PaywallScreen}
452
+ />;
453
+ ```
454
+
455
+ **Legacy Configuration:**
456
+ You can also manually provide `plans` and `subscriptionSkus`:
457
+
458
+ ```tsx
459
+ paywallPanel={{
460
+ // ...
461
+ plans: [
462
+ { id: 'monthly', title: 'Monthly', price: '$9.99', features: [...] }
463
+ ],
464
+ subscriptionSkus: { ios: [...], android: [...] }
465
+ }}
466
+ ```
467
+
351
468
  ## 💡 Best Practices
352
469
 
353
470
  ### Image Consistency
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useMemo, useState, useEffect } from 'react';
4
4
  import { Image, StyleSheet, Text, View, TouchableOpacity, ScrollView, Dimensions, Platform } from 'react-native';
5
- import { initConnection, getSubscriptions, requestSubscription, endConnection } from 'react-native-iap';
5
+ import { initConnection, getSubscriptions, getProducts, requestSubscription, requestPurchase, endConnection } from 'react-native-iap';
6
6
  import { useTheme } from "../../utils/ThemeContext.js";
7
7
  import PrimaryButton from "../buttons/PrimaryButton.js";
8
8
  import { fontSizes, lineHeights } from "../../utils/fontStyles.js";
@@ -16,7 +16,8 @@ function OnboardingPaywallPanel({
16
16
  subtitle,
17
17
  button,
18
18
  image,
19
- plans,
19
+ plans = [],
20
+ products,
20
21
  helperTextContinue,
21
22
  onRestorePurchase,
22
23
  onTerms,
@@ -27,41 +28,136 @@ function OnboardingPaywallPanel({
27
28
  theme
28
29
  } = useTheme();
29
30
  const styles = useMemo(() => createStyles(theme), [theme]);
30
- const [selectedPlanId, setSelectedPlanId] = useState(plans[0]?.id || '');
31
+
32
+ // Initialize selectedPlanId based on available configuration
33
+ const initialPlanId = useMemo(() => {
34
+ if (products && products.length > 0) {
35
+ // Sort first to pick the first one correctly if needed,
36
+ // but simplistic approach: pick the first product's first SKU for the current platform
37
+ const firstProduct = products[0];
38
+ if (!firstProduct) return '';
39
+ let firstSku = '';
40
+ if (Array.isArray(firstProduct.SKus)) {
41
+ firstSku = firstProduct.SKus[0] || '';
42
+ } else {
43
+ const skusObj = firstProduct.SKus;
44
+ const skus = Platform.select({
45
+ ios: skusObj.ios,
46
+ android: skusObj.android
47
+ });
48
+ firstSku = skus?.[0] || '';
49
+ }
50
+ return firstSku;
51
+ }
52
+ return plans?.[0]?.id || '';
53
+ }, [products, plans]);
54
+ const [selectedPlanId, setSelectedPlanId] = useState(initialPlanId);
31
55
  const [iapProducts, setIapProducts] = useState([]);
32
56
  useEffect(() => {
33
57
  let isMounted = true;
34
- if (subscriptionSkus) {
58
+ const fetchIapProducts = async skus => {
59
+ try {
60
+ await initConnection();
61
+ if (!isMounted) return;
62
+
63
+ // Fetch both subscriptions and products to cover all bases
64
+ const [subs, prods] = await Promise.all([getSubscriptions({
65
+ skus
66
+ }).catch(() => []), getProducts({
67
+ skus
68
+ }).catch(() => [])]);
69
+ if (isMounted) {
70
+ // Filter out duplicates if any (unlikely but safe)
71
+ const allItems = [...subs, ...prods];
72
+ const uniqueItems = Array.from(new Map(allItems.map(item => [item.productId, item])).values());
73
+ setIapProducts(uniqueItems);
74
+ }
75
+ } catch (err) {
76
+ console.warn('IAP Error:', err);
77
+ }
78
+ };
79
+ if (products && products.length > 0) {
80
+ // Collect all SKUs from all products for current platform
81
+ const allSkus = products.flatMap(p => {
82
+ if (Array.isArray(p.SKus)) {
83
+ return p.SKus;
84
+ }
85
+ const skusObj = p.SKus;
86
+ const skus = Platform.select({
87
+ ios: skusObj.ios,
88
+ android: skusObj.android
89
+ });
90
+ return skus || [];
91
+ });
92
+ if (allSkus.length > 0) {
93
+ fetchIapProducts(allSkus);
94
+ }
95
+ } else if (subscriptionSkus) {
35
96
  const skus = Platform.select({
36
97
  ios: subscriptionSkus.ios,
37
98
  android: subscriptionSkus.android
38
99
  });
39
100
  if (skus && skus.length > 0) {
40
- const fetchProducts = async () => {
41
- try {
42
- await initConnection();
43
- if (!isMounted) return;
44
- const products = await getSubscriptions({
45
- skus
46
- });
47
- if (isMounted) {
48
- setIapProducts(products);
49
- }
50
- } catch (err) {
51
- console.warn('IAP Error:', err);
52
- }
53
- };
54
- fetchProducts();
101
+ fetchIapProducts(skus);
55
102
  }
56
103
  }
57
104
  return () => {
58
105
  isMounted = false;
59
- if (subscriptionSkus) {
106
+ if (subscriptionSkus || products) {
60
107
  endConnection();
61
108
  }
62
109
  };
63
- }, [subscriptionSkus]);
110
+ }, [subscriptionSkus, products]);
64
111
  const displayPlans = useMemo(() => {
112
+ // New Configuration Mode
113
+ if (products && products.length > 0) {
114
+ const mappedPlans = products.map(config => {
115
+ // Find if any of the product's SKUs matches a fetched IAP product
116
+ let targetSkus = [];
117
+ if (Array.isArray(config.SKus)) {
118
+ targetSkus = config.SKus;
119
+ } else {
120
+ const skusObj = config.SKus;
121
+ targetSkus = Platform.select({
122
+ ios: skusObj.ios,
123
+ android: skusObj.android
124
+ }) || [];
125
+ }
126
+ const iapProduct = iapProducts.find(p => targetSkus.includes(p.productId));
127
+ let price = '...'; // Default loading state
128
+ let id = targetSkus[0] || ''; // Default ID to first SKU
129
+
130
+ if (iapProduct) {
131
+ id = iapProduct.productId;
132
+ if (Platform.OS === 'ios') {
133
+ price = iapProduct.localizedPrice || price;
134
+ } else if (Platform.OS === 'android') {
135
+ const offer = iapProduct.subscriptionOfferDetails?.[0];
136
+ price = offer?.pricingPhases?.pricingPhaseList?.[0]?.formattedPrice || iapProduct.localizedPrice || price;
137
+ }
138
+ }
139
+ return {
140
+ id,
141
+ title: config.title,
142
+ price,
143
+ // features with typo 'featues' mapped to correct prop 'features'
144
+ features: config.featues,
145
+ interval: '',
146
+ // Could be inferred from IAP if needed
147
+ sortOrder: config.sortOrder
148
+ };
149
+ });
150
+
151
+ // Sort based on sortOrder
152
+ return mappedPlans.sort((a, b) => {
153
+ if (typeof a.sortOrder === 'number' && typeof b.sortOrder === 'number') {
154
+ return a.sortOrder - b.sortOrder;
155
+ }
156
+ return String(a.sortOrder).localeCompare(String(b.sortOrder));
157
+ });
158
+ }
159
+
160
+ // Legacy Mode
65
161
  if (iapProducts.length === 0) return plans;
66
162
  return plans.map(plan => {
67
163
  const iapProduct = iapProducts.find(p => p.productId === plan.id);
@@ -81,7 +177,7 @@ function OnboardingPaywallPanel({
81
177
  }
82
178
  return plan;
83
179
  });
84
- }, [plans, iapProducts]);
180
+ }, [products, plans, iapProducts]);
85
181
  const selectedPlan = displayPlans.find(p => p.id === selectedPlanId);
86
182
  const renderTitle = () => {
87
183
  if (!title) return null;
@@ -146,34 +242,74 @@ function OnboardingPaywallPanel({
146
242
  };
147
243
  const renderButton = () => {
148
244
  const handlePress = async () => {
149
- if (subscriptionSkus && selectedPlanId) {
245
+ console.log('OnboardingPaywallPanel: handlePress', {
246
+ selectedPlanId
247
+ });
248
+ if ((subscriptionSkus || products) && selectedPlanId) {
150
249
  try {
151
250
  const iapProduct = iapProducts.find(p => p.productId === selectedPlanId);
152
251
  if (iapProduct) {
153
- // Request subscription
154
- // For Android, we might need offerToken if available
155
- let offerToken;
156
- if (Platform.OS === 'android') {
157
- offerToken = iapProduct.subscriptionOfferDetails?.[0]?.offerToken;
158
- }
159
- await requestSubscription({
160
- sku: selectedPlanId,
161
- ...(offerToken && {
162
- subscriptionOffers: [{
163
- sku: selectedPlanId,
164
- offerToken
165
- }]
166
- })
252
+ // Determine if it's a subscription or one-time purchase
253
+ // Subscriptions usually have 'subscriptionPeriodNumberIOS' or 'subscriptionOfferDetails'
254
+ const isSubscription = 'subscriptionPeriodNumberIOS' in iapProduct || 'subscriptionOfferDetails' in iapProduct;
255
+ console.log('OnboardingPaywallPanel: Processing purchase', {
256
+ isSubscription,
257
+ productId: iapProduct.productId
167
258
  });
168
- // If successful (no error thrown), we assume success or pending
169
- onPressContinue(selectedPlanId);
170
- return;
259
+ if (isSubscription) {
260
+ // For Android, we might need offerToken if available
261
+ let offerToken;
262
+ if (Platform.OS === 'android') {
263
+ offerToken = iapProduct.subscriptionOfferDetails?.[0]?.offerToken;
264
+ }
265
+ console.log('OnboardingPaywallPanel: Requesting subscription', {
266
+ sku: selectedPlanId,
267
+ offerToken
268
+ });
269
+ await requestSubscription({
270
+ sku: selectedPlanId,
271
+ ...(offerToken && {
272
+ subscriptionOffers: [{
273
+ sku: selectedPlanId,
274
+ offerToken
275
+ }]
276
+ })
277
+ });
278
+ } else {
279
+ console.log('OnboardingPaywallPanel: Requesting one-time purchase', {
280
+ sku: selectedPlanId
281
+ });
282
+ await requestPurchase({
283
+ sku: selectedPlanId
284
+ });
285
+ }
286
+ } else {
287
+ // Fallback if product not found in fetched list but ID exists
288
+ // Try subscription first as default legacy behavior
289
+ console.log('OnboardingPaywallPanel: Product not in IAP list, attempting fallback purchase', selectedPlanId);
290
+ try {
291
+ console.log('OnboardingPaywallPanel: Fallback - attempting requestSubscription', selectedPlanId);
292
+ await requestSubscription({
293
+ sku: selectedPlanId
294
+ });
295
+ } catch (subErr) {
296
+ console.warn('OnboardingPaywallPanel: Fallback requestSubscription failed', subErr);
297
+ console.log('OnboardingPaywallPanel: Fallback - attempting requestPurchase', selectedPlanId);
298
+ try {
299
+ await requestPurchase({
300
+ sku: selectedPlanId
301
+ });
302
+ } catch (purchErr) {
303
+ console.warn('OnboardingPaywallPanel: Fallback requestPurchase failed', purchErr);
304
+ throw purchErr;
305
+ }
306
+ }
171
307
  }
172
308
  } catch (err) {
173
- console.log('Purchase failed', err);
174
- // Optionally alert user?
175
- // Alert.alert('Purchase Failed', (err as any).message);
176
- // We allow fallback to onPressContinue? No, usually we stop.
309
+ console.warn('Purchase Error:', err);
310
+ if (typeof err === 'object') {
311
+ console.warn('Purchase Error Details:', JSON.stringify(err, null, 2));
312
+ }
177
313
  return;
178
314
  }
179
315
  }
@@ -265,22 +401,22 @@ const createStyles = theme => StyleSheet.create({
265
401
  },
266
402
  sheetContainer: {
267
403
  flex: 1,
268
- marginTop: -6,
404
+ marginTop: -24,
269
405
  backgroundColor: theme.bg.secondary,
270
- borderTopLeftRadius: 32,
271
- borderTopRightRadius: 32,
272
- overflow: 'hidden'
406
+ borderTopLeftRadius: 30,
407
+ borderTopRightRadius: 30,
408
+ overflow: 'scroll'
273
409
  },
274
410
  container: {
275
411
  flex: 1
276
412
  },
277
413
  contentContainer: {
278
- paddingBottom: 40
414
+ paddingBottom: 24
279
415
  },
280
416
  footerContainer: {
281
- paddingHorizontal: 16,
282
- paddingBottom: 40,
283
- paddingTop: 16,
417
+ paddingHorizontal: 8,
418
+ marginBottom: 40,
419
+ paddingTop: 4,
284
420
  backgroundColor: theme.bg.secondary
285
421
  },
286
422
  contentWrapper: {
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","useState","useEffect","Image","StyleSheet","Text","View","TouchableOpacity","ScrollView","Dimensions","Platform","initConnection","getSubscriptions","requestSubscription","endConnection","useTheme","PrimaryButton","fontSizes","lineHeights","jsx","_jsx","jsxs","_jsxs","height","screenHeight","get","OnboardingPaywallPanel","onPressContinue","title","subtitle","button","image","plans","helperTextContinue","onRestorePurchase","onTerms","onPrivacy","subscriptionSkus","theme","styles","createStyles","selectedPlanId","setSelectedPlanId","id","iapProducts","setIapProducts","isMounted","skus","select","ios","android","length","fetchProducts","products","err","console","warn","displayPlans","map","plan","iapProduct","find","p","productId","price","OS","localizedPrice","offer","subscriptionOfferDetails","pricingPhases","pricingPhaseList","formattedPrice","selectedPlan","renderTitle","style","text","line1","titleText","children","renderSubtitle","line2","subtitleText","renderFeatures","features","featuresContainer","feature","index","featureRow","checkIcon","featureText","renderPlans","plansContainer","isSelected","planCard","planCardSelected","onPress","activeOpacity","planTitle","planTitleSelected","interval","planInterval","planIntervalSelected","planPrice","planPriceSelected","renderButton","handlePress","offerToken","sku","subscriptionOffers","log","renderFooterLinks","footerLinksContainer","footerLinkText","footerLinkSeparator","mainContainer","headerImageContainer","source","resizeMode","sheetContainer","container","contentContainerStyle","contentContainer","showsVerticalScrollIndicator","bounces","contentWrapper","headerContainer","footerContainer","helperText","create","flex","backgroundColor","bg","secondary","width","marginTop","borderTopLeftRadius","borderTopRightRadius","overflow","paddingBottom","paddingHorizontal","paddingTop","alignItems","marginBottom","fontSize","xxl","lineHeight","textAlign","color","primary","md","fontFamily","fonts","introTitle","fontWeight","introSubtitle","flexDirection","accent","lg","marginRight","gap","justifyContent","padding","minHeight","borderRadius","borderWidth","borderColor","label","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","sm","xs"],"sourceRoot":"../../../../src","sources":["spill-onboarding/components/OnboardingPaywallPanel.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","useState","useEffect","Image","StyleSheet","Text","View","TouchableOpacity","ScrollView","Dimensions","Platform","initConnection","getSubscriptions","getProducts","requestSubscription","requestPurchase","endConnection","useTheme","PrimaryButton","fontSizes","lineHeights","jsx","_jsx","jsxs","_jsxs","height","screenHeight","get","OnboardingPaywallPanel","onPressContinue","title","subtitle","button","image","plans","products","helperTextContinue","onRestorePurchase","onTerms","onPrivacy","subscriptionSkus","theme","styles","createStyles","initialPlanId","length","firstProduct","firstSku","Array","isArray","SKus","skusObj","skus","select","ios","android","id","selectedPlanId","setSelectedPlanId","iapProducts","setIapProducts","isMounted","fetchIapProducts","subs","prods","Promise","all","catch","allItems","uniqueItems","from","Map","map","item","productId","values","err","console","warn","allSkus","flatMap","p","displayPlans","mappedPlans","config","targetSkus","iapProduct","find","includes","price","OS","localizedPrice","offer","subscriptionOfferDetails","pricingPhases","pricingPhaseList","formattedPrice","features","featues","interval","sortOrder","sort","a","b","String","localeCompare","plan","selectedPlan","renderTitle","style","text","line1","titleText","children","renderSubtitle","line2","subtitleText","renderFeatures","featuresContainer","feature","index","featureRow","checkIcon","featureText","renderPlans","plansContainer","isSelected","planCard","planCardSelected","onPress","activeOpacity","planTitle","planTitleSelected","planInterval","planIntervalSelected","planPrice","planPriceSelected","renderButton","handlePress","log","isSubscription","offerToken","sku","subscriptionOffers","subErr","purchErr","JSON","stringify","renderFooterLinks","footerLinksContainer","footerLinkText","footerLinkSeparator","mainContainer","headerImageContainer","source","resizeMode","sheetContainer","container","contentContainerStyle","contentContainer","showsVerticalScrollIndicator","bounces","contentWrapper","headerContainer","footerContainer","helperText","create","flex","backgroundColor","bg","secondary","width","marginTop","borderTopLeftRadius","borderTopRightRadius","overflow","paddingBottom","paddingHorizontal","marginBottom","paddingTop","alignItems","fontSize","xxl","lineHeight","textAlign","color","primary","md","fontFamily","fonts","introTitle","fontWeight","introSubtitle","flexDirection","accent","lg","marginRight","gap","justifyContent","padding","minHeight","borderRadius","borderWidth","borderColor","label","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","sm","xs"],"sourceRoot":"../../../../src","sources":["spill-onboarding/components/OnboardingPaywallPanel.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
1
  import type { OnboardingPaywallPanelProps } from '../types';
2
- declare function OnboardingPaywallPanel({ onPressContinue, title, subtitle, button, image, plans, helperTextContinue, onRestorePurchase, onTerms, onPrivacy, subscriptionSkus, }: OnboardingPaywallPanelProps): import("react/jsx-runtime").JSX.Element;
2
+ declare function OnboardingPaywallPanel({ onPressContinue, title, subtitle, button, image, plans, products, helperTextContinue, onRestorePurchase, onTerms, onPrivacy, subscriptionSkus, }: OnboardingPaywallPanelProps): import("react/jsx-runtime").JSX.Element;
3
3
  export default OnboardingPaywallPanel;
4
4
  //# sourceMappingURL=OnboardingPaywallPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OnboardingPaywallPanel.d.ts","sourceRoot":"","sources":["../../../../../src/spill-onboarding/components/OnboardingPaywallPanel.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAI5D,iBAAS,sBAAsB,CAAC,EAC9B,eAAe,EACf,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,KAAK,EACL,kBAAkB,EAClB,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,gBAAgB,GACjB,EAAE,2BAA2B,2CAqR7B;AAED,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"OnboardingPaywallPanel.d.ts","sourceRoot":"","sources":["../../../../../src/spill-onboarding/components/OnboardingPaywallPanel.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,2BAA2B,EAAe,MAAM,UAAU,CAAC;AAIzE,iBAAS,sBAAsB,CAAC,EAC9B,eAAe,EACf,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,KAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,gBAAgB,GACjB,EAAE,2BAA2B,2CA4b7B;AAED,eAAe,sBAAsB,CAAC"}
@@ -200,6 +200,10 @@ export interface OnboardingProps {
200
200
  */
201
201
  paywallPanel?: OnboardingPaywallPanelConfig;
202
202
  }
203
+ export interface PlatformSku {
204
+ ios?: string[];
205
+ android?: string[];
206
+ }
203
207
  export interface PaywallPlan {
204
208
  id: string;
205
209
  title: string;
@@ -207,6 +211,19 @@ export interface PaywallPlan {
207
211
  interval?: string;
208
212
  features?: string[];
209
213
  }
214
+ /**
215
+ * Simplified configuration for a single paywall product/plan.
216
+ */
217
+ export interface PaywallProductConfig {
218
+ /** SKUs for different platforms. */
219
+ SKus: PlatformSku | string[];
220
+ /** Main product title/name. */
221
+ title: string;
222
+ /** Array of product features. */
223
+ featues: string[];
224
+ /** Numeric or alphanumeric sorting preference. */
225
+ sortOrder: number | string;
226
+ }
210
227
  /**
211
228
  * Props for the paywall panel.
212
229
  */
@@ -217,8 +234,16 @@ export interface OnboardingPaywallPanelProps {
217
234
  title?: string | ReactNode;
218
235
  /** Subtitle content. */
219
236
  subtitle?: string | ReactNode;
220
- /** List of plans to display. */
221
- plans: PaywallPlan[];
237
+ /**
238
+ * List of plans to display.
239
+ * Required if `products` is not provided.
240
+ */
241
+ plans?: PaywallPlan[];
242
+ /**
243
+ * Simplified configuration for paywall products.
244
+ * If provided, handles fetching and displaying products automatically.
245
+ */
246
+ products?: PaywallProductConfig[];
222
247
  /**
223
248
  * Button content. Either a simple string label or a render function.
224
249
  */
@@ -249,10 +274,7 @@ export interface OnboardingPaywallPanelProps {
249
274
  * If provided, the component will attempt to fetch product details from the store
250
275
  * using react-native-iap and handle purchases.
251
276
  */
252
- subscriptionSkus?: {
253
- ios?: string[];
254
- android?: string[];
255
- };
277
+ subscriptionSkus?: PlatformSku;
256
278
  }
257
279
  type OnboardingPaywallPanelConfig = OnboardingPaywallPanelProps | (({ onPressContinue, }: {
258
280
  onPressContinue: (planId: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/spill-onboarding/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/spill-onboarding/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,UAAU,EAAE;QACV;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;QAEhB;;WAEG;QACH,SAAS,EAAE,MAAM,CAAC;QAElB;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QAEd;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;OAEG;IACH,IAAI,EAAE;QACJ;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;QAEhB;;WAEG;QACH,SAAS,EAAE,MAAM,CAAC;QAElB;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,YAAY,EAAE,MAAM,IAAI,CAAC;IAEzB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B;;;OAGG;IACH,MAAM,EACF,MAAM,GACN,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE;QAAE,YAAY,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC,CAAC;IAEpE,+CAA+C;IAC/C,KAAK,CAAC,EAAE,mBAAmB,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;CACjD;AAED,KAAK,qBAAqB,GAAG;IAC3B,qEAAqE;IACrE,SAAS,CAAC,EAAE,KAAK,CAAC;IAElB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IAEpB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,KAAK,EAAE,mBAAmB,CAAC;IAE3B,kDAAkD;IAClD,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC5B,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B;;OAEG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE;QACjB,gCAAgC;QAChC,MAAM,EAAE,MAAM,IAAI,CAAC;QACnB,oCAAoC;QACpC,MAAM,EAAE,MAAM,IAAI,CAAC;QACnB,qCAAqC;QACrC,MAAM,EAAE,OAAO,CAAC;KACjB,KAAK,SAAS,CAAC;IAEhB,iDAAiD;IACjD,KAAK,EAAE,mBAAmB,CAAC;IAE3B,kDAAkD;IAClD,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IAEpB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB,mEAAmE;IACnE,aAAa,EAAE,OAAO,CAAC;IAEvB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,KAAK,oBAAoB,GACrB,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAC,GAC/C,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,IAAI,CAAA;CAAE,KAAK,SAAS,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,UAAU,EAAE,oBAAoB,CAAC;IAEjC,uCAAuC;IACvC,KAAK,EAAE,cAAc,EAAE,CAAC;IAExB,qDAAqD;IACrD,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3C,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,SAAS,CAAC;IAE7B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC;IAEjE,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAEzB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEnC,yEAAyE;IACzE,KAAK,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IAEjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,4BAA4B,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAAC;IAE7B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IAEd,iCAAiC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,kDAAkD;IAClD,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,kEAAkE;IAClE,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAE1C,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAElC;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC,CAAC;IAEvE,iDAAiD;IACjD,KAAK,CAAC,EAAE,mBAAmB,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;IAEhD,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,wCAAwC;IACxC,iBAAiB,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAE3D,wCAAwC;IACxC,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAEjD,sCAAsC;IACtC,SAAS,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAEnD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,WAAW,CAAC;CAChC;AAED,KAAK,4BAA4B,GAC7B,2BAA2B,GAC3B,CAAC,CAAC,EACA,eAAe,GAChB,EAAE;IACD,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C,KAAK,SAAS,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rn-onboarding-analytics",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
4
4
  "description": "Onboarding/tutorial flow for React Native with analytics.",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -38,7 +38,8 @@
38
38
  "prepare": "bob build",
39
39
  "prepack": "sed -i '' '1s|.*|![Banner](assets/banner.png)|' README.md",
40
40
  "postpack": "git checkout README.md",
41
- "release": "release-it --only-version"
41
+ "release": "release-it --only-version",
42
+ "watch:yalc": "nodemon --watch src --ext ts,tsx,js,json --exec 'npm run prepare && yalc push'"
42
43
  },
43
44
  "keywords": [
44
45
  "react-native",
@@ -77,7 +78,8 @@
77
78
  "eslint-plugin-prettier": "^5.5.4",
78
79
  "expo-image": "^3.0.8",
79
80
  "jest": "^29.7.0",
80
- "prettier": "^3.6.2",
81
+ "nodemon": "^3.1.11",
82
+ "prettier": "^3.7.4",
81
83
  "react": "19.1.0",
82
84
  "react-native": "0.81.4",
83
85
  "react-native-builder-bob": "^0.40.13",
@@ -12,15 +12,18 @@ import {
12
12
  import {
13
13
  initConnection,
14
14
  getSubscriptions,
15
+ getProducts,
15
16
  requestSubscription,
17
+ requestPurchase,
16
18
  endConnection,
17
19
  type Subscription,
20
+ type Product,
18
21
  } from 'react-native-iap';
19
22
  import { useTheme } from '../../utils/ThemeContext';
20
23
  import type { Theme } from '../../utils/theme';
21
24
  import PrimaryButton from '../buttons/PrimaryButton';
22
25
  import { fontSizes, lineHeights } from '../../utils/fontStyles';
23
- import type { OnboardingPaywallPanelProps } from '../types';
26
+ import type { OnboardingPaywallPanelProps, PlatformSku } from '../types';
24
27
 
25
28
  const { height: screenHeight } = Dimensions.get('window');
26
29
 
@@ -30,7 +33,8 @@ function OnboardingPaywallPanel({
30
33
  subtitle,
31
34
  button,
32
35
  image,
33
- plans,
36
+ plans = [],
37
+ products,
34
38
  helperTextContinue,
35
39
  onRestorePurchase,
36
40
  onTerms,
@@ -39,48 +43,159 @@ function OnboardingPaywallPanel({
39
43
  }: OnboardingPaywallPanelProps) {
40
44
  const { theme } = useTheme();
41
45
  const styles = useMemo(() => createStyles(theme), [theme]);
42
- const [selectedPlanId, setSelectedPlanId] = useState<string>(
43
- plans[0]?.id || ''
46
+
47
+ // Initialize selectedPlanId based on available configuration
48
+ const initialPlanId = useMemo(() => {
49
+ if (products && products.length > 0) {
50
+ // Sort first to pick the first one correctly if needed,
51
+ // but simplistic approach: pick the first product's first SKU for the current platform
52
+ const firstProduct = products[0];
53
+ if (!firstProduct) return '';
54
+ let firstSku = '';
55
+ if (Array.isArray(firstProduct.SKus)) {
56
+ firstSku = firstProduct.SKus[0] || '';
57
+ } else {
58
+ const skusObj = firstProduct.SKus as PlatformSku;
59
+ const skus = Platform.select({
60
+ ios: skusObj.ios,
61
+ android: skusObj.android,
62
+ });
63
+ firstSku = skus?.[0] || '';
64
+ }
65
+ return firstSku;
66
+ }
67
+ return plans?.[0]?.id || '';
68
+ }, [products, plans]);
69
+
70
+ const [selectedPlanId, setSelectedPlanId] = useState<string>(initialPlanId);
71
+ const [iapProducts, setIapProducts] = useState<(Subscription | Product)[]>(
72
+ []
44
73
  );
45
- const [iapProducts, setIapProducts] = useState<Subscription[]>([]);
46
74
 
47
75
  useEffect(() => {
48
76
  let isMounted = true;
49
77
 
50
- if (subscriptionSkus) {
78
+ const fetchIapProducts = async (skus: string[]) => {
79
+ try {
80
+ await initConnection();
81
+ if (!isMounted) return;
82
+
83
+ // Fetch both subscriptions and products to cover all bases
84
+ const [subs, prods] = await Promise.all([
85
+ getSubscriptions({ skus }).catch(() => [] as Subscription[]),
86
+ getProducts({ skus }).catch(() => [] as Product[]),
87
+ ]);
88
+
89
+ if (isMounted) {
90
+ // Filter out duplicates if any (unlikely but safe)
91
+ const allItems = [...subs, ...prods];
92
+ const uniqueItems = Array.from(
93
+ new Map(allItems.map((item) => [item.productId, item])).values()
94
+ );
95
+ setIapProducts(uniqueItems);
96
+ }
97
+ } catch (err) {
98
+ console.warn('IAP Error:', err);
99
+ }
100
+ };
101
+
102
+ if (products && products.length > 0) {
103
+ // Collect all SKUs from all products for current platform
104
+ const allSkus = products.flatMap((p) => {
105
+ if (Array.isArray(p.SKus)) {
106
+ return p.SKus;
107
+ }
108
+ const skusObj = p.SKus as PlatformSku;
109
+ const skus = Platform.select({
110
+ ios: skusObj.ios,
111
+ android: skusObj.android,
112
+ });
113
+ return skus || [];
114
+ });
115
+
116
+ if (allSkus.length > 0) {
117
+ fetchIapProducts(allSkus);
118
+ }
119
+ } else if (subscriptionSkus) {
51
120
  const skus = Platform.select({
52
121
  ios: subscriptionSkus.ios,
53
122
  android: subscriptionSkus.android,
54
123
  });
55
124
 
56
125
  if (skus && skus.length > 0) {
57
- const fetchProducts = async () => {
58
- try {
59
- await initConnection();
60
- if (!isMounted) return;
61
-
62
- const products = await getSubscriptions({ skus });
63
- if (isMounted) {
64
- setIapProducts(products);
65
- }
66
- } catch (err) {
67
- console.warn('IAP Error:', err);
68
- }
69
- };
70
-
71
- fetchProducts();
126
+ fetchIapProducts(skus);
72
127
  }
73
128
  }
74
129
 
75
130
  return () => {
76
131
  isMounted = false;
77
- if (subscriptionSkus) {
132
+ if (subscriptionSkus || products) {
78
133
  endConnection();
79
134
  }
80
135
  };
81
- }, [subscriptionSkus]);
136
+ }, [subscriptionSkus, products]);
82
137
 
83
138
  const displayPlans = useMemo(() => {
139
+ // New Configuration Mode
140
+ if (products && products.length > 0) {
141
+ const mappedPlans = products.map((config) => {
142
+ // Find if any of the product's SKUs matches a fetched IAP product
143
+ let targetSkus: string[] = [];
144
+ if (Array.isArray(config.SKus)) {
145
+ targetSkus = config.SKus;
146
+ } else {
147
+ const skusObj = config.SKus as PlatformSku;
148
+ targetSkus =
149
+ Platform.select({
150
+ ios: skusObj.ios,
151
+ android: skusObj.android,
152
+ }) || [];
153
+ }
154
+
155
+ const iapProduct = iapProducts.find((p) =>
156
+ targetSkus.includes(p.productId)
157
+ );
158
+
159
+ let price = '...'; // Default loading state
160
+ let id = targetSkus[0] || ''; // Default ID to first SKU
161
+
162
+ if (iapProduct) {
163
+ id = iapProduct.productId;
164
+ if (Platform.OS === 'ios') {
165
+ price = (iapProduct as any).localizedPrice || price;
166
+ } else if (Platform.OS === 'android') {
167
+ const offer = (iapProduct as any).subscriptionOfferDetails?.[0];
168
+ price =
169
+ offer?.pricingPhases?.pricingPhaseList?.[0]?.formattedPrice ||
170
+ (iapProduct as any).localizedPrice ||
171
+ price;
172
+ }
173
+ }
174
+
175
+ return {
176
+ id,
177
+ title: config.title,
178
+ price,
179
+ // features with typo 'featues' mapped to correct prop 'features'
180
+ features: config.featues,
181
+ interval: '', // Could be inferred from IAP if needed
182
+ sortOrder: config.sortOrder,
183
+ };
184
+ });
185
+
186
+ // Sort based on sortOrder
187
+ return mappedPlans.sort((a, b) => {
188
+ if (
189
+ typeof a.sortOrder === 'number' &&
190
+ typeof b.sortOrder === 'number'
191
+ ) {
192
+ return a.sortOrder - b.sortOrder;
193
+ }
194
+ return String(a.sortOrder).localeCompare(String(b.sortOrder));
195
+ });
196
+ }
197
+
198
+ // Legacy Mode
84
199
  if (iapProducts.length === 0) return plans;
85
200
 
86
201
  return plans.map((plan) => {
@@ -104,7 +219,7 @@ function OnboardingPaywallPanel({
104
219
  }
105
220
  return plan;
106
221
  });
107
- }, [plans, iapProducts]);
222
+ }, [products, plans, iapProducts]);
108
223
 
109
224
  const selectedPlan = displayPlans.find((p) => p.id === selectedPlanId);
110
225
 
@@ -197,39 +312,95 @@ function OnboardingPaywallPanel({
197
312
 
198
313
  const renderButton = () => {
199
314
  const handlePress = async () => {
200
- if (subscriptionSkus && selectedPlanId) {
315
+ console.log('OnboardingPaywallPanel: handlePress', { selectedPlanId });
316
+ if ((subscriptionSkus || products) && selectedPlanId) {
201
317
  try {
202
318
  const iapProduct = iapProducts.find(
203
319
  (p) => p.productId === selectedPlanId
204
320
  );
205
321
  if (iapProduct) {
206
- // Request subscription
207
- // For Android, we might need offerToken if available
208
- let offerToken;
209
- if (Platform.OS === 'android') {
210
- offerToken = (iapProduct as any).subscriptionOfferDetails?.[0]
211
- ?.offerToken;
212
- }
213
-
214
- await requestSubscription({
215
- sku: selectedPlanId,
216
- ...(offerToken && {
217
- subscriptionOffers: [{ sku: selectedPlanId, offerToken }],
218
- }),
322
+ // Determine if it's a subscription or one-time purchase
323
+ // Subscriptions usually have 'subscriptionPeriodNumberIOS' or 'subscriptionOfferDetails'
324
+ const isSubscription =
325
+ 'subscriptionPeriodNumberIOS' in iapProduct ||
326
+ 'subscriptionOfferDetails' in iapProduct;
327
+
328
+ console.log('OnboardingPaywallPanel: Processing purchase', {
329
+ isSubscription,
330
+ productId: iapProduct.productId,
219
331
  });
220
- // If successful (no error thrown), we assume success or pending
221
- onPressContinue(selectedPlanId);
222
- return;
332
+
333
+ if (isSubscription) {
334
+ // For Android, we might need offerToken if available
335
+ let offerToken;
336
+ if (Platform.OS === 'android') {
337
+ offerToken = (iapProduct as any).subscriptionOfferDetails?.[0]
338
+ ?.offerToken;
339
+ }
340
+
341
+ console.log('OnboardingPaywallPanel: Requesting subscription', {
342
+ sku: selectedPlanId,
343
+ offerToken,
344
+ });
345
+ await requestSubscription({
346
+ sku: selectedPlanId,
347
+ ...(offerToken && {
348
+ subscriptionOffers: [{ sku: selectedPlanId, offerToken }],
349
+ }),
350
+ });
351
+ } else {
352
+ console.log(
353
+ 'OnboardingPaywallPanel: Requesting one-time purchase',
354
+ { sku: selectedPlanId }
355
+ );
356
+ await requestPurchase({
357
+ sku: selectedPlanId,
358
+ });
359
+ }
360
+ } else {
361
+ // Fallback if product not found in fetched list but ID exists
362
+ // Try subscription first as default legacy behavior
363
+ console.log(
364
+ 'OnboardingPaywallPanel: Product not in IAP list, attempting fallback purchase',
365
+ selectedPlanId
366
+ );
367
+ try {
368
+ console.log(
369
+ 'OnboardingPaywallPanel: Fallback - attempting requestSubscription',
370
+ selectedPlanId
371
+ );
372
+ await requestSubscription({ sku: selectedPlanId });
373
+ } catch (subErr) {
374
+ console.warn(
375
+ 'OnboardingPaywallPanel: Fallback requestSubscription failed',
376
+ subErr
377
+ );
378
+ console.log(
379
+ 'OnboardingPaywallPanel: Fallback - attempting requestPurchase',
380
+ selectedPlanId
381
+ );
382
+ try {
383
+ await requestPurchase({ sku: selectedPlanId });
384
+ } catch (purchErr) {
385
+ console.warn(
386
+ 'OnboardingPaywallPanel: Fallback requestPurchase failed',
387
+ purchErr
388
+ );
389
+ throw purchErr;
390
+ }
391
+ }
223
392
  }
224
393
  } catch (err) {
225
- console.log('Purchase failed', err);
226
- // Optionally alert user?
227
- // Alert.alert('Purchase Failed', (err as any).message);
228
- // We allow fallback to onPressContinue? No, usually we stop.
394
+ console.warn('Purchase Error:', err);
395
+ if (typeof err === 'object') {
396
+ console.warn(
397
+ 'Purchase Error Details:',
398
+ JSON.stringify(err, null, 2)
399
+ );
400
+ }
229
401
  return;
230
402
  }
231
403
  }
232
-
233
404
  onPressContinue(selectedPlanId);
234
405
  };
235
406
 
@@ -329,22 +500,22 @@ const createStyles = (theme: Theme) =>
329
500
  },
330
501
  sheetContainer: {
331
502
  flex: 1,
332
- marginTop: -6,
503
+ marginTop: -24,
333
504
  backgroundColor: theme.bg.secondary,
334
- borderTopLeftRadius: 32,
335
- borderTopRightRadius: 32,
336
- overflow: 'hidden',
505
+ borderTopLeftRadius: 30,
506
+ borderTopRightRadius: 30,
507
+ overflow: 'scroll',
337
508
  },
338
509
  container: {
339
510
  flex: 1,
340
511
  },
341
512
  contentContainer: {
342
- paddingBottom: 40,
513
+ paddingBottom: 24,
343
514
  },
344
515
  footerContainer: {
345
- paddingHorizontal: 16,
346
- paddingBottom: 40,
347
- paddingTop: 16,
516
+ paddingHorizontal: 8,
517
+ marginBottom: 40,
518
+ paddingTop: 4,
348
519
  backgroundColor: theme.bg.secondary,
349
520
  },
350
521
  contentWrapper: {
@@ -257,6 +257,11 @@ export interface OnboardingProps {
257
257
  paywallPanel?: OnboardingPaywallPanelConfig;
258
258
  }
259
259
 
260
+ export interface PlatformSku {
261
+ ios?: string[];
262
+ android?: string[];
263
+ }
264
+
260
265
  export interface PaywallPlan {
261
266
  id: string;
262
267
  title: string;
@@ -265,6 +270,23 @@ export interface PaywallPlan {
265
270
  features?: string[];
266
271
  }
267
272
 
273
+ /**
274
+ * Simplified configuration for a single paywall product/plan.
275
+ */
276
+ export interface PaywallProductConfig {
277
+ /** SKUs for different platforms. */
278
+ SKus: PlatformSku | string[];
279
+
280
+ /** Main product title/name. */
281
+ title: string;
282
+
283
+ /** Array of product features. */
284
+ featues: string[];
285
+
286
+ /** Numeric or alphanumeric sorting preference. */
287
+ sortOrder: number | string;
288
+ }
289
+
268
290
  /**
269
291
  * Props for the paywall panel.
270
292
  */
@@ -278,8 +300,17 @@ export interface OnboardingPaywallPanelProps {
278
300
  /** Subtitle content. */
279
301
  subtitle?: string | ReactNode;
280
302
 
281
- /** List of plans to display. */
282
- plans: PaywallPlan[];
303
+ /**
304
+ * List of plans to display.
305
+ * Required if `products` is not provided.
306
+ */
307
+ plans?: PaywallPlan[];
308
+
309
+ /**
310
+ * Simplified configuration for paywall products.
311
+ * If provided, handles fetching and displaying products automatically.
312
+ */
313
+ products?: PaywallProductConfig[];
283
314
 
284
315
  /**
285
316
  * Button content. Either a simple string label or a render function.
@@ -306,10 +337,7 @@ export interface OnboardingPaywallPanelProps {
306
337
  * If provided, the component will attempt to fetch product details from the store
307
338
  * using react-native-iap and handle purchases.
308
339
  */
309
- subscriptionSkus?: {
310
- ios?: string[];
311
- android?: string[];
312
- };
340
+ subscriptionSkus?: PlatformSku;
313
341
  }
314
342
 
315
343
  type OnboardingPaywallPanelConfig =