1 | import React, { Component } from 'react'
|
2 | import PropTypes from 'prop-types'
|
3 | import styled, { withTheme } from 'styled-components'
|
4 |
|
5 | import {
|
6 | Default,
|
7 | DesktopNavigation,
|
8 | MobileNavigation
|
9 | } from 'SRC'
|
10 |
|
11 | class 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 |
|
57 | const Header = styled(BaseHeader)`
|
58 | position: ${props => props.position};
|
59 | z-index: 2;
|
60 | width: 100%;
|
61 | `
|
62 |
|
63 | Header.propTypes = {
|
64 | className: PropTypes.string,
|
65 | above: PropTypes.node,
|
66 | below: PropTypes.node,
|
67 | desktopProps: PropTypes.object,
|
68 | mobileProps: PropTypes.object
|
69 | }
|
70 |
|
71 | Header.defaultProps = {
|
72 | position: 'fixed',
|
73 | setMargin: () => {}
|
74 | }
|
75 |
|
76 |
|
77 | export default withTheme(Header)
|