UNPKG

react-native-rate-app

Version:

React Native module for In App Rating on Android and iOS

140 lines (139 loc) 5.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _exportNames = { requestReview: true, openStoreForReview: true, getAndroidMarketUrl: true }; exports.requestReview = exports.openStoreForReview = exports.getAndroidMarketUrl = exports.default = void 0; var _reactNative = require("react-native"); var _NativeRateApp = _interopRequireDefault(require("./codegenSpec/NativeRateApp")); var _constants = require("./constants"); Object.keys(_constants).forEach(function (key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; if (key in exports && exports[key] === _constants[key]) return; Object.defineProperty(exports, key, { enumerable: true, get: function () { return _constants[key]; } }); }); var _types = require("./types"); Object.keys(_types).forEach(function (key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; if (key in exports && exports[key] === _types[key]) return; Object.defineProperty(exports, key, { enumerable: true, get: function () { return _types[key]; } }); }); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /** * Custom error for rate app operations */ class RateAppError extends Error { constructor(message) { super(message); this.name = "RateAppError"; } } const RNRateApp = { /** * Requests a review from the user. * * @param {RequestReviewProps} props - The properties for the review request. * @param {AndroidMarket} [props.androidMarket=AndroidMarket.GOOGLE] - The market where the app's review request should be directed on Android. * @param {string} [props.androidPackageName] - The package name of the app to request a review for on Samsung Galaxy Store. * @returns {Promise<boolean>} A promise that resolves to a boolean indicating whether the review was successfully requested. */ async requestReview({ androidMarket = _types.AndroidMarket.GOOGLE, androidPackageName } = {}) { try { if (_reactNative.Platform.OS === "android") { switch (androidMarket) { case _types.AndroidMarket.SAMSUNG: if (!androidPackageName) { throw new RateAppError("androidPackageName is required for Samsung Galaxy Store"); } return await _NativeRateApp.default.requestReviewGalaxyStore(androidPackageName); case _types.AndroidMarket.HUAWEI: return await _NativeRateApp.default.requestReviewAppGallery(); default: return await _NativeRateApp.default.requestReview(); } } return await _NativeRateApp.default.requestReview(); } catch (error) { throw new RateAppError(`Failed to request review: ${error}`); } }, /** * Opens the store listing for the app. * @param props The properties for the store listing. * @returns A promise that resolves to a boolean indicating whether the store listing was successfully opened. */ async openStoreForReview({ iOSAppId, androidPackageName, androidMarket = _types.AndroidMarket.GOOGLE }) { const isIOS = _reactNative.Platform.OS === "ios"; const ismacOS = _reactNative.Platform.OS === "macos"; const isAndroid = _reactNative.Platform.OS === "android"; let url = ""; if (isIOS || ismacOS) { if (!iOSAppId) { throw new RateAppError("iOSAppId is required for iOS and macOS"); } url = `${_constants.IOS_REVIEW_URL}${iOSAppId}?action=write-review`; } else if (isAndroid) { if (!androidPackageName) { throw new RateAppError("androidPackageName is required for Android"); } url = this.getAndroidMarketUrl(androidMarket, androidPackageName); } else { throw new RateAppError(`Unsupported platform: ${_reactNative.Platform.OS}`); } try { const canOpenURL = await _reactNative.Linking.canOpenURL(url); if (canOpenURL) { await _reactNative.Linking.openURL(url); } return canOpenURL; } catch (error) { throw new RateAppError(`Failed to open store for review: ${error}`); } }, /** * Gets the URL for the Android market. * @param androidMarket The market where the app's store listing should be opened on Android. * @param androidPackageName The package name of the app to open the store listing for on Android. * @returns The URL for the Android market. */ getAndroidMarketUrl(androidMarket, androidPackageName) { const urlTemplate = _constants.ANDROID_MARKET_URLS[androidMarket]; if (!urlTemplate) { throw new RateAppError(`Unsupported Android market: ${androidMarket}`); } return urlTemplate.replace("{packageName}", androidPackageName); } }; const { requestReview, openStoreForReview, getAndroidMarketUrl } = RNRateApp; exports.getAndroidMarketUrl = getAndroidMarketUrl; exports.openStoreForReview = openStoreForReview; exports.requestReview = requestReview; var _default = exports.default = RNRateApp; //# sourceMappingURL=index.js.map