UNPKG

orb-ui-firebase

Version:

Firebase with redux

102 lines (78 loc) 3.25 kB
'use strict'; exports.__esModule = true; exports.getRef = exports.getLocation = undefined; 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; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _useFirebase2 = require('./useFirebase'); var _useFirebase3 = _interopRequireDefault(_useFirebase2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var getLocation = exports.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); } }; var getRef = exports.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 = (0, _useFirebase3.default)(), firebaseApp = _useFirebase.firebaseApp, context = _useFirebase.context; var _React$useState = _react2.default.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]; }; exports.default = useDatabase;