@zohodesk/platform-middleware_poc
Version:
Generalized Contract for the events from Marketplace App, In-App widgets, CRM-Plus and EFC
142 lines (118 loc) • 5.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.renderWidgetsAction = exports.fetchWidgetsSuccess = exports.WidgetsReducer = exports.WidgetContext = exports.WidgetProvider = exports.platformMiddleware = undefined;
var _utils = require('./utils');
var _loadAssets = require('./loadAssets');
var _WidgetProvider = require('./providers/WidgetProvider');
var _WidgetProvider2 = _interopRequireDefault(_WidgetProvider);
var _widgetsReducer = require('./reducers/widgetsReducer');
var _widgetsActions = require('./actions/widgetsActions');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var configObj = {};
// let sampleConfig = {
// "marketplace": {
// "renderHandler": "<rednerHandler>",
// "postAssetsFetch": "<postAssetsFetchHandler>",
// "isDevMode": "<isDevModeHandler>",
// "requestHandler": "<requestHandler>"
// },
// "locale": "<locale>",
// "eventListeners": "<eventListenersHandlerObj> {DESK_EVENT: 'desk_event Handler', DESK_EVENT_V2: 'desk_event_v2 handler'}"
// }
function bindEventListeners(listnerObj) {
var listeners = listnerObj.listeners,
dataList = listnerObj.dataList,
getState = listnerObj.getState,
dispatch = listnerObj.dispatch;
try {
var listenerFunc = null,
appEventListeners = {};
Object.keys(listeners).forEach(function (listenerKey) {
listenerFunc = listeners[listenerKey];
if (listenerFunc && typeof listenerFunc == 'function') {
appEventListeners[listenerKey] = function (event) {
listenerFunc((0, _utils.handleEvent)({ event: event, getState: getState, dispatch: dispatch, dataList: dataList }));
};
}
});
return appEventListeners;
} catch (error) {
throw 'Listeners expect an JSON Object...';
}
}
var platformMiddleware = function platformMiddleware(config) {
return function (_ref) {
var dispatch = _ref.dispatch,
getState = _ref.getState;
var _validateConfig = (0, _utils.validateConfig)(config),
isConfigValid = _validateConfig.isConfigValid,
errorMsg = _validateConfig.errorMsg;
if (!isConfigValid) {
throw errorMsg;
}
config.store = { dispatch: dispatch, getState: getState };
configObj = config;
window.platformConfig = {
eventHandlers: bindEventListeners({ listeners: config.eventListeners, dispatch: dispatch, getState: getState, dataList: config.dataList })
};
if (config.featureFlags.isMarketplaceNeeded) {
(0, _loadAssets.loadSigmaAssests)(function () {
if (typeof ZApp !== 'undefined') {
config.marketplace.postAssestsFetch({ dispatch: dispatch, getState: getState });
/* Bootstraping the ZApp Framework */
ZApp.Bootstrap({
RenderHandlers: config.marketplace.renderHandler(dispatch, getState),
isDevMode: config.marketplace.isDevMode(),
EventListeners: bindEventListeners({ listeners: config.eventListeners, dispatch: dispatch, getState: getState, dataList: config.dataList }),
defaultLocale: config.locale || 'en',
RequestHandler: function RequestHandler(event, promise) {
return config.marketplace.requestHandler((0, _utils.handleEvent)({ event: event, getState: getState, dispatch: dispatch, promise: promise }));
}
});
}
});
}
(0, _loadAssets.loadInProductSDKAssets)({ globalNameSpace: config.globalNameSpace, cb: function cb() {} });
return function (next) {
return function (action) {
if (action.type === 'RENDER_WIDGETS_NEW') {
var widgets = Array.isArray(action.data) ? action.data : [action.data];
ZApp.RenderWidgets(widgets);
}
var eventList = config.events || {};
var event = eventList[action.type];
var hook = action.types && eventList[action.types[0]];
/* Added for the URL CHANGE action gets dispatched twice */
var isValidEvent = true;
if (event && event.filter) {
isValidEvent = event.filter(action);
}
if (isValidEvent && event && event.type === 'event' && (0, _utils.isEventNeededToBroadCast)(event)) {
var nextAction = next(action);
(0, _utils.zAppBroadcastEvent)({ event: event, getState: getState, dispatch: dispatch, action: action });
return nextAction;
} else if (hook && hook.type === 'hook' && (0, _utils.isEventNeededToBroadCast)(hook)) {
return (0, _utils.zAppHookEvent)({
hook: hook, getState: getState, dispatch: dispatch, action: action, notifyHandler: function notifyHandler(data) {
config.marketplace.notifyHandler(data);
}
}).then(function (res) {
return next(action);
}).catch(function (err) {
return next(action);
});
} else {
return next(action);
}
};
};
};
};
exports.platformMiddleware = platformMiddleware;
exports.WidgetProvider = _WidgetProvider2.default;
exports.WidgetContext = _WidgetProvider.WidgetContext;
exports.WidgetsReducer = _widgetsReducer.WidgetsReducer;
exports.fetchWidgetsSuccess = _widgetsActions.fetchWidgetsSuccess;
exports.renderWidgetsAction = _widgetsActions.renderWidgetsAction;