File tree Expand file tree Collapse file tree 5 files changed +36
-9
lines changed
Expand file tree Collapse file tree 5 files changed +36
-9
lines changed Original file line number Diff line number Diff line change @@ -342,6 +342,10 @@ export class Query<
342342 }
343343 }
344344
345+ getObserversCount ( ) : number {
346+ return this . observers . length
347+ }
348+
345349 invalidate ( ) : void {
346350 if ( ! this . state . isInvalidated ) {
347351 this . dispatch ( { type : 'invalidate' } )
Original file line number Diff line number Diff line change @@ -447,4 +447,29 @@ describe('query', () => {
447447 await sleep ( 100 )
448448 expect ( queryCache . find ( key ) ) . toBeDefined ( )
449449 } )
450+
451+ test ( 'should return proper count of observers' , async ( ) => {
452+ const key = queryKey ( )
453+ const options = { queryKey : key , queryFn : async ( ) => 'data' }
454+ const observer = new QueryObserver ( queryClient , options )
455+ const observer2 = new QueryObserver ( queryClient , options )
456+ const observer3 = new QueryObserver ( queryClient , options )
457+ const query = queryCache . find ( key )
458+
459+ expect ( query ?. getObserversCount ( ) ) . toEqual ( 0 )
460+
461+ const unsubscribe1 = observer . subscribe ( )
462+ const unsubscribe2 = observer2 . subscribe ( )
463+ const unsubscribe3 = observer3 . subscribe ( )
464+ expect ( query ?. getObserversCount ( ) ) . toEqual ( 3 )
465+
466+ unsubscribe3 ( )
467+ expect ( query ?. getObserversCount ( ) ) . toEqual ( 2 )
468+
469+ unsubscribe2 ( )
470+ expect ( query ?. getObserversCount ( ) ) . toEqual ( 1 )
471+
472+ unsubscribe1 ( )
473+ expect ( query ?. getObserversCount ( ) ) . toEqual ( 0 )
474+ } )
450475} )
Original file line number Diff line number Diff line change @@ -306,7 +306,7 @@ export function ReactQueryDevtools({
306306}
307307
308308const getStatusRank = q =>
309- q . state . isFetching ? 0 : ! q . observers . length ? 3 : q . isStale ( ) ? 2 : 1
309+ q . state . isFetching ? 0 : ! q . getObserversCount ( ) ? 3 : q . isStale ( ) ? 2 : 1
310310
311311const sortFns = {
312312 'Status > Last Updated' : ( a , b ) =>
@@ -613,7 +613,7 @@ export const ReactQueryDevtoolsPanel = React.forwardRef(
613613 : 'white' ,
614614 } }
615615 >
616- { query . observers . length }
616+ { query . getObserversCount ( ) }
617617 </ div >
618618 < Code
619619 suppressHydrationWarning
@@ -689,7 +689,7 @@ export const ReactQueryDevtoolsPanel = React.forwardRef(
689689 justifyContent : 'space-between' ,
690690 } }
691691 >
692- Observers: < Code > { activeQuery . observers . length } </ Code >
692+ Observers: < Code > { activeQuery . getObserversCount ( ) } </ Code >
693693 </ div >
694694 < div
695695 style = { {
Original file line number Diff line number Diff line change @@ -12,15 +12,15 @@ export function getQueryStatusColor(query, theme) {
1212 ? theme . active
1313 : query . isStale ( )
1414 ? theme . warning
15- : ! query . observers . length
15+ : ! query . getObserversCount ( )
1616 ? theme . gray
1717 : theme . success
1818}
1919
2020export function getQueryStatusLabel ( query ) {
2121 return query . state . isFetching
2222 ? 'fetching'
23- : ! query . observers . length
23+ : ! query . getObserversCount ( )
2424 ? 'inactive'
2525 : query . isStale ( )
2626 ? 'stale'
Original file line number Diff line number Diff line change @@ -162,14 +162,12 @@ describe("useQuery's in Suspense mode", () => {
162162 fireEvent . click ( rendered . getByLabelText ( 'toggle' ) )
163163 await waitFor ( ( ) => rendered . getByText ( 'rendered' ) )
164164
165- // @ts -expect-error
166- expect ( queryCache . find ( key ) ?. observers . length ) . toBe ( 1 )
165+ expect ( queryCache . find ( key ) ?. getObserversCount ( ) ) . toBe ( 1 )
167166
168167 fireEvent . click ( rendered . getByLabelText ( 'toggle' ) )
169168
170169 expect ( rendered . queryByText ( 'rendered' ) ) . toBeNull ( )
171- // @ts -expect-error
172- expect ( queryCache . find ( key ) ?. observers . length ) . toBe ( 0 )
170+ expect ( queryCache . find ( key ) ?. getObserversCount ( ) ) . toBe ( 0 )
173171 } )
174172
175173 it ( 'should call onSuccess on the first successful call' , async ( ) => {
You can’t perform that action at this time.
0 commit comments