1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-25 04:46:40 +07:00

(nextjs) fixed header appearance for SSR

This commit is contained in:
Fedor Katurov 2022-01-19 14:44:18 +07:00
parent 2a6ded288b
commit 3da5aba726
3 changed files with 13 additions and 2 deletions

1
src/constants/ssr.ts Normal file
View file

@ -0,0 +1 @@
export const isSSR = typeof window === 'undefined';

View file

@ -1,4 +1,4 @@
import React, { FC, useCallback, useMemo } from 'react'; import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import isBefore from 'date-fns/isBefore'; import isBefore from 'date-fns/isBefore';
@ -11,6 +11,7 @@ import { Button } from '~/components/input/Button';
import { Logo } from '~/components/main/Logo'; import { Logo } from '~/components/main/Logo';
import { UserButton } from '~/components/main/UserButton'; import { UserButton } from '~/components/main/UserButton';
import { Dialog } from '~/constants/modal'; import { Dialog } from '~/constants/modal';
import { isSSR } from '~/constants/ssr';
import { URLS } from '~/constants/urls'; import { URLS } from '~/constants/urls';
import { useAuth } from '~/hooks/auth/useAuth'; import { useAuth } from '~/hooks/auth/useAuth';
import { useScrollTop } from '~/hooks/dom/useScrollTop'; import { useScrollTop } from '~/hooks/dom/useScrollTop';
@ -26,6 +27,7 @@ type HeaderProps = {};
const Header: FC<HeaderProps> = observer(() => { const Header: FC<HeaderProps> = observer(() => {
const labStats = useGetLabStats(); const labStats = useGetLabStats();
const [isScrolled, setIsScrolled] = useState(false);
const { logout } = useAuth(); const { logout } = useAuth();
const { showModal } = useModal(); const { showModal } = useModal();
const { isUser, user } = useAuth(); const { isUser, user } = useAuth();
@ -52,8 +54,13 @@ const Header: FC<HeaderProps> = observer(() => {
const hasLabUpdates = useMemo(() => labStats.updates.length > 0, [labStats.updates]); const hasLabUpdates = useMemo(() => labStats.updates.length > 0, [labStats.updates]);
const hasFlowUpdates = useMemo(() => flowUpdates.length > 0, [flowUpdates]); const hasFlowUpdates = useMemo(() => flowUpdates.length > 0, [flowUpdates]);
// Needed for SSR
useEffect(() => {
setIsScrolled(top > 10);
}, [top]);
return ( return (
<div className={classNames(styles.wrap, { [styles.is_scrolled]: top > 10 })}> <div className={classNames(styles.wrap, { [styles.is_scrolled]: isScrolled })}>
<div className={styles.container}> <div className={styles.container}>
<div className={styles.logo_wrapper}> <div className={styles.logo_wrapper}>
<Logo /> <Logo />

View file

@ -4,11 +4,14 @@ export const useScrollTop = () => {
const [top, setTop] = useState(typeof window !== 'undefined' ? window.scrollY : 0); const [top, setTop] = useState(typeof window !== 'undefined' ? window.scrollY : 0);
useEffect(() => { useEffect(() => {
setTop(window.scrollY);
const onScroll = () => { const onScroll = () => {
setTop(window.scrollY); setTop(window.scrollY);
}; };
window.addEventListener('scroll', onScroll); window.addEventListener('scroll', onScroll);
return () => window.removeEventListener('scroll', onScroll); return () => window.removeEventListener('scroll', onScroll);
}, []); }, []);