diff --git a/src/components/HamburgerMenu.styles.tsx b/src/components/HamburgerMenu.styles.tsx index 99cad8e..3f093a6 100644 --- a/src/components/HamburgerMenu.styles.tsx +++ b/src/components/HamburgerMenu.styles.tsx @@ -1,6 +1,6 @@ import styled from 'styled-components'; -export const Bar = styled.div<{ menuVisible?: boolean }>` +const Bar = styled.div<{ menuVisible?: boolean }>` height: 4px; background-color: white; width: 24px; @@ -33,17 +33,13 @@ export const MenuContainer = styled.div<{ background-color: black; width: 100vw; top: ${({ offsetTop }) => offsetTop}px; - left: -20px; + left: -1rem; height: ${({ menuVisible, offsetTop }) => menuVisible ? `calc(100vh - ${offsetTop}px)` : 0}; transition: all 0.3s ease-in-out; overflow: hidden; z-index: 999; - @media (max-width: 640px) { - padding-top: 20px; - } - a:link { text-decoration: none; color: white; diff --git a/src/components/HamburgerMenu.tsx b/src/components/HamburgerMenu.tsx index f5bcba2..7a19ead 100644 --- a/src/components/HamburgerMenu.tsx +++ b/src/components/HamburgerMenu.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState, useRef } from 'react'; +import { useEffect, useState, useRef, useContext } from 'react'; import { Link } from 'react-router-dom'; import { useClickAway, useMedia } from 'react-use'; import { @@ -7,6 +7,9 @@ import { MiddleBar, TopBar, } from './HamburgerMenu.styles'; +import { routes } from '../config/routes'; +import { UserContext } from '../context/user'; +import Version from './Version'; type Props = { links: Array<{ to: string; label: string; icon: string }>; @@ -17,6 +20,8 @@ export const HamburgerMenu = ({ headerHeight, links }: Props) => { const ref = useRef(null); const [menuVisible, setMenuVisible] = useState(false); const isMobile = useMedia('(max-width: 640px)'); + const { isLoggedIn, removeUser } = useContext(UserContext); + useClickAway(ref, () => { setMenuVisible(false); }); @@ -41,7 +46,7 @@ export const HamburgerMenu = ({ headerHeight, links }: Props) => { {links.map(({ to, label, icon }, idx) => ( - +
setMenuVisible(false)} @@ -50,6 +55,51 @@ export const HamburgerMenu = ({ headerHeight, links }: Props) => {
))} + + {!isLoggedIn ? ( +
+ { + e.stopPropagation(); + setMenuVisible(false); + }} + > + Log in + + + { + e.stopPropagation(); + setMenuVisible(false); + }} + > + + Sign up + + +
+ ) : ( +
+ +
+ )} + +
+ +
); diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 987053e..0062d87 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,9 +1,11 @@ -import { NavLink } from 'react-router-dom'; +import { Link, NavLink } from 'react-router-dom'; import { useMeasure } from 'react-use'; import { routes } from '../config/routes'; import { HamburgerMenu } from './HamburgerMenu'; import { PageTitle } from './PageTitle'; import Version from './Version'; +import { useContext } from 'react'; +import { UserContext } from '../context/user'; const links = [ { to: routes.SINGLE, label: 'Single Token', icon: '📈' }, @@ -13,18 +15,20 @@ const links = [ ]; export const Header = () => { - const [ref, { height }] = useMeasure(); + const [ref, { x, y, width, height, top, right, bottom, left }] = + useMeasure(); + const { removeUser, isLoggedIn } = useContext(UserContext); + + console.log('headerHeight', x, y, width, height, top, right, bottom, left); return (
-
-
+
+
{links.map(({ to, label, icon }, idx) => ( { data-testid="mobile-container" className="flex align-middle sm:hidden" > - +
- +
+
+ +
+ {!isLoggedIn ? ( + <> + + Log in + + + + + Sign up + + + + ) : ( + + )} +
+ {/* */}
); diff --git a/src/hooks/useRedirectOnLogin.ts b/src/hooks/useRedirectOnLogin.ts new file mode 100644 index 0000000..37305bb --- /dev/null +++ b/src/hooks/useRedirectOnLogin.ts @@ -0,0 +1,17 @@ +import { useHistory } from 'react-router-dom'; +import { routes } from '../config/routes'; +import { useContext, useEffect } from 'react'; +import { UserContext } from '../context/user'; + +const useRedirectOnLogin = (redirectTo: string) => { + const { isLoggedIn } = useContext(UserContext); + const history = useHistory(); + + useEffect(() => { + if (isLoggedIn) { + history.replace(routes.SINGLE); + } + }, [isLoggedIn, history]); +}; + +export default useRedirectOnLogin; diff --git a/src/pages/LoginPage/LoginPage.tsx b/src/pages/LoginPage/LoginPage.tsx index 10df7e0..0e560c9 100644 --- a/src/pages/LoginPage/LoginPage.tsx +++ b/src/pages/LoginPage/LoginPage.tsx @@ -1,11 +1,15 @@ import { useContext } from 'react'; import LoginForm, { FieldValues } from '../../components/LoginForm'; import { config } from '../../config'; +import { routes } from '../../config/routes'; +import useRedirectOnLogin from '../../hooks/useRedirectOnLogin'; import { UserContext } from '../../context/user'; const LoginPage = () => { const { login } = useContext(UserContext); + useRedirectOnLogin(routes.BEST_DCA); + const onSubmit = (fieldValues: FieldValues) => fetch(`${config.API_URI}/api/auth/login`, { method: 'POST', diff --git a/src/pages/SignupPage/SignupPage.tsx b/src/pages/SignupPage/SignupPage.tsx index 56efa6e..4f723c8 100644 --- a/src/pages/SignupPage/SignupPage.tsx +++ b/src/pages/SignupPage/SignupPage.tsx @@ -2,9 +2,12 @@ import { useContext } from 'react'; import SignupForm, { SubmitValues } from '../../components/SignupForm'; import { config } from '../../config'; import { UserContext } from '../../context/user'; +import useRedirectOnLogin from '../../hooks/useRedirectOnLogin'; +import { routes } from '../../config/routes'; const SignupPage = () => { const { login } = useContext(UserContext); + useRedirectOnLogin(routes.BEST_DCA); const onSubmit = (fieldValues: SubmitValues) => fetch(`${config.API_URI}/api/user`, {