UNPKG

@taraai/read-write

Version:

Synchronous NoSQL/Firestore for React

38 lines (31 loc) 1.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useFirestoreConnect; var _isEqual2 = _interopRequireDefault(require("lodash/isEqual")); var _react = require("react"); var _utils = require("./utils"); var _useFirestore = _interopRequireDefault(require("./useFirestore")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function useFirestoreConnect(queriesConfigs) { const firestore = (0, _useFirestore.default)(); const firestoreIsEnabled = !!firestore; const queryRef = (0, _react.useRef)(); const data = (0, _react.useMemo)(() => (0, _utils.invokeArrayQuery)(queriesConfigs), [queriesConfigs]); (0, _react.useEffect)(() => { if (firestoreIsEnabled && !(0, _isEqual2.default)(data, queryRef.current)) { const changes = (0, _utils.getChanges)(data, queryRef.current); queryRef.current = data; firestore.unsetListeners(changes.removed); firestore.setListeners(changes.added); } }, [data]); (0, _react.useEffect)(() => { return () => { if (firestoreIsEnabled && queryRef.current) { firestore.unsetListeners(queryRef.current); } }; }, []); }