orb-ui-firebase
Version:
Firebase with redux
102 lines (78 loc) • 3.25 kB
JavaScript
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;
;