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