modules/home/components/nav/NavHeader.js   A
last analyzed

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 93
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 92.31%

Importance

Changes 0
Metric Value
wmc 1
eloc 52
mnd 1
bc 1
fnc 0
dl 0
loc 93
ccs 12
cts 13
cp 0.9231
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import React from 'react'
2
import styled from 'styled-components/macro'
3
import PropTypes from 'prop-types'
4
import { Translate } from 'react-localize-redux'
5
import { GiHamburgerMenu } from 'react-icons/gi'
6
import { MdClose } from 'react-icons/md'
7
import NavLang from '~/modules/home/components/nav/NavLang'
8
import MobileContainer from '~/modules/home/components/common/container/MobileContainer'
9
import Row from 'react-bootstrap/Row'
10
import Col from 'react-bootstrap/Col'
11
12 2
const NavHeader = ({ isShowNavContent, switchNav }) => (
13 5
  <NavContainer>
14
    <MobileContainer>
15
      <Row fluid="true">
16
        <Col xs={6}>
17
          <NavLang />
18
        </Col>
19
        <Col xs={6}>
20
          <NavControl
21
            data-test-id="switch-nav-content"
22 2
            onClick={() => switchNav(!isShowNavContent)}
23
          >
24
            {!isShowNavContent ? <HamburgerIcon /> : <CloseIcon />}{' '}
25
            <Translate id="Menu" />
26
          </NavControl>
27
        </Col>
28
      </Row>
29
    </MobileContainer>
30
  </NavContainer>
31
)
32
33 2
NavHeader.propTypes = {
34
  isShowNavContent: PropTypes.bool,
35
  switchNav: PropTypes.func
36
}
37
38
export default NavHeader
39
40
const NavContainer = styled.div`
41
  width: 100%;
42
  position: absolute;
43
  z-index: 200;
44
  top: 0;
45
  left: 0;
46 3
  height: ${props => props.theme.navHeaderHeight};
47
  overflow: hidden;
48 3
  background-color: ${props => props.theme.colors.colorAccent};
49 3
  box-shadow: ${props => props.theme.extra.boxShadow};
50
`
51
52
const NavControl = styled.div`
53 3
  color: ${props => props.theme.colors.colorDark};
54 3
  line-height: ${props => props.theme.navHeaderHeight};
55
  text-align: right;
56
  border: none;
57
  transition: color 0.5s;
58
  cursor: pointer;
59
60
  @media screen and (max-width: 768px) {
61
    visibility: hidden;
62
  }
63
64
  &::before {
65
    display: inline-block;
66
    margin-right: 10px;
67 3
    color: ${props => props.theme.colors.colorDark};
68 3
    font-size: ${props => props.theme.fontSizes.XL};
69
    transition: color 0.5s;
70
71
    @media screen and (max-width: 600px) {
72
      margin-right: 0;
73
    }
74
  }
75
76
  &:hover,
77
  &:hover::before {
78 3
    color: ${props => props.theme.colors.colorDark};
79
  }
80
`
81
82
const HamburgerIcon = styled(GiHamburgerMenu)`
83
  display: inline;
84
  padding-bottom: 5px;
85
`
86
87
const CloseIcon = styled(MdClose)`
88
  display: inline;
89
  font-size: ${props => props.theme.fontSizes.XXL};
90
  font-weight: bolder;
91
  padding-bottom: 3px;
92
`
93