-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathHeader.js
77 lines (70 loc) · 1.87 KB
/
Header.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import styled from 'styled-components'
import { useState } from 'react'
import useSWR from 'swr'
import dynamic from 'next/dynamic'
import Logo from './header/Logo'
const SearchBar = dynamic(() => import('./header/SearchBar'), { ssr: false })
import HamburgerMenu from './header/HamburgerMenu'
import UsualMenu from './header/UsualMenu'
const fetcher = url => fetch(url).then(r => r.json())
export default function Header({ isDarkModeOn }) {
const { data, error } = useSWR(`${process.env.NEXT_PUBLIC_HCMS_API_URL}/categories`, fetcher)
const [ isMenuOpen, setIsMenuOpen ] = useState(false)
return (
<StyledHeader>
<Logo setIsMenuOpen={setIsMenuOpen} />
<SearchBar />
<div>
<div className="usualMenu">
<UsualMenu
isMenuOpen={isMenuOpen}
setIsMenuOpen={setIsMenuOpen}
data={data}
error={error}
isDarkModeOn={isDarkModeOn}
/>
</div>
<div className="hamburgerMenu">
<HamburgerMenu
isMenuOpen={isMenuOpen}
setIsMenuOpen={setIsMenuOpen}
data={data}
error={error}
/>
</div>
</div>
</StyledHeader>
)
}
const StyledHeader = styled.header`
grid-area: 1 / 1 / 2 / 2;
display: flex;
justify-content: space-between;
align-items: center;
> :first-child > img {
margin: 1em;
}
> :last-child {
z-index: 1;
> .usualMenu {
display: none;
margin-right: 1em;
}
> .hamburgerMenu {
display: block;
}
}
@media only screen and (min-width: 1024px) {
> :last-child {
> .usualMenu {
display: block;
}
> .hamburgerMenu {
display: none;
}
}
}
@media only screen and (min-width: 1248px) {
grid-area: 1 / 1 / 2 / 4;
}
`