@@ -33,6 +33,7 @@ import { sleep, waitAsync } from 'yummies/async';
3333
3434import { createQuery } from './preset' ;
3535import { Query } from './query' ;
36+ import { QueryClient as MobxQueryClient } from './query-client' ;
3637import {
3738 QueryConfig ,
3839 QueryDynamicOptions ,
@@ -2728,4 +2729,98 @@ describe('Query', () => {
27282729 > ( ) ;
27292730 expect ( queryWithSelect . result . data ) . toBeDefined ( ) ;
27302731 } ) ;
2732+
2733+ it ( 'initialData is not enabling query bug' , async ( ) => {
2734+ vi . useFakeTimers ( ) ;
2735+
2736+ const queryClient = new MobxQueryClient ( {
2737+ defaultOptions : {
2738+ queries : {
2739+ enableOnDemand : true ,
2740+ } ,
2741+ } ,
2742+ } ) ;
2743+ const box = observable . box ( false ) ;
2744+ const queryFn = vi . fn ( ( ) => {
2745+ return Promise . resolve ( {
2746+ meta : {
2747+ limit : 0 ,
2748+ offset : 0 ,
2749+ total : 0 ,
2750+ } ,
2751+ fruits : [ 'fruit1' , 'fruit2' , 'fruit3' ] ,
2752+ } ) ;
2753+ } ) ;
2754+
2755+ const query = new Query ( {
2756+ queryClient,
2757+ queryFn : async ( ) => {
2758+ const result = await queryFn ( ) ;
2759+ return result ;
2760+ } ,
2761+ initialData : {
2762+ meta : {
2763+ limit : 0 ,
2764+ offset : 0 ,
2765+ total : 0 ,
2766+ } ,
2767+ fruits : [ ] ,
2768+ } as Awaited < ReturnType < typeof queryFn > > ,
2769+ options : ( ) => ( {
2770+ queryKey : [ 'fruits' , box . get ( ) ? 'enabled' : 'disabled' ] as const ,
2771+ enabled : box . get ( ) ,
2772+ } ) ,
2773+ select : ( data ) =>
2774+ data . fruits . map ( ( fruit ) => ( {
2775+ fruit,
2776+ searchText : fruit ,
2777+ } ) ) ,
2778+ } ) ;
2779+
2780+ sleep ( 100 ) ;
2781+ await vi . runAllTimersAsync ( ) ;
2782+
2783+ expect ( query . data ) . toStrictEqual ( [ ] ) ;
2784+
2785+ const managedQueryData = {
2786+ get isEmpty ( ) {
2787+ return ! query . data ?. length ;
2788+ } ,
2789+ get data ( ) {
2790+ return query . data ?? [ ] ;
2791+ } ,
2792+ get isLoading ( ) {
2793+ return query . isFetching ;
2794+ } ,
2795+ } ;
2796+
2797+ makeObservable ( managedQueryData , {
2798+ isEmpty : computed . struct ,
2799+ data : computed . struct ,
2800+ isLoading : computed . struct ,
2801+ } ) ;
2802+
2803+ // it runs query
2804+ managedQueryData . isLoading ;
2805+
2806+ if ( managedQueryData . isEmpty ) {
2807+ managedQueryData . data ;
2808+ managedQueryData . isLoading ;
2809+ }
2810+
2811+ sleep ( 100 ) ;
2812+ await vi . runAllTimersAsync ( ) ;
2813+
2814+ expect ( managedQueryData . data ) . toStrictEqual ( [ ] ) ;
2815+
2816+ box . set ( true ) ;
2817+ sleep ( 100 ) ;
2818+ await vi . runAllTimersAsync ( ) ;
2819+
2820+ expect ( managedQueryData . data ) . toEqual ( [
2821+ { fruit : 'fruit1' , searchText : 'fruit1' } ,
2822+ { fruit : 'fruit2' , searchText : 'fruit2' } ,
2823+ { fruit : 'fruit3' , searchText : 'fruit3' } ,
2824+ ] ) ;
2825+ } ) ;
27312826} ) ;
0 commit comments