1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.add = add;
|
7 | exports.set = set;
|
8 | exports.get = get;
|
9 | exports.update = update;
|
10 | exports.deleteRef = deleteRef;
|
11 | exports.setListener = setListener;
|
12 | exports.setListeners = setListeners;
|
13 | exports.unsetListener = unsetListener;
|
14 | exports.unsetListeners = unsetListeners;
|
15 | exports.runTransaction = runTransaction;
|
16 | exports.default = void 0;
|
17 |
|
18 | var _every2 = _interopRequireDefault(require("lodash/every"));
|
19 |
|
20 | var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
|
21 |
|
22 | var _invoke2 = _interopRequireDefault(require("lodash/invoke"));
|
23 |
|
24 | var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
|
25 |
|
26 | var _actions = require("../utils/actions");
|
27 |
|
28 | var _constants = require("../constants");
|
29 |
|
30 | var _query = require("../utils/query");
|
31 |
|
32 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
33 |
|
34 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
|
35 |
|
36 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
37 |
|
38 | var pathListenerCounts = {};
|
39 |
|
40 | function add(firebase, dispatch, queryOption) {
|
41 | for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
|
42 | args[_key - 3] = arguments[_key];
|
43 | }
|
44 |
|
45 | var meta = (0, _query.getQueryConfig)(queryOption);
|
46 | return (0, _actions.wrapInDispatch)(dispatch, {
|
47 | ref: (0, _query.firestoreRef)(firebase, meta),
|
48 | method: 'add',
|
49 | meta: meta,
|
50 | args: args,
|
51 | types: [_constants.actionTypes.ADD_REQUEST, {
|
52 | type: _constants.actionTypes.ADD_SUCCESS,
|
53 | payload: function payload(snap) {
|
54 | return {
|
55 | id: snap.id,
|
56 | data: args[0]
|
57 | };
|
58 | }
|
59 | }, _constants.actionTypes.ADD_FAILURE]
|
60 | });
|
61 | }
|
62 |
|
63 | function set(firebase, dispatch, queryOption) {
|
64 | for (var _len2 = arguments.length, args = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {
|
65 | args[_key2 - 3] = arguments[_key2];
|
66 | }
|
67 |
|
68 | var meta = (0, _query.getQueryConfig)(queryOption);
|
69 | return (0, _actions.wrapInDispatch)(dispatch, {
|
70 | ref: (0, _query.firestoreRef)(firebase, meta),
|
71 | method: 'set',
|
72 | meta: meta,
|
73 | args: args,
|
74 | types: [_constants.actionTypes.SET_REQUEST, _constants.actionTypes.SET_SUCCESS, _constants.actionTypes.SET_FAILURE]
|
75 | });
|
76 | }
|
77 |
|
78 | function get(firebase, dispatch, queryOption) {
|
79 | var meta = (0, _query.getQueryConfig)(queryOption);
|
80 |
|
81 | var _ref = firebase._.config || {},
|
82 | mergeOrdered = _ref.mergeOrdered,
|
83 | mergeOrderedDocUpdates = _ref.mergeOrderedDocUpdates,
|
84 | mergeOrderedCollectionUpdates = _ref.mergeOrderedCollectionUpdates;
|
85 |
|
86 | return (0, _actions.wrapInDispatch)(dispatch, {
|
87 | ref: (0, _query.firestoreRef)(firebase, meta),
|
88 | method: 'get',
|
89 | meta: meta,
|
90 | types: [_constants.actionTypes.GET_REQUEST, {
|
91 | type: _constants.actionTypes.GET_SUCCESS,
|
92 | payload: function payload(snap) {
|
93 | return {
|
94 | data: (0, _query.dataByIdSnapshot)(snap),
|
95 | ordered: (0, _query.orderedFromSnap)(snap)
|
96 | };
|
97 | },
|
98 | merge: {
|
99 | docs: mergeOrdered && mergeOrderedDocUpdates,
|
100 | collections: mergeOrdered && mergeOrderedCollectionUpdates
|
101 | }
|
102 | }, _constants.actionTypes.GET_FAILURE]
|
103 | });
|
104 | }
|
105 |
|
106 | function update(firebase, dispatch, queryOption) {
|
107 | for (var _len3 = arguments.length, args = new Array(_len3 > 3 ? _len3 - 3 : 0), _key3 = 3; _key3 < _len3; _key3++) {
|
108 | args[_key3 - 3] = arguments[_key3];
|
109 | }
|
110 |
|
111 | var meta = (0, _query.getQueryConfig)(queryOption);
|
112 | return (0, _actions.wrapInDispatch)(dispatch, {
|
113 | ref: (0, _query.firestoreRef)(firebase, meta),
|
114 | method: 'update',
|
115 | meta: meta,
|
116 | args: args,
|
117 | types: [_constants.actionTypes.UPDATE_REQUEST, _constants.actionTypes.UPDATE_SUCCESS, _constants.actionTypes.UPDATE_FAILURE]
|
118 | });
|
119 | }
|
120 |
|
121 | function deleteRef(firebase, dispatch, queryOption) {
|
122 | var meta = (0, _query.getQueryConfig)(queryOption);
|
123 | var config = firebase._.config;
|
124 |
|
125 | if (!meta.doc || meta.subcollections && !(0, _every2.default)(meta.subcollections, 'doc')) {
|
126 | if ((0, _isFunction2.default)(config.onAttemptCollectionDelete)) {
|
127 | return config.onAttemptCollectionDelete(queryOption, dispatch, firebase);
|
128 | }
|
129 |
|
130 | return Promise.reject(new Error('Only documents can be deleted.'));
|
131 | }
|
132 |
|
133 | return (0, _actions.wrapInDispatch)(dispatch, {
|
134 | ref: (0, _query.firestoreRef)(firebase, meta),
|
135 | method: 'delete',
|
136 | meta: meta,
|
137 | types: [_constants.actionTypes.DELETE_REQUEST, {
|
138 | type: _constants.actionTypes.DELETE_SUCCESS,
|
139 | preserve: firebase._.config.preserveOnDelete
|
140 | }, _constants.actionTypes.DELETE_FAILURE]
|
141 | });
|
142 | }
|
143 |
|
144 | function setListener(firebase, dispatch, queryOpts, successCb, errorCb) {
|
145 | var meta = (0, _query.getQueryConfig)(queryOpts);
|
146 | var unsubscribe = (0, _query.firestoreRef)(firebase, meta).onSnapshot(function (docData) {
|
147 | if (!meta.populates) {
|
148 | (0, _query.dispatchListenerResponse)({
|
149 | dispatch: dispatch,
|
150 | docData: docData,
|
151 | meta: meta,
|
152 | firebase: firebase
|
153 | });
|
154 | if (typeof successCb === 'function') successCb(docData);
|
155 | return;
|
156 | }
|
157 |
|
158 | (0, _query.getPopulateActions)({
|
159 | firebase: firebase,
|
160 | docData: docData,
|
161 | meta: meta
|
162 | }).then(function (populateActions) {
|
163 | populateActions.forEach(function (populateAction) {
|
164 | dispatch(_objectSpread({}, populateAction, {
|
165 | type: _constants.actionTypes.LISTENER_RESPONSE,
|
166 | timestamp: Date.now()
|
167 | }));
|
168 | });
|
169 | (0, _query.dispatchListenerResponse)({
|
170 | dispatch: dispatch,
|
171 | docData: docData,
|
172 | meta: meta,
|
173 | firebase: firebase
|
174 | });
|
175 | }).catch(function (populateErr) {
|
176 | if (firebase._.config.logListenerError) {
|
177 | (0, _invoke2.default)(console, 'error', "Error populating:", populateErr);
|
178 | }
|
179 |
|
180 | if (typeof errorCb === 'function') errorCb(populateErr);
|
181 | });
|
182 | }, function (err) {
|
183 | var _ref2 = firebase._.config || {},
|
184 | mergeOrdered = _ref2.mergeOrdered,
|
185 | mergeOrderedDocUpdates = _ref2.mergeOrderedDocUpdates,
|
186 | mergeOrderedCollectionUpdates = _ref2.mergeOrderedCollectionUpdates;
|
187 |
|
188 | var _ref3 = firebase._.config || {},
|
189 | logListenerError = _ref3.logListenerError,
|
190 | preserveOnListenerError = _ref3.preserveOnListenerError;
|
191 |
|
192 | if (logListenerError) (0, _invoke2.default)(console, 'error', err);
|
193 | dispatch({
|
194 | type: _constants.actionTypes.LISTENER_ERROR,
|
195 | meta: meta,
|
196 | payload: err,
|
197 | merge: {
|
198 | docs: mergeOrdered && mergeOrderedDocUpdates,
|
199 | collections: mergeOrdered && mergeOrderedCollectionUpdates
|
200 | },
|
201 | preserve: preserveOnListenerError
|
202 | });
|
203 | if (typeof errorCb === 'function') errorCb(err);
|
204 | });
|
205 | (0, _query.attachListener)(firebase, dispatch, meta, unsubscribe);
|
206 | return unsubscribe;
|
207 | }
|
208 |
|
209 | function setListeners(firebase, dispatch, listeners) {
|
210 | if (!(0, _isArray2.default)(listeners)) {
|
211 | throw new Error('Listeners must be an Array of listener configs (Strings/Objects).');
|
212 | }
|
213 |
|
214 | var config = firebase._.config;
|
215 | var allowMultipleListeners = config.allowMultipleListeners;
|
216 | return listeners.forEach(function (listener) {
|
217 | var path = (0, _query.getQueryName)(listener);
|
218 | var oldListenerCount = pathListenerCounts[path] || 0;
|
219 | var multipleListenersEnabled = (0, _isFunction2.default)(allowMultipleListeners) ? allowMultipleListeners(listener, firebase._.listeners) : allowMultipleListeners;
|
220 | pathListenerCounts[path] = oldListenerCount + 1;
|
221 |
|
222 | if (oldListenerCount === 0 || multipleListenersEnabled) {
|
223 | setListener(firebase, dispatch, listener);
|
224 | }
|
225 | });
|
226 | }
|
227 |
|
228 | function unsetListener(firebase, dispatch, opts) {
|
229 | return (0, _query.detachListener)(firebase, dispatch, (0, _query.getQueryConfig)(opts));
|
230 | }
|
231 |
|
232 | function unsetListeners(firebase, dispatch, listeners) {
|
233 | if (!(0, _isArray2.default)(listeners)) {
|
234 | throw new Error('Listeners must be an Array of listener configs (Strings/Objects).');
|
235 | }
|
236 |
|
237 | var config = firebase._.config;
|
238 | var allowMultipleListeners = config.allowMultipleListeners;
|
239 | listeners.forEach(function (listener) {
|
240 | var path = (0, _query.getQueryName)(listener);
|
241 | var listenerExists = pathListenerCounts[path] >= 1;
|
242 | var multipleListenersEnabled = (0, _isFunction2.default)(allowMultipleListeners) ? allowMultipleListeners(listener, firebase._.listeners) : allowMultipleListeners;
|
243 |
|
244 | if (listenerExists) {
|
245 | pathListenerCounts[path] -= 1;
|
246 |
|
247 | if (pathListenerCounts[path] === 0 || multipleListenersEnabled) {
|
248 | unsetListener(firebase, dispatch, listener);
|
249 | }
|
250 | }
|
251 | });
|
252 | }
|
253 |
|
254 | function runTransaction(firebase, dispatch, transactionPromise) {
|
255 | return (0, _actions.wrapInDispatch)(dispatch, {
|
256 | ref: firebase.firestore(),
|
257 | method: 'runTransaction',
|
258 | args: [transactionPromise],
|
259 | types: [_constants.actionTypes.TRANSACTION_START, _constants.actionTypes.TRANSACTION_SUCCESS, _constants.actionTypes.TRANSACTION_FAILURE]
|
260 | });
|
261 | }
|
262 |
|
263 | var _default = {
|
264 | get: get,
|
265 | firestoreRef: _query.firestoreRef,
|
266 | add: add,
|
267 | update: update,
|
268 | setListener: setListener,
|
269 | setListeners: setListeners,
|
270 | unsetListener: unsetListener,
|
271 | unsetListeners: unsetListeners,
|
272 | runTransaction: runTransaction
|
273 | };
|
274 | exports.default = _default; |
\ | No newline at end of file |