import { NativeEventEmitter, type NativeModule, NativeModules, } from 'react-native'; import { LINKING_ERROR } from '../constants/FWErrorMessage'; import type Product from '../models/Product'; import type ProductInfoViewConfiguration from '../models/ProductInfoViewConfiguration'; import type ShoppingCTAResult from '../models/ShoppingCTAResult'; const ShoppingModule = NativeModules.ShoppingModule ? NativeModules.ShoppingModule : new Proxy( {}, { get() { throw new Error(LINKING_ERROR); }, } ); interface IShoppingModule extends NativeModule { init(): Promise; updateVideoProducts(products: Product[], callbackId: number | string): void; updateShoppingCTAResult( result: ShoppingCTAResult, callbackId: number | string ): void; setCartIconVisible(visible: boolean): void; setCartItemCount(count: number): void; clearCallbackId(callbackId: number | string, eventName: string): void; // Only supported on iOS setProductInfoViewConfiguration( config: ProductInfoViewConfiguration ): Promise; setCustomClickLinkButtonEnabled(enabled: boolean): Promise; setCustomTapProductCardEnabled(enabled: boolean): Promise; // Only supported on iOS pausePlayer(callbackId: number | string): void; // Only supported on iOS resumePlayer(callbackId: number | string): void; // Only supported on iOS } const ShoppingModuleEventEmitter = new NativeEventEmitter(ShoppingModule); export { ShoppingModuleEventEmitter }; export default ShoppingModule as IShoppingModule;