Files
myeasycms-v2/apps/web/app/(marketing)/_components/site-header-account-section.tsx
giancarlo 761c5d6080 Update UI elements and enhance security measures
Changes are introduced primarily to the site header buttons and styles, as well as some content corrections. Also, the SUPABASE_SERVICE_ROLE_KEY environment variable is now sanitized before use to prevent potential security vulnerabilities. The function 'taintUniqueValue' from React is used to ensure this process. These changes align with good practices for both UI/UX and security.
2024-04-15 23:38:54 +08:00

84 lines
2.0 KiB
TypeScript

'use client';
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 { ModeToggle } from '@kit/ui/mode-toggle';
import { Trans } from '@kit/ui/trans';
import featuresFlagConfig from '~/config/feature-flags.config';
import pathsConfig from '~/config/paths.config';
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);
if (user.data) {
return (
<PersonalAccountDropdown
paths={paths}
features={features}
user={user.data}
signOutRequested={() => signOut.mutateAsync()}
/>
);
}
return <AuthButtons />;
}
function AuthButtons() {
return (
<div className={'flex space-x-2'}>
<div className={'hidden space-x-0.5 md:flex'}>
<ModeToggle />
<Link href={pathsConfig.auth.signIn}>
<Button variant={'link'}>
<Trans i18nKey={'auth:signIn'} />
</Button>
</Link>
</div>
<Link href={pathsConfig.auth.signUp}>
<Button
variant={'ghost'}
className={
'rounded-full border border-primary hover:bg-primary hover:text-primary-foreground'
}
>
<Trans i18nKey={'auth:getStarted'} />
<ChevronRight className={'h-4'} />
</Button>
</Link>
</div>
);
}