remx
Version:
Opinionated mobx
52 lines (37 loc) • 1.8 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});exports.observer=undefined;var _jsxFileName='src/es6Remx/observer.js',_arguments=arguments;var _react=require('react');var _react2=_interopRequireDefault(_react);
var _mobxReact=require('mobx-react');
var _globalState=require('./globalState');
var _noop=require('../utils/noop');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}
var ReactForwardRefSymbol=
typeof _react.forwardRef==='function'&&(0,_react.forwardRef)(_noop.noop).$$typeof;
var isFunctionComponent=function isFunctionComponent(component){return(
typeof component==='function'&&(
!component.prototype||!component.prototype.render)&&
!component.isReactClass&&
!Object.prototype.isPrototypeOf.call(_react.Component,component));};exports.default=
null;
var observer=exports.observer=function observer(component){
if(
ReactForwardRefSymbol&&
component.$$typeof===ReactForwardRefSymbol)
{
if(typeof component.render!=='function'){
throw new TypeError('render property of ForwardRef was not a function');
}
var render=makeRenderTrackable(component.render);
return(0,_react.forwardRef)(function(){return(
_react2.default.createElement(_mobxReact.Observer,{__source:{fileName:_jsxFileName,lineNumber:33}},
function(){return render.apply(undefined,_arguments);}));});
}
if(isFunctionComponent(component)){
return(0,_mobxReact.observer)(makeRenderTrackable(component));
}
component.prototype.render=makeRenderTrackable(component.prototype.render);
return(0,_mobxReact.observer)(component);
};
var makeRenderTrackable=function makeRenderTrackable(render){return function(){
(0,_globalState.incrementRenderingObserverDepth)();
var result=render.apply(this,arguments);
(0,_globalState.decrementRenderingObserverDepth)();
return result;
};};