@@ -340,8 +340,8 @@ function selectDocuments(reducerState, query) {
340
340
*/
341
341
function reprocessQuerires ( draft , path ) {
342
342
const done = mark ( `reprocess-${ path } ` ) ;
343
+ const queries = [ ] ;
343
344
344
- info ( `reprocess queries for ${ path } ` ) ;
345
345
const paths = Array . isArray ( path ) ? path : [ path ] ;
346
346
Object . keys ( draft ) . forEach ( ( key ) => {
347
347
if ( [ 'database' , 'databaseOverrides' ] . includes ( key ) ) return ;
@@ -351,12 +351,19 @@ function reprocessQuerires(draft, path) {
351
351
if ( ! collections . some ( ( coll ) => paths . includes ( coll ) ) ) {
352
352
return ;
353
353
}
354
+ queries . push ( key ) ;
355
+
354
356
const docs = selectDocuments ( draft , draft [ key ] ) ;
355
357
const ordered = docs . map ( ( { id, path : _path } ) => [ _path , id ] ) ;
356
358
set ( draft , [ key , 'docs' ] , docs ) ;
357
359
set ( draft , [ key , 'ordered' ] , ordered ) ;
358
360
} ) ;
359
361
362
+ if ( info . enabled ) {
363
+ const overrides = JSON . parse ( JSON . stringify ( draft . databaseOverrides || { } ) ) ;
364
+ info ( `reprocess ${ path } (${ q . length } queries) with overrides` , overrides ) ;
365
+ }
366
+
360
367
done ( ) ;
361
368
}
362
369
@@ -553,7 +560,7 @@ const initialize = (state, { action, key, path }) =>
553
560
554
561
const conclude = ( state , { action, key, path } ) =>
555
562
produce ( state , ( draft ) => {
556
- const unsetDone = mark ( `cache.UNSET_LISTENER` ) ;
563
+ const done = mark ( `cache.UNSET_LISTENER` ) ;
557
564
if ( draft [ key ] ) {
558
565
// all ids for the collection type, except query to be unset
559
566
const activeIds = Object . keys ( draft ) . reduce ( ( inUse , dbKey ) => {
@@ -578,13 +585,13 @@ const conclude = (state, { action, key, path }) =>
578
585
reprocessQuerires ( draft , path ) ;
579
586
}
580
587
581
- unsetDone ( ) ;
588
+ done ( ) ;
582
589
return draft ;
583
590
} ) ;
584
591
585
592
const modify = ( state , { action, key, path } ) =>
586
593
produce ( state , ( draft ) => {
587
- const addDone = mark ( `cache.DOCUMENT_MODIFIED` ) ;
594
+ const done = mark ( `cache.DOCUMENT_MODIFIED` ) ;
588
595
setWith (
589
596
draft ,
590
597
[ 'database' , path , action . meta . doc ] ,
@@ -594,34 +601,24 @@ const modify = (state, { action, key, path }) =>
594
601
595
602
const remove = shouldRemoveOverride ( action , draft . databaseOverrides ) ;
596
603
if ( remove ) {
597
- unset ( draft , [ 'databaseOverrides' , path , action . meta . doc ] ) ;
598
- }
599
-
600
- const { payload } = action ;
601
- const { oldIndex = 0 , newIndex = 0 } = payload . ordered || { } ;
602
- if ( newIndex !== oldIndex ) {
603
- const tuple =
604
- ( payload . data && [ payload . data . path , payload . data . id ] ) ||
605
- draft [ key ] . ordered [ oldIndex ] ;
606
-
607
- const { ordered } = draft [ key ] || { ordered : [ ] } ;
608
- if ( oldIndex !== - 1 ) {
609
- ordered . splice ( oldIndex , 0 ) ;
604
+ if ( Object . keys ( draft . databaseOverrides [ path ] ) . length > 1 ) {
605
+ unset ( draft , [ 'databaseOverrides' , path , action . meta . doc ] ) ;
606
+ } else {
607
+ unset ( draft , [ 'databaseOverrides' , path ] ) ;
610
608
}
611
- ordered . splice ( newIndex , 0 , tuple ) ;
612
-
613
- set ( draft , [ key , 'ordered' ] , ordered ) ;
614
609
}
615
610
611
+ // reprocessing unifies any order changes from firestore
612
+
616
613
reprocessQuerires ( draft , path ) ;
617
614
618
- addDone ( ) ;
615
+ done ( ) ;
619
616
return draft ;
620
617
} ) ;
621
618
622
619
const failure = ( state , { action, key, path } ) =>
623
620
produce ( state , ( draft ) => {
624
- const failureDone = mark ( `cache.MUTATE_FAILURE` ) ;
621
+ const done = mark ( `cache.MUTATE_FAILURE` ) ;
625
622
// All failures remove overrides
626
623
if ( action . payload . data || action . payload . args ) {
627
624
const write = action . payload . data
@@ -649,7 +646,7 @@ const failure = (state, { action, key, path }) =>
649
646
}
650
647
}
651
648
652
- failureDone ( ) ;
649
+ done ( ) ;
653
650
return draft ;
654
651
} ) ;
655
652
@@ -661,7 +658,11 @@ const deletion = (state, { action, key, path }) =>
661
658
}
662
659
663
660
if ( draft . databaseOverrides && draft . databaseOverrides [ path ] ) {
664
- unset ( draft , [ 'databaseOverrides' , path , action . meta . doc ] ) ;
661
+ if ( Object . keys ( draft . databaseOverrides [ path ] ) . length > 1 ) {
662
+ unset ( draft , [ 'databaseOverrides' , path , action . meta . doc ] ) ;
663
+ } else {
664
+ unset ( draft , [ 'databaseOverrides' , path ] ) ;
665
+ }
665
666
}
666
667
667
668
// remove document id from ordered index
@@ -679,7 +680,7 @@ const deletion = (state, { action, key, path }) =>
679
680
680
681
const remove = ( state , { action, key, path } ) =>
681
682
produce ( state , ( draft ) => {
682
- const removeDone = mark ( `cache.DOCUMENT_REMOVED` ) ;
683
+ const done = mark ( `cache.DOCUMENT_REMOVED` ) ;
683
684
if ( draft . databaseOverrides && draft . databaseOverrides [ path ] ) {
684
685
unset ( draft , [ 'databaseOverrides' , path , action . meta . doc ] ) ;
685
686
}
@@ -696,7 +697,7 @@ const remove = (state, { action, key, path }) =>
696
697
// reprocess
697
698
reprocessQuerires ( draft , path ) ;
698
699
699
- removeDone ( ) ;
700
+ done ( ) ;
700
701
return draft ;
701
702
} ) ;
702
703
@@ -715,14 +716,18 @@ const optimistic = (state, { action, key, path }) =>
715
716
716
717
const reset = ( state , { action, key, path } ) =>
717
718
produce ( state , ( draft ) => {
718
- unset ( draft , [ 'databaseOverrides' , path , action . meta . doc ] ) ;
719
+ if ( Object . keys ( draft . databaseOverrides [ path ] ) . length > 1 ) {
720
+ unset ( draft , [ 'databaseOverrides' , path , action . meta . doc ] ) ;
721
+ } else {
722
+ unset ( draft , [ 'databaseOverrides' , path ] ) ;
723
+ }
719
724
reprocessQuerires ( draft , path ) ;
720
725
return draft ;
721
726
} ) ;
722
727
723
728
const mutation = ( state , { action, key, path } ) =>
724
729
produce ( state , ( draft ) => {
725
- const startDone = mark ( `cache.MUTATE_START` ) ;
730
+ const done = mark ( `cache.MUTATE_START` ) ;
726
731
if ( action . payload && action . payload . data ) {
727
732
const optimisiticUpdates =
728
733
translateMutationToOverrides ( action , draft . database ) || [ ] ;
@@ -740,7 +745,7 @@ const mutation = (state, { action, key, path }) =>
740
745
} ) ;
741
746
}
742
747
743
- startDone ( ) ;
748
+ done ( ) ;
744
749
return draft ;
745
750
} ) ;
746
751
0 commit comments