use vite+

This commit is contained in:
Amruth Pillai
2026-03-18 22:03:24 +01:00
parent d1dac8aeca
commit 192880e416
427 changed files with 58915 additions and 58759 deletions
+85 -85
View File
@@ -9,108 +9,108 @@ import type { AuthSession } from "@/integrations/auth/types";
import { useTheme } from "@/components/theme/provider";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { authClient } from "@/integrations/auth/client";
import { isLocale, loadLocale, localeMap, setLocaleServerFn } from "@/utils/locale";
import { isTheme } from "@/utils/theme";
type Props = {
children: ({ session }: { session: AuthSession }) => React.ComponentProps<typeof DropdownMenuTrigger>["render"];
children: ({ session }: { session: AuthSession }) => React.ComponentProps<typeof DropdownMenuTrigger>["render"];
};
export function UserDropdownMenu({ children }: Props) {
const router = useRouter();
const { i18n } = useLingui();
const { theme, setTheme } = useTheme();
const { data: session } = authClient.useSession();
const router = useRouter();
const { i18n } = useLingui();
const { theme, setTheme } = useTheme();
const { data: session } = authClient.useSession();
const handleThemeChange = (value: string) => {
if (!isTheme(value)) return;
setTheme(value);
};
const handleThemeChange = (value: string) => {
if (!isTheme(value)) return;
setTheme(value);
};
const handleLocaleChange = async (value: string) => {
if (!isLocale(value)) return;
await Promise.all([loadLocale(value), setLocaleServerFn({ data: value })]);
window.location.reload();
};
const handleLocaleChange = async (value: string) => {
if (!isLocale(value)) return;
await Promise.all([loadLocale(value), setLocaleServerFn({ data: value })]);
window.location.reload();
};
const handleLogout = async () => {
const toastId = toast.loading(t`Signing out...`);
const handleLogout = async () => {
const toastId = toast.loading(t`Signing out...`);
await authClient.signOut({
fetchOptions: {
onSuccess: () => {
toast.dismiss(toastId);
void router.invalidate();
},
onError: ({ error }) => {
toast.error(error.message, { id: toastId });
},
},
});
};
await authClient.signOut({
fetchOptions: {
onSuccess: () => {
toast.dismiss(toastId);
void router.invalidate();
},
onError: ({ error }) => {
toast.error(error.message, { id: toastId });
},
},
});
};
if (!session?.user) return null;
if (!session?.user) return null;
return (
<DropdownMenu>
<DropdownMenuTrigger render={children({ session: session as AuthSession })} />
return (
<DropdownMenu>
<DropdownMenuTrigger render={children({ session: session as AuthSession })} />
<DropdownMenuContent align="start" side="top">
<DropdownMenuGroup>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<TranslateIcon />
<Trans>Language</Trans>
</DropdownMenuSubTrigger>
<DropdownMenuSubContent className="max-h-[400px] overflow-y-auto">
<DropdownMenuRadioGroup value={i18n.locale} onValueChange={handleLocaleChange}>
{Object.entries(localeMap).map(([value, label]) => (
<DropdownMenuRadioItem key={value} value={value}>
{i18n.t(label)}
</DropdownMenuRadioItem>
))}
</DropdownMenuRadioGroup>
</DropdownMenuSubContent>
</DropdownMenuSub>
<DropdownMenuContent align="start" side="top">
<DropdownMenuGroup>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<TranslateIcon />
<Trans>Language</Trans>
</DropdownMenuSubTrigger>
<DropdownMenuSubContent className="max-h-[400px] overflow-y-auto">
<DropdownMenuRadioGroup value={i18n.locale} onValueChange={handleLocaleChange}>
{Object.entries(localeMap).map(([value, label]) => (
<DropdownMenuRadioItem key={value} value={value}>
{i18n.t(label)}
</DropdownMenuRadioItem>
))}
</DropdownMenuRadioGroup>
</DropdownMenuSubContent>
</DropdownMenuSub>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<PaletteIcon />
<Trans>Theme</Trans>
</DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<DropdownMenuRadioGroup value={theme} onValueChange={handleThemeChange}>
<DropdownMenuRadioItem value="light">
<Trans>Light</Trans>
</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="dark">
<Trans>Dark</Trans>
</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
</DropdownMenuSubContent>
</DropdownMenuSub>
</DropdownMenuGroup>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<PaletteIcon />
<Trans>Theme</Trans>
</DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<DropdownMenuRadioGroup value={theme} onValueChange={handleThemeChange}>
<DropdownMenuRadioItem value="light">
<Trans>Light</Trans>
</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="dark">
<Trans>Dark</Trans>
</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
</DropdownMenuSubContent>
</DropdownMenuSub>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuSeparator />
<DropdownMenuItem onClick={handleLogout}>
<SignOutIcon />
<Trans>Logout</Trans>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
<DropdownMenuItem onClick={handleLogout}>
<SignOutIcon />
<Trans>Logout</Trans>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}