Skip to content

Commit 5f9b7ce

Browse files
author
Ole Martin Handeland
committed
Very strange, but createQueryContext() failed completely without the useMemo() call that was here before. Leaving it in seems to fix things, but I suspect there is a react-compiler issue at the core of this. I tried opting out of react-compiler, but that didn't work as expected either.
1 parent 592c0b1 commit 5f9b7ce

File tree

1 file changed

+7
-18
lines changed

1 file changed

+7
-18
lines changed

src/core/contexts/queryContext.tsx

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import React from 'react';
1+
import React, { useMemo } from 'react';
22
import type { PropsWithChildren } from 'react';
33

44
import type { UseQueryResult } from '@tanstack/react-query';
55
import type { AxiosError } from 'axios';
66

77
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';
1010
import type { LaxContextProps, StrictContextProps } from 'src/core/contexts/context';
1111

1212
type Err = Error | AxiosError;
@@ -20,11 +20,7 @@ type ContextProps<Ctx, Req extends boolean> = Req extends true ? StrictContextPr
2020

2121
export type QueryContextProps<QueryData, Req extends boolean> = ContextProps<QueryData, Req> & {
2222
query: Query<Req, QueryData>;
23-
2423
shouldDisplayError?: (error: Err) => boolean;
25-
26-
DisplayError?: React.ComponentType<{ error: Err }>;
27-
Loader?: React.ComponentType<{ reason: string }>;
2824
};
2925

3026
/**
@@ -35,22 +31,15 @@ export type QueryContextProps<QueryData, Req extends boolean> = ContextProps<Que
3531
* @see delayedContext
3632
*/
3733
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;
4735
// eslint-disable-next-line @typescript-eslint/no-explicit-any
4836
const { Provider, useCtx, useLaxCtx, useHasProvider } = createContext<QD>({ name, required, ...(rest as any) });
4937
const defaultValue = ('default' in rest ? rest.default : undefined) as QD;
5038

5139
function WrappingProvider({ children }: PropsWithChildren) {
52-
const { data, isPending, error, ...rest } = query();
40+
const { data, isPending, error, ...rest } = useQuery();
5341
const enabled = 'enabled' in rest && !required ? rest.enabled : true;
42+
const value = useMemo(() => data, [data]);
5443

5544
if (enabled && isPending) {
5645
return <Loader reason={`query-${name}`} />;
@@ -60,7 +49,7 @@ export function createQueryContext<QD, Req extends boolean>(props: QueryContextP
6049
return <DisplayError error={error as Error} />;
6150
}
6251

63-
return <Provider value={enabled ? (data ?? defaultValue) : defaultValue}>{children}</Provider>;
52+
return <Provider value={enabled ? (value ?? defaultValue) : defaultValue}>{children}</Provider>;
6453
}
6554

6655
return {

0 commit comments

Comments
 (0)