@adapty/react-native-ui
Version:
Extension to the Adapty SDK that allows you to easily add purchase screens to your application.
159 lines (153 loc) • 5.25 kB
text/typescript
import type {
AdaptyProfile,
AdaptyError,
AdaptyPaywallProduct,
} from 'react-native-adapty';
export type ArgType<T> = T extends () => any
? void
: T extends (arg: infer U) => any
? U
: void;
/**
* EventHandler callback should not return a promise,
* because using `await` may postpone closing a paywall view.
*
* We don't want to block the UI thread.
*/
type EventHandlerResult = boolean | void;
/**
* Hashmap of possible events to their callbacks
*
* @see {@link https://docs.adapty.io/docs/react-native-handling-events | [DOC] Handling View Events}
*/
export interface EventHandlers {
/**
* Called when a user taps the close button on the paywall view
*
* If you return `true`, the paywall view will be closed.
* We strongly recommend to return `true` in this case.
* @default true
*/
onCloseButtonPress: () => EventHandlerResult;
/**
* Called when a user navigates back on Android
*
* If you return `true`, the paywall view will be closed.
* We strongly recommend to return `true` in this case.
* @default true
*/
onAndroidSystemBack: () => EventHandlerResult;
/**
* Called when a user taps the product in the paywall view
*
* If you return `true` from this callback, the paywall view will be closed.
*/
onProductSelected: (product: AdaptyPaywallProduct) => EventHandlerResult;
/**
* Called when a user taps the purchase button in the paywall view
*
* If you return `true` from this callback, the paywall view will be closed.
*/
onPurchaseStarted: (product: AdaptyPaywallProduct) => EventHandlerResult;
/**
* Called if a user cancels the purchase
*
* If you return `true` from this callback, the paywall view will be closed.
*/
onPurchaseCancelled: (product: AdaptyPaywallProduct) => EventHandlerResult;
/**
* Called when a purchase is completed
*
* If you return `true` from this callback, the paywall view will be closed.
* We strongly recommend to return `true` in this case.
* @default true
*
* @param {AdaptyProfile} profile - updated user profile
*/
onPurchaseCompleted: (profile: AdaptyProfile) => EventHandlerResult;
/**
* Called if a purchase fails after a user taps the purchase button
*
* If you return `true` from this callback, the paywall view will be closed.
*
* @param {AdaptyError} error - AdaptyError object with error code and message
*/
onPurchaseFailed: (error: AdaptyError) => EventHandlerResult;
/**
* Called when a user taps the restore button in the paywall view
*
* If you return `true` from this callback, the paywall view will be closed.
*/
onRestoreStarted: () => EventHandlerResult;
/**
* Called when a purchase is completed
*
* If you return `true` from this callback, the paywall view will be closed.
* We strongly recommend to return `true` in this case.
* @default true
*
* @param {AdaptyProfile} profile - updated user profile
*/
onRestoreCompleted: (profile: AdaptyProfile) => EventHandlerResult;
/**
* Called if a restore fails after a user taps the restore button
*
* If you return `true` from this callback, the paywall view will be closed.
*
* @param {AdaptyError} error - AdaptyError object with error code and message
*/
onRestoreFailed: (error: AdaptyError) => EventHandlerResult;
/**
* Called if a paywall view fails to render.
* This should not ever happen, but if it does, feel free to report it to us.
*
* If you return `true` from this callback, the paywall view will be closed.
*
* @param {AdaptyError} error - AdaptyError object with error code and message
*/
onRenderingFailed: (error: AdaptyError) => EventHandlerResult;
/**
* Called if a product list fails to load on a presented view,
* for example, if there is no internet connection
*
* If you return `true` from this callback, the paywall view will be closed.
*
* @param {AdaptyError} error - AdaptyError object with error code and message
*/
onLoadingProductsFailed: (error: AdaptyError) => EventHandlerResult;
onAction: (action: any) => EventHandlerResult;
onCustomEvent: (id: string) => EventHandlerResult;
onUrlPress: (url: string) => EventHandlerResult;
}
/**
* Additional options for creating a paywall view
*
* @see {@link https://docs.adapty.io/docs/paywall-builder-fetching | [DOC] Creating Paywall View}
*/
export interface CreatePaywallViewParamsInput {
/**
* `true` if you want to prefetch products before presenting a paywall view.
*/
prefetchProducts?: boolean;
/**
* If you are going to use custom tags functionality, pass an object with tags and corresponding replacement values
*
* ```
* {
* 'USERNAME': 'Bruce',
* 'CITY': 'Philadelphia'
* }
* ```
*/
customTags?: Record<string, string>;
/**
* If you are going to use custom timer functionality, pass an object with timer ids and corresponding dates the timers should end at
*/
timerInfo?: Record<string, Date>;
}
export const DEFAULT_EVENT_HANDLERS: Partial<EventHandlers> = {
onCloseButtonPress: () => true,
onAndroidSystemBack: () => true,
onRestoreCompleted: () => true,
onPurchaseCompleted: () => true,
};