@taraai/read-write
Version:
Synchronous NoSQL/Firestore for React
42 lines (33 loc) • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useFirebaseConnect;
var _differenceWith2 = _interopRequireDefault(require("lodash/differenceWith"));
var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
var _react = require("react");
var _query = require("./actions/query");
var _utils = require("./utils");
var _useFirebase = _interopRequireDefault(require("./useFirebase"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function useFirebaseConnect(queriesConfig) {
const firebase = (0, _useFirebase.default)();
const eventRef = (0, _react.useRef)();
const dataRef = (0, _react.useRef)();
const data = (0, _react.useMemo)(() => (0, _utils.invokeArrayQuery)(queriesConfig), [queriesConfig]);
(0, _react.useEffect)(() => {
if (data !== null && !(0, _isEqual2.default)(data, dataRef.current)) {
const itemsToSubscribe = (0, _differenceWith2.default)(data, dataRef.current, _isEqual2.default);
const itemsToUnsubscribe = (0, _differenceWith2.default)(dataRef.current, data, _isEqual2.default);
dataRef.current = data;
(0, _query.unWatchEvents)(firebase, firebase.dispatch, (0, _utils.getEventsFromInput)(itemsToUnsubscribe));
eventRef.current = (0, _utils.getEventsFromInput)(data);
(0, _query.watchEvents)(firebase, firebase.dispatch, (0, _utils.getEventsFromInput)(itemsToSubscribe));
}
}, [data]);
(0, _react.useEffect)(() => {
return () => {
(0, _query.unWatchEvents)(firebase, firebase.dispatch, eventRef.current);
};
}, []);
}