UNPKG

remx

Version:
63 lines (55 loc) 2.15 kB
var _mobx=require('mobx');var mobx=_interopRequireWildcard(_mobx); var _lodash=require('lodash.isobjectlike');var _lodash2=_interopRequireDefault(_lodash); var _immutableDate=require('../utils/immutableDate');var _immutableDate2=_interopRequireDefault(_immutableDate); var _isReactUpdating=require('../utils/isReactUpdating'); var _globalState=require('./globalState'); var _isDev=require('../utils/isDev');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj;}} var alreadyProxiedObjects=new WeakMap(); function proxify(obj){ alreadyProxiedObjects.set(obj,true); var tracker=createObservableMap(obj); var handler={ ownKeys:function ownKeys(target){ tracker.keys(); return Reflect.ownKeys(target); }, get:function get(target,prop){ if(typeof prop!=='string'&&typeof prop!=='symbol'){ return undefined; } if((0,_isDev.isDev)()&&(0,_isReactUpdating.isReactUpdating)()&&!(0,_globalState.isRenderingObserver)()&&(0,_globalState.isAccessStateStrictMode)()){ console.error('[REMX] attempted to access prop \''+ prop+'\' in react component untracked by remx'); } tracker.get(prop); return target[prop]; }, set:function set(target,prop,value){ var newValue=value; if((0,_lodash2.default)(value)&&!alreadyProxiedObjects.has(value)){ newValue=proxify(value); } target[prop]=newValue; tracker.set(prop,newValue); return true; }}; var proxiedObject=new Proxy(obj,handler); alreadyProxiedObjects.set(proxiedObject,true); return proxiedObject; } var createObservableMap=function createObservableMap(obj){ var tracker=mobx.observable.map({},{deep:false}); Object.keys(obj).forEach(function(key){ var value=obj[key]; if((0,_lodash2.default)(value)&&!alreadyProxiedObjects.has(value)&&value instanceof Date===false){ obj[key]=proxify(value); } if(value instanceof Date){ obj[key]=(0,_immutableDate2.default)(value); } tracker.set(key,value); }); return tracker; }; module.exports={ proxify:proxify};