UNPKG

@appmetrica/react-native-analytics

Version:
131 lines (114 loc) 3.17 kB
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), }; } }