The Node.js® Website
at main 1.2 kB view raw
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;