+1








30ba168fc3
Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Omar López <zomars@me.com> Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: Alex van Andel <me@alexvanandel.com> Co-authored-by: zomars <zomars@me.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Co-authored-by: Benny Joo <sldisek783@gmail.com> Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Co-authored-by: Gergő Móricz <mo.geryy@gmail.com> Co-authored-by: Keith Williams <keithwillcode@gmail.com>
27 lines
855 B
TypeScript
27 lines
855 B
TypeScript
"use client";
|
|
|
|
import { type DehydratedState, HydrationBoundary } from "@tanstack/react-query";
|
|
import { useMemo } from "react";
|
|
|
|
type DataTransformer = {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
serialize: (data: any) => any;
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
deserialize: (data: any) => any;
|
|
};
|
|
|
|
export function createHydrateClient(opts: { transformer: DataTransformer }) {
|
|
return function HydrateClient(props: { children: React.ReactNode; state: DehydratedState }) {
|
|
const { state, children } = props;
|
|
|
|
const transformedState: DehydratedState = useMemo(() => {
|
|
if (opts.transformer) {
|
|
return opts.transformer.deserialize(state);
|
|
}
|
|
return state;
|
|
}, [state]);
|
|
|
|
return <HydrationBoundary state={transformedState}>{children}</HydrationBoundary>;
|
|
};
|
|
}
|