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 • 4.56 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=testRuleConditions;var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _reactNative=require("react-native");var _asyncStorage=_interopRequireDefault(require("@react-native-async-storage/async-storage"));var _=require("./");var showAlwaysPerSessionTriggers=['passive'];function inDays(d){return Math.ceil(d/(1000*3600*24));}function sessionExpired(session){var state=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(!(state!=null&&state.date)){return true;}var now=inDays(new Date().getTime());var prev=inDays(new Date(state.date).getTime());return now-prev>Number(session);}function getRandomPercentage(){return Math.round(Math.random()*100);}function initRuleState(rule){var state=Object.assign({shown:false,date:new Date(),trigger:rule.trigger},!conditionValueIsEmpty(rule.percentage)&&{percentage:getRandomPercentage()});return state;}function getRuleState(_x,_x2){return _getRuleState.apply(this,arguments);}function _getRuleState(){_getRuleState=(0,_asyncToGenerator2.default)(function*(storageKey,rule){try{var ruleStateString=yield _asyncStorage.default.getItem(storageKey);var parsedRuleState=(0,_.tryParse)(ruleStateString);if(sessionExpired(rule.session,parsedRuleState)){return initRuleState(rule);}return parsedRuleState;}catch(e){return initRuleState(rule);}});return _getRuleState.apply(this,arguments);}function setRuleState(storageKey,state){try{_asyncStorage.default.setItem(storageKey,JSON.stringify(state));}catch(e){}}function conditionValueIsEmpty(value){if(typeof value==='undefined'||value===null){return true;}if(typeof value==='string'){return value.trim()==='';}if(value&&typeof value==='object'){return Object.keys(value).length===0;}if(typeof value==='number'){return isNaN(value);}return false;}var conditionTests={operators:{earlier:function earlier(x,y){return x<y;},exactly:function exactly(x,y){return x==y;},later:function later(x,y){return x>y;},between:function between(x,y,z){return conditionTests.operators.later(z,x)&&conditionTests.operators.earlier(z,y);}},percentage:function percentage(perc){var ruleState=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var percentage=parseFloat(perc);if(percentage===0){return false;}if(isNaN(percentage)||percentage<0||percentage>=100){return true;}var result=parseFloat(ruleState.percentage)<percentage;return result;},target:function target(targetArr){var testTarget=function testTarget(target){var OS=_reactNative.Platform.OS===target.os;var version=!target.version.length||target.version.length&&target.version.indexOf(String(_reactNative.Platform.Version))>-1;return OS&&version;};return Boolean(targetArr.filter(function(o){return testTarget(o);}).length);},date:function date(_date){var formatString=function formatString(s){var arr=s.split('/').reverse().join('-');return arr;};var formatDate=function formatDate(d){return new Date(d.setHours(0,0,0,0)).getTime();};var formatAll=function formatAll(s){return formatDate(new Date(formatString(s)));};if(_date.operator!=='between'){return conditionTests.operators[_date.operator](formatDate(new Date()),formatAll(_date.date));}else{return conditionTests.operators[_date.operator](formatAll(_date.date),formatAll(_date.date2),formatDate(new Date()));}},clock:function clock(_clock){var now=new Date();now=('0'+now.getHours()).slice(-2)+':'+('0'+now.getMinutes()).slice(-2);if(_clock.operator!=='between'){return conditionTests.operators[_clock.operator](now,_clock.time);}else{return conditionTests.operators[_clock.operator](_clock.time,_clock.time2,now);}}};function testRuleConditions(_x3,_x4){return _testRuleConditions.apply(this,arguments);}function _testRuleConditions(){_testRuleConditions=(0,_asyncToGenerator2.default)(function*(rule,force){var storageKey=`mopinion_${rule.rule_id}_${rule.trigger}`;var ruleState=yield getRuleState(storageKey,rule);if(ruleState.shown){return false;}var allConditionsValid=(0,_.objectKeys)(rule).every(function(conditionKey){var conditionTest=conditionTests[conditionKey];if(typeof conditionTest!=='function'||conditionValueIsEmpty(rule[conditionKey])){return true;}return conditionTest(rule[conditionKey],ruleState);});var show=allConditionsValid||force;if(!force){setRuleState(storageKey,Object.assign({},ruleState,{shown:show&&!showAlwaysPerSessionTriggers.includes(rule.trigger)}));}return show;});return _testRuleConditions.apply(this,arguments);}