The Node.js® Website
1'use client';
2
3import { useLocale } from 'next-intl';
4import { useTheme } from 'next-themes';
5import type { FC } from 'react';
6
7import NavBar from '@/components/Containers/NavBar';
8import WithBanner from '@/components/withBanner';
9import { useClientContext, useSiteNavigation } from '@/hooks';
10import { useRouter } from '@/navigation.mjs';
11import { availableLocales } from '@/next.locales.mjs';
12
13const WithNavBar: FC = () => {
14 const { navigationItems } = useSiteNavigation();
15 const { resolvedTheme, setTheme } = useTheme();
16 const { pathname } = useClientContext();
17 const { replace } = useRouter();
18
19 const locale = useLocale();
20
21 const toggleCurrentTheme = () =>
22 setTheme(resolvedTheme === 'dark' ? 'light' : 'dark');
23
24 return (
25 <div>
26 <WithBanner section="index" />
27
28 <NavBar
29 onThemeTogglerClick={toggleCurrentTheme}
30 languages={{
31 currentLanguage: locale,
32 availableLanguages: availableLocales,
33 onChange: locale => replace(pathname!, { locale: locale.code }),
34 }}
35 navItems={navigationItems.map(([, { label, link }]) => ({
36 link,
37 text: label,
38 }))}
39 />
40 </div>
41 );
42};
43
44export default WithNavBar;