UNPKG

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 8.79 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _MopinionSDK=require("./MopinionSDK");var _testRuleConditions=_interopRequireDefault(require("../utils/testRuleConditions"));var _MopinionForm=_interopRequireDefault(require("../components/MopinionForm"));var _api=require("../api");var _logger=require("../api/logger");var _UserAgent=require("../utils/UserAgent");var _optionals=require("../utils/optionals");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t in e)"default"!==_t&&{}.hasOwnProperty.call(e,_t)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t))&&(i.get||i.set)?o(f,_t,i):f[_t]=e[_t]);return f;})(e,t);}function _callSuper(t,o,e){return o=(0,_getPrototypeOf2.default)(o),(0,_possibleConstructorReturn2.default)(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],(0,_getPrototypeOf2.default)(t).constructor):o.apply(t,e));}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}var MopinionDeployment=exports.default=function(_React$Component){function MopinionDeployment(props){var _this;(0,_classCallCheck2.default)(this,MopinionDeployment);_this=_callSuper(this,MopinionDeployment,[props]);_this._handleAppStateChange=function(nextAppState){if(_this.state.appState.match(/inactive|background/)&&nextAppState==='active'){_logger.logger.log('App has come to the foreground!');}if(_this.state.appState!=nextAppState){_logger.logger.log('app state changed to: ',nextAppState);if(nextAppState=='active'){_this.fetchDeployment();}else if(nextAppState=='background'){}}};_this.handleOpen=function(data){if(typeof _this.props.onOpen==='function')_this.props.onOpen(data);};_this.handleFormLoaded=function(data){if(typeof _this.props.onFormLoaded==='function')_this.props.onFormLoaded(data);};_this.handleClose=function(data){if(typeof _this.props.onClose==='function')_this.props.onClose(data);};_this.handleFeedbackSent=function(data){if(typeof _this.props.onFeedbackSent==='function')_this.props.onFeedbackSent(data);};_this.state={deployment:[],events:{},forms:[],appState:_reactNative.AppState.currentState,userAgent:'',screenshot:''};_this._formRefs={};if(!props.deploymentID){throw new Error('deploymentID is required');}return _this;}(0,_inherits2.default)(MopinionDeployment,_React$Component);return(0,_createClass2.default)(MopinionDeployment,[{key:"componentDidMount",value:function componentDidMount(){if(!this.state.deployment.length)this.fetchDeployment();this.changeAppStateSubscription=_reactNative.AppState.addEventListener('change',this._handleAppStateChange);}},{key:"componentWillUnmount",value:function componentWillUnmount(){var _this$changeAppStateS;(_this$changeAppStateS=this.changeAppStateSubscription)==null?void 0:_this$changeAppStateS.remove();}},{key:"fetchDeployment",value:function(){var _fetchDeployment=(0,_asyncToGenerator2.default)(function*(){var _this2=this;var _this$props=this.props,_this$props$onDeploym=_this$props.onDeploymentLoaded,onDeploymentLoaded=_this$props$onDeploym===void 0?function(){}:_this$props$onDeploym,_this$props$fireWhenR=_this$props.fireWhenReady,fireWhenReady=_this$props$fireWhenR===void 0?[]:_this$props$fireWhenR,deploymentID=_this$props.deploymentID;var deployment=yield(0,_api.getDeployment)(deploymentID);if(deployment&&Array.isArray(deployment)){var events={},forms={};deployment.forEach(function(obj){obj.events.forEach(function(ev){if(events.hasOwnProperty(ev)){events[ev]=[].concat((0,_toConsumableArray2.default)(events[ev]),[obj]);}else{events[ev]=[obj];}_MopinionSDK.MopinionSDK.subscribe(ev,function(event,force){_this2.eventHandler(event,force);});});forms[obj.rule_id]={open:false,instance:rnd()};});this.setState({deployment:deployment,events:events,forms:forms},function(){onDeploymentLoaded(_this2.state);fireWhenReady.forEach(function(ev){return _this2.eventHandler(ev);});});}});function fetchDeployment(){return _fetchDeployment.apply(this,arguments);}return fetchDeployment;}()},{key:"updateForm",value:function updateForm(_ref){var _this3=this;var ruleId=_ref.ruleId,open=_ref.open,triggeredEvent=_ref.triggeredEvent,isFullySubmitted=_ref.isFullySubmitted;this.setState(function(prevState){return Object.assign({},prevState,{forms:Object.assign({},prevState.forms,(0,_defineProperty2.default)({},ruleId,{open:open!=null?open:prevState.open,instance:isFullySubmitted?rnd():prevState.forms[ruleId].instances,triggeredEvent:triggeredEvent?triggeredEvent:prevState.forms[ruleId].triggeredEvent}))});},function(){if(open){try{_this3._formRefs[ruleId].toggleModal(true);}catch(e){}}});}},{key:"eventHandler",value:function(){var _eventHandler=(0,_asyncToGenerator2.default)(function*(ev){var _this4=this;var force=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var events=this.state.events;var openForm=function openForm(_ref2){var _ref2$uri=_ref2.uri,uri=_ref2$uri===void 0?'':_ref2$uri,_ref2$imageType=_ref2.imageType,imageType=_ref2$imageType===void 0?'':_ref2$imageType,ruleId=_ref2.ruleId;_this4.setState({screenshot:uri,screenshotImageType:imageType},function(){_this4.updateForm({ruleId:ruleId,open:true,triggeredEvent:ev});});};var _loop=function*_loop(rule){if(yield(0,_testRuleConditions.default)(rule,force)){if(_optionals.captureScreen){try{(0,_optionals.captureScreen)({format:'png',width:_reactNative.Dimensions.get('window').width,height:_reactNative.Dimensions.get('window').height,result:'base64'}).then(function(uri){openForm({uri:uri,imageType:'image/png',ruleId:rule.rule_id});},function(captureError){openForm({ruleId:rule.rule_id});});}catch(e){openForm({ruleId:rule.rule_id});}}else{openForm({ruleId:rule.rule_id});}}};for(var rule of(_events$ev=events[ev])!=null?_events$ev:[]){var _events$ev;yield*_loop(rule);}});function eventHandler(_x){return _eventHandler.apply(this,arguments);}return eventHandler;}()},{key:"render",value:function render(){var _this5=this;var _this$state=this.state,deployment=_this$state.deployment,forms=_this$state.forms,userAgent=_this$state.userAgent,screenshot=_this$state.screenshot;return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[deployment.filter(function(rule){var _forms$rule$rule_id;return(_forms$rule$rule_id=forms[rule.rule_id])==null?void 0:_forms$rule$rule_id.open;}).map(function(o,i){var form=forms[o.rule_id];return(0,_jsxRuntime.jsx)(_react.Fragment,{children:(0,_jsxRuntime.jsx)(_MopinionForm.default,Object.assign({form:{formKey:o.formKey,domain:o.domain,trigger:o.trigger,webview:o.webview},screenSize:`${Math.round(_reactNative.Dimensions.get('window').width)}x${Math.round(_reactNative.Dimensions.get('window').height)}`,userAgent:userAgent,screenshot:screenshot,ref:function ref(_ref3){return _this5._formRefs[o.rule_id]=_ref3;},onClosed:function onClosed(isFullySubmitted){_this5.updateForm({ruleId:o.rule_id,isFullySubmitted:isFullySubmitted});},triggeredEvent:form.triggeredEvent,onOpen:_this5.handleOpen,onFormLoaded:_this5.handleFormLoaded,onClose:_this5.handleClose,onFeedbackSent:_this5.handleFeedbackSent},_this5.props))},o.rule_id+o.formKey+o.trigger);}),!userAgent&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:{position:'absolute'},children:(0,_jsxRuntime.jsx)(_UserAgent.UserAgent,{setUserAgent:function setUserAgent(userAgent){_this5.setState({userAgent:userAgent});}})})]});}}]);}(_react.default.Component);function rnd(){return Math.random().toString(36);}