@shopgate/engage
Version:
Shopgate's ENGAGE library.
32 lines • 4.79 kB
JavaScript
import{ToastProvider}from'@shopgate/pwa-common/providers';import{MODAL_PIPELINE_ERROR}from'@shopgate/pwa-common/constants/ModalTypes';import showModal from'@shopgate/pwa-common/actions/modal/showModal';import{logger,i18n}from'@shopgate/engage/core/helpers';/**
* Creates an error message for a pipeline and a code
* @param {string} message The pipeline message
* @param {Object} params Additional params for the message
* @param {string} [pipeline=''] Name of the pipeline which caused the error
* @returns {string}
*/var getErrorMessage=function getErrorMessage(message){var params=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var pipeline=arguments.length>2&&arguments[2]!==undefined?arguments[2]:'';if(!/^((\w+)\.){1,}/gi.test(message)){// Stop processing when the message is no i18n key
return i18n.text(message,params);}var segments=message.split('.');var code=segments.pop();var pipelineKeys=[];var codeKeys=[];var genericKeys=[];var keys=[];// Generate a bunch of lookup keys from the message
while(segments.length){pipelineKeys.push([].concat(segments,[pipeline,code]));codeKeys.push([].concat(segments,[code]));genericKeys.push([].concat(segments,['generic']));segments.pop();}// Add common keys
keys=[].concat(pipelineKeys,codeKeys,genericKeys,["common.errors.".concat(code),'common.errors.generic']);var match=keys.find(function(key){return i18n.getPath(key);});try{return i18n.text(match,params);}catch(e){return i18n.text(keys[keys.length-1]);}};/**
* Generates an error object for the error behaviors
* @param {Object} originalError The original error object
* @returns {Object}
*/var getErrorObject=function getErrorObject(originalError){var code=originalError.code,_originalError$contex=originalError.context,pipeline=_originalError$contex===void 0?'':_originalError$contex,meta=originalError.meta;var _meta$input=meta.input,pipelineInput=_meta$input===void 0?{}:_meta$input,originalMessage=meta.message,additionalParams=meta.additionalParams,translated=meta.translated;var message=translated?originalMessage:getErrorMessage(originalMessage,additionalParams,pipeline);var sanitized={code:code?code.toString():code,pipeline:pipeline,pipelineInput:pipelineInput,originalMessage:originalMessage,message:message,additionalParams:additionalParams,translated:translated};return sanitized;};/**
* Enables a custom implementation for an error behavior. The passed callback will be invoked with
* an object similar to streams (dispatch, getState, events). Additionally it contains the error
* object and the error message.
* @param {Function} callback A callback function for the custom error behavior
* @returns {Function}
*/var custom=function custom(callback){return function(_ref){var dispatch=_ref.dispatch,getState=_ref.getState,events=_ref.events,error=_ref.error;if(typeof callback!=='function'){logger.error('errorBehavior.custom: Please provide a callback function');return;}var sanitized=getErrorObject(error);callback({dispatch:dispatch,getState:getState,events:events,error:sanitized,message:sanitized.message});};};/**
* Enables to dispatch a Redux action via a passed callback.
* The callback is invoked with the error message.
* @param {Function} callback A callback function for the custom error behavior
* @returns {Function}
*/var dispatchAction=function dispatchAction(callback){return function(_ref2){var dispatch=_ref2.dispatch,error=_ref2.error;var _getErrorObject=getErrorObject(error),message=_getErrorObject.message;dispatch(callback(message));};};/**
* Displays a pipeline error as a modal.
* @returns {Function}
*/var modal=function modal(){return function(_ref3){var dispatch=_ref3.dispatch,error=_ref3.error;var _getErrorObject2=getErrorObject(error),code=_getErrorObject2.code,pipeline=_getErrorObject2.pipeline,message=_getErrorObject2.message,pipelineInput=_getErrorObject2.pipelineInput,originalMessage=_getErrorObject2.originalMessage,additionalParams=_getErrorObject2.additionalParams,translated=_getErrorObject2.translated;dispatch(showModal({confirm:'modal.ok',dismiss:null,title:null,message:message,type:MODAL_PIPELINE_ERROR,params:{pipeline:pipeline,request:pipelineInput,message:originalMessage,code:code,translated:translated,messageParams:additionalParams}}));};};/**
* Displays a pipeline error as a toast message.
* @param {number} duration An optional display duration in ms for the toast
* @returns {Function}
*/var toast=function toast(duration){return function(_ref4){var events=_ref4.events,error=_ref4.error;var _getErrorObject3=getErrorObject(error),message=_getErrorObject3.message;events.emit(ToastProvider.ADD,{id:'pipeline.error',message:message,duration:duration});};};export default{getErrorMessage:getErrorMessage,toast:toast,modal:modal,custom:custom,dispatchAction:dispatchAction};