UNPKG

@taraai/read-write

Version:

Synchronous NoSQL/Firestore for React

42 lines (33 loc) 1.63 kB
"use strict"; 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); }; }, []); }