import { For, Show, createSignal, createMemo, createEffect, onMount, onCleanup } from 'solid-js' import Private from './Private' import Notifications from './Notifications' import Icon from './Icon' import { Modal } from './Modal' import AuthModal from './AuthModal' import { t } from '../../utils/intl' import { useModalStore, showModal, useWarningsStore } from '../../stores/ui' import { useStore } from '@nanostores/solid' import { session as ssession } from '../../stores/auth' import { handleClientRouteLinkClick, router } from '../../stores/router' import './Header.scss' const resources = [ { name: t('zine'), href: '/' }, { name: t('feed'), href: '/feed' }, { name: t('topics'), href: '/topics' } //{ name: t('community'), href: '/community' } ] export const Header = () => { // signals const [getIsScrollingBottom, setIsScrollingBottom] = createSignal(false) const [getIsScrolled, setIsScrolled] = createSignal(false) const [fixed, setFixed] = createSignal(false) const [visibleWarnings, setVisibleWarnings] = createSignal(false) // stores const { getWarnings } = useWarningsStore() const session = useStore(ssession) const { getModal } = useModalStore() const routing = useStore(router) const subpath = createMemo(() => routing().path) // methods const toggleWarnings = () => setVisibleWarnings(!visibleWarnings()) const toggleFixed = () => setFixed(!fixed()) // effects createEffect(() => { if (fixed() || getModal()) { document.body.classList.add('fixed') } else { document.body.classList.remove('fixed') } }, [fixed(), getModal()]) // derived const authorized = createMemo(() => session()?.user?.slug) const handleEnterClick = (ev) => { showModal('auth') handleClientRouteLinkClick(ev) } const handleBellIconClick = (ev) => { if (!authorized()) { handleEnterClick(ev) return } toggleWarnings() handleClientRouteLinkClick(ev) } onMount(() => { let scrollTop = window.scrollY const handleScroll = () => { setIsScrollingBottom(window.scrollY > scrollTop) setIsScrolled(window.scrollY > 0) scrollTop = window.scrollY } window.addEventListener('scroll', handleScroll, { passive: true }) onCleanup(() => { window.removeEventListener('scroll', handleScroll) }) }) return (
) }