UNPKG

1.55 kBJavaScriptView Raw
1import React, { Component } from 'react'
2import PropTypes from 'prop-types'
3import styled, { withTheme } from 'styled-components'
4
5import {
6 Default,
7 DesktopNavigation,
8 MobileNavigation
9} from 'SRC'
10
11class BaseHeader extends Component {
12 constructor (props) {
13 super(props)
14 this.header = null
15 }
16
17 setMargin = () => {
18 const { setMargin, theme: { basePxSize } } = this.props
19 const remHeight = (this.header.clientHeight / basePxSize)
20 setMargin(remHeight)
21 }
22
23 componentDidMount () {
24 this.setMargin()
25 }
26
27 componentDidUpdate () {
28 this.setMargin()
29 }
30
31 render () {
32 const {
33 above,
34 below,
35 className,
36 desktopProps,
37 mobileProps,
38 setMargin,
39 ...props
40 } = this.props
41
42 return (
43 <div className={className} ref={(element) => { this.header = element }} {...props}>
44 {above}
45 <Default displayTarget={'belowMobileNav'}>
46 <MobileNavigation {...mobileProps} />
47 </Default>
48 <Default displayTarget={'aboveMobileNav'}>
49 <DesktopNavigation {...desktopProps} />
50 </Default>
51 {below}
52 </div>
53 )
54 }
55}
56
57const Header = styled(BaseHeader)`
58 position: ${props => props.position};
59 z-index: 2;
60 width: 100%;
61`
62
63Header.propTypes = {
64 className: PropTypes.string,
65 above: PropTypes.node,
66 below: PropTypes.node,
67 desktopProps: PropTypes.object,
68 mobileProps: PropTypes.object
69}
70
71Header.defaultProps = {
72 position: 'fixed',
73 setMargin: () => {}
74}
75
76/** @component */
77export default withTheme(Header)