import { MessageBackEvent } from "./interfaces/FKWindow"; import { WindowManager } from "./managers/WindowManager"; import FKPlatform from "./FKPlatform"; window.addEventListener("DOMContentLoaded", () => { if (navigator && navigator.userAgent) { const windowObj = WindowManager.getWindow(); if (windowObj) { windowObj.FKExtension = { newPlatformInstance: () => { return new FKPlatform(); }, }; document.addEventListener("message", onMessage); } } }); function onMessage(event: MessageEvent | Event): void { // TS Hack - difference in TS types for window.addEventListener and document.addEventListener const messageEvent = event as MessageEvent; try { const dataFromHost: MessageBackEvent | undefined = messageEvent.data && typeof messageEvent.data === "string" ? JSON.parse(messageEvent.data) : undefined; if (dataFromHost) { const requestID: number | undefined = dataFromHost && dataFromHost.requestID; const successMessage: string | undefined = dataFromHost && dataFromHost.success; const errorMessage: string | undefined = dataFromHost && dataFromHost.error; const windowObj = WindowManager.getWindow(); if (windowObj && requestID) { // Resolve with map using method name and module name map // also think of error logging here - how to do it if (successMessage) { const resolveFunction: (data: any) => void = windowObj.promiseMap[requestID].resolveFunction; resolveFunction(successMessage); } else { const rejectFunction: (data: any) => void = windowObj.promiseMap[requestID].rejectFunction; rejectFunction(errorMessage); } } } } catch (e) { // tslint:disable-next-line: no-console console.log(e); } }