'use client'; //=========================================== // THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template //=========================================== import { runAsynchronouslyWithAlert } from "@hexclave/shared/dist/utils/promises"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Skeleton, Typography } from "@hexclave/ui"; import { CircleUser, LogIn, LogOut, SunMoon, UserPlus } from "lucide-react"; import React, { Suspense } from "react"; import { CurrentUser, useStackApp, useUser } from ".."; import { useTranslation } from "../lib/translations"; import { UserAvatar } from "./elements/user-avatar"; function Item(props: { text: string, icon: React.ReactNode, onClick: () => void | Promise }) { return ( runAsynchronouslyWithAlert(props.onClick)}>
{props.icon} {props.text}
); } type UserButtonProps = { showUserInfo?: boolean, colorModeToggle?: () => void | Promise, extraItems?: { text: string, icon: React.ReactNode, onClick: () => void | Promise, }[], mockUser?: { displayName?: string, primaryEmail?: string, profileImageUrl?: string, }, }; export function UserButton(props: UserButtonProps) { return ( }> ); } function UserButtonInner(props: UserButtonProps) { const userFromHook = useUser(); // Use mock user if provided, otherwise use real user const user = props.mockUser ? { displayName: props.mockUser.displayName || 'Mock User', primaryEmail: props.mockUser.primaryEmail || 'mock@example.com', profileImageUrl: props.mockUser.profileImageUrl, signOut: () => { console.log('Mock sign out - no action taken in demo mode'); return Promise.resolve(); } } as CurrentUser : userFromHook; return ; } function UserButtonInnerInner(props: UserButtonProps & { user: CurrentUser | null }) { const { t } = useTranslation(); const user = props.user; const app = useStackApp(); const iconProps = { size: 20, className: 'h-4 w-4' }; return (
{user && props.showUserInfo &&
{user.displayName}
{user.primaryEmail}
}
{user && {user.displayName}} {user && {user.primaryEmail}} {!user && {t('Not signed in')}}
{user && { if (props.mockUser) { console.log('Mock account settings - no navigation in demo mode'); } else { await app.redirectToAccountSettings(); } }} icon={} />} {!user && { if (props.mockUser) { console.log('Mock sign in - no navigation in demo mode'); } else { await app.redirectToSignIn(); } }} icon={} />} {!user && { if (props.mockUser) { console.log('Mock sign up - no navigation in demo mode'); } else { await app.redirectToSignUp(); } }} icon={ } />} {user && props.extraItems && props.extraItems.map((item, index) => ( ))} {props.colorModeToggle && ( } /> )} {user && { if (props.mockUser) { console.log('Mock sign out - no action taken in demo mode'); } else { await user.signOut(); } }} icon={} />}
); }