feat: providers combiner

This commit is contained in:
2025-08-26 16:53:47 +04:00
parent 31bd888357
commit 4a758e4cf0
2 changed files with 44 additions and 17 deletions

View File

@ -15,6 +15,7 @@ import {
getBoardsOptions, getBoardsOptions,
getProjectsOptions, getProjectsOptions,
} from "@/lib/client/@tanstack/react-query.gen"; } from "@/lib/client/@tanstack/react-query.gen";
import { combineProviders } from "@/utils/combineProviders";
import { DealsContextProvider } from "./contexts/DealsContext"; import { DealsContextProvider } from "./contexts/DealsContext";
async function prefetchData() { async function prefetchData() {
@ -34,11 +35,15 @@ async function prefetchData() {
export default async function DealsPage() { export default async function DealsPage() {
const queryClient = await prefetchData(); const queryClient = await prefetchData();
const Providers = combineProviders(
[HydrationBoundary, { state: dehydrate(queryClient) }],
[ProjectsContextProvider],
[BoardsContextProvider],
[StatusesContextProvider]
);
return ( return (
<HydrationBoundary state={dehydrate(queryClient)}> <Providers>
<ProjectsContextProvider>
<BoardsContextProvider>
<StatusesContextProvider>
<PageContainer> <PageContainer>
<PageBlock className={"mobile-margin-height"}> <PageBlock className={"mobile-margin-height"}>
<Header /> <Header />
@ -48,9 +53,6 @@ export default async function DealsPage() {
</DealsContextProvider> </DealsContextProvider>
</PageBlock> </PageBlock>
</PageContainer> </PageContainer>
</StatusesContextProvider> </Providers>
</BoardsContextProvider>
</ProjectsContextProvider>
</HydrationBoundary>
); );
} }

View File

@ -0,0 +1,25 @@
import { ElementType, PropsWithChildren } from "react";
type ProvidersType = [ElementType, Record<string, unknown>] | [ElementType];
export const combineProviders = (
...componentsWithProps: Array<ProvidersType>
): ElementType => {
const getInitial = ({ children }: PropsWithChildren) => children;
return componentsWithProps.reduce(
(
AccumulatedComponents: ElementType,
[Provider, props = {}]: ProvidersType
) => {
return ({ children }: PropsWithChildren) => {
return (
<AccumulatedComponents>
<Provider {...props}>{children}</Provider>
</AccumulatedComponents>
);
};
},
getInitial
);
};