1
0
Fork 0
freesewing/sites/org/components/header/index.mjs

139 lines
3.9 KiB
JavaScript
Raw Normal View History

// Hooks
import { useContext } from 'react'
import { useTranslation } from 'next-i18next'
import { useTheme } from 'shared/hooks/use-theme.mjs'
// Context
import { ModalContext } from 'shared/context/modal-context.mjs'
// Components
2023-04-07 17:10:54 +02:00
import {
DesignIcon,
DocsIcon,
MenuIcon,
SearchIcon,
ShowcaseIcon,
UserIcon,
ThemeIcon,
I18nIcon,
2023-08-23 17:41:34 +02:00
HeartIcon,
PlusIcon,
RssIcon,
2023-04-07 17:10:54 +02:00
} from 'shared/components/icons.mjs'
import { HeaderWrapper } from 'shared/components/wrappers/header.mjs'
import { ModalThemePicker, ns as themeNs } from 'shared/components/modal/theme-picker.mjs'
import { ModalLocalePicker, ns as localeNs } from 'shared/components/modal/locale-picker.mjs'
2023-04-09 15:57:25 +02:00
import { ModalMenu } from 'site/components/navigation/modal-menu.mjs'
import { NavButton, NavSpacer, iconSize } from 'shared/components/header.mjs'
2023-04-07 17:10:54 +02:00
export const ns = ['header', 'sections', ...themeNs, ...localeNs]
2023-04-09 15:57:25 +02:00
const NavIcons = ({ setModal, setSearch }) => {
2023-04-07 17:10:54 +02:00
const { t } = useTranslation(['header'])
const { spectrum } = useTheme()
2023-04-07 17:10:54 +02:00
return (
<>
<NavButton
onClick={() => setModal(<ModalMenu />)}
label={t('header:menu')}
color={spectrum[0]}
2023-07-26 17:38:22 +02:00
extraClasses="md:px-4"
>
2023-04-07 17:10:54 +02:00
<MenuIcon className={iconSize} />
</NavButton>
<NavSpacer />
<NavButton href="/designs" label={t('header:designs')} color={spectrum[1]}>
2023-04-07 17:10:54 +02:00
<DesignIcon className={iconSize} />
</NavButton>
<NavButton
href="/docs"
label={t('header:docs')}
color={spectrum[2]}
extraClasses="hidden md:flex"
2023-04-07 17:10:54 +02:00
>
<DocsIcon className={iconSize} />
2023-04-07 17:10:54 +02:00
</NavButton>
2023-04-09 15:57:25 +02:00
<NavButton
href="/blog"
label={t('header:blog')}
color={spectrum[3]}
extraClasses="hidden md:flex"
2023-04-09 15:57:25 +02:00
>
<RssIcon className={iconSize} />
2023-04-07 17:10:54 +02:00
</NavButton>
2023-04-09 15:57:25 +02:00
<NavButton
2023-04-30 21:24:35 +02:00
href="/showcase"
label={t('header:showcase')}
color={spectrum[4]}
extraClasses="hidden md:flex"
2023-04-09 15:57:25 +02:00
>
2023-04-30 21:24:35 +02:00
<ShowcaseIcon className={iconSize} />
2023-04-07 17:10:54 +02:00
</NavButton>
<NavSpacer />
2023-04-07 17:10:54 +02:00
<NavButton
2023-08-23 17:41:34 +02:00
href="/new"
label={t('header:new')}
color={spectrum[5]}
2023-04-07 17:10:54 +02:00
extraClasses="hidden lg:flex"
>
2023-08-23 17:41:34 +02:00
<PlusIcon className={iconSize} />
</NavButton>
<NavButton href="/account" label={t('header:account')} color={spectrum[6]}>
<UserIcon className={iconSize} />
</NavButton>
<NavButton
2023-08-23 17:41:34 +02:00
href="/support"
label={t('header:support')}
color={spectrum[7]}
extraClasses="hidden lg:flex"
>
2023-08-23 17:41:34 +02:00
<HeartIcon className={iconSize} />
2023-04-07 17:10:54 +02:00
</NavButton>
<NavSpacer />
<NavButton
onClick={() => setModal(<ModalThemePicker />)}
2023-04-07 17:10:54 +02:00
label={t('header:theme')}
color={spectrum[8]}
2023-04-07 17:10:54 +02:00
>
<ThemeIcon className={iconSize} />
</NavButton>
2023-04-07 17:33:45 +02:00
<NavButton
onClick={() => setModal(<ModalLocalePicker />)}
2023-04-07 17:33:45 +02:00
label={t('header:language')}
color={spectrum[9]}
2023-04-07 17:33:45 +02:00
>
2023-04-07 17:10:54 +02:00
<I18nIcon className={iconSize} />
</NavButton>
<NavButton
onClick={() => setSearch(true)}
label={t('header:search')}
color={spectrum[10]}
2023-07-26 17:38:22 +02:00
extraClasses="md:px-4"
>
2023-04-07 17:10:54 +02:00
<SearchIcon className={iconSize} />
</NavButton>
</>
)
}
2023-07-26 17:38:22 +02:00
export const Header = ({ show }) => {
const { setModal } = useContext(ModalContext)
return (
2023-07-26 17:38:22 +02:00
<HeaderWrapper show={show}>
<div className="m-auto">
2022-12-24 18:16:09 +01:00
<div className="p-0 flex flex-row gap-2 justify-between text-neutral-content items-center">
2023-04-07 17:10:54 +02:00
{/* Non-mobile content */}
<div className="hidden md:flex md:flex-row md:justify-between items-center xl:justify-center w-full">
2023-07-26 17:38:22 +02:00
<NavIcons setModal={setModal} />
2022-11-23 21:42:22 +01:00
</div>
2023-04-07 17:10:54 +02:00
{/* Mobile content */}
<div className="flex md:hidden flex-row items-center justify-between w-full">
2023-07-26 17:38:22 +02:00
<NavIcons setModal={setModal} />
</div>
</div>
2022-11-23 21:42:22 +01:00
</div>
</HeaderWrapper>
)
}