import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router'; import enquire from 'enquire.js'; import debounce from 'lodash.debounce'; import classNames from 'classnames'; import { Select, Menu, Row, Col, Icon, Button } from 'antd'; const Option = Select.Option; export default class Header extends React.Component { static contextTypes = { router: React.PropTypes.object.isRequired, intl: React.PropTypes.object.isRequired, } constructor(props) { super(props); this.onScroll = debounce(() => { const scrollTop = document.body.scrollTop || document.documentElement.scrollTop; const clientHeight = document.documentElement.clientHeight; if (scrollTop >= clientHeight) { this.setState({ isFirstFrame: false }); } else { this.setState({ isFirstFrame: true }); } }, 100); this.onDocumentClick = () => { this.setState({ menuVisible: false, }); }; this.state = { menuVisible: false, menuMode: 'horizontal', isFirstFrame: true, }; } componentDidMount() { window.addEventListener('scroll', this.onScroll); document.addEventListener('click', this.onDocumentClick); enquire.register('only screen and (min-width: 320px) and (max-width: 767px)', { match: () => { this.setState({ menuMode: 'inline' }); }, unmatch: () => { this.setState({ menuMode: 'horizontal' }); }, }); } componentWillUnmount() { window.removeEventListener('scroll', this.onScroll); document.removeEventListener('click', this.onDocumentClick); } handleMenuIconClick = (e) => { e.stopPropagation(); e.nativeEvent.stopImmediatePropagation(); this.setState({ menuVisible: true, }); } handleSearch = (value) => { this.context.router.push({ pathname: value }); } handleSelectFilter = (value, option) => { return option.props['data-label'].indexOf(value.toLowerCase()) > -1; } handleLangChange = () => { if (typeof localStorage !== 'undefined') { const locale = this.context.intl.locale === 'zh-CN' ? 'en-US' : 'zh-CN'; localStorage.setItem('locale', locale); location.reload(); } } render() { const { routes, components } = this.props; const route = routes[0].path.replace(/^\//, ''); let activeMenuItem = route.slice(0, route.indexOf(':') - 1) || 'home'; if (activeMenuItem === 'components' || route === 'changelog') { activeMenuItem = 'docs/react'; } const options = components .map(({ meta }) => { const pathSnippet = meta.filename.split('/')[1]; const url = `/components/${pathSnippet}`; return ( ); }); const menuStyle = { display: this.state.menuVisible ? 'block' : '', }; const headerClassName = classNames({ clearfix: true, 'home-nav-white': !this.state.isFirstFrame, }); return ( ); } }