mopinion-react-native-sdk
Version:
Collect in-app feedback with Mopinion for React Native. Built fully in React Native for optimal integration with your React Native app.
1 lines • 7.03 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});exports.applyLogic=applyLogic;var _2=require("./");function trim(str){return String(str).trim();}var operatorFn={'===':function _(x,y){return trim(x)===trim(y);},'!==':function _(x,y){return trim(x)!==trim(y);},'*':function _(x,y){return y.indexOf(trim(x))>-1;},'!*':function _(x,y){return!x&&y.length>0||y.indexOf(trim(x))===-1;}};function getElementExtraKey(elementKey){var _block$properties$ele;var block=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(Number(elementKey)>(0,_2.objectKeys)((_block$properties$ele=block.properties.elements)!=null?_block$properties$ele:{}).length){var _block$properties$ele2;var extraElementKey=Number(elementKey)-(0,_2.objectKeys)((_block$properties$ele2=block.properties.elements)!=null?_block$properties$ele2:{}).length;return block.properties.elements_extra[extraElementKey]&&extraElementKey;}return null;}function getCheckboxDatafield(elementKey){var _block$properties$ele4;var block=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var elementExtraKey=getElementExtraKey(elementKey,block);if(elementExtraKey!==null){var _block$properties$ele3;return(_block$properties$ele3=block.properties.elements_extra[elementExtraKey])==null?void 0:_block$properties$ele3.data_field;}return(_block$properties$ele4=block.properties.elements[elementKey])==null?void 0:_block$properties$ele4.data_field;}function getValue(elementKey){var block=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(['gcr','radio','checkbox','select','thumbs','category'].indexOf(block.typeName)>-1){var _block$properties$ele8,_block$properties$ele9,_block$properties$ele10;var elementExtraKey=getElementExtraKey(elementKey,block);if(elementExtraKey!==null){var _block$properties$ele5,_block$properties$ele6,_block$properties$ele7;return(_block$properties$ele5=(_block$properties$ele6=block.properties.elements_extra[elementExtraKey])==null?void 0:_block$properties$ele6.value)!=null?_block$properties$ele5:(_block$properties$ele7=block.properties.elements_extra[elementExtraKey])==null?void 0:_block$properties$ele7.label;}return(_block$properties$ele8=(_block$properties$ele9=block.properties.elements[elementKey])==null?void 0:_block$properties$ele9.value)!=null?_block$properties$ele8:(_block$properties$ele10=block.properties.elements[elementKey])==null?void 0:_block$properties$ele10.label;}return String(elementKey);}function isValidRule(){var _condition$testValue;var _ref=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},state=_ref.state,_ref$condition=_ref.condition,condition=_ref$condition===void 0?{}:_ref$condition,_ref$block=_ref.block,block=_ref$block===void 0?{}:_ref$block,didExecuteLogic=_ref.didExecuteLogic;if(condition.always&&!didExecuteLogic){return true;}var operator=operatorFn[condition==null?void 0:condition.operator];if(!operator){return false;}if(condition.hasOwnProperty('trigger_element')){return operator(condition.trigger_element,state.value);}var conditionsTrue=condition.elements.filter(function(elementKey){if(block.typeName==='screenshot'){return operator(screenshotIsRendering,state.value);}if(block.typeName==='checkbox'){var _state$getCheckboxDat;return operator(true,(_state$getCheckboxDat=state[getCheckboxDatafield(elementKey,block)])==null?void 0:_state$getCheckboxDat.value);}var valueFromBlock=getValue(elementKey,block);return operator(valueFromBlock,state.value);});return(condition==null?void 0:condition.concat)!=='&&'?(conditionsTrue==null?void 0:conditionsTrue.length)>0:(conditionsTrue==null?void 0:conditionsTrue.length)===((_condition$testValue=condition.testValue)==null?void 0:_condition$testValue.length);}function getTargetId(_ref2){var _state$idOrUuid;var _ref2$target=_ref2.target,target=_ref2$target===void 0?'':_ref2$target,_ref2$state=_ref2.state,state=_ref2$state===void 0?{}:_ref2$state;var fieldAsArr=String(target).split('_');var idOrUuid=/^[a-z]+$/i.test(fieldAsArr[fieldAsArr.length-1])?fieldAsArr[fieldAsArr.length-2]:fieldAsArr[fieldAsArr.length-1];if(fieldAsArr[0]==='thanks-page'){return fieldAsArr[1];}return Number((_state$idOrUuid=state[idOrUuid])==null?void 0:_state$idOrUuid.id);}function clearNestedStateValues(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return(0,_2.objectKeys)(state).reduce(function(newNestedState,currentKey){if((0,_2.isNestedStateProp)(currentKey)){newNestedState[currentKey]=Object.assign({},state[currentKey]);newNestedState[currentKey].value='';}return newNestedState;},{});}function applyLogic(_ref3){var _block$rules;var state=_ref3.state,_ref3$block=_ref3.block,block=_ref3$block===void 0?{}:_ref3$block,_ref3$rules=_ref3.rules,rules=_ref3$rules===void 0?[]:_ref3$rules,layout=_ref3.layout;if(!((_block$rules=block.rules)!=null&&_block$rules.length)){return{newState:state};}var executeSubmitLogic=false;var didExecuteLogic=false;var elementsToBeUpdated={};rules.forEach(function(){var _ref4=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},_ref4$action=_ref4.action,action=_ref4$action===void 0?{}:_ref4$action,_ref4$condition=_ref4.condition,condition=_ref4$condition===void 0?{}:_ref4$condition;if(action.action==='submit'){executeSubmitLogic=isValidRule({state:state[block.id],condition:condition,block:block});return;}if(['hide','show'].indexOf(action.action)>-1){action.targets.forEach(function(target){var _state$targetId;var targetId=getTargetId({target:target,state:state});if(!targetId){return;}var valid=isValidRule({state:state[block.id],condition:condition,block:block,didExecuteLogic:didExecuteLogic});var show=action.action==='show';var isVisible=valid?show:!show;if(valid){didExecuteLogic=true;}elementsToBeUpdated[targetId]=Object.assign({isVisible:isVisible},!isVisible&&Object.assign({value:''},clearNestedStateValues((_state$targetId=state[targetId])!=null?_state$targetId:{})));});return;}if(action.action==='jump_to'){var targetId=getTargetId({target:action.target,state:state});if(!targetId){return;}var valid=isValidRule({state:state[block.id],condition:condition,block:block,didExecuteLogic:didExecuteLogic});if(valid){didExecuteLogic=true;var targetIndex=layout.indexOf(targetId);var blockIndex=layout.indexOf(Number(block.id));var isBackwardsJump=targetIndex<blockIndex;var layoutSlice=isBackwardsJump?layout.slice(targetIndex,blockIndex+1):layout.slice(blockIndex+1,targetIndex);layoutSlice.forEach(function(blockId,index){elementsToBeUpdated[blockId]=Object.assign({},!isBackwardsJump&&{isVisible:false},{showInConvo:isBackwardsJump?index===0:false,isSkipped:false,value:''});});return;}}});return{updateFromLogic:elementsToBeUpdated,submitFromLogic:executeSubmitLogic,newState:mergeLogicUpdates(state,elementsToBeUpdated)};}function mergeLogicUpdates(prevState,updateFromLogic){var updatedState={};try{(0,_2.objectKeys)(updateFromLogic||{}).forEach(function(blockId){if(prevState[blockId]){updatedState[blockId]=Object.assign({},prevState[blockId],updateFromLogic[blockId]);}});}catch(e){}return Object.assign({},prevState,updatedState);}