Skip to content
This repository was archived by the owner on Aug 2, 2025. It is now read-only.

Commit 983f545

Browse files
committed
refactor: remove withProps and Compose
1 parent 4ef0f1f commit 983f545

File tree

2 files changed

+24
-60
lines changed

2 files changed

+24
-60
lines changed

src/main.tsx

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { RouterProvider } from "react-router-dom";
44
import { ChakraProvider, ColorModeScript } from "@chakra-ui/react";
55
import themeGen from "./theme";
66
import registerSW from "./registerSW";
7-
import { Compose, withProps } from "./utils/contextualise";
87
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
98
import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client";
109
import reportWebVitals from "./reportWebVitals";
@@ -39,28 +38,29 @@ const ChakraWrapper = ({ ...props }) => {
3938
};
4039

4140
ReactDOM.createRoot(document.getElementById("root")).render(
42-
<Compose
43-
components={[
44-
StrictMode,
45-
withProps(PersistQueryClientProvider, {
46-
client: queryClient,
47-
persistOptions: {
48-
persister,
49-
maxAge: Infinity,
50-
dehydrateOptions: {
51-
shouldDehydrateQuery: () => true,
52-
},
41+
<StrictMode>
42+
<PersistQueryClientProvider
43+
client={queryClient}
44+
persistOptions={{
45+
persister,
46+
maxAge: Infinity,
47+
dehydrateOptions: {
48+
shouldDehydrateQuery: () => true,
5349
},
54-
}),
55-
withProps(SettingsProvider, { initialArgs: [] }),
56-
ChakraWrapper,
57-
]}
58-
>
59-
<ColorModeScript initialColorMode={themeGen().config.initialColorMode} />
60-
<RouterProvider router={createRouter(queryClient)} />
61-
<ToastContainer />
62-
<ReactQueryDevtools initialIsOpen={false} />
63-
</Compose>
50+
}}
51+
>
52+
<SettingsProvider>
53+
<ChakraWrapper>
54+
<ColorModeScript
55+
initialColorMode={themeGen().config.initialColorMode}
56+
/>
57+
<RouterProvider router={createRouter(queryClient)} />
58+
<ToastContainer />
59+
<ReactQueryDevtools initialIsOpen={false} />
60+
</ChakraWrapper>
61+
</SettingsProvider>
62+
</PersistQueryClientProvider>
63+
</StrictMode>
6464
);
6565

6666
// =================

src/utils/contextualise.tsx

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,51 +4,15 @@ import React, { createContext, useContext } from "react";
44
* 'Globalises' a hook by wrapping it in a context provider.
55
*/
66
export default <TData, TParameters extends unknown[]>(
7-
hook: (...args: TParameters) => TData,
7+
hook: () => TData,
88
defaultValue?: TData
99
): [() => TData, (props: { children: React.ReactNode }) => JSX.Element] => {
1010
const Context = createContext(defaultValue);
1111
const Provider = ({
1212
children,
13-
initialArgs,
1413
}: {
1514
children: React.ReactNode;
1615
initialArgs: TParameters;
17-
}) => (
18-
<Context.Provider value={hook(...initialArgs)}>{children}</Context.Provider>
19-
);
16+
}) => <Context.Provider value={hook()}>{children}</Context.Provider>;
2017
return [() => useContext(Context), Provider];
2118
};
22-
23-
/** Composes several providers or wrappers into a single wrapper.
24-
*
25-
* Credit to: https://stackoverflow.com/questions/51504506/too-many-react-context-providers
26-
*/
27-
export function Compose(props: {
28-
components: Array<
29-
React.JSXElementConstructor<React.PropsWithChildren<unknown>>
30-
>;
31-
children: React.ReactNode;
32-
}) {
33-
const { components = [], children } = props;
34-
35-
return (
36-
<>
37-
{components.reduceRight((acc, Comp) => {
38-
return <Comp>{acc}</Comp>;
39-
}, children)}
40-
</>
41-
);
42-
}
43-
44-
/**
45-
* Create a new component which adds props to an existing component.
46-
*/
47-
export function withProps(
48-
Component: React.JSXElementConstructor<React.PropsWithChildren<unknown>>,
49-
addedProps: Record<string, unknown>
50-
) {
51-
return (props: Record<string, unknown>) => (
52-
<Component {...addedProps} {...props} />
53-
);
54-
}

0 commit comments

Comments
 (0)