Files
cal.diy/apps/web/app/providers.tsx
T
Robert Harrison 54343aa685
Create PR containing updated CHANGELOG.md and release packages to NPM once PR is merged / Release (push) Canceled after 0s
Run i18n AI automation / Run i18n (push) Canceled after 0s
Next.js Bundle Analysis / analyze (push) Canceled after 0s
fix: restore @ts-expect-error for CacheProvider type mismatch (#30171)
* fix: restore @ts-expect-error for CacheProvider type mismatch

PR #30140 removed these comments assuming they were stale now that
the repo is on TypeScript 5. The comments were about the compiler
version, but the actual incompatibility is between react-inlinesvg/provider's
CacheProvider (typed to return a bare ReactNode) and this repo's pinned
@types/react@18.0.26, which requires JSX components to return Element | null.
ReactNode includes undefined, so the JSX usage fails type-checking.

Verified yarn build completes successfully with this restored.

Fixes #30170

* docs: explain the actual @ts-expect-error compatibility condition

Per @coderabbitai review on #30171: the old wording ("remove when
upgrading typescript to v5") was itself stale/misleading, since the
incompatibility is with the pinned @types/react version, not the
TypeScript compiler version. Documents the real condition instead.
2026-09-20 13:47:32 +05:30

40 lines
1.3 KiB
TypeScript

"use client";
import { TrpcProvider } from "app/_trpc/trpc-provider";
import { SessionProvider } from "next-auth/react";
import CacheProvider from "react-inlinesvg/provider";
import { ToastProvider } from "@coss/ui/components/toast";
import { WebPushProvider } from "@calcom/web/modules/notifications/components/WebPushContext";
import { NotificationSoundHandler } from "@calcom/web/components/notification-sound-handler";
import useIsBookingPage from "@lib/hooks/useIsBookingPage";
import { GeoProvider } from "./GeoContext";
type ProvidersProps = {
isEmbed: boolean;
children: React.ReactNode;
nonce: string | undefined;
country: string;
};
export function Providers({ isEmbed, children, country }: ProvidersProps) {
const isBookingPage = useIsBookingPage();
return (
<GeoProvider country={country}>
<SessionProvider>
<TrpcProvider>
<ToastProvider position="bottom-center">
{!isEmbed && !isBookingPage && <NotificationSoundHandler />}
{/* @ts-expect-error react-inlinesvg/provider is incompatible with @types/react@18.0.26. Remove when these types are compatible. */}
<CacheProvider>
<WebPushProvider>{children}</WebPushProvider>
</CacheProvider>
</ToastProvider>
</TrpcProvider>
</SessionProvider>
</GeoProvider>
);
}