react-firebase-hooks
Version:
React Hooks for Firebase
3 lines (2 loc) • 4.88 kB
JavaScript
!function(e,r){"use strict";var n=function(){return(n=Object.assign||function(e){for(var r,n=1,u=arguments.length;n<u;n++)for(var t in r=arguments[n])Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}).apply(this,arguments)},u=function(e,r,u,t){if(e.exists){var o,a,i=e.val();return function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)}(i)?n({},t?t(i):i,r?((o={})[r]=e.key,o):null,u?((a={})[u]=e.ref,a):null):t?t(i):i}},t={loading:!0,value:{keys:[],values:[]}},o=function(e,r){switch(r.type){case"add":return r.snapshot?n({},e,{error:void 0,value:i(e.value,r.snapshot,r.previousKey)}):e;case"change":return r.snapshot?n({},e,{error:void 0,value:s(e.value,r.snapshot)}):e;case"error":return n({},e,{error:r.error,loading:!1,value:{keys:void 0,values:void 0}});case"move":return r.snapshot?n({},e,{error:void 0,value:v(e.value,r.snapshot,r.previousKey)}):e;case"remove":return r.snapshot?n({},e,{error:void 0,value:c(e.value,r.snapshot)}):e;case"reset":return t;case"value":return n({},e,{error:void 0,loading:!1,value:a(r.snapshots)});case"empty":return n({},e,{loading:!1,value:{keys:void 0,values:void 0}});default:return e}},a=function(e){if(!e)return{keys:[],values:[]};var r=[],n=[];return e.forEach(function(e){e.key&&(r.push(e.key),n.push(e))}),{keys:r,values:n}},i=function(e,r,n){if(!r.key)return e;var u=e.keys,t=e.values;if(!n)return{keys:u?[r.key].concat(u):[r.key],values:t?[r].concat(t):[r]};var o=u?u.indexOf(n):0;return{keys:u?u.slice(0,o+1).concat([r.key],u.slice(o+1)):[r.key],values:t?t.slice(0,o+1).concat([r],t.slice(o+1)):[r]}},s=function(e,r){if(!r.key)return e;var u=e.keys,t=e.values,o=u?u.indexOf(r.key):0;return n({},e,{values:t?t.slice(0,o).concat([r],t.slice(o+1)):[r]})},c=function(e,r){if(!r.key)return e;var n=e.keys,u=e.values,t=n?n.indexOf(r.key):0;return{keys:n?n.slice(0,t).concat(n.slice(t+1)):[],values:u?u.slice(0,t).concat(u.slice(t+1)):[]}},v=function(e,r,n){var u=c(e,r);return i(u,r,n)},l=function(e){return{loading:void 0===e||null===e,value:e}},f=function(e){var u=e?e():void 0,t=r.useReducer(function(e,r){switch(r.type){case"error":return n({},e,{error:r.error,loading:!1,value:void 0});case"reset":return l(r.defaultValue);case"value":return n({},e,{error:void 0,loading:!1,value:r.value});default:return e}},l(u)),o=t[0],a=t[1],i=function(){var r=e?e():void 0;a({type:"reset",defaultValue:r})},s=function(e){a({type:"error",error:e})},c=function(e){a({type:"value",value:e})};return r.useMemo(function(){return{error:o.error,loading:o.loading,reset:i,setError:s,setValue:c,value:o.value}},[o.error,o.loading,i,s,c,o.value])},d=function(e,r){var n=!e&&!r,u=!!e&&!!r&&e.isEqual(r);return n||u},y=function(e,n){return function(e,n,u){var t=r.useRef(e);return r.useEffect(function(){n(e,t.current)||(t.current=e,u&&u())}),t}(e,d,n)},p=function(e){var n=r.useReducer(o,t),u=n[0],a=n[1],i=y(e,function(){return a({type:"reset"})}).current;r.useEffect(function(){if(i){var e,r=function(e,r){a({type:"add",previousKey:r,snapshot:e})},n=function(e){a({type:"error",error:e})},u=function(e){a({type:"value",snapshots:e})};i.once("value",function(t){var o=t.val()?Object.keys(t.val()).length:0;if(0===o)e=i.on("child_added",r,n),u([]);else{var a=[];e=i.on("child_added",function(e,n){if(o>0)return o--,a.push(e),void(0===o&&u(a));r(e,n)},n)}},n);var t=i.on("child_changed",function(e){a({type:"change",snapshot:e})},n),o=i.on("child_moved",function(e,r){a({type:"move",previousKey:r,snapshot:e})},n),s=i.on("child_removed",function(e){a({type:"remove",snapshot:e})},n);return function(){i.off("child_added",e),i.off("child_changed",t),i.off("child_moved",o),i.off("child_removed",s)}}a({type:"empty"})},[a,i]);var s=[u.value.values,u.loading,u.error];return r.useMemo(function(){return s},s)},h=function(e){var n=f(),u=n.error,t=n.loading,o=n.reset,a=n.setError,i=n.setValue,s=n.value,c=y(e,o);r.useEffect(function(){var e=c.current;if(e)return e.on("value",i,a),function(){e.off("value",i)};i(void 0)},[c.current]);var v=[s,t,u];return r.useMemo(function(){return v},v)};e.useList=p,e.useListKeys=function(e){var n=p(e),u=n[0],t=n[1],o=n[2],a=[r.useMemo(function(){return u?u.map(function(e){return e.key}):void 0},[u]),t,o];return r.useMemo(function(){return a},a)},e.useListVals=function(e,n){var t=n?n.keyField:void 0,o=n?n.refField:void 0,a=n?n.transform:void 0,i=p(e),s=i[0],c=i[1],v=i[2],l=[r.useMemo(function(){return s?s.map(function(e){return u(e,t,o,a)}):void 0},[s,t,o,a]),c,v];return r.useMemo(function(){return l},l)},e.useObject=h,e.useObjectVal=function(e,n){var t=n?n.keyField:void 0,o=n?n.refField:void 0,a=n?n.transform:void 0,i=h(e),s=i[0],c=i[1],v=i[2],l=[r.useMemo(function(){return s?u(s,t,o,a):void 0},[s,t,o,a]),c,v];return r.useMemo(function(){return l},l)}}(this["react-firebase-hooks"]=this["react-firebase-hooks"]||{},react);
//# sourceMappingURL=react-firebase-hooks-database.js.map