Skip to content

Commit 6bc3847

Browse files
authored
Merge pull request #28 from firstcontributions/mobile-first
2 parents 19a8359 + 1fa5b4a commit 6bc3847

File tree

4 files changed

+85
-13
lines changed

4 files changed

+85
-13
lines changed

src/components/Layout.tsx

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,48 @@
1-
import React, { ReactNode } from 'react'
1+
import React, { ReactNode, useState } from 'react'
22
import Navbar from './navbar/Navbar'
33

44
type LayoutProps = {
55
sidebarContentLeft?: ReactNode
66
children: ReactNode
7-
sidebarContentRight: ReactNode
7+
sidebarContentRight?: ReactNode
88
}
99

1010
export default function Layout({
1111
sidebarContentLeft,
1212
children,
1313
sidebarContentRight,
1414
}: LayoutProps) {
15+
const [isDrawerOpen, setIsDrawerOpen] = useState(false)
1516
return (
1617
<div className="mx-auto bg-gray-200 dark:bg-dark-800 min-h-screen">
17-
<Navbar />
18-
<div className="grid grid-cols-9 gap-10 mt-10 px-60 pt-10">
18+
<Navbar isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />
19+
{sidebarContentLeft && (
20+
<aside
21+
className={`col-span-2 md:hidden mt-16 ${
22+
isDrawerOpen ? 'block' : 'hidden'
23+
}`}
24+
>
25+
{sidebarContentLeft}
26+
</aside>
27+
)}
28+
<div className="grid grid-cols-9 gap-10 mt-10 px-4 md:px-10 xl:px-60 md:pt-10 ">
1929
{sidebarContentLeft && (
20-
<aside className="col-span-2">{sidebarContentLeft}</aside>
30+
<aside className="col-span-2 hidden md:block">
31+
{sidebarContentLeft}
32+
</aside>
2133
)}
22-
<main className={sidebarContentLeft ? 'col-span-5' : 'col-span-7'}>
34+
<main
35+
className={
36+
sidebarContentLeft ? 'col-span-9 md:col-span-5' : 'md:col-span-7'
37+
}
38+
>
2339
{children}
2440
</main>
25-
<aside className="col-span-2">{sidebarContentRight}</aside>
41+
{sidebarContentRight && (
42+
<aside className="col-span-2 hidden md:block">
43+
{sidebarContentRight}
44+
</aside>
45+
)}
2646
</div>
2747
<div></div>
2848
</div>
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { useState } from 'react'
2+
3+
type HamburgerMenuProps = {
4+
className?: string
5+
isOpen: boolean
6+
setIsOpen: (isOpen: boolean) => void
7+
}
8+
9+
const HamburgerMenu = ({
10+
className,
11+
isOpen,
12+
setIsOpen,
13+
}: HamburgerMenuProps) => {
14+
const genericHamburgerLine = `h-1 w-6 my-0.5 rounded-full bg-black transition ease transform duration-300`
15+
16+
return (
17+
<button
18+
className={`flex flex-col h-10 w-10 rounded justify-center items-center group ${className}`}
19+
onClick={() => setIsOpen(!isOpen)}
20+
>
21+
<div
22+
className={`${genericHamburgerLine} ${
23+
isOpen
24+
? 'rotate-45 translate-y-2 opacity-50 group-hover:opacity-100'
25+
: 'opacity-50 group-hover:opacity-100'
26+
}`}
27+
/>
28+
<div
29+
className={`${genericHamburgerLine} ${
30+
isOpen ? 'opacity-0' : 'opacity-50 group-hover:opacity-100'
31+
}`}
32+
/>
33+
<div
34+
className={`${genericHamburgerLine} ${
35+
isOpen
36+
? '-rotate-45 -translate-y-2 opacity-50 group-hover:opacity-100'
37+
: 'opacity-50 group-hover:opacity-100'
38+
}`}
39+
/>
40+
</button>
41+
)
42+
}
43+
44+
export default HamburgerMenu

src/components/navbar/Navbar.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@ import Link from 'next/link'
33
import { useRouter } from 'next/router'
44
import React from 'react'
55
import Button from '../Button'
6+
import HamburgerMenu from './HamburgerButton'
67
const ThemeButton = dynamic(() => import('./ThemeButton'), {
78
ssr: false,
89
})
910

10-
export default function Navbar() {
11+
type NavbarProps = {
12+
isDrawerOpen: boolean
13+
setIsDrawerOpen: (isOpen: boolean) => void
14+
}
15+
16+
export default function Navbar({ isDrawerOpen, setIsDrawerOpen }: NavbarProps) {
1117
const router = useRouter()
1218
const { pathname } = router
1319
return (
@@ -18,7 +24,7 @@ export default function Navbar() {
1824
<div className="logo w-10 h-10"></div>
1925
</a>
2026
</Link>
21-
<div className="space-x-4">
27+
<div className="space-x-4 flex">
2228
<ThemeButton />
2329
{pathname !== '/story' && (
2430
<Button>
@@ -27,6 +33,11 @@ export default function Navbar() {
2733
</Link>
2834
</Button>
2935
)}
36+
<HamburgerMenu
37+
className="lg:hidden"
38+
isOpen={isDrawerOpen}
39+
setIsOpen={setIsDrawerOpen}
40+
/>
3041
</div>
3142
</div>
3243
<style jsx>{`

src/pages/index.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,7 @@ const Home = ({
3636
}
3737

3838
return (
39-
<Layout
40-
sidebarContentLeft={leftSidebar}
41-
sidebarContentRight={<div>Promoted</div>}
42-
>
39+
<Layout sidebarContentLeft={leftSidebar}>
4340
<>
4441
<Feed root={query} />
4542
</>

0 commit comments

Comments
 (0)