mirror of
https://github.com/lukevella/rallly.git
synced 2025-04-29 02:06:34 +02:00
112 lines
3.5 KiB
TypeScript
112 lines
3.5 KiB
TypeScript
import "tailwindcss/tailwind.css";
|
|
import "../../style.css";
|
|
|
|
import { defaultLocale, supportedLngs } from "@rallly/languages";
|
|
import { PostHogProvider } from "@rallly/posthog/client";
|
|
import { Toaster } from "@rallly/ui/toaster";
|
|
import { TooltipProvider } from "@rallly/ui/tooltip";
|
|
import { domAnimation, LazyMotion } from "motion/react";
|
|
import type { Viewport } from "next";
|
|
import { Inter } from "next/font/google";
|
|
import React from "react";
|
|
|
|
import { TimeZoneChangeDetector } from "@/app/[locale]/timezone-change-detector";
|
|
import { UserProvider } from "@/components/user-provider";
|
|
import { PreferencesProvider } from "@/contexts/preferences";
|
|
import { getUser } from "@/data/get-user";
|
|
import { TimezoneProvider } from "@/features/timezone/client/context";
|
|
import { I18nProvider } from "@/i18n/client";
|
|
import { getLocale } from "@/i18n/server/get-locale";
|
|
import { auth, getUserId } from "@/next-auth";
|
|
import { TRPCProvider } from "@/trpc/client/provider";
|
|
import { ConnectedDayjsProvider } from "@/utils/dayjs";
|
|
|
|
import { PostHogPageView } from "../posthog-page-view";
|
|
|
|
const inter = Inter({
|
|
subsets: ["latin"],
|
|
display: "swap",
|
|
});
|
|
|
|
export const viewport: Viewport = {
|
|
width: "device-width",
|
|
initialScale: 1,
|
|
};
|
|
|
|
export default async function Root({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
const session = await auth();
|
|
|
|
let locale = getLocale();
|
|
|
|
const userId = await getUserId();
|
|
|
|
const user = userId ? await getUser() : null;
|
|
|
|
if (user?.locale) {
|
|
locale = user.locale;
|
|
}
|
|
|
|
if (!supportedLngs.includes(locale)) {
|
|
locale = defaultLocale;
|
|
}
|
|
|
|
return (
|
|
<html lang={locale} className={inter.className}>
|
|
<body>
|
|
<Toaster />
|
|
<I18nProvider locale={locale}>
|
|
<TRPCProvider>
|
|
<LazyMotion features={domAnimation}>
|
|
<PostHogProvider>
|
|
<PostHogPageView />
|
|
<TooltipProvider>
|
|
<UserProvider
|
|
user={
|
|
user
|
|
? {
|
|
id: user.id,
|
|
name: user.name,
|
|
email: user.email,
|
|
tier: user
|
|
? user.isPro
|
|
? "pro"
|
|
: "hobby"
|
|
: "guest",
|
|
image: user.image,
|
|
}
|
|
: session?.user
|
|
? {
|
|
id: session.user.id,
|
|
tier: "guest",
|
|
}
|
|
: undefined
|
|
}
|
|
>
|
|
<PreferencesProvider
|
|
initialValue={{
|
|
timeFormat: user?.timeFormat,
|
|
timeZone: user?.timeZone,
|
|
weekStart: user?.weekStart,
|
|
}}
|
|
>
|
|
<TimezoneProvider initialTimezone={user?.timeZone}>
|
|
<ConnectedDayjsProvider>
|
|
{children}
|
|
<TimeZoneChangeDetector />
|
|
</ConnectedDayjsProvider>
|
|
</TimezoneProvider>
|
|
</PreferencesProvider>
|
|
</UserProvider>
|
|
</TooltipProvider>
|
|
</PostHogProvider>
|
|
</LazyMotion>
|
|
</TRPCProvider>
|
|
</I18nProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|