@zohodesk/platform-middleware
Version:
Generalized Contract for the events from Marketplace App, In-App widgets, CRM-Plus and EFC
118 lines (97 loc) • 3.1 kB
JavaScript
;
var PlatformInstance = function (PlatformInstance) {
var eventHandlers = {};
function sendEvent(event) {
return new Promise(function (resolve, reject) {
var eventCallbackObj = window.platformConfig.eventHandlers;
var eventListenerName = window.platformConfig.eventListenerName;
event.promise = {
resolve: resolve,
reject: reject
};
event.EVENT_FROM = 'PRODUCT';
eventCallbackObj[eventListenerName](event);
});
}
function bindeventHandlers(event) {
var eventName = event.name,
eventHandler = event.handlerFunction;
if (typeof eventName !== 'string') {
throw new Error('Invalid eventname parameter passed.');
}
if (typeof eventHandler !== 'function') {
throw new Error('Invalid function parameter passed.');
}
var handlersArray = eventHandlers[eventName];
if (!Array.isArray(handlersArray)) {
eventHandlers[eventName] = handlersArray = [];
}
handlersArray.push(eventHandler);
}
function executeEventHandlers(event) {
var eventName = event.name,
eventData = event.data;
var handlersArray = eventHandlers[eventName];
if (handlersArray) {
handlersArray.forEach(function (handlerFunction) {
handlerFunction(eventData);
});
}
}
function init() {
return {
sendEvent: sendEvent,
on: bindeventHandlers
};
}
PlatformInstance.init = init; //Internal Event
PlatformInstance.BroadcastEvent = executeEventHandlers;
return PlatformInstance;
}(window.PlatformInstance = {} || {});
(function (globalNameSpace) {
var appInit = PlatformInstance.init();
function get(property, payload) {
var options = {};
options.type = 'GET_DATA';
options.property = property;
options.payload = payload;
return appInit.sendEvent(options);
}
function set(property, payload) {
var options = {};
options.type = 'SET_DATA';
options.property = property;
options.payload = payload;
return appInit.sendEvent(options);
}
function invoke(payload) {
var options = {};
options.type = 'INVOKE';
options.payload = payload;
return appInit.sendEvent(options);
}
function invokeMethodCommonPattern(action, payload) {
var options = {};
options.type = action;
options.payload = payload;
return appInit.sendEvent(options);
}
function on(eventName, handlerFunction) {
var options = {};
options.name = eventName;
options.handlerFunction = handlerFunction;
appInit.on(options);
}
function dispatch(action, payload) {
var options = {};
options.type = 'ACTION';
options.property = action;
options.payload = payload;
return appInit.sendEvent(options);
}
window[globalNameSpace].get = get;
window[globalNameSpace].set = set;
window[globalNameSpace].invoke = window.platformConfig.overrideInvokeMethodToCommonPattern ? invokeMethodCommonPattern : invoke;
window[globalNameSpace].on = on;
window[globalNameSpace].dispatch = dispatch;
})(window['globalNameSpace'] || '');