@taraai/read-write
Version:
Synchronous NoSQL/Firestore for React
38 lines (31 loc) • 1.22 kB
JavaScript
;
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);
}
};
}, []);
}