import { createContext, useContext as useBaseContext } from 'react'; import { Tooltip as RechartsTooltip, type TooltipProps } from 'recharts'; export function createChartTooltip< PropsFromTooltip extends Record, PropsFromContext extends Record, >( Tooltip: React.ComponentType< { context: PropsFromContext; data: PropsFromTooltip[]; } & TooltipProps >, ) { const context = createContext(null); const useContext = () => { const value = useBaseContext(context); if (!value) { throw new Error('ChartTooltip context not found'); } return value; }; const InnerTooltip = (tooltip: TooltipProps) => { const context = useContext(); const data = tooltip.payload?.map((p) => p.payload) ?? []; if (!data || !tooltip.active) { return null; } return (
); }; return { TooltipProvider: ({ children, ...value }: { children: React.ReactNode; } & PropsFromContext) => { return ( {children} ); }, Tooltip: (props: TooltipProps) => { return ( } /> ); }, }; }