UNPKG

redux-firestore

Version:
287 lines (286 loc) • 12.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.add = add; exports.default = void 0; exports.deleteRef = deleteRef; exports.get = get; exports.mutate = mutate; exports.runTransaction = runTransaction; exports.set = set; exports.setListener = setListener; exports.setListeners = setListeners; exports.unsetListener = unsetListener; exports.unsetListeners = unsetListeners; exports.update = update; var _every2 = _interopRequireDefault(require("lodash/every")); var _actions = require("../utils/actions"); var _constants = require("../constants"); var _query = require("../utils/query"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function add(firebase, dispatch, queryOption) { for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { args[_key - 3] = arguments[_key]; } var meta = (0, _query.getQueryConfig)(queryOption); return (0, _actions.wrapInDispatch)(dispatch, { ref: (0, _query.firestoreRef)(firebase, meta), method: 'add', meta: meta, args: args, types: [_constants.actionTypes.ADD_REQUEST, { type: _constants.actionTypes.ADD_SUCCESS, payload: function payload(snap) { var obj = { id: snap.id, data: args[0] }; _query.snapshotCache.set(obj, snap); return obj; } }, _constants.actionTypes.ADD_FAILURE] }); } function set(firebase, dispatch, queryOption) { var meta = (0, _query.getQueryConfig)(queryOption); for (var _len2 = arguments.length, args = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) { args[_key2 - 3] = arguments[_key2]; } return (0, _actions.wrapInDispatch)(dispatch, { ref: (0, _query.firestoreRef)(firebase, meta), method: 'set', meta: meta, args: args, types: [_constants.actionTypes.SET_REQUEST, _constants.actionTypes.SET_SUCCESS, _constants.actionTypes.SET_FAILURE] }); } function get(firebase, dispatch, queryOption) { var meta = (0, _query.getQueryConfig)(queryOption); var _ref = firebase._.config || {}, mergeOrdered = _ref.mergeOrdered, mergeOrderedDocUpdates = _ref.mergeOrderedDocUpdates, mergeOrderedCollectionUpdates = _ref.mergeOrderedCollectionUpdates; return (0, _actions.wrapInDispatch)(dispatch, { ref: (0, _query.firestoreRef)(firebase, meta), method: 'get', meta: meta, types: [_constants.actionTypes.GET_REQUEST, { type: _constants.actionTypes.GET_SUCCESS, payload: function payload(snap) { var _snap$metadata; return { data: (0, _query.dataByIdSnapshot)(snap), ordered: (0, _query.orderedFromSnap)(snap), fromCache: typeof ((_snap$metadata = snap.metadata) === null || _snap$metadata === void 0 ? void 0 : _snap$metadata.fromCache) === 'boolean' ? snap.metadata.fromCache : true }; }, merge: { docs: mergeOrdered && mergeOrderedDocUpdates, collections: mergeOrdered && mergeOrderedCollectionUpdates } }, _constants.actionTypes.GET_FAILURE] }); } function update(firebase, dispatch, queryOption) { var meta = (0, _query.getQueryConfig)(queryOption); for (var _len3 = arguments.length, args = new Array(_len3 > 3 ? _len3 - 3 : 0), _key3 = 3; _key3 < _len3; _key3++) { args[_key3 - 3] = arguments[_key3]; } return (0, _actions.wrapInDispatch)(dispatch, { ref: (0, _query.firestoreRef)(firebase, meta), method: 'update', meta: meta, args: args, types: [_constants.actionTypes.UPDATE_REQUEST, _constants.actionTypes.UPDATE_SUCCESS, _constants.actionTypes.UPDATE_FAILURE] }); } function deleteRef(firebase, dispatch, queryOption) { var meta = (0, _query.getQueryConfig)(queryOption); var config = firebase._.config; if (!meta.doc || meta.subcollections && !(0, _every2.default)(meta.subcollections, 'doc')) { if (typeof config.onAttemptCollectionDelete === 'function') { return config.onAttemptCollectionDelete(queryOption, dispatch, firebase); } return Promise.reject(new Error('Only documents can be deleted.')); } return (0, _actions.wrapInDispatch)(dispatch, { ref: (0, _query.firestoreRef)(firebase, meta), method: 'delete', meta: meta, types: [_constants.actionTypes.DELETE_REQUEST, { type: _constants.actionTypes.DELETE_SUCCESS, preserve: firebase._.config.preserveOnDelete }, _constants.actionTypes.DELETE_FAILURE] }); } function setListener(firebase, dispatch, queryOpts, successCb, errorCb) { var meta = (0, _query.getQueryConfig)(queryOpts); var success = function success(docData) { if (!meta.populates) { (0, _query.dispatchListenerResponse)({ dispatch: dispatch, docData: docData, meta: meta, firebase: firebase }); if (typeof successCb === 'function') successCb(docData); return Promise.resolve(); } return (0, _query.getPopulateActions)({ firebase: firebase, docData: docData, meta: meta }).then(function (populateActions) { populateActions.forEach(function (populateAction) { dispatch(_objectSpread(_objectSpread({}, populateAction), {}, { type: _constants.actionTypes.LISTENER_RESPONSE, timestamp: Date.now() })); }); (0, _query.dispatchListenerResponse)({ dispatch: dispatch, docData: docData, meta: meta, firebase: firebase }); }).catch(function (populateErr) { var _ref2 = firebase._.config || {}, logListenerError = _ref2.logListenerError; if (logListenerError !== false) { if (logListenerError !== false && !!console && typeof console.error === 'function') { console.error('redux-firestore error populating:', populateErr); } } if (typeof errorCb === 'function') errorCb(populateErr); }); }; var error = function error(err) { var _ref3 = firebase._.config || {}, mergeOrdered = _ref3.mergeOrdered, mergeOrderedDocUpdates = _ref3.mergeOrderedDocUpdates, mergeOrderedCollectionUpdates = _ref3.mergeOrderedCollectionUpdates, logListenerError = _ref3.logListenerError, preserveOnListenerError = _ref3.preserveOnListenerError; if (logListenerError !== false && !!console && typeof console.error === 'function') { console.error("redux-firestore listener error for collection \"".concat(meta === null || meta === void 0 ? void 0 : meta.collection, "\":"), err); } dispatch({ type: _constants.actionTypes.LISTENER_ERROR, meta: meta, payload: err, merge: { docs: mergeOrdered && mergeOrderedDocUpdates, collections: mergeOrdered && mergeOrderedCollectionUpdates }, preserve: preserveOnListenerError }); if (typeof errorCb === 'function') errorCb(err); }; var includeMetadataChanges = queryOpts && queryOpts.includeMetadataChanges || false; var unsubscribe = includeMetadataChanges ? (0, _query.firestoreRef)(firebase, meta).onSnapshot({ includeMetadataChanges: includeMetadataChanges }, success, error) : (0, _query.firestoreRef)(firebase, meta).onSnapshot(success, error); (0, _query.attachListener)(firebase, dispatch, meta, unsubscribe); return unsubscribe; } function setListeners(firebase, dispatch, listeners) { if (!Array.isArray(listeners)) { throw new Error('Listeners must be an Array of listener configs (Strings/Objects).'); } var config = firebase._.config; if (config.oneListenerPerPath) { listeners.forEach(function (listener) { var path = (0, _query.getQueryName)(listener); var oldListenerCount = firebase._.pathListenerCounts[path] || 0; firebase._.pathListenerCounts[path] = oldListenerCount + 1; if (oldListenerCount > 0) { return; } setListener(firebase, dispatch, listener); }); } else { var allowMultipleListeners = config.allowMultipleListeners; listeners.forEach(function (listener) { var path = (0, _query.getQueryName)(listener); var oldListenerCount = firebase._.pathListenerCounts[path] || 0; var multipleListenersEnabled = typeof allowMultipleListeners === 'function' ? allowMultipleListeners(listener, firebase._.listeners) : allowMultipleListeners; firebase._.pathListenerCounts[path] = oldListenerCount + 1; if (oldListenerCount === 0 || multipleListenersEnabled) { setListener(firebase, dispatch, listener); } }); } } function unsetListener(firebase, dispatch, meta) { return (0, _query.detachListener)(firebase, dispatch, (0, _query.getQueryConfig)(meta)); } function unsetListeners(firebase, dispatch, listeners) { if (!Array.isArray(listeners)) { throw new Error('Listeners must be an Array of listener configs (Strings/Objects).'); } var config = firebase._.config; var allowMultipleListeners = config.allowMultipleListeners; listeners.forEach(function (listener) { var path = (0, _query.getQueryName)(listener); var listenerExists = firebase._.pathListenerCounts[path] >= 1; var multipleListenersEnabled = typeof allowMultipleListeners === 'function' ? allowMultipleListeners(listener, firebase._.listeners) : allowMultipleListeners; if (listenerExists) { firebase._.pathListenerCounts[path] -= 1; if (firebase._.pathListenerCounts[path] === 0 || multipleListenersEnabled) { unsetListener(firebase, dispatch, listener); } } }); } function runTransaction(firebase, dispatch, transactionPromise) { return (0, _actions.wrapInDispatch)(dispatch, { ref: firebase.firestore(), method: 'runTransaction', args: [transactionPromise], types: [_constants.actionTypes.TRANSACTION_START, _constants.actionTypes.TRANSACTION_SUCCESS, _constants.actionTypes.TRANSACTION_FAILURE] }); } function mutate(firebase, dispatch, mutations) { var timestamp = "".concat(+new Date()); return (0, _actions.wrapInDispatch)(dispatch, { ref: firebase, method: 'mutate', meta: { timestamp: timestamp }, args: [mutations], types: [{ type: _constants.actionTypes.MUTATE_START, payload: { data: mutations } }, _constants.actionTypes.MUTATE_SUCCESS, { type: _constants.actionTypes.MUTATE_FAILURE, meta: { timestamp: timestamp }, payload: { data: mutations } }] }); } var _default = exports.default = { get: get, firestoreRef: _query.firestoreRef, add: add, update: update, setListener: setListener, setListeners: setListeners, unsetListener: unsetListener, unsetListeners: unsetListeners, runTransaction: runTransaction, mutate: mutate };