react-native-rnx
Advanced tools
@@ -72,13 +72,2 @@ "use strict"; | ||
| }); | ||
| var _iap = require("./iap"); | ||
| Object.keys(_iap).forEach(function (key) { | ||
| if (key === "default" || key === "__esModule") return; | ||
| if (key in exports && exports[key] === _iap[key]) return; | ||
| Object.defineProperty(exports, key, { | ||
| enumerable: true, | ||
| get: function () { | ||
| return _iap[key]; | ||
| } | ||
| }); | ||
| }); | ||
| var _rate = require("./rate"); | ||
@@ -85,0 +74,0 @@ Object.keys(_rate).forEach(function (key) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"names":["_navigation","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_theme","_ui","_localization","_utils","_store","_iap","_rate"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]} | ||
| {"version":3,"names":["_navigation","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_theme","_ui","_localization","_utils","_store","_rate"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]} |
@@ -9,4 +9,3 @@ "use strict"; | ||
| export * from './store'; | ||
| export * from './iap'; | ||
| export * from './rate'; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"names":[],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,cAAc;AAC5B,cAAc,SAAS;AACvB,cAAc,MAAM;AACpB,cAAc,gBAAgB;AAC9B,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,QAAQ","ignoreList":[]} | ||
| {"version":3,"names":[],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,cAAc;AAC5B,cAAc,SAAS;AACvB,cAAc,MAAM;AACpB,cAAc,gBAAgB;AAC9B,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,QAAQ","ignoreList":[]} |
@@ -7,4 +7,3 @@ export * from './navigation'; | ||
| export * from './store'; | ||
| export * from './iap'; | ||
| export * from './rate'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"} |
+1
-3
| { | ||
| "name": "react-native-rnx", | ||
| "version": "0.5.90", | ||
| "version": "0.5.92", | ||
| "description": "BerthX libs", | ||
@@ -74,3 +74,2 @@ "react-native": "src/index", | ||
| "react-native-gesture-handler": "^1.10.3", | ||
| "react-native-iap": "^12.2.0", | ||
| "react-native-localize": "^2.0.2", | ||
@@ -98,3 +97,2 @@ "react-native-rate": "^1.2.6", | ||
| "react-native-gesture-handler": "^1.10.3", | ||
| "react-native-iap": "^6.0.6", | ||
| "react-native-localize": "^2.0.2", | ||
@@ -101,0 +99,0 @@ "react-native-rate": "^1.2.6", |
+0
-1
@@ -7,3 +7,2 @@ export * from './navigation'; | ||
| export * from './store'; | ||
| export * from './iap'; | ||
| export * from './rate'; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.requestPurchase = exports.initIAP = exports.hasPurchasedPremium = exports.getIapSubscriptions = exports.closeIAP = void 0; | ||
| var _reactNative = require("react-native"); | ||
| var _reactNativeIap = require("react-native-iap"); | ||
| let PREMIUM_PRODUCT_LIST = []; | ||
| let purchaseUpdatedSubscription; | ||
| let purchaseErrorSubscription; | ||
| let onPurchaseSuccess; | ||
| let onPurchaseError; | ||
| const initIAP = premiumSubscriptionIds => { | ||
| PREMIUM_PRODUCT_LIST = premiumSubscriptionIds; | ||
| try { | ||
| console.log('[rnx] initIAP initConnection'); | ||
| // Init connection to store | ||
| (0, _reactNativeIap.initConnection)().then(async () => { | ||
| // Clear pending transactions depending on devices | ||
| if (_reactNative.Platform.OS === 'android') { | ||
| // we make sure that "ghost" pending payment are removed | ||
| // (ghost = failed pending payment that are still marked as pending in Google's native Vending module cache) | ||
| console.log('[rnx] initIAP flushFailedPurchasesCachedAsPendingAndroid'); | ||
| await (0, _reactNativeIap.flushFailedPurchasesCachedAsPendingAndroid)().catch(e => { | ||
| console.log('[rnx] initIAP flushFailedPurchasesCachedAsPendingAndroid error', e); | ||
| // exception can happen here if: | ||
| // - there are pending purchases that are still pending (we can't consume a pending purchase) | ||
| // in any case, you might not want to do anything special with the error | ||
| }); | ||
| } else if (_reactNative.Platform.OS === 'ios') { | ||
| console.log('[rnx] initIAP clearTransactionIOS'); | ||
| await (0, _reactNativeIap.clearTransactionIOS)(); | ||
| } | ||
| // Start purchase listeners | ||
| console.log('[rnx] initIAP listen purchaseUpdatedListener'); | ||
| // Case purchase error | ||
| purchaseErrorSubscription = (0, _reactNativeIap.purchaseErrorListener)(error => { | ||
| console.log('[rnx] IAP purchaseErrorListener triggered error', error); | ||
| onPurchaseError && onPurchaseError(); | ||
| }); | ||
| // Case purchase success | ||
| purchaseUpdatedSubscription = (0, _reactNativeIap.purchaseUpdatedListener)(async purchase => { | ||
| console.log('[rnx] IAP purchaseUpdatedListener triggered purchase', purchase); | ||
| await (0, _reactNativeIap.finishTransaction)({ | ||
| purchase, | ||
| isConsumable: false | ||
| }); | ||
| if (PREMIUM_PRODUCT_LIST.map(p => p.id.toLocaleLowerCase()).includes(purchase.productId.toLocaleLowerCase())) { | ||
| onPurchaseSuccess && onPurchaseSuccess(purchase.productId); | ||
| } else { | ||
| console.log('[rnx] IAP purchaseUpdatedListener error, purchase product id does not match our list of products', purchase.productId); | ||
| } | ||
| }); | ||
| }); | ||
| } catch (e) { | ||
| console.error('[rnx] initIAP error', e); | ||
| } | ||
| }; | ||
| exports.initIAP = initIAP; | ||
| const closeIAP = () => { | ||
| console.log('[rnx] closeIAP endConnection'); | ||
| if (purchaseUpdatedSubscription) { | ||
| purchaseUpdatedSubscription.remove(); | ||
| purchaseUpdatedSubscription = undefined; | ||
| } | ||
| if (purchaseErrorSubscription) { | ||
| purchaseErrorSubscription.remove(); | ||
| purchaseErrorSubscription = undefined; | ||
| } | ||
| (0, _reactNativeIap.endConnection)(); | ||
| }; | ||
| exports.closeIAP = closeIAP; | ||
| const checkInitGuard = () => { | ||
| if (!PREMIUM_PRODUCT_LIST.length) { | ||
| throw '[rnx] You need to call initIAP first'; | ||
| } | ||
| }; | ||
| const hasPurchasedPremium = async () => { | ||
| checkInitGuard(); | ||
| try { | ||
| console.log('[rnx] hasPurchasedPremium getAvailablePurchases'); | ||
| const purchases = await (0, _reactNativeIap.getAvailablePurchases)(); | ||
| console.log('[rnx] hasPurchasedPremium purchases.length', purchases.length, 'ids', purchases.map(p => p.productId)); | ||
| return !!purchases.find(p => PREMIUM_PRODUCT_LIST.filter(p2 => p.productId.toLocaleLowerCase() === p2.id.toLocaleLowerCase()).length); | ||
| } catch (e) { | ||
| console.log('[rnx] restore error', e); | ||
| return Promise.reject(); | ||
| } | ||
| }; | ||
| exports.hasPurchasedPremium = hasPurchasedPremium; | ||
| const requestPurchase = async subscription => { | ||
| checkInitGuard(); | ||
| try { | ||
| console.log('[rnx] requestPurchase'); | ||
| await (0, _reactNativeIap.requestSubscription)({ | ||
| sku: subscription.id, | ||
| andDangerouslyFinishTransactionAutomaticallyIOS: false, | ||
| // OfferToken will be only filled for android | ||
| ...(subscription.offerToken && { | ||
| subscriptionOffers: [{ | ||
| sku: subscription.id, | ||
| offerToken: subscription.offerToken | ||
| }] | ||
| }) | ||
| }); | ||
| console.log('[rnx] requestPurchase done'); | ||
| return new Promise(resolve => { | ||
| onPurchaseSuccess = sku => { | ||
| console.log('[rnx] requestPurchase onPurchaseSuccess triggered for product', sku); | ||
| if (PREMIUM_PRODUCT_LIST.map(p => p.id.toLocaleLowerCase()).includes(sku.toLocaleLowerCase())) { | ||
| console.log('[rnx] requestPurchase onPurchaseSuccess productId found. Purchase validated'); | ||
| return resolve(true); | ||
| } else { | ||
| console.log('[rnx] requestPurchase onPurchaseSuccess productId not matching'); | ||
| return resolve(false); | ||
| } | ||
| }; | ||
| onPurchaseError = () => { | ||
| console.log('[rnx] requestPurchase onPurchaseError triggered'); | ||
| return resolve(false); | ||
| }; | ||
| }); | ||
| } catch (e) { | ||
| console.log('[rnx] requestPurchase error', e); | ||
| return Promise.reject(); | ||
| } | ||
| }; | ||
| exports.requestPurchase = requestPurchase; | ||
| const getIapSubscriptions = async () => { | ||
| checkInitGuard(); | ||
| console.log('[rnx] getIapSubscriptions'); | ||
| const products = await (0, _reactNativeIap.getSubscriptions)({ | ||
| skus: PREMIUM_PRODUCT_LIST.map(o => o.id) | ||
| }); | ||
| console.log('[rnx] getIapSubscriptions products.length', products.length); | ||
| if (products && products.length) { | ||
| return products.map(p => { | ||
| const base = PREMIUM_PRODUCT_LIST.find(p2 => p2.id === p.productId); | ||
| // Convert android sub | ||
| if (p.platform === _reactNativeIap.SubscriptionPlatform.android) { | ||
| const platformProduct = p; | ||
| const prices = platformProduct.subscriptionOfferDetails[0].pricingPhases.pricingPhaseList.find(_p => _p.formattedPrice.toLocaleLowerCase() !== 'free') || platformProduct.subscriptionOfferDetails[0].pricingPhases.pricingPhaseList[platformProduct.subscriptionOfferDetails[0].pricingPhases.pricingPhaseList.length - 1]; | ||
| return { | ||
| id: platformProduct.productId, | ||
| price: parseFloat(prices.priceAmountMicros) / 1000000, | ||
| localizedPrice: prices.formattedPrice, | ||
| durationMonth: base?.durationMonth || 0, | ||
| freeTrialDaysDuration: base?.freeTrialDaysDuration, | ||
| offerToken: platformProduct.subscriptionOfferDetails[0].offerToken | ||
| }; | ||
| } | ||
| // Convert ios sub | ||
| const platformProduct = p; | ||
| return { | ||
| id: platformProduct.productId, | ||
| price: parseFloat(platformProduct.price), | ||
| localizedPrice: platformProduct.localizedPrice, | ||
| durationMonth: base?.durationMonth || 0, | ||
| freeTrialDaysDuration: base?.freeTrialDaysDuration | ||
| }; | ||
| }); | ||
| } | ||
| return []; | ||
| }; | ||
| exports.getIapSubscriptions = getIapSubscriptions; | ||
| //# sourceMappingURL=IAPService.js.map |
| {"version":3,"names":["_reactNative","require","_reactNativeIap","PREMIUM_PRODUCT_LIST","purchaseUpdatedSubscription","purchaseErrorSubscription","onPurchaseSuccess","onPurchaseError","initIAP","premiumSubscriptionIds","console","log","initConnection","then","Platform","OS","flushFailedPurchasesCachedAsPendingAndroid","catch","e","clearTransactionIOS","purchaseErrorListener","error","purchaseUpdatedListener","purchase","finishTransaction","isConsumable","map","p","id","toLocaleLowerCase","includes","productId","exports","closeIAP","remove","undefined","endConnection","checkInitGuard","length","hasPurchasedPremium","purchases","getAvailablePurchases","find","filter","p2","Promise","reject","requestPurchase","subscription","requestSubscription","sku","andDangerouslyFinishTransactionAutomaticallyIOS","offerToken","subscriptionOffers","resolve","getIapSubscriptions","products","getSubscriptions","skus","o","base","platform","SubscriptionPlatform","android","platformProduct","prices","subscriptionOfferDetails","pricingPhases","pricingPhaseList","_p","formattedPrice","price","parseFloat","priceAmountMicros","localizedPrice","durationMonth","freeTrialDaysDuration"],"sourceRoot":"../../../src","sources":["iap/IAPService.ts"],"mappings":"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","ignoreList":[]} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| var _useIsPremium = require("./useIsPremium"); | ||
| Object.keys(_useIsPremium).forEach(function (key) { | ||
| if (key === "default" || key === "__esModule") return; | ||
| if (key in exports && exports[key] === _useIsPremium[key]) return; | ||
| Object.defineProperty(exports, key, { | ||
| enumerable: true, | ||
| get: function () { | ||
| return _useIsPremium[key]; | ||
| } | ||
| }); | ||
| }); | ||
| var _IAPService = require("./IAPService"); | ||
| Object.keys(_IAPService).forEach(function (key) { | ||
| if (key === "default" || key === "__esModule") return; | ||
| if (key in exports && exports[key] === _IAPService[key]) return; | ||
| Object.defineProperty(exports, key, { | ||
| enumerable: true, | ||
| get: function () { | ||
| return _IAPService[key]; | ||
| } | ||
| }); | ||
| }); | ||
| var _UpgradeView = require("./UpgradeView"); | ||
| Object.keys(_UpgradeView).forEach(function (key) { | ||
| if (key === "default" || key === "__esModule") return; | ||
| if (key in exports && exports[key] === _UpgradeView[key]) return; | ||
| Object.defineProperty(exports, key, { | ||
| enumerable: true, | ||
| get: function () { | ||
| return _UpgradeView[key]; | ||
| } | ||
| }); | ||
| }); | ||
| var _useUpgrade = require("./useUpgrade"); | ||
| Object.keys(_useUpgrade).forEach(function (key) { | ||
| if (key === "default" || key === "__esModule") return; | ||
| if (key in exports && exports[key] === _useUpgrade[key]) return; | ||
| Object.defineProperty(exports, key, { | ||
| enumerable: true, | ||
| get: function () { | ||
| return _useUpgrade[key]; | ||
| } | ||
| }); | ||
| }); | ||
| var _usePremiumGuard = require("./usePremiumGuard"); | ||
| Object.keys(_usePremiumGuard).forEach(function (key) { | ||
| if (key === "default" || key === "__esModule") return; | ||
| if (key in exports && exports[key] === _usePremiumGuard[key]) return; | ||
| Object.defineProperty(exports, key, { | ||
| enumerable: true, | ||
| get: function () { | ||
| return _usePremiumGuard[key]; | ||
| } | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"names":["_useIsPremium","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_IAPService","_UpgradeView","_useUpgrade","_usePremiumGuard"],"sourceRoot":"../../../src","sources":["iap/index.ts"],"mappings":";;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,WAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,WAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,WAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,WAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,YAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,YAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,YAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,YAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,WAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,WAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,WAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,WAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,gBAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,gBAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,gBAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,gBAAA,CAAAR,GAAA;IAAA;EAAA;AAAA","ignoreList":[]} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.default = exports.UpgradeViewSheet = void 0; | ||
| var _react = _interopRequireWildcard(require("react")); | ||
| var _reactNative = require("react-native"); | ||
| var _reactNativeRnx = require("react-native-rnx"); | ||
| var _FontAwesome = _interopRequireDefault(require("react-native-vector-icons/FontAwesome5")); | ||
| var _reactNativeLinearGradient = _interopRequireDefault(require("react-native-linear-gradient")); | ||
| var _jsxRuntime = require("react/jsx-runtime"); | ||
| function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
| 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); } | ||
| 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 && {}.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; } | ||
| const getCurrency = str => { | ||
| return str.replace(/[\d,. ]+/, ''); | ||
| }; | ||
| const Component = ({ | ||
| screenHeight, | ||
| onCancel, | ||
| onContinue | ||
| }) => { | ||
| const { | ||
| localize | ||
| } = (0, _reactNativeRnx.useLocalization)(); | ||
| const theme = (0, _reactNativeRnx.useTheme)(); | ||
| const [iapList, setIapList] = (0, _react.useState)(); | ||
| const [selectedIap, setSelectedIap] = (0, _react.useState)(); | ||
| const [isLoading, setIsLoading] = (0, _react.useState)(true); | ||
| const [isLoadingRestore, setIsLoadingRestore] = (0, _react.useState)(false); | ||
| const [isLoadingPurchase, setIsLoadingPurchase] = (0, _react.useState)(false); | ||
| const { | ||
| setIsPremium | ||
| } = (0, _reactNativeRnx.useIsPremium)(); | ||
| (0, _react.useEffect)(() => { | ||
| (0, _reactNativeRnx.getIapSubscriptions)().then(list => { | ||
| const usableList = list.filter(l => l.durationMonth === 1 || l.durationMonth === 12); | ||
| setIapList(usableList.sort((a, b) => a.price - b.price)); | ||
| setSelectedIap(usableList.find(p => !!p.freeTrialDaysDuration) || usableList[0]); | ||
| setIsLoading(false); | ||
| }); | ||
| }, [setIapList, setIsLoading]); | ||
| const _close = (0, _react.useCallback)(() => { | ||
| onCancel(); | ||
| }, [onCancel]); | ||
| const _success = (0, _react.useCallback)(() => { | ||
| _reactNative.Alert.alert(localize('iap.successtitle'), localize('iap.successmsg'), [{ | ||
| text: localize('iap.continue'), | ||
| onPress: () => { | ||
| if (onContinue) { | ||
| onContinue(); | ||
| } else { | ||
| console.log('[rnx] UpgradeView close from _success'); | ||
| _close(); | ||
| } | ||
| } | ||
| }]); | ||
| }, [localize, onContinue, _close]); | ||
| const _restore = (0, _react.useCallback)(() => { | ||
| console.log('restore'); | ||
| setIsLoadingRestore(true); | ||
| (0, _reactNativeRnx.hasPurchasedPremium)().then(hasPurchase => { | ||
| setIsPremium(hasPurchase); | ||
| setIsLoadingRestore(false); | ||
| if (hasPurchase) { | ||
| _success(); | ||
| } else { | ||
| _reactNative.Alert.alert(localize('iap.restoreerrortitle'), localize('iap.restoreerrormsg')); | ||
| } | ||
| }); | ||
| }, [setIsPremium, localize, _success]); | ||
| const _subscribe = (0, _react.useCallback)(() => { | ||
| if (selectedIap) { | ||
| setIsLoadingPurchase(true); | ||
| (0, _reactNativeRnx.hasPurchasedPremium)().then(hasPurchase => { | ||
| if (hasPurchase) { | ||
| setIsPremium(true); | ||
| setIsLoadingPurchase(false); | ||
| _success(); | ||
| } else { | ||
| (0, _reactNativeRnx.requestPurchase)(selectedIap).then(_hasPurchase => { | ||
| setIsPremium(_hasPurchase); | ||
| setIsLoadingPurchase(false); | ||
| if (_hasPurchase) { | ||
| _success(); | ||
| } else { | ||
| _reactNative.Alert.alert(localize('iap.purchaseerrortitle'), localize('iap.purchaseerrormsg')); | ||
| } | ||
| }, () => { | ||
| // Error/canceled | ||
| setIsLoadingPurchase(false); | ||
| }); | ||
| } | ||
| }); | ||
| } | ||
| }, [setIsLoadingPurchase, selectedIap, localize, setIsPremium, _success]); | ||
| const _openTerms = (0, _react.useCallback)(() => { | ||
| _reactNative.Linking.openURL('https://berthx.io/terms/'); | ||
| }, []); | ||
| const _openPrivacy = (0, _react.useCallback)(() => { | ||
| _reactNative.Linking.openURL('https://berthx.io/policy/'); | ||
| }, []); | ||
| const _skip = (0, _react.useCallback)(() => { | ||
| console.log('[rnx] UpgradeView close from _skip'); | ||
| _close(); | ||
| }, [_close]); | ||
| const _tapClose = (0, _react.useCallback)(() => { | ||
| console.log('[rnx] UpgradeView close from _tapClose'); | ||
| _close(); | ||
| }, [_close]); | ||
| console.log('[rnx] UpgradeView render'); | ||
| return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { | ||
| style: [styles.root, { | ||
| height: screenHeight | ||
| }], | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, { | ||
| source: require('@assets/images/iap/bg.jpg'), | ||
| style: [styles.headerImg, { | ||
| backgroundColor: theme.borderColor | ||
| }], | ||
| resizeMode: "cover" | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, { | ||
| source: require('@assets/images/iap/bg-hd.jpg'), | ||
| style: [styles.headerImg, { | ||
| backgroundColor: theme.borderColor | ||
| }], | ||
| resizeMode: "cover" | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { | ||
| style: styles.content, | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeLinearGradient.default, { | ||
| colors: ['rgba(0, 0, 0, 0.6)', 'transparent'], | ||
| style: styles.featuresBackdropTop | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { | ||
| style: styles.topnav, | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { | ||
| style: styles.topnavLeft, | ||
| children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, { | ||
| style: [styles.topnavBtn], | ||
| onPress: _tapClose, | ||
| children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FontAwesome.default, { | ||
| name: "times", | ||
| color: "white", | ||
| size: 18 | ||
| }) | ||
| }) | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: styles.topnavTitle, | ||
| children: localize('iap.title') | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { | ||
| style: styles.topnavRight, | ||
| children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, { | ||
| style: [styles.topnavBtn], | ||
| onPress: _restore, | ||
| disabled: isLoading || isLoadingRestore || isLoadingPurchase, | ||
| children: isLoadingRestore ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, { | ||
| color: "white" | ||
| }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: styles.topnavBtnTxt, | ||
| children: localize('iap.restore') | ||
| }) | ||
| }) | ||
| })] | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { | ||
| style: styles.featuresContainer, | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeLinearGradient.default, { | ||
| colors: ['transparent', 'rgba(0, 0, 0, 0.9)'], | ||
| style: styles.featuresBackdrop | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: styles.featuresTitle, | ||
| children: localize('iap.featurestitle') | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: styles.featuresTxt, | ||
| children: localize('iap.features') | ||
| })] | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { | ||
| style: [styles.bottomContent, { | ||
| backgroundColor: theme.bgColor | ||
| }], | ||
| children: [iapList?.map(iap => /*#__PURE__*/(0, _jsxRuntime.jsx)(SubscribeRow, { | ||
| isActive: iap.id === selectedIap?.id, | ||
| iap: iap, | ||
| onPress: setSelectedIap | ||
| }, iap.id)), isLoading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { | ||
| style: styles.loadingRows, | ||
| children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, { | ||
| size: "large" | ||
| }) | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, { | ||
| onPress: _subscribe, | ||
| activeOpacity: 0.6, | ||
| disabled: isLoading || isLoadingRestore || isLoadingPurchase, | ||
| style: [styles.btnMain, { | ||
| backgroundColor: theme.primaryColor | ||
| }], | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { | ||
| style: styles.btnMainTitleContainer, | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: [styles.btnMainTitle, { | ||
| color: theme.txtColorOnPrimaryColor | ||
| }], | ||
| children: localize('iap.btnMain') | ||
| }), selectedIap?.freeTrialDaysDuration && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: [styles.btnMainSubtitle, { | ||
| color: theme.txtColorOnPrimaryColor | ||
| }], | ||
| children: localize('iap.autodeductAfter', { | ||
| x: selectedIap.freeTrialDaysDuration | ||
| }) | ||
| })] | ||
| }), isLoadingPurchase ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, { | ||
| style: styles.btnMainArrow, | ||
| color: theme.txtColorOnPrimaryColor | ||
| }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_FontAwesome.default, { | ||
| name: "chevron-right", | ||
| size: 20, | ||
| color: theme.txtColorOnPrimaryColor, | ||
| style: styles.btnMainArrow | ||
| })] | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Link, { | ||
| style: styles.skip, | ||
| title: localize('iap.skip'), | ||
| onPress: _skip | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: styles.disclaimer, | ||
| children: localize('iap.disclaimer') | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { | ||
| style: styles.policies, | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Link, { | ||
| title: localize('iap.terms'), | ||
| onPress: _openTerms | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Link, { | ||
| title: localize('iap.privacy'), | ||
| onPress: _openPrivacy | ||
| })] | ||
| })] | ||
| })] | ||
| })] | ||
| }); | ||
| }; | ||
| const SubscribeRow = props => { | ||
| const theme = (0, _reactNativeRnx.useTheme)(); | ||
| const { | ||
| localize | ||
| } = (0, _reactNativeRnx.useLocalization)(); | ||
| const { | ||
| iap | ||
| } = props; | ||
| const isDarkTheme = (0, _reactNative.useColorScheme)() === 'dark'; | ||
| return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, { | ||
| onPress: () => props.onPress(iap), | ||
| activeOpacity: 0.8, | ||
| style: [styles.row, props.isActive && (isDarkTheme ? styles.rowActiveDark : styles.rowActive)], | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { | ||
| style: [styles.check, { | ||
| borderColor: theme.primaryColor | ||
| }, props.isActive && { | ||
| backgroundColor: theme.primaryColor | ||
| }], | ||
| children: props.isActive && /*#__PURE__*/(0, _jsxRuntime.jsx)(_FontAwesome.default, { | ||
| name: "check", | ||
| color: theme.txtColorOnPrimaryColor, | ||
| size: 14 | ||
| }) | ||
| }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { | ||
| style: styles.rowContent, | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { | ||
| style: styles.rowTitleContainer, | ||
| children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: styles.rowTitle, | ||
| children: localize('iap.rowTitle', { | ||
| price: iap.localizedPrice, | ||
| duration: iap.durationMonth === 12 ? localize('iap.rowTitleYear') : localize('iap.rowTitleMonth') | ||
| }) | ||
| }), iap.durationMonth !== 1 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: styles.rowPricePerMonth, | ||
| children: localize('iap.rowPricePerMonth', { | ||
| price: `${getCurrency(iap.localizedPrice)}${(iap.price / iap.durationMonth).toFixed(2)}` | ||
| }) | ||
| })] | ||
| }), !!iap.freeTrialDaysDuration && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeRnx.Text, { | ||
| style: [styles.rowFreeTrial, { | ||
| color: theme.primaryTxtColor | ||
| }], | ||
| children: localize('iap.freetrial', { | ||
| duration: iap.freeTrialDaysDuration | ||
| }) | ||
| })] | ||
| }), !!iap.freeTrialDaysDuration && props.isActive && /*#__PURE__*/(0, _jsxRuntime.jsx)(_FontAwesome.default, { | ||
| name: "star", | ||
| solid: true, | ||
| color: "#efbb00", | ||
| size: 22 | ||
| })] | ||
| }); | ||
| }; | ||
| const styles = _reactNative.StyleSheet.create({ | ||
| root: {}, | ||
| headerImg: { | ||
| height: _reactNative.Dimensions.get('window').height - 300, | ||
| width: _reactNative.Dimensions.get('window').width, | ||
| borderTopLeftRadius: 15, | ||
| borderTopRightRadius: 15, | ||
| position: 'absolute', | ||
| left: 0, | ||
| right: 0, | ||
| top: 0, | ||
| overflow: 'hidden' | ||
| }, | ||
| content: { | ||
| position: 'absolute', | ||
| bottom: 0, | ||
| left: 0, | ||
| right: 0, | ||
| top: 0, | ||
| justifyContent: 'flex-end' | ||
| }, | ||
| bottomContent: { | ||
| borderTopLeftRadius: 15, | ||
| borderTopRightRadius: 15, | ||
| paddingTop: 10, | ||
| paddingBottom: 20 | ||
| }, | ||
| row: { | ||
| paddingVertical: 10, | ||
| paddingHorizontal: 15, | ||
| marginHorizontal: 10, | ||
| borderRadius: 10, | ||
| marginVertical: 2, | ||
| flexDirection: 'row', | ||
| alignItems: 'center', | ||
| minHeight: 50 | ||
| }, | ||
| rowActive: { | ||
| backgroundColor: '#eee' | ||
| }, | ||
| rowActiveDark: { | ||
| backgroundColor: '#222' | ||
| }, | ||
| rowContent: { | ||
| flex: 1 | ||
| }, | ||
| rowTitleContainer: { | ||
| flexDirection: 'row' | ||
| }, | ||
| check: { | ||
| borderWidth: 2, | ||
| borderRadius: 100, | ||
| height: 22, | ||
| width: 22, | ||
| justifyContent: 'center', | ||
| alignItems: 'center', | ||
| paddingLeft: 1, | ||
| marginRight: 10 | ||
| }, | ||
| rowTitle: { | ||
| fontWeight: '900', | ||
| fontSize: 14 | ||
| }, | ||
| rowPricePerMonth: { | ||
| fontWeight: '700', | ||
| fontSize: 13, | ||
| opacity: 0.7, | ||
| marginLeft: 5 | ||
| }, | ||
| rowFreeTrial: { | ||
| fontWeight: '900', | ||
| fontSize: 10 | ||
| }, | ||
| btnMain: { | ||
| flexDirection: 'row', | ||
| alignItems: 'center', | ||
| justifyContent: 'center', | ||
| minHeight: 65, | ||
| marginHorizontal: 15, | ||
| borderRadius: 12, | ||
| marginTop: 15 | ||
| }, | ||
| btnMainTitleContainer: { | ||
| alignItems: 'center' | ||
| }, | ||
| btnMainTitle: { | ||
| fontSize: 20, | ||
| fontWeight: '900' | ||
| }, | ||
| btnMainSubtitle: { | ||
| fontSize: 10, | ||
| fontWeight: '600' | ||
| }, | ||
| btnMainArrow: { | ||
| position: 'absolute', | ||
| right: 15 | ||
| }, | ||
| skip: { | ||
| marginTop: 10, | ||
| transform: [{ | ||
| scale: 0.9 | ||
| }] | ||
| }, | ||
| disclaimer: { | ||
| paddingHorizontal: 20, | ||
| textAlign: 'center', | ||
| fontSize: 10, | ||
| lineHeight: 11, | ||
| marginTop: 0, | ||
| marginBottom: 0 | ||
| }, | ||
| policies: { | ||
| flexDirection: 'row', | ||
| justifyContent: 'center', | ||
| paddingHorizontal: 20, | ||
| transform: [{ | ||
| scale: 0.8 | ||
| }] | ||
| }, | ||
| featuresBackdropTop: { | ||
| position: 'absolute', | ||
| left: 0, | ||
| right: 0, | ||
| top: -50, | ||
| height: 150 | ||
| }, | ||
| featuresBackdrop: { | ||
| position: 'absolute', | ||
| bottom: -30, | ||
| left: 0, | ||
| right: 0, | ||
| top: -50 | ||
| }, | ||
| featuresContainer: { | ||
| paddingHorizontal: 15, | ||
| paddingBottom: 15, | ||
| paddingTop: 0 | ||
| }, | ||
| featuresTitle: { | ||
| shadowColor: '#000', | ||
| shadowOffset: { | ||
| width: 0, | ||
| height: 0 | ||
| }, | ||
| shadowOpacity: 0.5, | ||
| shadowRadius: 5, | ||
| color: 'white', | ||
| fontWeight: '900', | ||
| fontSize: 16, | ||
| marginBottom: 8 | ||
| }, | ||
| featuresTxt: { | ||
| shadowColor: '#000', | ||
| shadowOffset: { | ||
| width: 0, | ||
| height: 0 | ||
| }, | ||
| shadowOpacity: 0.5, | ||
| shadowRadius: 5, | ||
| color: 'white', | ||
| fontWeight: '500', | ||
| fontSize: 14, | ||
| lineHeight: 20, | ||
| marginLeft: 5 | ||
| }, | ||
| topnav: { | ||
| flexDirection: 'row', | ||
| shadowColor: '#000', | ||
| shadowOffset: { | ||
| width: 0, | ||
| height: 0 | ||
| }, | ||
| shadowOpacity: 0.9, | ||
| shadowRadius: 9, | ||
| position: 'absolute', | ||
| top: 0, | ||
| right: 0, | ||
| left: 0, | ||
| zIndex: 999, | ||
| paddingVertical: 15, | ||
| alignItems: 'center' | ||
| }, | ||
| topnavTitle: { | ||
| flex: 1, | ||
| textAlign: 'center', | ||
| color: 'white', | ||
| fontWeight: '900' | ||
| }, | ||
| topnavBtn: { | ||
| paddingHorizontal: 10, | ||
| paddingVertical: 5 | ||
| }, | ||
| topnavBtnTxt: { | ||
| color: 'white', | ||
| fontWeight: '700' | ||
| }, | ||
| topnavLeft: { | ||
| position: 'absolute', | ||
| left: 0, | ||
| zIndex: 9999 | ||
| }, | ||
| topnavRight: { | ||
| position: 'absolute', | ||
| right: 0, | ||
| zIndex: 9999 | ||
| }, | ||
| loadingRows: { | ||
| marginTop: 20, | ||
| marginBottom: 20 | ||
| } | ||
| }); | ||
| const UpgradeViewSheet = () => { | ||
| const sheet = (0, _reactNativeRnx.useBottomSheet)(); | ||
| console.log('[rnx] UpgradeViewSheet render'); | ||
| return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { | ||
| screenHeight: _reactNative.Dimensions.get('window').height - 50, | ||
| onCancel: () => sheet.hideBottomSheet() | ||
| }); | ||
| }; | ||
| exports.UpgradeViewSheet = UpgradeViewSheet; | ||
| var _default = exports.default = Component; | ||
| //# sourceMappingURL=UpgradeView.js.map |
| {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeRnx","_FontAwesome","_interopRequireDefault","_reactNativeLinearGradient","_jsxRuntime","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","getCurrency","str","replace","Component","screenHeight","onCancel","onContinue","localize","useLocalization","theme","useTheme","iapList","setIapList","useState","selectedIap","setSelectedIap","isLoading","setIsLoading","isLoadingRestore","setIsLoadingRestore","isLoadingPurchase","setIsLoadingPurchase","setIsPremium","useIsPremium","useEffect","getIapSubscriptions","then","list","usableList","filter","l","durationMonth","sort","b","price","find","p","freeTrialDaysDuration","_close","useCallback","_success","Alert","alert","text","onPress","console","log","_restore","hasPurchasedPremium","hasPurchase","_subscribe","requestPurchase","_hasPurchase","_openTerms","Linking","openURL","_openPrivacy","_skip","_tapClose","jsxs","View","style","styles","root","height","children","jsx","Image","source","headerImg","backgroundColor","borderColor","resizeMode","content","colors","featuresBackdropTop","topnav","topnavLeft","TouchableOpacity","topnavBtn","name","color","size","Text","topnavTitle","topnavRight","disabled","ActivityIndicator","topnavBtnTxt","featuresContainer","featuresBackdrop","featuresTitle","featuresTxt","bottomContent","bgColor","map","iap","SubscribeRow","isActive","id","loadingRows","activeOpacity","btnMain","primaryColor","btnMainTitleContainer","btnMainTitle","txtColorOnPrimaryColor","btnMainSubtitle","x","btnMainArrow","Link","skip","title","disclaimer","policies","props","isDarkTheme","useColorScheme","row","rowActiveDark","rowActive","check","rowContent","rowTitleContainer","rowTitle","localizedPrice","duration","rowPricePerMonth","toFixed","rowFreeTrial","primaryTxtColor","solid","StyleSheet","create","Dimensions","width","borderTopLeftRadius","borderTopRightRadius","position","left","right","top","overflow","bottom","justifyContent","paddingTop","paddingBottom","paddingVertical","paddingHorizontal","marginHorizontal","borderRadius","marginVertical","flexDirection","alignItems","minHeight","flex","borderWidth","paddingLeft","marginRight","fontWeight","fontSize","opacity","marginLeft","marginTop","transform","scale","textAlign","lineHeight","marginBottom","shadowColor","shadowOffset","shadowOpacity","shadowRadius","zIndex","UpgradeViewSheet","sheet","useBottomSheet","hideBottomSheet","exports","_default"],"sourceRoot":"../../../src","sources":["iap/UpgradeView.tsx"],"mappings":"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","ignoreList":[]} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.useIsPremium = void 0; | ||
| var _react = require("react"); | ||
| var _store = require("../store"); | ||
| const useIsPremium = () => { | ||
| const { | ||
| globalState, | ||
| setGlobalState | ||
| } = (0, _store.useGlobalState)(); | ||
| const setIsPremium = (0, _react.useCallback)(isPremium => { | ||
| setGlobalState({ | ||
| isPremium | ||
| }); | ||
| }, [setGlobalState]); | ||
| return { | ||
| isPremium: globalState.isPremium, | ||
| setIsPremium | ||
| }; | ||
| }; | ||
| exports.useIsPremium = useIsPremium; | ||
| //# sourceMappingURL=useIsPremium.js.map |
| {"version":3,"names":["_react","require","_store","useIsPremium","globalState","setGlobalState","useGlobalState","setIsPremium","useCallback","isPremium","exports"],"sourceRoot":"../../../src","sources":["iap/useIsPremium.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,MAAME,YAAY,GAAGA,CAAA,KAAM;EAChC,MAAM;IAAEC,WAAW;IAAEC;EAAe,CAAC,GAAG,IAAAC,qBAAc,EAEnD,CAAC;EAEJ,MAAMC,YAAY,GAAG,IAAAC,kBAAW,EAC7BC,SAAkB,IAAK;IACtBJ,cAAc,CAAC;MAAEI;IAAU,CAAC,CAAC;EAC/B,CAAC,EACD,CAACJ,cAAc,CACjB,CAAC;EAED,OAAO;IAAEI,SAAS,EAAEL,WAAW,CAACK,SAAS;IAAEF;EAAa,CAAC;AAC3D,CAAC;AAACG,OAAA,CAAAP,YAAA,GAAAA,YAAA","ignoreList":[]} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.usePremiumGuard = void 0; | ||
| var _react = require("react"); | ||
| var _reactNative = require("react-native"); | ||
| var _reactNativeRnx = require("react-native-rnx"); | ||
| var _useUpgrade = require("./useUpgrade"); | ||
| var _useIsPremium = require("./useIsPremium"); | ||
| const usePremiumGuard = () => { | ||
| const { | ||
| isPremium | ||
| } = (0, _useIsPremium.useIsPremium)(); | ||
| const upgrade = (0, _useUpgrade.useUpgrade)(); | ||
| const { | ||
| localize | ||
| } = (0, _reactNativeRnx.useLocalization)(); | ||
| const continueIfPremium = (0, _react.useCallback)(() => { | ||
| return new Promise((resolve, reject) => { | ||
| if (isPremium) { | ||
| return resolve(); | ||
| } | ||
| _reactNative.Alert.alert(localize('iap.guardTitle'), localize('iap.guardMessage'), [{ | ||
| text: localize('global.learnmore'), | ||
| style: 'default', | ||
| onPress: () => { | ||
| upgrade(); | ||
| return reject(); | ||
| } | ||
| }, { | ||
| text: localize('global.cancel'), | ||
| style: 'cancel', | ||
| onPress: () => { | ||
| return reject(); | ||
| } | ||
| }]); | ||
| }); | ||
| }, [isPremium, localize, upgrade]); | ||
| return { | ||
| continueIfPremium | ||
| }; | ||
| }; | ||
| exports.usePremiumGuard = usePremiumGuard; | ||
| //# sourceMappingURL=usePremiumGuard.js.map |
| {"version":3,"names":["_react","require","_reactNative","_reactNativeRnx","_useUpgrade","_useIsPremium","usePremiumGuard","isPremium","useIsPremium","upgrade","useUpgrade","localize","useLocalization","continueIfPremium","useCallback","Promise","resolve","reject","Alert","alert","text","style","onPress","exports"],"sourceRoot":"../../../src","sources":["iap/usePremiumGuard.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAEO,MAAMK,eAAe,GAAGA,CAAA,KAAM;EACnC,MAAM;IAAEC;EAAU,CAAC,GAAG,IAAAC,0BAAY,EAAC,CAAC;EACpC,MAAMC,OAAO,GAAG,IAAAC,sBAAU,EAAC,CAAC;EAC5B,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAAC,+BAAe,EAAC,CAAC;EAEtC,MAAMC,iBAAiB,GAAG,IAAAC,kBAAW,EAAC,MAAM;IAC1C,OAAO,IAAIC,OAAO,CAAO,CAACC,OAAO,EAAEC,MAAM,KAAK;MAC5C,IAAIV,SAAS,EAAE;QACb,OAAOS,OAAO,CAAC,CAAC;MAClB;MACAE,kBAAK,CAACC,KAAK,CAACR,QAAQ,CAAC,gBAAgB,CAAC,EAAEA,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CACpE;QACES,IAAI,EAAET,QAAQ,CAAC,kBAAkB,CAAC;QAClCU,KAAK,EAAE,SAAS;QAChBC,OAAO,EAAEA,CAAA,KAAM;UACbb,OAAO,CAAC,CAAC;UACT,OAAOQ,MAAM,CAAC,CAAC;QACjB;MACF,CAAC,EACD;QACEG,IAAI,EAAET,QAAQ,CAAC,eAAe,CAAC;QAC/BU,KAAK,EAAE,QAAQ;QACfC,OAAO,EAAEA,CAAA,KAAM;UACb,OAAOL,MAAM,CAAC,CAAC;QACjB;MACF,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,EAAE,CAACV,SAAS,EAAEI,QAAQ,EAAEF,OAAO,CAAC,CAAC;EAElC,OAAO;IAAEI;EAAkB,CAAC;AAC9B,CAAC;AAACU,OAAA,CAAAjB,eAAA,GAAAA,eAAA","ignoreList":[]} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.useUpgrade = void 0; | ||
| var _react = _interopRequireWildcard(require("react")); | ||
| var _reactNative = require("react-native"); | ||
| var _reactNativeRnx = require("react-native-rnx"); | ||
| var _UpgradeView = require("./UpgradeView"); | ||
| var _jsxRuntime = require("react/jsx-runtime"); | ||
| 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); } | ||
| 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 && {}.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; } | ||
| const useUpgrade = () => { | ||
| const sheet = (0, _reactNativeRnx.useBottomSheet)(); | ||
| const upgrade = (0, _react.useCallback)(() => { | ||
| const height = _reactNative.Dimensions.get('window').height - 50; | ||
| sheet.show({ | ||
| snapPoints: [height], | ||
| hideHandle: true, | ||
| element: /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpgradeView.UpgradeViewSheet, {}) | ||
| }); | ||
| }, [sheet]); | ||
| return upgrade; | ||
| }; | ||
| exports.useUpgrade = useUpgrade; | ||
| //# sourceMappingURL=useUpgrade.js.map |
| {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeRnx","_UpgradeView","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useUpgrade","sheet","useBottomSheet","upgrade","useCallback","height","Dimensions","show","snapPoints","hideHandle","element","jsx","UpgradeViewSheet","exports"],"sourceRoot":"../../../src","sources":["iap/useUpgrade.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AAAiD,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAK,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAP,wBAAAO,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAE1C,MAAMW,UAAU,GAAGA,CAAA,KAAM;EAC9B,MAAMC,KAAK,GAAG,IAAAC,8BAAc,EAAC,CAAC;EAE9B,MAAMC,OAAO,GAAG,IAAAC,kBAAW,EAAC,MAAM;IAChC,MAAMC,MAAM,GAAGC,uBAAU,CAAClB,GAAG,CAAC,QAAQ,CAAC,CAACiB,MAAM,GAAG,EAAE;IACnDJ,KAAK,CAACM,IAAI,CAAC;MACTC,UAAU,EAAE,CAACH,MAAM,CAAC;MACpBI,UAAU,EAAE,IAAI;MAChBC,OAAO,eAAE,IAAA/B,WAAA,CAAAgC,GAAA,EAACjC,YAAA,CAAAkC,gBAAgB,IAAE;IAC9B,CAAC,CAAC;EACJ,CAAC,EAAE,CAACX,KAAK,CAAC,CAAC;EAEX,OAAOE,OAAO;AAChB,CAAC;AAACU,OAAA,CAAAb,UAAA,GAAAA,UAAA","ignoreList":[]} |
| "use strict"; | ||
| import { Platform } from 'react-native'; | ||
| import { initConnection, endConnection, getAvailablePurchases, requestSubscription, getSubscriptions, flushFailedPurchasesCachedAsPendingAndroid, purchaseErrorListener, purchaseUpdatedListener, clearTransactionIOS, finishTransaction, SubscriptionPlatform } from 'react-native-iap'; | ||
| let PREMIUM_PRODUCT_LIST = []; | ||
| let purchaseUpdatedSubscription; | ||
| let purchaseErrorSubscription; | ||
| let onPurchaseSuccess; | ||
| let onPurchaseError; | ||
| export const initIAP = premiumSubscriptionIds => { | ||
| PREMIUM_PRODUCT_LIST = premiumSubscriptionIds; | ||
| try { | ||
| console.log('[rnx] initIAP initConnection'); | ||
| // Init connection to store | ||
| initConnection().then(async () => { | ||
| // Clear pending transactions depending on devices | ||
| if (Platform.OS === 'android') { | ||
| // we make sure that "ghost" pending payment are removed | ||
| // (ghost = failed pending payment that are still marked as pending in Google's native Vending module cache) | ||
| console.log('[rnx] initIAP flushFailedPurchasesCachedAsPendingAndroid'); | ||
| await flushFailedPurchasesCachedAsPendingAndroid().catch(e => { | ||
| console.log('[rnx] initIAP flushFailedPurchasesCachedAsPendingAndroid error', e); | ||
| // exception can happen here if: | ||
| // - there are pending purchases that are still pending (we can't consume a pending purchase) | ||
| // in any case, you might not want to do anything special with the error | ||
| }); | ||
| } else if (Platform.OS === 'ios') { | ||
| console.log('[rnx] initIAP clearTransactionIOS'); | ||
| await clearTransactionIOS(); | ||
| } | ||
| // Start purchase listeners | ||
| console.log('[rnx] initIAP listen purchaseUpdatedListener'); | ||
| // Case purchase error | ||
| purchaseErrorSubscription = purchaseErrorListener(error => { | ||
| console.log('[rnx] IAP purchaseErrorListener triggered error', error); | ||
| onPurchaseError && onPurchaseError(); | ||
| }); | ||
| // Case purchase success | ||
| purchaseUpdatedSubscription = purchaseUpdatedListener(async purchase => { | ||
| console.log('[rnx] IAP purchaseUpdatedListener triggered purchase', purchase); | ||
| await finishTransaction({ | ||
| purchase, | ||
| isConsumable: false | ||
| }); | ||
| if (PREMIUM_PRODUCT_LIST.map(p => p.id.toLocaleLowerCase()).includes(purchase.productId.toLocaleLowerCase())) { | ||
| onPurchaseSuccess && onPurchaseSuccess(purchase.productId); | ||
| } else { | ||
| console.log('[rnx] IAP purchaseUpdatedListener error, purchase product id does not match our list of products', purchase.productId); | ||
| } | ||
| }); | ||
| }); | ||
| } catch (e) { | ||
| console.error('[rnx] initIAP error', e); | ||
| } | ||
| }; | ||
| export const closeIAP = () => { | ||
| console.log('[rnx] closeIAP endConnection'); | ||
| if (purchaseUpdatedSubscription) { | ||
| purchaseUpdatedSubscription.remove(); | ||
| purchaseUpdatedSubscription = undefined; | ||
| } | ||
| if (purchaseErrorSubscription) { | ||
| purchaseErrorSubscription.remove(); | ||
| purchaseErrorSubscription = undefined; | ||
| } | ||
| endConnection(); | ||
| }; | ||
| const checkInitGuard = () => { | ||
| if (!PREMIUM_PRODUCT_LIST.length) { | ||
| throw '[rnx] You need to call initIAP first'; | ||
| } | ||
| }; | ||
| export const hasPurchasedPremium = async () => { | ||
| checkInitGuard(); | ||
| try { | ||
| console.log('[rnx] hasPurchasedPremium getAvailablePurchases'); | ||
| const purchases = await getAvailablePurchases(); | ||
| console.log('[rnx] hasPurchasedPremium purchases.length', purchases.length, 'ids', purchases.map(p => p.productId)); | ||
| return !!purchases.find(p => PREMIUM_PRODUCT_LIST.filter(p2 => p.productId.toLocaleLowerCase() === p2.id.toLocaleLowerCase()).length); | ||
| } catch (e) { | ||
| console.log('[rnx] restore error', e); | ||
| return Promise.reject(); | ||
| } | ||
| }; | ||
| export const requestPurchase = async subscription => { | ||
| checkInitGuard(); | ||
| try { | ||
| console.log('[rnx] requestPurchase'); | ||
| await requestSubscription({ | ||
| sku: subscription.id, | ||
| andDangerouslyFinishTransactionAutomaticallyIOS: false, | ||
| // OfferToken will be only filled for android | ||
| ...(subscription.offerToken && { | ||
| subscriptionOffers: [{ | ||
| sku: subscription.id, | ||
| offerToken: subscription.offerToken | ||
| }] | ||
| }) | ||
| }); | ||
| console.log('[rnx] requestPurchase done'); | ||
| return new Promise(resolve => { | ||
| onPurchaseSuccess = sku => { | ||
| console.log('[rnx] requestPurchase onPurchaseSuccess triggered for product', sku); | ||
| if (PREMIUM_PRODUCT_LIST.map(p => p.id.toLocaleLowerCase()).includes(sku.toLocaleLowerCase())) { | ||
| console.log('[rnx] requestPurchase onPurchaseSuccess productId found. Purchase validated'); | ||
| return resolve(true); | ||
| } else { | ||
| console.log('[rnx] requestPurchase onPurchaseSuccess productId not matching'); | ||
| return resolve(false); | ||
| } | ||
| }; | ||
| onPurchaseError = () => { | ||
| console.log('[rnx] requestPurchase onPurchaseError triggered'); | ||
| return resolve(false); | ||
| }; | ||
| }); | ||
| } catch (e) { | ||
| console.log('[rnx] requestPurchase error', e); | ||
| return Promise.reject(); | ||
| } | ||
| }; | ||
| export const getIapSubscriptions = async () => { | ||
| checkInitGuard(); | ||
| console.log('[rnx] getIapSubscriptions'); | ||
| const products = await getSubscriptions({ | ||
| skus: PREMIUM_PRODUCT_LIST.map(o => o.id) | ||
| }); | ||
| console.log('[rnx] getIapSubscriptions products.length', products.length); | ||
| if (products && products.length) { | ||
| return products.map(p => { | ||
| const base = PREMIUM_PRODUCT_LIST.find(p2 => p2.id === p.productId); | ||
| // Convert android sub | ||
| if (p.platform === SubscriptionPlatform.android) { | ||
| const platformProduct = p; | ||
| const prices = platformProduct.subscriptionOfferDetails[0].pricingPhases.pricingPhaseList.find(_p => _p.formattedPrice.toLocaleLowerCase() !== 'free') || platformProduct.subscriptionOfferDetails[0].pricingPhases.pricingPhaseList[platformProduct.subscriptionOfferDetails[0].pricingPhases.pricingPhaseList.length - 1]; | ||
| return { | ||
| id: platformProduct.productId, | ||
| price: parseFloat(prices.priceAmountMicros) / 1000000, | ||
| localizedPrice: prices.formattedPrice, | ||
| durationMonth: base?.durationMonth || 0, | ||
| freeTrialDaysDuration: base?.freeTrialDaysDuration, | ||
| offerToken: platformProduct.subscriptionOfferDetails[0].offerToken | ||
| }; | ||
| } | ||
| // Convert ios sub | ||
| const platformProduct = p; | ||
| return { | ||
| id: platformProduct.productId, | ||
| price: parseFloat(platformProduct.price), | ||
| localizedPrice: platformProduct.localizedPrice, | ||
| durationMonth: base?.durationMonth || 0, | ||
| freeTrialDaysDuration: base?.freeTrialDaysDuration | ||
| }; | ||
| }); | ||
| } | ||
| return []; | ||
| }; | ||
| //# sourceMappingURL=IAPService.js.map |
| {"version":3,"names":["Platform","initConnection","endConnection","getAvailablePurchases","requestSubscription","getSubscriptions","flushFailedPurchasesCachedAsPendingAndroid","purchaseErrorListener","purchaseUpdatedListener","clearTransactionIOS","finishTransaction","SubscriptionPlatform","PREMIUM_PRODUCT_LIST","purchaseUpdatedSubscription","purchaseErrorSubscription","onPurchaseSuccess","onPurchaseError","initIAP","premiumSubscriptionIds","console","log","then","OS","catch","e","error","purchase","isConsumable","map","p","id","toLocaleLowerCase","includes","productId","closeIAP","remove","undefined","checkInitGuard","length","hasPurchasedPremium","purchases","find","filter","p2","Promise","reject","requestPurchase","subscription","sku","andDangerouslyFinishTransactionAutomaticallyIOS","offerToken","subscriptionOffers","resolve","getIapSubscriptions","products","skus","o","base","platform","android","platformProduct","prices","subscriptionOfferDetails","pricingPhases","pricingPhaseList","_p","formattedPrice","price","parseFloat","priceAmountMicros","localizedPrice","durationMonth","freeTrialDaysDuration"],"sourceRoot":"../../../src","sources":["iap/IAPService.ts"],"mappings":"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","ignoreList":[]} |
| "use strict"; | ||
| export * from './useIsPremium'; | ||
| export * from './IAPService'; | ||
| export * from './UpgradeView'; | ||
| export * from './useUpgrade'; | ||
| export * from './usePremiumGuard'; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"names":[],"sourceRoot":"../../../src","sources":["iap/index.ts"],"mappings":";;AAAA,cAAc,gBAAgB;AAC9B,cAAc,cAAc;AAC5B,cAAc,eAAe;AAC7B,cAAc,cAAc;AAC5B,cAAc,mBAAmB","ignoreList":[]} |
| "use strict"; | ||
| import React, { useCallback, useEffect, useState } from 'react'; | ||
| import { Dimensions, Image, Linking, StyleSheet, useColorScheme, View, Alert, ActivityIndicator, TouchableOpacity } from 'react-native'; | ||
| import { useLocalization, Text, useTheme, Link, getIapSubscriptions, hasPurchasedPremium, useIsPremium, requestPurchase, useBottomSheet } from 'react-native-rnx'; | ||
| import Icon from 'react-native-vector-icons/FontAwesome5'; | ||
| import LinearGradient from 'react-native-linear-gradient'; | ||
| import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; | ||
| const getCurrency = str => { | ||
| return str.replace(/[\d,. ]+/, ''); | ||
| }; | ||
| const Component = ({ | ||
| screenHeight, | ||
| onCancel, | ||
| onContinue | ||
| }) => { | ||
| const { | ||
| localize | ||
| } = useLocalization(); | ||
| const theme = useTheme(); | ||
| const [iapList, setIapList] = useState(); | ||
| const [selectedIap, setSelectedIap] = useState(); | ||
| const [isLoading, setIsLoading] = useState(true); | ||
| const [isLoadingRestore, setIsLoadingRestore] = useState(false); | ||
| const [isLoadingPurchase, setIsLoadingPurchase] = useState(false); | ||
| const { | ||
| setIsPremium | ||
| } = useIsPremium(); | ||
| useEffect(() => { | ||
| getIapSubscriptions().then(list => { | ||
| const usableList = list.filter(l => l.durationMonth === 1 || l.durationMonth === 12); | ||
| setIapList(usableList.sort((a, b) => a.price - b.price)); | ||
| setSelectedIap(usableList.find(p => !!p.freeTrialDaysDuration) || usableList[0]); | ||
| setIsLoading(false); | ||
| }); | ||
| }, [setIapList, setIsLoading]); | ||
| const _close = useCallback(() => { | ||
| onCancel(); | ||
| }, [onCancel]); | ||
| const _success = useCallback(() => { | ||
| Alert.alert(localize('iap.successtitle'), localize('iap.successmsg'), [{ | ||
| text: localize('iap.continue'), | ||
| onPress: () => { | ||
| if (onContinue) { | ||
| onContinue(); | ||
| } else { | ||
| console.log('[rnx] UpgradeView close from _success'); | ||
| _close(); | ||
| } | ||
| } | ||
| }]); | ||
| }, [localize, onContinue, _close]); | ||
| const _restore = useCallback(() => { | ||
| console.log('restore'); | ||
| setIsLoadingRestore(true); | ||
| hasPurchasedPremium().then(hasPurchase => { | ||
| setIsPremium(hasPurchase); | ||
| setIsLoadingRestore(false); | ||
| if (hasPurchase) { | ||
| _success(); | ||
| } else { | ||
| Alert.alert(localize('iap.restoreerrortitle'), localize('iap.restoreerrormsg')); | ||
| } | ||
| }); | ||
| }, [setIsPremium, localize, _success]); | ||
| const _subscribe = useCallback(() => { | ||
| if (selectedIap) { | ||
| setIsLoadingPurchase(true); | ||
| hasPurchasedPremium().then(hasPurchase => { | ||
| if (hasPurchase) { | ||
| setIsPremium(true); | ||
| setIsLoadingPurchase(false); | ||
| _success(); | ||
| } else { | ||
| requestPurchase(selectedIap).then(_hasPurchase => { | ||
| setIsPremium(_hasPurchase); | ||
| setIsLoadingPurchase(false); | ||
| if (_hasPurchase) { | ||
| _success(); | ||
| } else { | ||
| Alert.alert(localize('iap.purchaseerrortitle'), localize('iap.purchaseerrormsg')); | ||
| } | ||
| }, () => { | ||
| // Error/canceled | ||
| setIsLoadingPurchase(false); | ||
| }); | ||
| } | ||
| }); | ||
| } | ||
| }, [setIsLoadingPurchase, selectedIap, localize, setIsPremium, _success]); | ||
| const _openTerms = useCallback(() => { | ||
| Linking.openURL('https://berthx.io/terms/'); | ||
| }, []); | ||
| const _openPrivacy = useCallback(() => { | ||
| Linking.openURL('https://berthx.io/policy/'); | ||
| }, []); | ||
| const _skip = useCallback(() => { | ||
| console.log('[rnx] UpgradeView close from _skip'); | ||
| _close(); | ||
| }, [_close]); | ||
| const _tapClose = useCallback(() => { | ||
| console.log('[rnx] UpgradeView close from _tapClose'); | ||
| _close(); | ||
| }, [_close]); | ||
| console.log('[rnx] UpgradeView render'); | ||
| return /*#__PURE__*/_jsxs(View, { | ||
| style: [styles.root, { | ||
| height: screenHeight | ||
| }], | ||
| children: [/*#__PURE__*/_jsx(Image, { | ||
| source: require('@assets/images/iap/bg.jpg'), | ||
| style: [styles.headerImg, { | ||
| backgroundColor: theme.borderColor | ||
| }], | ||
| resizeMode: "cover" | ||
| }), /*#__PURE__*/_jsx(Image, { | ||
| source: require('@assets/images/iap/bg-hd.jpg'), | ||
| style: [styles.headerImg, { | ||
| backgroundColor: theme.borderColor | ||
| }], | ||
| resizeMode: "cover" | ||
| }), /*#__PURE__*/_jsxs(View, { | ||
| style: styles.content, | ||
| children: [/*#__PURE__*/_jsx(LinearGradient, { | ||
| colors: ['rgba(0, 0, 0, 0.6)', 'transparent'], | ||
| style: styles.featuresBackdropTop | ||
| }), /*#__PURE__*/_jsxs(View, { | ||
| style: styles.topnav, | ||
| children: [/*#__PURE__*/_jsx(View, { | ||
| style: styles.topnavLeft, | ||
| children: /*#__PURE__*/_jsx(TouchableOpacity, { | ||
| style: [styles.topnavBtn], | ||
| onPress: _tapClose, | ||
| children: /*#__PURE__*/_jsx(Icon, { | ||
| name: "times", | ||
| color: "white", | ||
| size: 18 | ||
| }) | ||
| }) | ||
| }), /*#__PURE__*/_jsx(Text, { | ||
| style: styles.topnavTitle, | ||
| children: localize('iap.title') | ||
| }), /*#__PURE__*/_jsx(View, { | ||
| style: styles.topnavRight, | ||
| children: /*#__PURE__*/_jsx(TouchableOpacity, { | ||
| style: [styles.topnavBtn], | ||
| onPress: _restore, | ||
| disabled: isLoading || isLoadingRestore || isLoadingPurchase, | ||
| children: isLoadingRestore ? /*#__PURE__*/_jsx(ActivityIndicator, { | ||
| color: "white" | ||
| }) : /*#__PURE__*/_jsx(Text, { | ||
| style: styles.topnavBtnTxt, | ||
| children: localize('iap.restore') | ||
| }) | ||
| }) | ||
| })] | ||
| }), /*#__PURE__*/_jsxs(View, { | ||
| style: styles.featuresContainer, | ||
| children: [/*#__PURE__*/_jsx(LinearGradient, { | ||
| colors: ['transparent', 'rgba(0, 0, 0, 0.9)'], | ||
| style: styles.featuresBackdrop | ||
| }), /*#__PURE__*/_jsx(Text, { | ||
| style: styles.featuresTitle, | ||
| children: localize('iap.featurestitle') | ||
| }), /*#__PURE__*/_jsx(Text, { | ||
| style: styles.featuresTxt, | ||
| children: localize('iap.features') | ||
| })] | ||
| }), /*#__PURE__*/_jsxs(View, { | ||
| style: [styles.bottomContent, { | ||
| backgroundColor: theme.bgColor | ||
| }], | ||
| children: [iapList?.map(iap => /*#__PURE__*/_jsx(SubscribeRow, { | ||
| isActive: iap.id === selectedIap?.id, | ||
| iap: iap, | ||
| onPress: setSelectedIap | ||
| }, iap.id)), isLoading && /*#__PURE__*/_jsx(View, { | ||
| style: styles.loadingRows, | ||
| children: /*#__PURE__*/_jsx(ActivityIndicator, { | ||
| size: "large" | ||
| }) | ||
| }), /*#__PURE__*/_jsxs(TouchableOpacity, { | ||
| onPress: _subscribe, | ||
| activeOpacity: 0.6, | ||
| disabled: isLoading || isLoadingRestore || isLoadingPurchase, | ||
| style: [styles.btnMain, { | ||
| backgroundColor: theme.primaryColor | ||
| }], | ||
| children: [/*#__PURE__*/_jsxs(View, { | ||
| style: styles.btnMainTitleContainer, | ||
| children: [/*#__PURE__*/_jsx(Text, { | ||
| style: [styles.btnMainTitle, { | ||
| color: theme.txtColorOnPrimaryColor | ||
| }], | ||
| children: localize('iap.btnMain') | ||
| }), selectedIap?.freeTrialDaysDuration && /*#__PURE__*/_jsx(Text, { | ||
| style: [styles.btnMainSubtitle, { | ||
| color: theme.txtColorOnPrimaryColor | ||
| }], | ||
| children: localize('iap.autodeductAfter', { | ||
| x: selectedIap.freeTrialDaysDuration | ||
| }) | ||
| })] | ||
| }), isLoadingPurchase ? /*#__PURE__*/_jsx(ActivityIndicator, { | ||
| style: styles.btnMainArrow, | ||
| color: theme.txtColorOnPrimaryColor | ||
| }) : /*#__PURE__*/_jsx(Icon, { | ||
| name: "chevron-right", | ||
| size: 20, | ||
| color: theme.txtColorOnPrimaryColor, | ||
| style: styles.btnMainArrow | ||
| })] | ||
| }), /*#__PURE__*/_jsx(Link, { | ||
| style: styles.skip, | ||
| title: localize('iap.skip'), | ||
| onPress: _skip | ||
| }), /*#__PURE__*/_jsx(Text, { | ||
| style: styles.disclaimer, | ||
| children: localize('iap.disclaimer') | ||
| }), /*#__PURE__*/_jsxs(View, { | ||
| style: styles.policies, | ||
| children: [/*#__PURE__*/_jsx(Link, { | ||
| title: localize('iap.terms'), | ||
| onPress: _openTerms | ||
| }), /*#__PURE__*/_jsx(Link, { | ||
| title: localize('iap.privacy'), | ||
| onPress: _openPrivacy | ||
| })] | ||
| })] | ||
| })] | ||
| })] | ||
| }); | ||
| }; | ||
| const SubscribeRow = props => { | ||
| const theme = useTheme(); | ||
| const { | ||
| localize | ||
| } = useLocalization(); | ||
| const { | ||
| iap | ||
| } = props; | ||
| const isDarkTheme = useColorScheme() === 'dark'; | ||
| return /*#__PURE__*/_jsxs(TouchableOpacity, { | ||
| onPress: () => props.onPress(iap), | ||
| activeOpacity: 0.8, | ||
| style: [styles.row, props.isActive && (isDarkTheme ? styles.rowActiveDark : styles.rowActive)], | ||
| children: [/*#__PURE__*/_jsx(View, { | ||
| style: [styles.check, { | ||
| borderColor: theme.primaryColor | ||
| }, props.isActive && { | ||
| backgroundColor: theme.primaryColor | ||
| }], | ||
| children: props.isActive && /*#__PURE__*/_jsx(Icon, { | ||
| name: "check", | ||
| color: theme.txtColorOnPrimaryColor, | ||
| size: 14 | ||
| }) | ||
| }), /*#__PURE__*/_jsxs(View, { | ||
| style: styles.rowContent, | ||
| children: [/*#__PURE__*/_jsxs(View, { | ||
| style: styles.rowTitleContainer, | ||
| children: [/*#__PURE__*/_jsx(Text, { | ||
| style: styles.rowTitle, | ||
| children: localize('iap.rowTitle', { | ||
| price: iap.localizedPrice, | ||
| duration: iap.durationMonth === 12 ? localize('iap.rowTitleYear') : localize('iap.rowTitleMonth') | ||
| }) | ||
| }), iap.durationMonth !== 1 && /*#__PURE__*/_jsx(Text, { | ||
| style: styles.rowPricePerMonth, | ||
| children: localize('iap.rowPricePerMonth', { | ||
| price: `${getCurrency(iap.localizedPrice)}${(iap.price / iap.durationMonth).toFixed(2)}` | ||
| }) | ||
| })] | ||
| }), !!iap.freeTrialDaysDuration && /*#__PURE__*/_jsx(Text, { | ||
| style: [styles.rowFreeTrial, { | ||
| color: theme.primaryTxtColor | ||
| }], | ||
| children: localize('iap.freetrial', { | ||
| duration: iap.freeTrialDaysDuration | ||
| }) | ||
| })] | ||
| }), !!iap.freeTrialDaysDuration && props.isActive && /*#__PURE__*/_jsx(Icon, { | ||
| name: "star", | ||
| solid: true, | ||
| color: "#efbb00", | ||
| size: 22 | ||
| })] | ||
| }); | ||
| }; | ||
| const styles = StyleSheet.create({ | ||
| root: {}, | ||
| headerImg: { | ||
| height: Dimensions.get('window').height - 300, | ||
| width: Dimensions.get('window').width, | ||
| borderTopLeftRadius: 15, | ||
| borderTopRightRadius: 15, | ||
| position: 'absolute', | ||
| left: 0, | ||
| right: 0, | ||
| top: 0, | ||
| overflow: 'hidden' | ||
| }, | ||
| content: { | ||
| position: 'absolute', | ||
| bottom: 0, | ||
| left: 0, | ||
| right: 0, | ||
| top: 0, | ||
| justifyContent: 'flex-end' | ||
| }, | ||
| bottomContent: { | ||
| borderTopLeftRadius: 15, | ||
| borderTopRightRadius: 15, | ||
| paddingTop: 10, | ||
| paddingBottom: 20 | ||
| }, | ||
| row: { | ||
| paddingVertical: 10, | ||
| paddingHorizontal: 15, | ||
| marginHorizontal: 10, | ||
| borderRadius: 10, | ||
| marginVertical: 2, | ||
| flexDirection: 'row', | ||
| alignItems: 'center', | ||
| minHeight: 50 | ||
| }, | ||
| rowActive: { | ||
| backgroundColor: '#eee' | ||
| }, | ||
| rowActiveDark: { | ||
| backgroundColor: '#222' | ||
| }, | ||
| rowContent: { | ||
| flex: 1 | ||
| }, | ||
| rowTitleContainer: { | ||
| flexDirection: 'row' | ||
| }, | ||
| check: { | ||
| borderWidth: 2, | ||
| borderRadius: 100, | ||
| height: 22, | ||
| width: 22, | ||
| justifyContent: 'center', | ||
| alignItems: 'center', | ||
| paddingLeft: 1, | ||
| marginRight: 10 | ||
| }, | ||
| rowTitle: { | ||
| fontWeight: '900', | ||
| fontSize: 14 | ||
| }, | ||
| rowPricePerMonth: { | ||
| fontWeight: '700', | ||
| fontSize: 13, | ||
| opacity: 0.7, | ||
| marginLeft: 5 | ||
| }, | ||
| rowFreeTrial: { | ||
| fontWeight: '900', | ||
| fontSize: 10 | ||
| }, | ||
| btnMain: { | ||
| flexDirection: 'row', | ||
| alignItems: 'center', | ||
| justifyContent: 'center', | ||
| minHeight: 65, | ||
| marginHorizontal: 15, | ||
| borderRadius: 12, | ||
| marginTop: 15 | ||
| }, | ||
| btnMainTitleContainer: { | ||
| alignItems: 'center' | ||
| }, | ||
| btnMainTitle: { | ||
| fontSize: 20, | ||
| fontWeight: '900' | ||
| }, | ||
| btnMainSubtitle: { | ||
| fontSize: 10, | ||
| fontWeight: '600' | ||
| }, | ||
| btnMainArrow: { | ||
| position: 'absolute', | ||
| right: 15 | ||
| }, | ||
| skip: { | ||
| marginTop: 10, | ||
| transform: [{ | ||
| scale: 0.9 | ||
| }] | ||
| }, | ||
| disclaimer: { | ||
| paddingHorizontal: 20, | ||
| textAlign: 'center', | ||
| fontSize: 10, | ||
| lineHeight: 11, | ||
| marginTop: 0, | ||
| marginBottom: 0 | ||
| }, | ||
| policies: { | ||
| flexDirection: 'row', | ||
| justifyContent: 'center', | ||
| paddingHorizontal: 20, | ||
| transform: [{ | ||
| scale: 0.8 | ||
| }] | ||
| }, | ||
| featuresBackdropTop: { | ||
| position: 'absolute', | ||
| left: 0, | ||
| right: 0, | ||
| top: -50, | ||
| height: 150 | ||
| }, | ||
| featuresBackdrop: { | ||
| position: 'absolute', | ||
| bottom: -30, | ||
| left: 0, | ||
| right: 0, | ||
| top: -50 | ||
| }, | ||
| featuresContainer: { | ||
| paddingHorizontal: 15, | ||
| paddingBottom: 15, | ||
| paddingTop: 0 | ||
| }, | ||
| featuresTitle: { | ||
| shadowColor: '#000', | ||
| shadowOffset: { | ||
| width: 0, | ||
| height: 0 | ||
| }, | ||
| shadowOpacity: 0.5, | ||
| shadowRadius: 5, | ||
| color: 'white', | ||
| fontWeight: '900', | ||
| fontSize: 16, | ||
| marginBottom: 8 | ||
| }, | ||
| featuresTxt: { | ||
| shadowColor: '#000', | ||
| shadowOffset: { | ||
| width: 0, | ||
| height: 0 | ||
| }, | ||
| shadowOpacity: 0.5, | ||
| shadowRadius: 5, | ||
| color: 'white', | ||
| fontWeight: '500', | ||
| fontSize: 14, | ||
| lineHeight: 20, | ||
| marginLeft: 5 | ||
| }, | ||
| topnav: { | ||
| flexDirection: 'row', | ||
| shadowColor: '#000', | ||
| shadowOffset: { | ||
| width: 0, | ||
| height: 0 | ||
| }, | ||
| shadowOpacity: 0.9, | ||
| shadowRadius: 9, | ||
| position: 'absolute', | ||
| top: 0, | ||
| right: 0, | ||
| left: 0, | ||
| zIndex: 999, | ||
| paddingVertical: 15, | ||
| alignItems: 'center' | ||
| }, | ||
| topnavTitle: { | ||
| flex: 1, | ||
| textAlign: 'center', | ||
| color: 'white', | ||
| fontWeight: '900' | ||
| }, | ||
| topnavBtn: { | ||
| paddingHorizontal: 10, | ||
| paddingVertical: 5 | ||
| }, | ||
| topnavBtnTxt: { | ||
| color: 'white', | ||
| fontWeight: '700' | ||
| }, | ||
| topnavLeft: { | ||
| position: 'absolute', | ||
| left: 0, | ||
| zIndex: 9999 | ||
| }, | ||
| topnavRight: { | ||
| position: 'absolute', | ||
| right: 0, | ||
| zIndex: 9999 | ||
| }, | ||
| loadingRows: { | ||
| marginTop: 20, | ||
| marginBottom: 20 | ||
| } | ||
| }); | ||
| export const UpgradeViewSheet = () => { | ||
| const sheet = useBottomSheet(); | ||
| console.log('[rnx] UpgradeViewSheet render'); | ||
| return /*#__PURE__*/_jsx(Component, { | ||
| screenHeight: Dimensions.get('window').height - 50, | ||
| onCancel: () => sheet.hideBottomSheet() | ||
| }); | ||
| }; | ||
| export default Component; | ||
| //# sourceMappingURL=UpgradeView.js.map |
| {"version":3,"names":["React","useCallback","useEffect","useState","Dimensions","Image","Linking","StyleSheet","useColorScheme","View","Alert","ActivityIndicator","TouchableOpacity","useLocalization","Text","useTheme","Link","getIapSubscriptions","hasPurchasedPremium","useIsPremium","requestPurchase","useBottomSheet","Icon","LinearGradient","jsx","_jsx","jsxs","_jsxs","getCurrency","str","replace","Component","screenHeight","onCancel","onContinue","localize","theme","iapList","setIapList","selectedIap","setSelectedIap","isLoading","setIsLoading","isLoadingRestore","setIsLoadingRestore","isLoadingPurchase","setIsLoadingPurchase","setIsPremium","then","list","usableList","filter","l","durationMonth","sort","a","b","price","find","p","freeTrialDaysDuration","_close","_success","alert","text","onPress","console","log","_restore","hasPurchase","_subscribe","_hasPurchase","_openTerms","openURL","_openPrivacy","_skip","_tapClose","style","styles","root","height","children","source","require","headerImg","backgroundColor","borderColor","resizeMode","content","colors","featuresBackdropTop","topnav","topnavLeft","topnavBtn","name","color","size","topnavTitle","topnavRight","disabled","topnavBtnTxt","featuresContainer","featuresBackdrop","featuresTitle","featuresTxt","bottomContent","bgColor","map","iap","SubscribeRow","isActive","id","loadingRows","activeOpacity","btnMain","primaryColor","btnMainTitleContainer","btnMainTitle","txtColorOnPrimaryColor","btnMainSubtitle","x","btnMainArrow","skip","title","disclaimer","policies","props","isDarkTheme","row","rowActiveDark","rowActive","check","rowContent","rowTitleContainer","rowTitle","localizedPrice","duration","rowPricePerMonth","toFixed","rowFreeTrial","primaryTxtColor","solid","create","get","width","borderTopLeftRadius","borderTopRightRadius","position","left","right","top","overflow","bottom","justifyContent","paddingTop","paddingBottom","paddingVertical","paddingHorizontal","marginHorizontal","borderRadius","marginVertical","flexDirection","alignItems","minHeight","flex","borderWidth","paddingLeft","marginRight","fontWeight","fontSize","opacity","marginLeft","marginTop","transform","scale","textAlign","lineHeight","marginBottom","shadowColor","shadowOffset","shadowOpacity","shadowRadius","zIndex","UpgradeViewSheet","sheet","hideBottomSheet"],"sourceRoot":"../../../src","sources":["iap/UpgradeView.tsx"],"mappings":"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","ignoreList":[]} |
| "use strict"; | ||
| import { useCallback } from 'react'; | ||
| import { useGlobalState } from '../store'; | ||
| export const useIsPremium = () => { | ||
| const { | ||
| globalState, | ||
| setGlobalState | ||
| } = useGlobalState(); | ||
| const setIsPremium = useCallback(isPremium => { | ||
| setGlobalState({ | ||
| isPremium | ||
| }); | ||
| }, [setGlobalState]); | ||
| return { | ||
| isPremium: globalState.isPremium, | ||
| setIsPremium | ||
| }; | ||
| }; | ||
| //# sourceMappingURL=useIsPremium.js.map |
| {"version":3,"names":["useCallback","useGlobalState","useIsPremium","globalState","setGlobalState","setIsPremium","isPremium"],"sourceRoot":"../../../src","sources":["iap/useIsPremium.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,cAAc,QAAQ,UAAU;AAEzC,OAAO,MAAMC,YAAY,GAAGA,CAAA,KAAM;EAChC,MAAM;IAAEC,WAAW;IAAEC;EAAe,CAAC,GAAGH,cAAc,CAEnD,CAAC;EAEJ,MAAMI,YAAY,GAAGL,WAAW,CAC7BM,SAAkB,IAAK;IACtBF,cAAc,CAAC;MAAEE;IAAU,CAAC,CAAC;EAC/B,CAAC,EACD,CAACF,cAAc,CACjB,CAAC;EAED,OAAO;IAAEE,SAAS,EAAEH,WAAW,CAACG,SAAS;IAAED;EAAa,CAAC;AAC3D,CAAC","ignoreList":[]} |
| "use strict"; | ||
| import 'react'; | ||
| import { useCallback } from 'react'; | ||
| import { Alert } from 'react-native'; | ||
| import { useLocalization } from 'react-native-rnx'; | ||
| import { useUpgrade } from './useUpgrade'; | ||
| import { useIsPremium } from './useIsPremium'; | ||
| export const usePremiumGuard = () => { | ||
| const { | ||
| isPremium | ||
| } = useIsPremium(); | ||
| const upgrade = useUpgrade(); | ||
| const { | ||
| localize | ||
| } = useLocalization(); | ||
| const continueIfPremium = useCallback(() => { | ||
| return new Promise((resolve, reject) => { | ||
| if (isPremium) { | ||
| return resolve(); | ||
| } | ||
| Alert.alert(localize('iap.guardTitle'), localize('iap.guardMessage'), [{ | ||
| text: localize('global.learnmore'), | ||
| style: 'default', | ||
| onPress: () => { | ||
| upgrade(); | ||
| return reject(); | ||
| } | ||
| }, { | ||
| text: localize('global.cancel'), | ||
| style: 'cancel', | ||
| onPress: () => { | ||
| return reject(); | ||
| } | ||
| }]); | ||
| }); | ||
| }, [isPremium, localize, upgrade]); | ||
| return { | ||
| continueIfPremium | ||
| }; | ||
| }; | ||
| //# sourceMappingURL=usePremiumGuard.js.map |
| {"version":3,"names":["useCallback","Alert","useLocalization","useUpgrade","useIsPremium","usePremiumGuard","isPremium","upgrade","localize","continueIfPremium","Promise","resolve","reject","alert","text","style","onPress"],"sourceRoot":"../../../src","sources":["iap/usePremiumGuard.tsx"],"mappings":";;AAAA,OAAO,OAAO;AACd,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,KAAK,QAAQ,cAAc;AACpC,SAASC,eAAe,QAAQ,kBAAkB;AAClD,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,YAAY,QAAQ,gBAAgB;AAE7C,OAAO,MAAMC,eAAe,GAAGA,CAAA,KAAM;EACnC,MAAM;IAAEC;EAAU,CAAC,GAAGF,YAAY,CAAC,CAAC;EACpC,MAAMG,OAAO,GAAGJ,UAAU,CAAC,CAAC;EAC5B,MAAM;IAAEK;EAAS,CAAC,GAAGN,eAAe,CAAC,CAAC;EAEtC,MAAMO,iBAAiB,GAAGT,WAAW,CAAC,MAAM;IAC1C,OAAO,IAAIU,OAAO,CAAO,CAACC,OAAO,EAAEC,MAAM,KAAK;MAC5C,IAAIN,SAAS,EAAE;QACb,OAAOK,OAAO,CAAC,CAAC;MAClB;MACAV,KAAK,CAACY,KAAK,CAACL,QAAQ,CAAC,gBAAgB,CAAC,EAAEA,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CACpE;QACEM,IAAI,EAAEN,QAAQ,CAAC,kBAAkB,CAAC;QAClCO,KAAK,EAAE,SAAS;QAChBC,OAAO,EAAEA,CAAA,KAAM;UACbT,OAAO,CAAC,CAAC;UACT,OAAOK,MAAM,CAAC,CAAC;QACjB;MACF,CAAC,EACD;QACEE,IAAI,EAAEN,QAAQ,CAAC,eAAe,CAAC;QAC/BO,KAAK,EAAE,QAAQ;QACfC,OAAO,EAAEA,CAAA,KAAM;UACb,OAAOJ,MAAM,CAAC,CAAC;QACjB;MACF,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,EAAE,CAACN,SAAS,EAAEE,QAAQ,EAAED,OAAO,CAAC,CAAC;EAElC,OAAO;IAAEE;EAAkB,CAAC;AAC9B,CAAC","ignoreList":[]} |
| "use strict"; | ||
| import React from 'react'; | ||
| import { useCallback } from 'react'; | ||
| import { Dimensions } from 'react-native'; | ||
| import { useBottomSheet } from 'react-native-rnx'; | ||
| import { UpgradeViewSheet } from './UpgradeView'; | ||
| import { jsx as _jsx } from "react/jsx-runtime"; | ||
| export const useUpgrade = () => { | ||
| const sheet = useBottomSheet(); | ||
| const upgrade = useCallback(() => { | ||
| const height = Dimensions.get('window').height - 50; | ||
| sheet.show({ | ||
| snapPoints: [height], | ||
| hideHandle: true, | ||
| element: /*#__PURE__*/_jsx(UpgradeViewSheet, {}) | ||
| }); | ||
| }, [sheet]); | ||
| return upgrade; | ||
| }; | ||
| //# sourceMappingURL=useUpgrade.js.map |
| {"version":3,"names":["React","useCallback","Dimensions","useBottomSheet","UpgradeViewSheet","jsx","_jsx","useUpgrade","sheet","upgrade","height","get","show","snapPoints","hideHandle","element"],"sourceRoot":"../../../src","sources":["iap/useUpgrade.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,QAAQ,OAAO;AACnC,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,gBAAgB,QAAQ,eAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEjD,OAAO,MAAMC,UAAU,GAAGA,CAAA,KAAM;EAC9B,MAAMC,KAAK,GAAGL,cAAc,CAAC,CAAC;EAE9B,MAAMM,OAAO,GAAGR,WAAW,CAAC,MAAM;IAChC,MAAMS,MAAM,GAAGR,UAAU,CAACS,GAAG,CAAC,QAAQ,CAAC,CAACD,MAAM,GAAG,EAAE;IACnDF,KAAK,CAACI,IAAI,CAAC;MACTC,UAAU,EAAE,CAACH,MAAM,CAAC;MACpBI,UAAU,EAAE,IAAI;MAChBC,OAAO,eAAET,IAAA,CAACF,gBAAgB,IAAE;IAC9B,CAAC,CAAC;EACJ,CAAC,EAAE,CAACI,KAAK,CAAC,CAAC;EAEX,OAAOC,OAAO;AAChB,CAAC","ignoreList":[]} |
| export interface IapSubscriptionBase { | ||
| id: string; | ||
| durationMonth: number; | ||
| freeTrialDaysDuration?: number; | ||
| } | ||
| export interface IapSubscription extends IapSubscriptionBase { | ||
| price: number; | ||
| localizedPrice: string; | ||
| offerToken?: string; | ||
| } | ||
| export declare const initIAP: (premiumSubscriptionIds: IapSubscriptionBase[]) => void; | ||
| export declare const closeIAP: () => void; | ||
| export declare const hasPurchasedPremium: () => Promise<boolean>; | ||
| export declare const requestPurchase: (subscription: IapSubscription) => Promise<boolean>; | ||
| export declare const getIapSubscriptions: () => Promise<IapSubscription[]>; | ||
| //# sourceMappingURL=IAPService.d.ts.map |
| {"version":3,"file":"IAPService.d.ts","sourceRoot":"","sources":["../../../src/iap/IAPService.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,eAAO,MAAM,OAAO,2BAA4B,mBAAmB,EAAE,SA4DpE,CAAC;AAEF,eAAO,MAAM,QAAQ,YAWpB,CAAC;AAQF,eAAO,MAAM,mBAAmB,wBAqB/B,CAAC;AAEF,eAAO,MAAM,eAAe,iBACZ,eAAe,KAC5B,QAAQ,OAAO,CA8CjB,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAa,QAAQ,eAAe,EAAE,CA6CrE,CAAC"} |
| export * from './useIsPremium'; | ||
| export * from './IAPService'; | ||
| export * from './UpgradeView'; | ||
| export * from './useUpgrade'; | ||
| export * from './usePremiumGuard'; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/iap/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC"} |
| import React from 'react'; | ||
| interface Props { | ||
| screenHeight: number; | ||
| onCancel: () => void; | ||
| onContinue?: () => void; | ||
| } | ||
| declare const Component: React.FC<Props>; | ||
| export declare const UpgradeViewSheet: () => JSX.Element; | ||
| export default Component; | ||
| //# sourceMappingURL=UpgradeView.d.ts.map |
| {"version":3,"file":"UpgradeView.d.ts","sourceRoot":"","sources":["../../../src/iap/UpgradeView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AA+BhE,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAiP9B,CAAC;AA8RF,eAAO,MAAM,gBAAgB,mBAS5B,CAAC;AAEF,eAAe,SAAS,CAAC"} |
| export declare const useIsPremium: () => { | ||
| isPremium: boolean; | ||
| setIsPremium: (isPremium: boolean) => void; | ||
| }; | ||
| //# sourceMappingURL=useIsPremium.d.ts.map |
| {"version":3,"file":"useIsPremium.d.ts","sourceRoot":"","sources":["../../../src/iap/useIsPremium.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;8BAMT,OAAO;CAOtB,CAAC"} |
| import 'react'; | ||
| export declare const usePremiumGuard: () => { | ||
| continueIfPremium: () => Promise<void>; | ||
| }; | ||
| //# sourceMappingURL=usePremiumGuard.d.ts.map |
| {"version":3,"file":"usePremiumGuard.d.ts","sourceRoot":"","sources":["../../../src/iap/usePremiumGuard.tsx"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC;AAOf,eAAO,MAAM,eAAe;;CA+B3B,CAAC"} |
| export declare const useUpgrade: () => () => void; | ||
| //# sourceMappingURL=useUpgrade.d.ts.map |
| {"version":3,"file":"useUpgrade.d.ts","sourceRoot":"","sources":["../../../src/iap/useUpgrade.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU,kBAatB,CAAC"} |
| import { EmitterSubscription, Platform } from 'react-native'; | ||
| import { | ||
| initConnection, | ||
| endConnection, | ||
| getAvailablePurchases, | ||
| requestSubscription, | ||
| getSubscriptions, | ||
| flushFailedPurchasesCachedAsPendingAndroid, | ||
| purchaseErrorListener, | ||
| purchaseUpdatedListener, | ||
| PurchaseError, | ||
| clearTransactionIOS, | ||
| finishTransaction, | ||
| SubscriptionIOS, | ||
| SubscriptionAndroid, | ||
| SubscriptionPlatform, | ||
| } from 'react-native-iap'; | ||
| export interface IapSubscriptionBase { | ||
| id: string; | ||
| durationMonth: number; | ||
| freeTrialDaysDuration?: number; | ||
| } | ||
| export interface IapSubscription extends IapSubscriptionBase { | ||
| price: number; | ||
| localizedPrice: string; | ||
| offerToken?: string; | ||
| } | ||
| let PREMIUM_PRODUCT_LIST: IapSubscriptionBase[] = []; | ||
| let purchaseUpdatedSubscription: EmitterSubscription | undefined; | ||
| let purchaseErrorSubscription: EmitterSubscription | undefined; | ||
| let onPurchaseSuccess: ((subscriptionId: string) => void) | undefined; | ||
| let onPurchaseError: (() => void) | undefined; | ||
| export const initIAP = (premiumSubscriptionIds: IapSubscriptionBase[]) => { | ||
| PREMIUM_PRODUCT_LIST = premiumSubscriptionIds; | ||
| try { | ||
| console.log('[rnx] initIAP initConnection'); | ||
| // Init connection to store | ||
| initConnection().then(async () => { | ||
| // Clear pending transactions depending on devices | ||
| if (Platform.OS === 'android') { | ||
| // we make sure that "ghost" pending payment are removed | ||
| // (ghost = failed pending payment that are still marked as pending in Google's native Vending module cache) | ||
| console.log('[rnx] initIAP flushFailedPurchasesCachedAsPendingAndroid'); | ||
| await flushFailedPurchasesCachedAsPendingAndroid().catch((e) => { | ||
| console.log( | ||
| '[rnx] initIAP flushFailedPurchasesCachedAsPendingAndroid error', | ||
| e | ||
| ); | ||
| // exception can happen here if: | ||
| // - there are pending purchases that are still pending (we can't consume a pending purchase) | ||
| // in any case, you might not want to do anything special with the error | ||
| }); | ||
| } else if (Platform.OS === 'ios') { | ||
| console.log('[rnx] initIAP clearTransactionIOS'); | ||
| await clearTransactionIOS(); | ||
| } | ||
| // Start purchase listeners | ||
| console.log('[rnx] initIAP listen purchaseUpdatedListener'); | ||
| // Case purchase error | ||
| purchaseErrorSubscription = purchaseErrorListener( | ||
| (error: PurchaseError) => { | ||
| console.log('[rnx] IAP purchaseErrorListener triggered error', error); | ||
| onPurchaseError && onPurchaseError(); | ||
| } | ||
| ); | ||
| // Case purchase success | ||
| purchaseUpdatedSubscription = purchaseUpdatedListener( | ||
| async (purchase) => { | ||
| console.log( | ||
| '[rnx] IAP purchaseUpdatedListener triggered purchase', | ||
| purchase | ||
| ); | ||
| await finishTransaction({ purchase, isConsumable: false }); | ||
| if ( | ||
| PREMIUM_PRODUCT_LIST.map((p) => p.id.toLocaleLowerCase()).includes( | ||
| purchase.productId.toLocaleLowerCase() | ||
| ) | ||
| ) { | ||
| onPurchaseSuccess && onPurchaseSuccess(purchase.productId); | ||
| } else { | ||
| console.log( | ||
| '[rnx] IAP purchaseUpdatedListener error, purchase product id does not match our list of products', | ||
| purchase.productId | ||
| ); | ||
| } | ||
| } | ||
| ); | ||
| }); | ||
| } catch (e) { | ||
| console.error('[rnx] initIAP error', e); | ||
| } | ||
| }; | ||
| export const closeIAP = () => { | ||
| console.log('[rnx] closeIAP endConnection'); | ||
| if (purchaseUpdatedSubscription) { | ||
| purchaseUpdatedSubscription.remove(); | ||
| purchaseUpdatedSubscription = undefined; | ||
| } | ||
| if (purchaseErrorSubscription) { | ||
| purchaseErrorSubscription.remove(); | ||
| purchaseErrorSubscription = undefined; | ||
| } | ||
| endConnection(); | ||
| }; | ||
| const checkInitGuard = () => { | ||
| if (!PREMIUM_PRODUCT_LIST.length) { | ||
| throw '[rnx] You need to call initIAP first'; | ||
| } | ||
| }; | ||
| export const hasPurchasedPremium = async () => { | ||
| checkInitGuard(); | ||
| try { | ||
| console.log('[rnx] hasPurchasedPremium getAvailablePurchases'); | ||
| const purchases = await getAvailablePurchases(); | ||
| console.log( | ||
| '[rnx] hasPurchasedPremium purchases.length', | ||
| purchases.length, | ||
| 'ids', | ||
| purchases.map((p) => p.productId) | ||
| ); | ||
| return !!purchases.find( | ||
| (p) => | ||
| PREMIUM_PRODUCT_LIST.filter( | ||
| (p2) => p.productId.toLocaleLowerCase() === p2.id.toLocaleLowerCase() | ||
| ).length | ||
| ); | ||
| } catch (e) { | ||
| console.log('[rnx] restore error', e); | ||
| return Promise.reject(); | ||
| } | ||
| }; | ||
| export const requestPurchase = async ( | ||
| subscription: IapSubscription | ||
| ): Promise<boolean> => { | ||
| checkInitGuard(); | ||
| try { | ||
| console.log('[rnx] requestPurchase'); | ||
| await requestSubscription({ | ||
| sku: subscription.id, | ||
| andDangerouslyFinishTransactionAutomaticallyIOS: false, | ||
| // OfferToken will be only filled for android | ||
| ...(subscription.offerToken && { | ||
| subscriptionOffers: [ | ||
| { sku: subscription.id, offerToken: subscription.offerToken }, | ||
| ], | ||
| }), | ||
| }); | ||
| console.log('[rnx] requestPurchase done'); | ||
| return new Promise<boolean>((resolve) => { | ||
| onPurchaseSuccess = (sku) => { | ||
| console.log( | ||
| '[rnx] requestPurchase onPurchaseSuccess triggered for product', | ||
| sku | ||
| ); | ||
| if ( | ||
| PREMIUM_PRODUCT_LIST.map((p) => p.id.toLocaleLowerCase()).includes( | ||
| sku.toLocaleLowerCase() | ||
| ) | ||
| ) { | ||
| console.log( | ||
| '[rnx] requestPurchase onPurchaseSuccess productId found. Purchase validated' | ||
| ); | ||
| return resolve(true); | ||
| } else { | ||
| console.log( | ||
| '[rnx] requestPurchase onPurchaseSuccess productId not matching' | ||
| ); | ||
| return resolve(false); | ||
| } | ||
| }; | ||
| onPurchaseError = () => { | ||
| console.log('[rnx] requestPurchase onPurchaseError triggered'); | ||
| return resolve(false); | ||
| }; | ||
| }); | ||
| } catch (e) { | ||
| console.log('[rnx] requestPurchase error', e); | ||
| return Promise.reject(); | ||
| } | ||
| }; | ||
| export const getIapSubscriptions = async (): Promise<IapSubscription[]> => { | ||
| checkInitGuard(); | ||
| console.log('[rnx] getIapSubscriptions'); | ||
| const products = await getSubscriptions({ | ||
| skus: PREMIUM_PRODUCT_LIST.map((o) => o.id), | ||
| }); | ||
| console.log('[rnx] getIapSubscriptions products.length', products.length); | ||
| if (products && products.length) { | ||
| return products.map((p) => { | ||
| const base = PREMIUM_PRODUCT_LIST.find((p2) => p2.id === p.productId); | ||
| // Convert android sub | ||
| if (p.platform === SubscriptionPlatform.android) { | ||
| const platformProduct = p as SubscriptionAndroid; | ||
| const prices = | ||
| platformProduct.subscriptionOfferDetails[0].pricingPhases.pricingPhaseList.find( | ||
| (_p) => _p.formattedPrice.toLocaleLowerCase() !== 'free' | ||
| ) || | ||
| platformProduct.subscriptionOfferDetails[0].pricingPhases | ||
| .pricingPhaseList[ | ||
| platformProduct.subscriptionOfferDetails[0].pricingPhases | ||
| .pricingPhaseList.length - 1 | ||
| ]; | ||
| return { | ||
| id: platformProduct.productId, | ||
| price: parseFloat(prices.priceAmountMicros) / 1000000, | ||
| localizedPrice: prices.formattedPrice, | ||
| durationMonth: base?.durationMonth || 0, | ||
| freeTrialDaysDuration: base?.freeTrialDaysDuration, | ||
| offerToken: platformProduct.subscriptionOfferDetails[0].offerToken, | ||
| }; | ||
| } | ||
| // Convert ios sub | ||
| const platformProduct = p as SubscriptionIOS; | ||
| return { | ||
| id: platformProduct.productId, | ||
| price: parseFloat(platformProduct.price), | ||
| localizedPrice: platformProduct.localizedPrice, | ||
| durationMonth: base?.durationMonth || 0, | ||
| freeTrialDaysDuration: base?.freeTrialDaysDuration, | ||
| }; | ||
| }); | ||
| } | ||
| return []; | ||
| }; |
| export * from './useIsPremium'; | ||
| export * from './IAPService'; | ||
| export * from './UpgradeView'; | ||
| export * from './useUpgrade'; | ||
| export * from './usePremiumGuard'; |
| import React, { useCallback, useEffect, useState } from 'react'; | ||
| import { | ||
| Dimensions, | ||
| Image, | ||
| Linking, | ||
| StyleSheet, | ||
| useColorScheme, | ||
| View, | ||
| Alert, | ||
| ActivityIndicator, | ||
| TouchableOpacity, | ||
| } from 'react-native'; | ||
| import { | ||
| useLocalization, | ||
| Text, | ||
| useTheme, | ||
| Link, | ||
| IapSubscription, | ||
| getIapSubscriptions, | ||
| hasPurchasedPremium, | ||
| useIsPremium, | ||
| requestPurchase, | ||
| useBottomSheet, | ||
| } from 'react-native-rnx'; | ||
| import Icon from 'react-native-vector-icons/FontAwesome5'; | ||
| import LinearGradient from 'react-native-linear-gradient'; | ||
| const getCurrency = (str: string) => { | ||
| return str.replace(/[\d,. ]+/, ''); | ||
| }; | ||
| interface Props { | ||
| screenHeight: number; | ||
| onCancel: () => void; | ||
| onContinue?: () => void; | ||
| } | ||
| const Component: React.FC<Props> = ({ screenHeight, onCancel, onContinue }) => { | ||
| const { localize } = useLocalization(); | ||
| const theme = useTheme(); | ||
| const [iapList, setIapList] = useState<IapSubscription[] | null>(); | ||
| const [selectedIap, setSelectedIap] = useState<IapSubscription | null>(); | ||
| const [isLoading, setIsLoading] = useState(true); | ||
| const [isLoadingRestore, setIsLoadingRestore] = useState(false); | ||
| const [isLoadingPurchase, setIsLoadingPurchase] = useState(false); | ||
| const { setIsPremium } = useIsPremium(); | ||
| useEffect(() => { | ||
| getIapSubscriptions().then((list) => { | ||
| const usableList = list.filter( | ||
| (l) => l.durationMonth === 1 || l.durationMonth === 12 | ||
| ); | ||
| setIapList(usableList.sort((a, b) => a.price - b.price)); | ||
| setSelectedIap( | ||
| usableList.find((p) => !!p.freeTrialDaysDuration) || usableList[0] | ||
| ); | ||
| setIsLoading(false); | ||
| }); | ||
| }, [setIapList, setIsLoading]); | ||
| const _close = useCallback(() => { | ||
| onCancel(); | ||
| }, [onCancel]); | ||
| const _success = useCallback(() => { | ||
| Alert.alert(localize('iap.successtitle'), localize('iap.successmsg'), [ | ||
| { | ||
| text: localize('iap.continue'), | ||
| onPress: () => { | ||
| if (onContinue) { | ||
| onContinue(); | ||
| } else { | ||
| console.log('[rnx] UpgradeView close from _success'); | ||
| _close(); | ||
| } | ||
| }, | ||
| }, | ||
| ]); | ||
| }, [localize, onContinue, _close]); | ||
| const _restore = useCallback(() => { | ||
| console.log('restore'); | ||
| setIsLoadingRestore(true); | ||
| hasPurchasedPremium().then((hasPurchase) => { | ||
| setIsPremium(hasPurchase); | ||
| setIsLoadingRestore(false); | ||
| if (hasPurchase) { | ||
| _success(); | ||
| } else { | ||
| Alert.alert( | ||
| localize('iap.restoreerrortitle'), | ||
| localize('iap.restoreerrormsg') | ||
| ); | ||
| } | ||
| }); | ||
| }, [setIsPremium, localize, _success]); | ||
| const _subscribe = useCallback(() => { | ||
| if (selectedIap) { | ||
| setIsLoadingPurchase(true); | ||
| hasPurchasedPremium().then((hasPurchase) => { | ||
| if (hasPurchase) { | ||
| setIsPremium(true); | ||
| setIsLoadingPurchase(false); | ||
| _success(); | ||
| } else { | ||
| requestPurchase(selectedIap).then( | ||
| (_hasPurchase) => { | ||
| setIsPremium(_hasPurchase); | ||
| setIsLoadingPurchase(false); | ||
| if (_hasPurchase) { | ||
| _success(); | ||
| } else { | ||
| Alert.alert( | ||
| localize('iap.purchaseerrortitle'), | ||
| localize('iap.purchaseerrormsg') | ||
| ); | ||
| } | ||
| }, | ||
| () => { | ||
| // Error/canceled | ||
| setIsLoadingPurchase(false); | ||
| } | ||
| ); | ||
| } | ||
| }); | ||
| } | ||
| }, [setIsLoadingPurchase, selectedIap, localize, setIsPremium, _success]); | ||
| const _openTerms = useCallback(() => { | ||
| Linking.openURL('https://berthx.io/terms/'); | ||
| }, []); | ||
| const _openPrivacy = useCallback(() => { | ||
| Linking.openURL('https://berthx.io/policy/'); | ||
| }, []); | ||
| const _skip = useCallback(() => { | ||
| console.log('[rnx] UpgradeView close from _skip'); | ||
| _close(); | ||
| }, [_close]); | ||
| const _tapClose = useCallback(() => { | ||
| console.log('[rnx] UpgradeView close from _tapClose'); | ||
| _close(); | ||
| }, [_close]); | ||
| console.log('[rnx] UpgradeView render'); | ||
| return ( | ||
| <View style={[styles.root, { height: screenHeight }]}> | ||
| <Image | ||
| source={require('@assets/images/iap/bg.jpg')} | ||
| style={[styles.headerImg, { backgroundColor: theme.borderColor }]} | ||
| resizeMode="cover" | ||
| /> | ||
| <Image | ||
| source={require('@assets/images/iap/bg-hd.jpg')} | ||
| style={[styles.headerImg, { backgroundColor: theme.borderColor }]} | ||
| resizeMode="cover" | ||
| /> | ||
| <View style={styles.content}> | ||
| <LinearGradient | ||
| colors={['rgba(0, 0, 0, 0.6)', 'transparent']} | ||
| style={styles.featuresBackdropTop} | ||
| /> | ||
| <View style={styles.topnav}> | ||
| <View style={styles.topnavLeft}> | ||
| <TouchableOpacity style={[styles.topnavBtn]} onPress={_tapClose}> | ||
| <Icon name="times" color="white" size={18} /> | ||
| </TouchableOpacity> | ||
| </View> | ||
| <Text style={styles.topnavTitle}>{localize('iap.title')}</Text> | ||
| <View style={styles.topnavRight}> | ||
| <TouchableOpacity | ||
| style={[styles.topnavBtn]} | ||
| onPress={_restore} | ||
| disabled={isLoading || isLoadingRestore || isLoadingPurchase} | ||
| > | ||
| {isLoadingRestore ? ( | ||
| <ActivityIndicator color="white" /> | ||
| ) : ( | ||
| <Text style={styles.topnavBtnTxt}> | ||
| {localize('iap.restore')} | ||
| </Text> | ||
| )} | ||
| </TouchableOpacity> | ||
| </View> | ||
| </View> | ||
| <View style={styles.featuresContainer}> | ||
| <LinearGradient | ||
| colors={['transparent', 'rgba(0, 0, 0, 0.9)']} | ||
| style={styles.featuresBackdrop} | ||
| /> | ||
| <Text style={styles.featuresTitle}> | ||
| {localize('iap.featurestitle')} | ||
| </Text> | ||
| <Text style={styles.featuresTxt}>{localize('iap.features')}</Text> | ||
| </View> | ||
| <View | ||
| style={[ | ||
| styles.bottomContent, | ||
| { | ||
| backgroundColor: theme.bgColor, | ||
| }, | ||
| ]} | ||
| > | ||
| {iapList?.map((iap) => ( | ||
| <SubscribeRow | ||
| key={iap.id} | ||
| isActive={iap.id === selectedIap?.id} | ||
| iap={iap} | ||
| onPress={setSelectedIap} | ||
| /> | ||
| ))} | ||
| {isLoading && ( | ||
| <View style={styles.loadingRows}> | ||
| <ActivityIndicator size="large" /> | ||
| </View> | ||
| )} | ||
| <TouchableOpacity | ||
| onPress={_subscribe} | ||
| activeOpacity={0.6} | ||
| disabled={isLoading || isLoadingRestore || isLoadingPurchase} | ||
| style={[styles.btnMain, { backgroundColor: theme.primaryColor }]} | ||
| > | ||
| <View style={styles.btnMainTitleContainer}> | ||
| <Text | ||
| style={[ | ||
| styles.btnMainTitle, | ||
| { color: theme.txtColorOnPrimaryColor }, | ||
| ]} | ||
| > | ||
| {localize('iap.btnMain')} | ||
| </Text> | ||
| {selectedIap?.freeTrialDaysDuration && ( | ||
| <Text | ||
| style={[ | ||
| styles.btnMainSubtitle, | ||
| { color: theme.txtColorOnPrimaryColor }, | ||
| ]} | ||
| > | ||
| {localize('iap.autodeductAfter', { | ||
| x: selectedIap.freeTrialDaysDuration, | ||
| })} | ||
| </Text> | ||
| )} | ||
| </View> | ||
| {isLoadingPurchase ? ( | ||
| <ActivityIndicator | ||
| style={styles.btnMainArrow} | ||
| color={theme.txtColorOnPrimaryColor} | ||
| /> | ||
| ) : ( | ||
| <Icon | ||
| name="chevron-right" | ||
| size={20} | ||
| color={theme.txtColorOnPrimaryColor} | ||
| style={styles.btnMainArrow} | ||
| /> | ||
| )} | ||
| </TouchableOpacity> | ||
| <Link | ||
| style={styles.skip} | ||
| title={localize('iap.skip')} | ||
| onPress={_skip} | ||
| /> | ||
| <Text style={styles.disclaimer}>{localize('iap.disclaimer')}</Text> | ||
| <View style={styles.policies}> | ||
| <Link title={localize('iap.terms')} onPress={_openTerms} /> | ||
| <Link title={localize('iap.privacy')} onPress={_openPrivacy} /> | ||
| </View> | ||
| </View> | ||
| </View> | ||
| </View> | ||
| ); | ||
| }; | ||
| const SubscribeRow = (props: { | ||
| isActive: boolean; | ||
| iap: IapSubscription; | ||
| onPress: (iap: IapSubscription) => void; | ||
| }) => { | ||
| const theme = useTheme(); | ||
| const { localize } = useLocalization(); | ||
| const { iap } = props; | ||
| const isDarkTheme = useColorScheme() === 'dark'; | ||
| return ( | ||
| <TouchableOpacity | ||
| onPress={() => props.onPress(iap)} | ||
| activeOpacity={0.8} | ||
| style={[ | ||
| styles.row, | ||
| props.isActive && | ||
| (isDarkTheme ? styles.rowActiveDark : styles.rowActive), | ||
| ]} | ||
| > | ||
| <View | ||
| style={[ | ||
| styles.check, | ||
| { borderColor: theme.primaryColor }, | ||
| props.isActive && { backgroundColor: theme.primaryColor }, | ||
| ]} | ||
| > | ||
| {props.isActive && ( | ||
| <Icon name="check" color={theme.txtColorOnPrimaryColor} size={14} /> | ||
| )} | ||
| </View> | ||
| <View style={styles.rowContent}> | ||
| <View style={styles.rowTitleContainer}> | ||
| <Text style={styles.rowTitle}> | ||
| {localize('iap.rowTitle', { | ||
| price: iap.localizedPrice, | ||
| duration: | ||
| iap.durationMonth === 12 | ||
| ? localize('iap.rowTitleYear') | ||
| : localize('iap.rowTitleMonth'), | ||
| })} | ||
| </Text> | ||
| {iap.durationMonth !== 1 && ( | ||
| <Text style={styles.rowPricePerMonth}> | ||
| {localize('iap.rowPricePerMonth', { | ||
| price: `${getCurrency(iap.localizedPrice)}${( | ||
| iap.price / iap.durationMonth | ||
| ).toFixed(2)}`, | ||
| })} | ||
| </Text> | ||
| )} | ||
| </View> | ||
| {!!iap.freeTrialDaysDuration && ( | ||
| <Text | ||
| style={[ | ||
| styles.rowFreeTrial, | ||
| { | ||
| color: theme.primaryTxtColor, | ||
| }, | ||
| ]} | ||
| > | ||
| {localize('iap.freetrial', { | ||
| duration: iap.freeTrialDaysDuration, | ||
| })} | ||
| </Text> | ||
| )} | ||
| </View> | ||
| {!!iap.freeTrialDaysDuration && props.isActive && ( | ||
| <Icon name="star" solid color="#efbb00" size={22} /> | ||
| )} | ||
| </TouchableOpacity> | ||
| ); | ||
| }; | ||
| const styles = StyleSheet.create({ | ||
| root: {}, | ||
| headerImg: { | ||
| height: Dimensions.get('window').height - 300, | ||
| width: Dimensions.get('window').width, | ||
| borderTopLeftRadius: 15, | ||
| borderTopRightRadius: 15, | ||
| position: 'absolute', | ||
| left: 0, | ||
| right: 0, | ||
| top: 0, | ||
| overflow: 'hidden', | ||
| }, | ||
| content: { | ||
| position: 'absolute', | ||
| bottom: 0, | ||
| left: 0, | ||
| right: 0, | ||
| top: 0, | ||
| justifyContent: 'flex-end', | ||
| }, | ||
| bottomContent: { | ||
| borderTopLeftRadius: 15, | ||
| borderTopRightRadius: 15, | ||
| paddingTop: 10, | ||
| paddingBottom: 20, | ||
| }, | ||
| row: { | ||
| paddingVertical: 10, | ||
| paddingHorizontal: 15, | ||
| marginHorizontal: 10, | ||
| borderRadius: 10, | ||
| marginVertical: 2, | ||
| flexDirection: 'row', | ||
| alignItems: 'center', | ||
| minHeight: 50, | ||
| }, | ||
| rowActive: { | ||
| backgroundColor: '#eee', | ||
| }, | ||
| rowActiveDark: { | ||
| backgroundColor: '#222', | ||
| }, | ||
| rowContent: { | ||
| flex: 1, | ||
| }, | ||
| rowTitleContainer: { | ||
| flexDirection: 'row', | ||
| }, | ||
| check: { | ||
| borderWidth: 2, | ||
| borderRadius: 100, | ||
| height: 22, | ||
| width: 22, | ||
| justifyContent: 'center', | ||
| alignItems: 'center', | ||
| paddingLeft: 1, | ||
| marginRight: 10, | ||
| }, | ||
| rowTitle: { | ||
| fontWeight: '900', | ||
| fontSize: 14, | ||
| }, | ||
| rowPricePerMonth: { | ||
| fontWeight: '700', | ||
| fontSize: 13, | ||
| opacity: 0.7, | ||
| marginLeft: 5, | ||
| }, | ||
| rowFreeTrial: { | ||
| fontWeight: '900', | ||
| fontSize: 10, | ||
| }, | ||
| btnMain: { | ||
| flexDirection: 'row', | ||
| alignItems: 'center', | ||
| justifyContent: 'center', | ||
| minHeight: 65, | ||
| marginHorizontal: 15, | ||
| borderRadius: 12, | ||
| marginTop: 15, | ||
| }, | ||
| btnMainTitleContainer: { | ||
| alignItems: 'center', | ||
| }, | ||
| btnMainTitle: { | ||
| fontSize: 20, | ||
| fontWeight: '900', | ||
| }, | ||
| btnMainSubtitle: { | ||
| fontSize: 10, | ||
| fontWeight: '600', | ||
| }, | ||
| btnMainArrow: { | ||
| position: 'absolute', | ||
| right: 15, | ||
| }, | ||
| skip: { | ||
| marginTop: 10, | ||
| transform: [{ scale: 0.9 }], | ||
| }, | ||
| disclaimer: { | ||
| paddingHorizontal: 20, | ||
| textAlign: 'center', | ||
| fontSize: 10, | ||
| lineHeight: 11, | ||
| marginTop: 0, | ||
| marginBottom: 0, | ||
| }, | ||
| policies: { | ||
| flexDirection: 'row', | ||
| justifyContent: 'center', | ||
| paddingHorizontal: 20, | ||
| transform: [{ scale: 0.8 }], | ||
| }, | ||
| featuresBackdropTop: { | ||
| position: 'absolute', | ||
| left: 0, | ||
| right: 0, | ||
| top: -50, | ||
| height: 150, | ||
| }, | ||
| featuresBackdrop: { | ||
| position: 'absolute', | ||
| bottom: -30, | ||
| left: 0, | ||
| right: 0, | ||
| top: -50, | ||
| }, | ||
| featuresContainer: { | ||
| paddingHorizontal: 15, | ||
| paddingBottom: 15, | ||
| paddingTop: 0, | ||
| }, | ||
| featuresTitle: { | ||
| shadowColor: '#000', | ||
| shadowOffset: { | ||
| width: 0, | ||
| height: 0, | ||
| }, | ||
| shadowOpacity: 0.5, | ||
| shadowRadius: 5, | ||
| color: 'white', | ||
| fontWeight: '900', | ||
| fontSize: 16, | ||
| marginBottom: 8, | ||
| }, | ||
| featuresTxt: { | ||
| shadowColor: '#000', | ||
| shadowOffset: { | ||
| width: 0, | ||
| height: 0, | ||
| }, | ||
| shadowOpacity: 0.5, | ||
| shadowRadius: 5, | ||
| color: 'white', | ||
| fontWeight: '500', | ||
| fontSize: 14, | ||
| lineHeight: 20, | ||
| marginLeft: 5, | ||
| }, | ||
| topnav: { | ||
| flexDirection: 'row', | ||
| shadowColor: '#000', | ||
| shadowOffset: { | ||
| width: 0, | ||
| height: 0, | ||
| }, | ||
| shadowOpacity: 0.9, | ||
| shadowRadius: 9, | ||
| position: 'absolute', | ||
| top: 0, | ||
| right: 0, | ||
| left: 0, | ||
| zIndex: 999, | ||
| paddingVertical: 15, | ||
| alignItems: 'center', | ||
| }, | ||
| topnavTitle: { | ||
| flex: 1, | ||
| textAlign: 'center', | ||
| color: 'white', | ||
| fontWeight: '900', | ||
| }, | ||
| topnavBtn: { | ||
| paddingHorizontal: 10, | ||
| paddingVertical: 5, | ||
| }, | ||
| topnavBtnTxt: { | ||
| color: 'white', | ||
| fontWeight: '700', | ||
| }, | ||
| topnavLeft: { | ||
| position: 'absolute', | ||
| left: 0, | ||
| zIndex: 9999, | ||
| }, | ||
| topnavRight: { | ||
| position: 'absolute', | ||
| right: 0, | ||
| zIndex: 9999, | ||
| }, | ||
| loadingRows: { | ||
| marginTop: 20, | ||
| marginBottom: 20, | ||
| }, | ||
| }); | ||
| export const UpgradeViewSheet = () => { | ||
| const sheet = useBottomSheet(); | ||
| console.log('[rnx] UpgradeViewSheet render'); | ||
| return ( | ||
| <Component | ||
| screenHeight={Dimensions.get('window').height - 50} | ||
| onCancel={() => sheet.hideBottomSheet()} | ||
| /> | ||
| ); | ||
| }; | ||
| export default Component; |
| import { useCallback } from 'react'; | ||
| import { useGlobalState } from '../store'; | ||
| export const useIsPremium = () => { | ||
| const { globalState, setGlobalState } = useGlobalState<{ | ||
| isPremium: boolean; | ||
| }>(); | ||
| const setIsPremium = useCallback( | ||
| (isPremium: boolean) => { | ||
| setGlobalState({ isPremium }); | ||
| }, | ||
| [setGlobalState] | ||
| ); | ||
| return { isPremium: globalState.isPremium, setIsPremium }; | ||
| }; |
| import 'react'; | ||
| import { useCallback } from 'react'; | ||
| import { Alert } from 'react-native'; | ||
| import { useLocalization } from 'react-native-rnx'; | ||
| import { useUpgrade } from './useUpgrade'; | ||
| import { useIsPremium } from './useIsPremium'; | ||
| export const usePremiumGuard = () => { | ||
| const { isPremium } = useIsPremium(); | ||
| const upgrade = useUpgrade(); | ||
| const { localize } = useLocalization(); | ||
| const continueIfPremium = useCallback(() => { | ||
| return new Promise<void>((resolve, reject) => { | ||
| if (isPremium) { | ||
| return resolve(); | ||
| } | ||
| Alert.alert(localize('iap.guardTitle'), localize('iap.guardMessage'), [ | ||
| { | ||
| text: localize('global.learnmore'), | ||
| style: 'default', | ||
| onPress: () => { | ||
| upgrade(); | ||
| return reject(); | ||
| }, | ||
| }, | ||
| { | ||
| text: localize('global.cancel'), | ||
| style: 'cancel', | ||
| onPress: () => { | ||
| return reject(); | ||
| }, | ||
| }, | ||
| ]); | ||
| }); | ||
| }, [isPremium, localize, upgrade]); | ||
| return { continueIfPremium }; | ||
| }; |
| import React from 'react'; | ||
| import { useCallback } from 'react'; | ||
| import { Dimensions } from 'react-native'; | ||
| import { useBottomSheet } from 'react-native-rnx'; | ||
| import { UpgradeViewSheet } from './UpgradeView'; | ||
| export const useUpgrade = () => { | ||
| const sheet = useBottomSheet(); | ||
| const upgrade = useCallback(() => { | ||
| const height = Dimensions.get('window').height - 50; | ||
| sheet.show({ | ||
| snapPoints: [height], | ||
| hideHandle: true, | ||
| element: <UpgradeViewSheet />, | ||
| }); | ||
| }, [sheet]); | ||
| return upgrade; | ||
| }; |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
22
-4.35%30
-3.23%564160
-19.81%390
-9.72%9111
-21.43%