@appmetrica/react-native-analytics
Version:
React Native plugin for AppMetrica analytics tool
131 lines (114 loc) • 3.17 kB
text/typescript
import {
normalizeECommerceCartItem,
normalizeECommerceOrder,
normalizeECommerceProduct,
normalizeECommerceReferrer,
normalizeECommerceScreen,
} from './utils';
export type ECommerceScreen = {
name: string;
searchQuery?: string;
payload?: Map<string, string> | Record<string, string>;
categoriesPath?: Array<string>;
};
export type ECommerceAmount = {
amount: number | string;
unit: string;
};
export type ECommercePrice = {
amount: ECommerceAmount;
internalComponents?: Array<ECommerceAmount>;
};
export type ECommerceProduct = {
sku: string;
name?: string;
actualPrice?: ECommercePrice;
originalPrice?: ECommercePrice;
promocodes?: Array<string>;
categoriesPath?: Array<string>;
payload?: Map<string, string> | Record<string, string>;
};
export type ECommerceReferrer = {
type?: string;
identifier?: string;
screen?: ECommerceScreen;
};
export type ECommerceCartItem = {
product: ECommerceProduct;
price: ECommercePrice;
quantity: number | string;
referrer?: ECommerceReferrer;
};
export type ECommerceOrder = {
orderId: string;
products: Array<ECommerceCartItem>;
payload?: Map<string, string> | Record<string, string>;
};
export type ECommerceEventType =
| 'showSceenEvent'
| 'showProductCardEvent'
| 'showProductDetailsEvent'
| 'addCartItemEvent'
| 'removeCartItemEvent'
| 'beginCheckoutEvent'
| 'purchaseEvent';
export interface ECommerceEvent {
ecommerceEvent: ECommerceEventType;
ecommerceScreen?: ECommerceScreen;
product?: ECommerceProduct;
referrer?: ECommerceReferrer;
cartItem?: ECommerceCartItem;
order?: ECommerceOrder;
}
export class ECommerce {
static showScreenEvent(screen: ECommerceScreen): ECommerceEvent {
return {
ecommerceEvent: 'showSceenEvent',
ecommerceScreen: normalizeECommerceScreen(screen),
};
}
static showProductCardEvent(
product: ECommerceProduct,
screen: ECommerceScreen
): ECommerceEvent {
return {
ecommerceEvent: 'showProductCardEvent',
ecommerceScreen: normalizeECommerceScreen(screen),
product: normalizeECommerceProduct(product),
};
}
static showProductDetailsEvent(
product: ECommerceProduct,
referrer?: ECommerceReferrer
): ECommerceEvent {
return {
ecommerceEvent: 'showProductDetailsEvent',
product: normalizeECommerceProduct(product),
referrer: normalizeECommerceReferrer(referrer),
};
}
static addCartItemEvent(item: ECommerceCartItem): ECommerceEvent {
return {
ecommerceEvent: 'addCartItemEvent',
cartItem: normalizeECommerceCartItem(item),
};
}
static removeCartItemEvent(item: ECommerceCartItem): ECommerceEvent {
return {
ecommerceEvent: 'removeCartItemEvent',
cartItem: normalizeECommerceCartItem(item),
};
}
static beginCheckoutEvent(order: ECommerceOrder): ECommerceEvent {
return {
ecommerceEvent: 'beginCheckoutEvent',
order: normalizeECommerceOrder(order),
};
}
static purchaseEvent(order: ECommerceOrder): ECommerceEvent {
return {
ecommerceEvent: 'purchaseEvent',
order: normalizeECommerceOrder(order),
};
}
}