@@ -164,6 +164,8 @@ const xfAllIds = ({ collection: path }) =>
164
164
165
165
/**
166
166
* @name xfWhere
167
+ * @param getDoc.where
168
+ * @param getDoc
167
169
* @param {Array.<Array.<string>> } where - Firestore where clauses
168
170
* @property {object.<FirestorePath, object<FirestoreDocumentId, Doc>> } db
169
171
* @property {object.<FirestorePath, object<FirestoreDocumentId, ParitalDoc>> } dbo
@@ -206,6 +208,8 @@ const xfWhere = ({ where }, getDoc) => {
206
208
207
209
/**
208
210
* @name xfOrder
211
+ * @param getDoc.orderBy
212
+ * @param getDoc
209
213
* @param {Array.<string> } order - Firestore order property
210
214
* @property {object.<FirestorePath, object<FirestoreDocumentId, Doc>> } db
211
215
* @property {object.<FirestorePath, object<FirestoreDocumentId, ParitalDoc>> } dbo
@@ -234,11 +238,9 @@ const xfOrder = ({ orderBy: order }, getDoc) => {
234
238
// TODO: refactor to manually lookup and compare
235
239
const docs = tuples . map ( ( [ path , id ] ) => getDoc ( path , id ) ) ;
236
240
237
- const result = orderBy ( docs , fields , direction ) . map (
241
+ return orderBy ( docs , fields , direction ) . map (
238
242
( { id, path } = { } ) => path && id && [ path , id ] ,
239
243
) ;
240
-
241
- return result ;
242
244
} ) ;
243
245
} ;
244
246
@@ -262,7 +264,8 @@ const xfLimit = ({ limit, endAt, endBefore }) => {
262
264
* @param {?CacheState.database } db -
263
265
* @param {?CacheState.databaseOverrides } dbo -
264
266
* @param {RRFQuery } query - Firestore query
265
- * @param {Boolean } isOptimisticWrite - includes optimistic data
267
+ * @param getDoc
268
+ * @param {boolean } isOptimisticWrite - includes optimistic data
266
269
* @typedef {Function } xFormFilter - in optimistic reads and overrides
267
270
* the reducer needs to take all documents and make a best effort to
268
271
* filter down the document based on a cursor.
@@ -276,8 +279,9 @@ const xfPaginate = (query, getDoc) => {
276
279
const end = endAt || endBefore ;
277
280
const isAfter = startAfter !== undefined ;
278
281
const isBefore = endBefore !== undefined ;
282
+ const needsPagination = start || end || false ;
279
283
280
- if ( ! order || ! isOptimisticRead || ! ! start || ! ! end ) return identity ;
284
+ if ( ! needsPagination || ! order || ! isOptimisticRead ) return identity ;
281
285
282
286
const isFlat = typeof order [ 0 ] === 'string' ;
283
287
const orders = isFlat ? [ order ] : order ;
@@ -329,6 +333,7 @@ const xfPaginate = (query, getDoc) => {
329
333
* @name processOptimistic
330
334
* Convert the query to a transducer for the query results
331
335
* @param {?CacheState.database } database -
336
+ * @param state
332
337
* @param {?CacheState.databaseOverrides } overrides -
333
338
* @param {RRFQuery } query - query used to get data from firestore
334
339
* @returns {Function } - Transducer will return a modifed array of documents
@@ -340,9 +345,9 @@ function processOptimistic(query, state) {
340
345
const dbo = databaseOverrides && databaseOverrides [ collection ] ;
341
346
342
347
const getDoc = ( path , id ) => {
343
- if ( path !== collection ) console . log ( '-----' , path , collection ) ;
344
348
const data = db [ id ] || { } ;
345
349
const override = dbo ?. [ id ] ;
350
+
346
351
return override ? { ...data , ...override } : data ;
347
352
} ;
348
353
@@ -530,7 +535,7 @@ function translateMutationToOverrides({ payload }, db = {}, dbo = {}) {
530
535
const overrides = dbo [ path ] || { } ;
531
536
return {
532
537
...result ,
533
- [ key ] : { ...collection [ id ] , ...( overrides [ id ] || { } ) } ,
538
+ [ key ] : { id , path , ...collection [ id ] , ...( overrides [ id ] || { } ) } ,
534
539
} ;
535
540
} , { } ) ;
536
541
}
@@ -830,13 +835,21 @@ const mutation = (state, { action, key, path }) => {
830
835
try {
831
836
const result = produce ( state , ( draft ) => {
832
837
const done = mark ( `cache.MUTATE_START` , key ) ;
838
+ const {
839
+ meta : { timestamp } ,
840
+ } = action ;
833
841
if ( action . payload && action . payload . data ) {
834
842
const optimisiticUpdates =
835
843
translateMutationToOverrides ( action , draft . database ) || [ ] ;
836
844
837
- optimisiticUpdates . forEach ( ( { path : _path , id, ...data } ) => {
838
- info ( 'overriding' , `${ _path } /${ id } ` , data ) ;
839
- setWith ( draft , [ 'databaseOverrides' , _path , id ] , data , Object ) ;
845
+ optimisiticUpdates . forEach ( ( data ) => {
846
+ info ( 'overriding' , `${ data . path } /${ data . id } ` , data ) ;
847
+ setWith (
848
+ draft ,
849
+ [ 'databaseOverrides' , data . path , data . id ] ,
850
+ data ,
851
+ Object ,
852
+ ) ;
840
853
} ) ;
841
854
842
855
const updatePaths = [
0 commit comments