import { ModuleNames, RUKMINI_WIDTH_PLACEHOLDER, RUKMINI_HEIGHT_PLACEHOLDER, RUKMINI_QUALITY_PLACEHOLDER, DEFAULT_IMAGE_QUALITY } from "./../constants/Constants"; import { WindowManager } from "./WindowManager"; export interface PostMessage { resolveFunction: (data: any) => void; rejectFunction: (data: any) => void; methodName: string; moduleName: string; data?: any; requestID?: number; } export class NativeModule { protected postMessage(postMessage: PostMessage): void { const requestID = Date.now(); postMessage.requestID = requestID; const resolveFunction = postMessage.resolveFunction; const rejectFunction = postMessage.rejectFunction; this.addPromiseToWindowMap(requestID, resolveFunction, rejectFunction, postMessage.moduleName, postMessage.methodName); const windowObj = WindowManager.getWindow(); if (windowObj) { this.trimEventMap(postMessage); windowObj.postMessage(JSON.stringify(postMessage), "*"); } return; } private trimEventMap(eventMap: PostMessage): void { delete eventMap.rejectFunction; delete eventMap.resolveFunction; } private addPromiseToWindowMap(requestID: number, resolveFunction: (data: any) => void, rejectFunction: (data: any) => void, moduleName: string, methodName: string): void { const windowObj = WindowManager.getWindow(); if (windowObj) { if (!windowObj.promiseMap) { windowObj.promiseMap = {}; } windowObj.promiseMap[requestID] = { resolveFunction, rejectFunction, moduleName, methodName, }; } } }