2018-08-30 14:25:33 +00:00
|
|
|
import React, { Component, Fragment } from 'react';
|
|
|
|
import { NavLink } from 'react-router-dom';
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
import enhanceWithClickOutside from 'react-click-outside';
|
|
|
|
import classnames from 'classnames';
|
2018-10-29 03:26:19 +00:00
|
|
|
import { Trans, withNamespaces } from 'react-i18next';
|
2018-10-15 10:49:07 +00:00
|
|
|
|
2019-06-03 12:41:45 +00:00
|
|
|
import { SETTINGS_URLS } from '../../helpers/constants';
|
|
|
|
import Dropdown from '../ui/Dropdown';
|
|
|
|
|
2018-08-30 14:25:33 +00:00
|
|
|
class Menu extends Component {
|
|
|
|
handleClickOutside = () => {
|
|
|
|
this.props.closeMenu();
|
|
|
|
};
|
|
|
|
|
|
|
|
toggleMenu = () => {
|
|
|
|
this.props.toggleMenuOpen();
|
|
|
|
};
|
|
|
|
|
2019-06-03 12:41:45 +00:00
|
|
|
getActiveClassForSettings = () => {
|
|
|
|
const { pathname } = this.props.location;
|
|
|
|
const isSettingsPage = SETTINGS_URLS.some(item => item === pathname);
|
|
|
|
|
|
|
|
return isSettingsPage ? 'active' : '';
|
|
|
|
};
|
|
|
|
|
2018-08-30 14:25:33 +00:00
|
|
|
render() {
|
|
|
|
const menuClass = classnames({
|
2018-11-19 06:57:45 +00:00
|
|
|
'col-lg-6 mobile-menu': true,
|
2018-08-30 14:25:33 +00:00
|
|
|
'mobile-menu--active': this.props.isMenuOpen,
|
|
|
|
});
|
|
|
|
|
2019-06-03 12:41:45 +00:00
|
|
|
const dropdownControlClass = `nav-link ${this.getActiveClassForSettings()}`;
|
|
|
|
|
2018-08-30 14:25:33 +00:00
|
|
|
return (
|
|
|
|
<Fragment>
|
|
|
|
<div className={menuClass}>
|
2018-11-19 06:57:45 +00:00
|
|
|
<ul className="nav nav-tabs border-0 flex-column flex-lg-row flex-nowrap">
|
2018-08-30 14:25:33 +00:00
|
|
|
<li className="nav-item border-bottom d-lg-none" onClick={this.toggleMenu}>
|
|
|
|
<div className="nav-link nav-link--back">
|
2019-06-03 12:41:45 +00:00
|
|
|
<svg className="nav-icon">
|
|
|
|
<use xlinkHref="#back" />
|
|
|
|
</svg>
|
2018-11-09 06:51:28 +00:00
|
|
|
<Trans>back</Trans>
|
2018-08-30 14:25:33 +00:00
|
|
|
</div>
|
|
|
|
</li>
|
|
|
|
<li className="nav-item">
|
|
|
|
<NavLink to="/" exact={true} className="nav-link">
|
2019-06-03 12:41:45 +00:00
|
|
|
<svg className="nav-icon">
|
|
|
|
<use xlinkHref="#dashboard" />
|
|
|
|
</svg>
|
2018-11-09 06:51:28 +00:00
|
|
|
<Trans>dashboard</Trans>
|
2018-08-30 14:25:33 +00:00
|
|
|
</NavLink>
|
|
|
|
</li>
|
2019-06-03 12:41:45 +00:00
|
|
|
<Dropdown
|
|
|
|
label={this.props.t('settings')}
|
|
|
|
baseClassName="dropdown nav-item"
|
|
|
|
controlClassName={dropdownControlClass}
|
|
|
|
icon="settings"
|
|
|
|
>
|
|
|
|
<Fragment>
|
|
|
|
<NavLink to="/settings" className="dropdown-item">
|
|
|
|
<Trans>general_settings</Trans>
|
|
|
|
</NavLink>
|
|
|
|
<NavLink to="/dns" className="dropdown-item">
|
|
|
|
<Trans>dns_settings</Trans>
|
|
|
|
</NavLink>
|
|
|
|
<NavLink to="/encryption" className="dropdown-item">
|
|
|
|
<Trans>encryption_settings</Trans>
|
|
|
|
</NavLink>
|
|
|
|
<NavLink to="/clients" className="dropdown-item">
|
2019-06-06 14:45:24 +00:00
|
|
|
<Trans>client_settings</Trans>
|
2019-06-03 12:41:45 +00:00
|
|
|
</NavLink>
|
|
|
|
<NavLink to="/dhcp" className="dropdown-item">
|
|
|
|
<Trans>dhcp_settings</Trans>
|
|
|
|
</NavLink>
|
|
|
|
</Fragment>
|
|
|
|
</Dropdown>
|
2018-08-30 14:25:33 +00:00
|
|
|
<li className="nav-item">
|
|
|
|
<NavLink to="/filters" className="nav-link">
|
2019-06-03 12:41:45 +00:00
|
|
|
<svg className="nav-icon">
|
|
|
|
<use xlinkHref="#filters" />
|
|
|
|
</svg>
|
2018-11-09 06:51:28 +00:00
|
|
|
<Trans>filters</Trans>
|
2018-08-30 14:25:33 +00:00
|
|
|
</NavLink>
|
|
|
|
</li>
|
|
|
|
<li className="nav-item">
|
|
|
|
<NavLink to="/logs" className="nav-link">
|
2019-06-03 12:41:45 +00:00
|
|
|
<svg className="nav-icon">
|
|
|
|
<use xlinkHref="#log" />
|
|
|
|
</svg>
|
2018-11-09 06:51:28 +00:00
|
|
|
<Trans>query_log</Trans>
|
2018-08-30 14:25:33 +00:00
|
|
|
</NavLink>
|
|
|
|
</li>
|
2018-10-15 10:49:07 +00:00
|
|
|
<li className="nav-item">
|
2019-06-03 12:41:45 +00:00
|
|
|
<NavLink to="/guide" className="nav-link">
|
|
|
|
<svg className="nav-icon">
|
|
|
|
<use xlinkHref="#setup" />
|
|
|
|
</svg>
|
2019-03-19 13:19:53 +00:00
|
|
|
<Trans>setup_guide</Trans>
|
|
|
|
</NavLink>
|
2018-10-15 10:49:07 +00:00
|
|
|
</li>
|
2018-08-30 14:25:33 +00:00
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</Fragment>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Menu.propTypes = {
|
|
|
|
isMenuOpen: PropTypes.bool,
|
|
|
|
closeMenu: PropTypes.func,
|
|
|
|
toggleMenuOpen: PropTypes.func,
|
2019-06-03 12:41:45 +00:00
|
|
|
location: PropTypes.object,
|
|
|
|
t: PropTypes.func,
|
2018-08-30 14:25:33 +00:00
|
|
|
};
|
|
|
|
|
2018-10-29 03:26:19 +00:00
|
|
|
export default withNamespaces()(enhanceWithClickOutside(Menu));
|