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