import { NativeEventEmitter, NativeModules } from 'react-native'; import type { AuthResponse, Listener, PayReq, ShareWebpageMetadata, } from './Types'; import type { WeChatSdkEvents } from './WeChatSdkEvents'; const { WeChatSdkModule } = NativeModules; // const Prefix = WeChatSdkModule.WeChatSdk; const WeChatSdkModuleEvent = new NativeEventEmitter(WeChatSdkModule); let weChatSdkManager: WeChatSdkManager | undefined; export default class WeChatSdkManager { private _listeners = new Map(); static instance(): WeChatSdkManager { if (weChatSdkManager == null) { weChatSdkManager = new WeChatSdkManager(); } return weChatSdkManager; } init(appid: string): Promise { return WeChatSdkModule.init(appid); } registerApp(appId: string, universalLink?: string): Promise { return WeChatSdkModule.registerApp(appId, universalLink); } isWXAppInstalled(): Promise { return WeChatSdkModule.isWXAppInstalled(); } isWXAppSupportApi(): Promise { return WeChatSdkModule.isWXAppSupportApi(); } getApiVersion(): Promise { return WeChatSdkModule.getApiVersion(); } openWXApp(): Promise { return WeChatSdkModule.openWXApp(); } sendAuthRequest( scope: string | string[], state?: string ): Promise { return WeChatSdkModule.sendAuthRequest(scope, state); } pay(payReq: PayReq): Promise { return WeChatSdkModule.pay(payReq); } ShareWebpage(shareWebpage: ShareWebpageMetadata): Promise { return WeChatSdkModule.shareWebpage(shareWebpage); } destroy() { this.removeAllListener(); weChatSdkManager = undefined; } addListener( event: EventType, listener: WeChatSdkEvents[EventType] ) { if (!this._listeners.has(event)) { this._listeners.set(event, listener); WeChatSdkModuleEvent.addListener(event, listener); } } removeListener( event: EventType, listener: WeChatSdkEvents[EventType] ) { if (this._listeners.has(event)) { this._listeners.delete(event); WeChatSdkModuleEvent.removeListener(event, listener); } } removeAllListener() { this._listeners.forEach((value, key) => { this._listeners.delete(key); WeChatSdkModuleEvent.removeListener(key, value); }); this._listeners.clear(); } }