UNPKG

@shopgate/engage

Version:
32 lines 4.79 kB
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};