UNPKG

orb-ui-firebase

Version:

Firebase with redux

90 lines (72 loc) 2.89 kB
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; import React from 'react'; import useFirebase from './useFirebase'; export var getLocation = function getLocation(firebaseApp, path) { if (typeof path === 'string' || path instanceof String) { return path; } else { return path.toString().substring(firebaseApp.database().ref().root.toString().length); } }; export var getRef = function getRef(firebaseApp, path) { if (typeof path === 'string' || path instanceof String) { return firebaseApp.database().ref(path); } else { return path; } }; var useDatabase = function useDatabase(firebasePath) { var _useFirebase = useFirebase(), firebaseApp = _useFirebase.firebaseApp, context = _useFirebase.context; var _React$useState = React.useState({ data: {}, initialized: false }), state = _React$useState[0], setState = _React$useState[1]; var data = state.data, initialized = state.initialized; useEffect(function () { var ref = getRef(firebaseApp, firebasePath); if (!initialized) { ref.once('value', function (snapshot) { data = {}; initialized = true; snapshot.forEach(function (childSnapshot) { data[childSnapshot.key] = childSnapshot.val(); }); setState(_extends({}, state, { data: data, initialized: initialized })); }, function (err) { console.error(err); // dispatch(logError(location, err)) }); ref.on('child_added', function (snapshot) { if (initialized) { var _extends2; setState(_extends({}, state, { data: _extends({}, data, (_extends2 = {}, _extends2[snapshot.key] = snapshot.val(), _extends2)) })); } }, function (err) { console.error(err); // dispatch(logError(location, err)) }); ref.on('child_changed', function (snapshot) { var _extends3; setState(_extends({}, state, { data: _extends({}, data, (_extends3 = {}, _extends3[snapshot.key] = snapshot.val(), _extends3)) })); }, function (err) { console.error(err); // dispatch(logError(location, err)) }); ref.on('child_removed', function (snapshot) { var _extends4; setState(_extends({}, state, { data: _extends({}, data, (_extends4 = {}, _extends4[snapshot.key] = undefined, _extends4)) })); }, function (err) { console.error(err); dispatch(logError(location, err)); }); } return function () { ref.off(); setState(_extends({}, state, { data: {}, initialized: false })); }; }, firebasePath); return [data, initialized]; }; export default useDatabase;