UNPKG

@thoughtspot/visual-embed-sdk

Version:
75 lines 2.69 kB
import { ERROR_MESSAGE } from '../errors'; import { HostEvent } from '../types'; import { logger } from '../utils/logger'; import { handlePresentEvent } from '../utils'; import { getEmbedConfig } from '../embed/embedConfig'; /** * Reloads the ThoughtSpot iframe. * @param iFrame */ export const reload = (iFrame) => { const src = iFrame.src; iFrame.src = ''; setTimeout(() => { iFrame.src = src; }, 100); }; /** * Post iframe message. * @param iFrame * @param message * @param message.type * @param message.data * @param thoughtSpotHost * @param channel */ function postIframeMessage(iFrame, message, thoughtSpotHost, channel) { var _a; return (_a = iFrame.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(message, thoughtSpotHost, [channel === null || channel === void 0 ? void 0 : channel.port2]); } export const TRIGGER_TIMEOUT = 30000; /** * * @param iFrame * @param messageType * @param thoughtSpotHost * @param data */ export function processTrigger(iFrame, messageType, thoughtSpotHost, data) { return new Promise((res, rej) => { var _a; if (messageType === HostEvent.Reload) { reload(iFrame); return res(null); } if (messageType === HostEvent.Present) { const embedConfig = getEmbedConfig(); const disableFullscreenPresentation = (_a = embedConfig === null || embedConfig === void 0 ? void 0 : embedConfig.disableFullscreenPresentation) !== null && _a !== void 0 ? _a : true; if (!disableFullscreenPresentation) { handlePresentEvent(iFrame); } else { logger.warn('Fullscreen presentation mode is disabled. Set disableFullscreenPresentation: false to enable this feature.'); } } const channel = new MessageChannel(); channel.port1.onmessage = ({ data: responseData }) => { var _a; channel.port1.close(); const error = responseData.error || ((_a = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _a === void 0 ? void 0 : _a.error); if (error) { rej(error); } else { res(responseData); } }; // Close the messageChannel and resolve the promise if timeout. setTimeout(() => { channel.port1.close(); res(new Error(ERROR_MESSAGE.TRIGGER_TIMED_OUT)); }, TRIGGER_TIMEOUT); return postIframeMessage(iFrame, { type: messageType, data }, thoughtSpotHost, channel); }); } //# sourceMappingURL=processTrigger.js.map