@@ -3,6 +3,8 @@ import React from 'react';
33import Grid from './Grid' ;
44import Container from './Container' ;
55import styled from 'styled-components' ;
6+ import Menu from '@icons/Menu' ;
7+ import Close from '@icons/Close' ;
68
79const states : { [ key : string ] : React . CSSProperties } = {
810 '/' : {
@@ -17,8 +19,12 @@ const states: { [key: string]: React.CSSProperties } = {
1719 left : '157px' ,
1820 width : '55px' ,
1921 } ,
20- '/projects ' : {
22+ '/bookmarks ' : {
2123 left : '224px' ,
24+ width : '100px' ,
25+ } ,
26+ '/projects' : {
27+ left : '340px' ,
2228 width : '79px' ,
2329 } ,
2430} ;
@@ -39,7 +45,27 @@ const NavLink = styled.a`
3945 }
4046` ;
4147
42- const Nav = ( ) : JSX . Element => {
48+ const MenuContainer = styled ( Container ) `
49+ cursor: pointer;
50+ ` ;
51+
52+ export interface NavProps {
53+ isOpen : boolean ;
54+ onOpen : ( ) => void ;
55+ onClose : ( ) => void ;
56+ }
57+
58+ const Links = ( ) : JSX . Element => (
59+ < >
60+ < NavLink href = "/" > Home</ NavLink >
61+ < NavLink href = "/about" > About</ NavLink >
62+ < NavLink href = "/blog" > Blog</ NavLink >
63+ < NavLink href = "/bookmarks" > Bookmarks</ NavLink >
64+ < NavLink href = "/projects" > Projects</ NavLink >
65+ </ >
66+ ) ;
67+
68+ const Nav = ( { isOpen, onOpen, onClose } : NavProps ) : JSX . Element => {
4369 const router = useRouter ( ) ;
4470 let navStyle = states [ '/' ] ;
4571
@@ -55,21 +81,41 @@ const Nav = (): JSX.Element => {
5581 return (
5682 < Grid
5783 as = "nav"
58- alignContent = "center"
59- justifyContent = "space-between"
60- my = "3rem"
84+ px = { [ '2rem' , '2rem' , '2rem' , '0' ] }
6185 gridTemplateColumns = { [ '1fr' , '1fr' , '1fr 1fr 1fr' ] }
86+ alignContent = "center"
87+ justifyContent = { [ 'center' , 'center' , 'space-between' ] }
88+ margin = "3rem 0"
6289 >
6390 < Container display = { [ 'none' , 'none' , 'flex' ] } >
6491 < NavLink href = "/" > Antoine Ordonez</ NavLink >
6592 </ Container >
66- < Container alignContent = "center" >
93+ < MenuContainer display = { [ 'flex' , 'none' , 'none' ] } >
94+ { isOpen ? (
95+ < Close
96+ size = "2rem"
97+ style = { { margin : '-0.3rem' } }
98+ onClick = { ( evt ) => evt . type === 'click' && onClose ( ) }
99+ />
100+ ) : (
101+ < Menu
102+ size = "1.6rem"
103+ onClick = { ( evt ) => evt . type === 'click' && onOpen ( ) }
104+ />
105+ ) }
106+ </ MenuContainer >
107+ { isOpen && (
108+ < Grid gridTemplateColumns = "1fr" style = { { fontSize : '2rem' } } py = "3rem" >
109+ < Links />
110+ </ Grid >
111+ ) }
112+ < Container alignContent = "center" display = { [ 'none' , 'flex' , 'flex' ] } >
67113 < Grid
68114 width = "fit-content"
69115 gridGap = "2rem"
70116 alignItems = "center"
71117 justifyItems = "center"
72- gridTemplateColumns = "repeat(4 , auto)"
118+ gridTemplateColumns = "repeat(5 , auto)"
73119 style = { {
74120 borderRadius : '25px' ,
75121 background : 'rgba(0, 0, 0, 0.04)' ,
@@ -88,10 +134,7 @@ const Nav = (): JSX.Element => {
88134 ...navStyle ,
89135 } }
90136 />
91- < NavLink href = "/" > Home</ NavLink >
92- < NavLink href = "/about" > About</ NavLink >
93- < NavLink href = "/blog" > Blog</ NavLink >
94- < NavLink href = "/projects" > Projects</ NavLink >
137+ < Links />
95138 </ Grid >
96139 </ Container >
97140 < Container alignContent = "flex-end" display = { [ 'none' , 'none' , 'flex' ] } >
0 commit comments