Files
myeasycms-v2/apps/web/app/(marketing)/_components/site-header-account-section.tsx
giancarlo fb8e091043 Refactor UI component and improve configuration handling
Refactored the components in the site header account section and page.tsx to improve readability. Updated the WordPress client to handle date types correctly. Adjusted the keystatic storage kind to default to 'local' if not specified in the environment variables.
2024-04-20 13:31:07 +08:00

95 lines
2.3 KiB
TypeScript

'use client';
import dynamic from 'next/dynamic';
import Link from 'next/link';
import type { User } from '@supabase/supabase-js';
import { ChevronRight } from 'lucide-react';
import { PersonalAccountDropdown } from '@kit/accounts/personal-account-dropdown';
import { useSignOut } from '@kit/supabase/hooks/use-sign-out';
import { useUser } from '@kit/supabase/hooks/use-user';
import { Button } from '@kit/ui/button';
import { Trans } from '@kit/ui/trans';
import featuresFlagConfig from '~/config/feature-flags.config';
import pathsConfig from '~/config/paths.config';
const ModeToggle = dynamic(
() => import('@kit/ui/mode-toggle').then((mod) => mod.ModeToggle),
{
ssr: false,
},
);
const paths = {
home: pathsConfig.app.home,
};
const features = {
enableThemeToggle: featuresFlagConfig.enableThemeToggle,
};
export function SiteHeaderAccountSection({
user,
}: React.PropsWithChildren<{
user: User | null;
}>) {
if (!user) {
return <AuthButtons />;
}
return <SuspendedPersonalAccountDropdown user={user} />;
}
function SuspendedPersonalAccountDropdown(props: { user: User | null }) {
const signOut = useSignOut();
const user = useUser(props.user);
const userData = user.data ?? props.user ?? null;
if (userData) {
return (
<PersonalAccountDropdown
paths={paths}
features={features}
user={userData}
signOutRequested={() => signOut.mutateAsync()}
/>
);
}
return <AuthButtons />;
}
function AuthButtons() {
const textClassName =
'text-gray-600 hover:text-current dark:text-gray-400 dark:hover:text-white';
return (
<div className={'flex space-x-2'}>
<div className={'hidden space-x-0.5 md:flex'}>
<ModeToggle className={textClassName} />
<Link href={pathsConfig.auth.signIn}>
<Button variant={'ghost'} className={textClassName}>
<Trans i18nKey={'auth:signIn'} />
</Button>
</Link>
</div>
<Link href={pathsConfig.auth.signUp}>
<Button className="group" variant={'default'}>
<Trans i18nKey={'auth:signUp'} />
<ChevronRight
className={
'ml-1 h-4 w-4 transition-transform duration-500 group-hover:translate-x-1'
}
/>
</Button>
</Link>
</div>
);
}