UNPKG

react-siesta

Version:
1 lines 3.63 kB
function _done(n,t){return function(e,i){e?(n&&n(e),t.reject(e)):(n&&n(),t.resolve(i))}}var FAKE_DEFERRED={promise:null,reject:function(){},resolve:function(){}},isArray=Array.isArray||function(n){return"[object Array]"===_.toString.call(n)},isString=function(n){return"string"==typeof n||n instanceof String},SiestaMixin={componentWillMount:function(){this.listeners=[]},_cancelListeners:function(){for(var n=0;n<this.listeners.length;n++){var t=this.listeners[n];t()}this.listeners=[]},componentWillUnmount:function(){this._cancelListeners()},_listenToModel:function(n,t,e,i){if(!t.singleton)throw new Error("Cannot listen to a Model if it is not a singleton");t.one(function(t,s){console.log("singleton",s),t?e(t):(n?this.listen(n,s,function(n){e(n)}):this.listen(s,function(n){e(n)}),i(t,s))}.bind(this))},wrapCancelListen:function(n){var t;return"function"==typeof n&&(t=function(){var t=this.listeners.indexOf(n);this.listeners.splice(t,1),n()}.bind(this)),t},listen:function(){var n,t,e,i;isString(arguments[0])?(n=arguments[0],t=arguments[1],e=arguments[2],i=arguments[3]):(t=arguments[0],e=arguments[1],i=arguments[2]),i=i||function(){};var s=window.Q?window.Q.defer():FAKE_DEFERRED,r=_done(i,s);if(t instanceof siesta._internal.Model)this._listenToModel(n,t,e,r);else{var o;o=n?t.listen(n,e):t.listen(e),this.listeners.push(o),r(null,t)}return s.promise},query:function(n,t,e,i){i=i||function(){};var s=window.Q?window.Q.defer():FAKE_DEFERRED,r=_done(i,s);return n.query(t,function(n,t){if(console.log("_done"),n)r(n);else{var i={};i[e]=t,this.setState(i,function(){r(null,t)})}}.bind(this)),s.promise},all:function(n){var t,e,i;return arguments[1]instanceof String||"string"==typeof arguments[1]?(e=arguments[1],i=arguments[2]):(t=arguments[1],e=arguments[2],i=arguments[3]),this.query(n,t,e,i)},isReactiveQuery:function(n){return"function"==typeof n.terminate},_listenAndSetStateForModelInstance:function(n,t,e,i){var s={};if(t=t||{},!t.fields&&!e)throw Error("Must either specify fields or prop");if(t.fields){var r;isArray(t.fields)?(r={},t.fields.forEach(function(n){if(isString(n))r[n]=n;else for(var t in n)n.hasOwnProperty(t)&&(r[t]=n[t])})):r=t.fields,console.log("fields",r),Object.keys(r).forEach(function(t){var e=r[t];s[e]=n[t]})}else s[e]=n;console.log("state",s),this.setState(s),this.listen(n,function(n){if(t.fields){var e,i=n.field;if(isArray(t.fields)?e=t.fields.indexOf(n.field)>-1:(e=n.field in t.fields,e&&(i=t.fields[n.field])),e){var s={};s[i]=n.new,this.setState(s)}}else this.setState()}.bind(this)),i(null,n)},listenAndSetState:function(n){var t,e,i;"object"==typeof arguments[1]?(t=arguments[1],i=arguments[2]):(t={},e=arguments[1],i=arguments[2]);var s=window.Q?window.Q.defer():FAKE_DEFERRED;i=i||function(){};var r=_done(i,s),o={},l=function(){o[e]=n.results,this.setState(o,function(){this.listen(n,function(){if(this.isReactiveQuery(n)){var t={};t[e]=n.results,this.setState(t)}}.bind(this))})}.bind(this);if(this.isReactiveQuery(n))n.initialised?(l.call(this),r(null,n.results)):n.init(function(){l.call(this),r(null,n.results)}.bind(this));else if(n instanceof siesta._internal.Model){if(!n.singleton)throw new Error("Can only listenAndSetState singleton models");n.one(function(n,o){n?(i(n),s.reject(n)):this._listenAndSetStateForModelInstance(o,t,e,r)}.bind(this))}else{if(!(n instanceof siesta._internal.siestaModel))throw new Error("Cannot listenAndSetState objects of that type");this._listenAndSetStateForModelInstance(n,t,e,r)}return s.promise}};"undefined"!=typeof module&&(module.exports={SiestaMixin:SiestaMixin}),"undefined"!=typeof window&&(window.SiestaMixin=SiestaMixin);