Fixed drawer not closing when a link in a drawer is pressed
This commit is contained in:
@@ -9,9 +9,10 @@ import { AccountDropDownMessages } from '@/types/user';
|
|||||||
type Props = {
|
type Props = {
|
||||||
messages: AccountDropDownMessages;
|
messages: AccountDropDownMessages;
|
||||||
locale: string;
|
locale: string;
|
||||||
|
onItemPress: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function DropdownAccount({ messages, locale }: Props) {
|
export default function DropdownAccount({ messages, locale, onItemPress }: Props) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const context = useContext(TokenContext);
|
const context = useContext(TokenContext);
|
||||||
|
|
||||||
@@ -28,13 +29,17 @@ export default function DropdownAccount({ messages, locale }: Props) {
|
|||||||
icon: <User size={16} />,
|
icon: <User size={16} />,
|
||||||
onPress: () => {
|
onPress: () => {
|
||||||
router.push('/account', { locale: locale });
|
router.push('/account', { locale: locale });
|
||||||
|
onItemPress();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
uid: 'signout',
|
uid: 'signout',
|
||||||
title: messages.signOut,
|
title: messages.signOut,
|
||||||
icon: <ArrowRightFromLine size={16} />,
|
icon: <ArrowRightFromLine size={16} />,
|
||||||
onPress: signOut,
|
onPress: () => {
|
||||||
|
signOut();
|
||||||
|
onItemPress();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -45,6 +50,7 @@ export default function DropdownAccount({ messages, locale }: Props) {
|
|||||||
icon: <ArrowRightToLine size={16} />,
|
icon: <ArrowRightToLine size={16} />,
|
||||||
onPress: () => {
|
onPress: () => {
|
||||||
router.push('/account/signin', { locale: locale });
|
router.push('/account/signin', { locale: locale });
|
||||||
|
onItemPress();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -53,6 +59,7 @@ export default function DropdownAccount({ messages, locale }: Props) {
|
|||||||
icon: <PenTool size={16} />,
|
icon: <PenTool size={16} />,
|
||||||
onPress: () => {
|
onPress: () => {
|
||||||
router.push('/account/signup', { locale: locale });
|
router.push('/account/signup', { locale: locale });
|
||||||
|
onItemPress();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,136 +1,16 @@
|
|||||||
import {
|
|
||||||
Navbar as NextUINavbar,
|
|
||||||
NavbarContent,
|
|
||||||
NavbarMenu,
|
|
||||||
NavbarMenuToggle,
|
|
||||||
NavbarBrand,
|
|
||||||
NavbarItem,
|
|
||||||
NavbarMenuItem,
|
|
||||||
Chip,
|
|
||||||
Link as NextUiLink,
|
|
||||||
} from '@nextui-org/react';
|
|
||||||
import { MoveUpRight } from 'lucide-react';
|
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { Link } from '@/src/navigation';
|
import HeaderNavbarMenu from './HeaderNavbarMenu';
|
||||||
import { ThemeSwitch } from '@/components/theme-switch';
|
|
||||||
import { GithubIcon } from '@/components/icons';
|
|
||||||
import Image from 'next/image';
|
|
||||||
import DropdownAccount from './DropdownAccount';
|
|
||||||
import DropdownLanguage from './DropdownLanguage';
|
|
||||||
|
|
||||||
export default function Header(params: { locale: string }) {
|
export default function Header(params: { locale: string }) {
|
||||||
const t = useTranslations('Header');
|
const t = useTranslations('Header');
|
||||||
const messages = {
|
const messages = {
|
||||||
|
docs: t('docs'),
|
||||||
|
projects: t('projects'),
|
||||||
account: t('account'),
|
account: t('account'),
|
||||||
signUp: t('signup'),
|
signUp: t('signup'),
|
||||||
signIn: t('signin'),
|
signIn: t('signin'),
|
||||||
signOut: t('signout'),
|
signOut: t('signout'),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Links shown Header or slider
|
return <HeaderNavbarMenu messages={messages} locale={params.locale} />;
|
||||||
const commonLinks = [
|
|
||||||
{
|
|
||||||
uid: 'projects',
|
|
||||||
href: '/projects',
|
|
||||||
label: t('projects'),
|
|
||||||
isExternal: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: 'docs',
|
|
||||||
href: 'https://kimatata.github.io/TestPlat/docs/getstarted/selfhost',
|
|
||||||
label: t('docs'),
|
|
||||||
isExternal: true,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<NextUINavbar maxWidth="full" position="sticky" className="bg-inherit">
|
|
||||||
<NavbarContent className="basis-1/5 sm:basis-full" justify="start">
|
|
||||||
<NavbarBrand as="li" className="gap-3 max-w-fit">
|
|
||||||
<Link className="flex justify-start items-center gap-1" href="/" locale={params.locale}>
|
|
||||||
<Image src="/favicon/android-chrome-192x192.png" width={32} height={32} alt="Logo" />
|
|
||||||
<p className="font-bold text-inherit">TestPlat</p>
|
|
||||||
</Link>
|
|
||||||
</NavbarBrand>
|
|
||||||
<NavbarItem className="hidden md:block">
|
|
||||||
<Chip size="sm" variant="flat">
|
|
||||||
<Link
|
|
||||||
className="data-[active=true]:text-primary data-[active=true]:font-medium"
|
|
||||||
href="/"
|
|
||||||
locale={params.locale}
|
|
||||||
>
|
|
||||||
1.0.0-alpha.7
|
|
||||||
</Link>
|
|
||||||
</Chip>
|
|
||||||
</NavbarItem>
|
|
||||||
{commonLinks.map((link) =>
|
|
||||||
link.isExternal ? (
|
|
||||||
<NavbarItem key={link.uid} className="hidden md:block">
|
|
||||||
<NextUiLink
|
|
||||||
isExternal
|
|
||||||
href="https://kimatata.github.io/TestPlat/docs/getstarted/selfhost"
|
|
||||||
aria-label="docs"
|
|
||||||
showAnchorIcon
|
|
||||||
anchorIcon={<MoveUpRight size={12} className="ms-1" />}
|
|
||||||
>
|
|
||||||
{t('docs')}
|
|
||||||
</NextUiLink>
|
|
||||||
</NavbarItem>
|
|
||||||
) : (
|
|
||||||
<NavbarItem key={link.uid} className="hidden md:block">
|
|
||||||
<Link
|
|
||||||
className="data-[active=true]:text-primary data-[active=true]:font-medium"
|
|
||||||
href={link.href}
|
|
||||||
locale={params.locale}
|
|
||||||
>
|
|
||||||
{link.label}
|
|
||||||
</Link>
|
|
||||||
</NavbarItem>
|
|
||||||
)
|
|
||||||
)}
|
|
||||||
</NavbarContent>
|
|
||||||
|
|
||||||
<NavbarContent className="basis-1 pl-4" justify="end">
|
|
||||||
<NextUiLink isExternal href="https://github.com/kimatata/TestPlat" aria-label="Github">
|
|
||||||
<GithubIcon className="text-default-500" />
|
|
||||||
</NextUiLink>
|
|
||||||
<ThemeSwitch />
|
|
||||||
<div className="hidden md:block">
|
|
||||||
<DropdownAccount messages={messages} locale={params.locale} />
|
|
||||||
<DropdownLanguage locale={params.locale} />
|
|
||||||
</div>
|
|
||||||
<NavbarMenuToggle className="md:hidden" />
|
|
||||||
</NavbarContent>
|
|
||||||
|
|
||||||
<NavbarMenu>
|
|
||||||
<div className="mx-4 mt-2 flex flex-col gap-2">
|
|
||||||
<NavbarMenuItem>
|
|
||||||
<DropdownAccount messages={messages} locale={params.locale} />
|
|
||||||
</NavbarMenuItem>
|
|
||||||
<NavbarMenuItem>
|
|
||||||
<DropdownLanguage locale={params.locale} />
|
|
||||||
</NavbarMenuItem>
|
|
||||||
{commonLinks.map((link) =>
|
|
||||||
link.isExternal ? (
|
|
||||||
<NavbarMenuItem key={link.uid}>
|
|
||||||
<NextUiLink href={link.href} showAnchorIcon anchorIcon={<MoveUpRight size={12} className="ms-1" />}>
|
|
||||||
{t('docs')}
|
|
||||||
</NextUiLink>
|
|
||||||
</NavbarMenuItem>
|
|
||||||
) : (
|
|
||||||
<NavbarMenuItem key={link.uid}>
|
|
||||||
<Link
|
|
||||||
className="data-[active=true]:text-primary data-[active=true]:font-medium"
|
|
||||||
href={link.href}
|
|
||||||
locale={params.locale}
|
|
||||||
>
|
|
||||||
{link.label}
|
|
||||||
</Link>
|
|
||||||
</NavbarMenuItem>
|
|
||||||
)
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</NavbarMenu>
|
|
||||||
</NextUINavbar>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
146
frontend/src/app/[locale]/HeaderNavbarMenu.tsx
Normal file
146
frontend/src/app/[locale]/HeaderNavbarMenu.tsx
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
'use client';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import { Link } from '@/src/navigation';
|
||||||
|
import Image from 'next/image';
|
||||||
|
import {
|
||||||
|
Navbar,
|
||||||
|
NavbarContent,
|
||||||
|
NavbarMenu,
|
||||||
|
NavbarMenuToggle,
|
||||||
|
NavbarBrand,
|
||||||
|
NavbarItem,
|
||||||
|
NavbarMenuItem,
|
||||||
|
Link as NextUiLink,
|
||||||
|
Chip,
|
||||||
|
} from '@nextui-org/react';
|
||||||
|
import { MoveUpRight } from 'lucide-react';
|
||||||
|
import { ThemeSwitch } from '@/components/theme-switch';
|
||||||
|
import { GithubIcon } from '@/components/icons';
|
||||||
|
import DropdownAccount from './DropdownAccount';
|
||||||
|
import DropdownLanguage from './DropdownLanguage';
|
||||||
|
|
||||||
|
type NabbarMenuMessages = {
|
||||||
|
projects: string;
|
||||||
|
docs: string;
|
||||||
|
account: string;
|
||||||
|
signUp: string;
|
||||||
|
signIn: string;
|
||||||
|
signOut: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
messages: NabbarMenuMessages;
|
||||||
|
locale: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function HeaderNavbarMenu({ messages, locale }: Props) {
|
||||||
|
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
||||||
|
|
||||||
|
const commonLinks = [
|
||||||
|
{
|
||||||
|
uid: 'projects',
|
||||||
|
href: '/projects',
|
||||||
|
label: messages.projects,
|
||||||
|
isExternal: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
uid: 'docs',
|
||||||
|
href: 'https://kimatata.github.io/TestPlat/docs/getstarted/selfhost',
|
||||||
|
label: messages.docs,
|
||||||
|
isExternal: true,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Navbar isMenuOpen={isMenuOpen} maxWidth="full" position="sticky" className="bg-inherit">
|
||||||
|
<NavbarContent className="basis-1/5 sm:basis-full" justify="start">
|
||||||
|
<NavbarBrand as="li" className="gap-3 max-w-fit">
|
||||||
|
<Link className="flex justify-start items-center gap-1" href="/" locale={locale}>
|
||||||
|
<Image src="/favicon/android-chrome-192x192.png" width={32} height={32} alt="Logo" />
|
||||||
|
<p className="font-bold text-inherit">TestPlat</p>
|
||||||
|
</Link>
|
||||||
|
</NavbarBrand>
|
||||||
|
<NavbarItem className="hidden md:block">
|
||||||
|
<Chip size="sm" variant="flat">
|
||||||
|
<Link className="data-[active=true]:text-primary data-[active=true]:font-medium" href="/" locale={locale}>
|
||||||
|
1.0.0-alpha.7
|
||||||
|
</Link>
|
||||||
|
</Chip>
|
||||||
|
</NavbarItem>
|
||||||
|
{commonLinks.map((link) =>
|
||||||
|
link.isExternal ? (
|
||||||
|
<NavbarItem key={link.uid} className="hidden md:block">
|
||||||
|
<NextUiLink
|
||||||
|
isExternal
|
||||||
|
href="https://kimatata.github.io/TestPlat/docs/getstarted/selfhost"
|
||||||
|
aria-label="docs"
|
||||||
|
showAnchorIcon
|
||||||
|
anchorIcon={<MoveUpRight size={12} className="ms-1" />}
|
||||||
|
>
|
||||||
|
{messages.docs}
|
||||||
|
</NextUiLink>
|
||||||
|
</NavbarItem>
|
||||||
|
) : (
|
||||||
|
<NavbarItem key={link.uid} className="hidden md:block">
|
||||||
|
<Link
|
||||||
|
className="data-[active=true]:text-primary data-[active=true]:font-medium"
|
||||||
|
href={link.href}
|
||||||
|
locale={locale}
|
||||||
|
>
|
||||||
|
{link.label}
|
||||||
|
</Link>
|
||||||
|
</NavbarItem>
|
||||||
|
)
|
||||||
|
)}
|
||||||
|
</NavbarContent>
|
||||||
|
|
||||||
|
<NavbarContent className="basis-1 pl-4" justify="end">
|
||||||
|
<NextUiLink isExternal href="https://github.com/kimatata/TestPlat" aria-label="Github">
|
||||||
|
<GithubIcon className="text-default-500" />
|
||||||
|
</NextUiLink>
|
||||||
|
<ThemeSwitch />
|
||||||
|
<div className="hidden md:block">
|
||||||
|
<DropdownAccount messages={messages} locale={locale} onItemPress={() => {}} />
|
||||||
|
<DropdownLanguage locale={locale} />
|
||||||
|
</div>
|
||||||
|
<NavbarMenuToggle className="md:hidden" onClick={() => setIsMenuOpen(!isMenuOpen)} />
|
||||||
|
</NavbarContent>
|
||||||
|
|
||||||
|
<NavbarMenu>
|
||||||
|
<div className="mx-4 mt-2 flex flex-col gap-2">
|
||||||
|
<NavbarMenuItem>
|
||||||
|
<DropdownAccount messages={messages} locale={locale} onItemPress={() => setIsMenuOpen(false)} />
|
||||||
|
</NavbarMenuItem>
|
||||||
|
<NavbarMenuItem>
|
||||||
|
<DropdownLanguage locale={locale} />
|
||||||
|
</NavbarMenuItem>
|
||||||
|
{commonLinks.map((link) =>
|
||||||
|
link.isExternal ? (
|
||||||
|
<NavbarMenuItem key={link.uid}>
|
||||||
|
<NextUiLink
|
||||||
|
href={link.href}
|
||||||
|
onPress={() => setIsMenuOpen(false)}
|
||||||
|
showAnchorIcon
|
||||||
|
anchorIcon={<MoveUpRight size={12} className="ms-1" />}
|
||||||
|
>
|
||||||
|
{messages.docs}
|
||||||
|
</NextUiLink>
|
||||||
|
</NavbarMenuItem>
|
||||||
|
) : (
|
||||||
|
<NavbarMenuItem key={link.uid}>
|
||||||
|
<Link
|
||||||
|
className="data-[active=true]:text-primary data-[active=true]:font-medium"
|
||||||
|
href={link.href}
|
||||||
|
locale={locale}
|
||||||
|
onClick={() => setIsMenuOpen(false)}
|
||||||
|
>
|
||||||
|
{link.label}
|
||||||
|
</Link>
|
||||||
|
</NavbarMenuItem>
|
||||||
|
)
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</NavbarMenu>
|
||||||
|
</Navbar>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { UserType } from '@/types/user';
|
import { UserType } from '@/types/user';
|
||||||
import { avatars } from '@/config/selection';
|
|
||||||
import Config from '@/config/config';
|
import Config from '@/config/config';
|
||||||
const apiServer = Config.apiServer;
|
const apiServer = Config.apiServer;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user