"use client";
import Loading from "@/app/components/auth/Loading";
import { ClerkProvider, useAuth } from "@clerk/clerk-react";
import {
AuthLoading,
Authenticated,
ConvexReactClient,
Unauthenticated,
} from "convex/react";
import { ConvexProviderWithClerk } from "convex/react-clerk";
type ConvexClerkProviderProps = {
children: React.ReactNode;
};
const clerkPublishableKey = process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY;
if (!clerkPublishableKey) {
throw new Error("Missing Clerk Publishable Key");
}
const convexUrl = process.env.NEXT_PUBLIC_CONVEX_URL!;
const convex = new ConvexReactClient(convexUrl);
const ConvexClerkProvider = ({ children }: ConvexClerkProviderProps) => {
return (
<ClerkProvider publishableKey={clerkPublishableKey}>
<ConvexProviderWithClerk client={convex} useAuth={useAuth}>
<AuthLoading>
<Loading />
</AuthLoading>
<Authenticated>{children}</Authenticated>
<Unauthenticated>{children}</Unauthenticated>
</ConvexProviderWithClerk>
</ClerkProvider>
);
};
export default ConvexClerkProvider;
"use client";
import Loading from "@/app/components/auth/Loading";
import { ClerkProvider, useAuth } from "@clerk/clerk-react";
import {
AuthLoading,
Authenticated,
ConvexReactClient,
Unauthenticated,
} from "convex/react";
import { ConvexProviderWithClerk } from "convex/react-clerk";
type ConvexClerkProviderProps = {
children: React.ReactNode;
};
const clerkPublishableKey = process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY;
if (!clerkPublishableKey) {
throw new Error("Missing Clerk Publishable Key");
}
const convexUrl = process.env.NEXT_PUBLIC_CONVEX_URL!;
const convex = new ConvexReactClient(convexUrl);
const ConvexClerkProvider = ({ children }: ConvexClerkProviderProps) => {
return (
<ClerkProvider publishableKey={clerkPublishableKey}>
<ConvexProviderWithClerk client={convex} useAuth={useAuth}>
<AuthLoading>
<Loading />
</AuthLoading>
<Authenticated>{children}</Authenticated>
<Unauthenticated>{children}</Unauthenticated>
</ConvexProviderWithClerk>
</ClerkProvider>
);
};
export default ConvexClerkProvider;
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body className={export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body className={${inter.className}}>
<ConvexClerkProvider>
{children}
<Toaster />
</ConvexClerkProvider>
</body>
</html>
);
}}>
<ConvexClerkProvider>
{children}
<Toaster />
</ConvexClerkProvider>
</body>
</html>
);
}Join the Discord to ask follow-up questions and connect with the community
Join the Convex Discord! Explore Convex, the backend platform that keeps your app in sync.
16,164 Members
Join