1
- import React from 'react' ;
1
+ import React , { useMemo } from 'react' ;
2
2
import type { PropsWithChildren } from 'react' ;
3
3
4
4
import type { UseQueryResult } from '@tanstack/react-query' ;
5
5
import type { AxiosError } from 'axios' ;
6
6
7
7
import { createContext } from 'src/core/contexts/context' ;
8
- import { DisplayError as DefaultDisplayError } from 'src/core/errorHandling/DisplayError' ;
9
- import { Loader as DefaultLoader } from 'src/core/loading/Loader' ;
8
+ import { DisplayError } from 'src/core/errorHandling/DisplayError' ;
9
+ import { Loader } from 'src/core/loading/Loader' ;
10
10
import type { LaxContextProps , StrictContextProps } from 'src/core/contexts/context' ;
11
11
12
12
type Err = Error | AxiosError ;
@@ -20,11 +20,7 @@ type ContextProps<Ctx, Req extends boolean> = Req extends true ? StrictContextPr
20
20
21
21
export type QueryContextProps < QueryData , Req extends boolean > = ContextProps < QueryData , Req > & {
22
22
query : Query < Req , QueryData > ;
23
-
24
23
shouldDisplayError ?: ( error : Err ) => boolean ;
25
-
26
- DisplayError ?: React . ComponentType < { error : Err } > ;
27
- Loader ?: React . ComponentType < { reason : string } > ;
28
24
} ;
29
25
30
26
/**
@@ -35,22 +31,15 @@ export type QueryContextProps<QueryData, Req extends boolean> = ContextProps<Que
35
31
* @see delayedContext
36
32
*/
37
33
export function createQueryContext < QD , Req extends boolean > ( props : QueryContextProps < QD , Req > ) {
38
- const {
39
- name,
40
- required,
41
- query,
42
- shouldDisplayError = ( ) => true ,
43
- DisplayError = DefaultDisplayError ,
44
- Loader = DefaultLoader ,
45
- ...rest
46
- } = props ;
34
+ const { name, required, query : useQuery , shouldDisplayError = ( ) => true , ...rest } = props ;
47
35
// eslint-disable-next-line @typescript-eslint/no-explicit-any
48
36
const { Provider, useCtx, useLaxCtx, useHasProvider } = createContext < QD > ( { name, required, ...( rest as any ) } ) ;
49
37
const defaultValue = ( 'default' in rest ? rest . default : undefined ) as QD ;
50
38
51
39
function WrappingProvider ( { children } : PropsWithChildren ) {
52
- const { data, isPending, error, ...rest } = query ( ) ;
40
+ const { data, isPending, error, ...rest } = useQuery ( ) ;
53
41
const enabled = 'enabled' in rest && ! required ? rest . enabled : true ;
42
+ const value = useMemo ( ( ) => data , [ data ] ) ;
54
43
55
44
if ( enabled && isPending ) {
56
45
return < Loader reason = { `query-${ name } ` } /> ;
@@ -60,7 +49,7 @@ export function createQueryContext<QD, Req extends boolean>(props: QueryContextP
60
49
return < DisplayError error = { error as Error } /> ;
61
50
}
62
51
63
- return < Provider value = { enabled ? ( data ?? defaultValue ) : defaultValue } > { children } </ Provider > ;
52
+ return < Provider value = { enabled ? ( value ?? defaultValue ) : defaultValue } > { children } </ Provider > ;
64
53
}
65
54
66
55
return {
0 commit comments