diff --git a/client/gatsby-browser.js b/client/gatsby-browser.js index 679eb4833a..b66417a193 100644 --- a/client/gatsby-browser.js +++ b/client/gatsby-browser.js @@ -41,7 +41,7 @@ export const wrapPageElement = ({ element, props }) => { } if (/^\/guide(\/.*)*/.test(pathname)) { return ( - + {element} ); diff --git a/client/src/components/Header/components/login.css b/client/src/components/Header/components/login.css index 8023eac825..2ec93283e2 100644 --- a/client/src/components/Header/components/login.css +++ b/client/src/components/Header/components/login.css @@ -1,5 +1,4 @@ -.signup-btn.btn, -#top-right-nav .signup-btn.btn { +.signup-btn { background-color: #ffac33; background-image: linear-gradient(#ffcc4d, #ffac33); -ms-filter: 'progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffcc4d, endColorstr=#ffac33, GradientType=0)'; @@ -10,18 +9,14 @@ } .signup-btn:hover, .signup-btn:focus, -.signup-btn:active:hover, -#top-right-nav .signup-btn:hover, -#top-right-nav .signup-btn:focus, -#top-right-nav .signup-btn:active:hover { +.signup-btn:active:hover { background-color: #e99110; background-image: linear-gradient(#ffcc4d, #e99110); -ms-filter: 'progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffcc4d, endColorstr=#e99110, GradientType=0)'; border-color: #ec8b11; color: #292f33 !important; } -.signup-btn:active, -#top-right-nav .signup-btn:active { +.signup-btn:active { background-color: #f2a330; background-image: none; box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3); diff --git a/client/src/components/Header/header.css b/client/src/components/Header/header.css index a65d1f2048..598d94e010 100644 --- a/client/src/components/Header/header.css +++ b/client/src/components/Header/header.css @@ -41,41 +41,22 @@ header { background-color: #006400; } -#top-right-nav a, -#top-right-nav img { - max-height: var(--header-height); -} - -#top-right-nav > li > a { - padding: 8px 15px; -} - #top-right-nav li { margin: 0; } -#top-right-nav a { +.top-right-nav-link { + max-height: var(--header-height); color: #fff; font-size: 18px; + padding: 8px 15px; } -#top-right-nav a:hover, -#top-right-nav a:focus { +.top-right-nav-link:hover, +.top-right-nav-link:focus, +.top-right-nav-link:active { background-color: #fff; color: #006400; -} - -#top-right-nav li.user-state-link, -#top-right-nav li.user-state-link:hover, -#top-right-nav li.user-state-link:focus, -#top-right-nav li.user-state-link > a, -#top-right-nav li.user-state-link > a:hover, -#top-right-nav li.user-state-link > a:focus { - background-color: #006400; -} - -#top-right-nav a:hover, -#top-right-nav a:focus { text-decoration: none; } @@ -175,8 +156,21 @@ header { } #top-nav .menu-button { - display: none; color: white; + background-color: transparent; + margin: 0 20px 0 12px; + padding: 2px 14px; + border: 1px solid #fff; + border-radius: 3px; +} + +#top-nav .menu-button-open { + background: white; + color: #006400; +} + +#top-right-nav .signup-btn { + margin: 0 15px; } @media (max-width: 734px) { @@ -184,28 +178,9 @@ header { padding: 0; } - #top-nav .menu-button { - display: block; - margin: 0 20px 0 12px; - padding: 2px 14px; - border: 1px solid #fff; - border-radius: 3px; - cursor: pointer; - color: #fff; - } - - .opened #top-right-nav { - top: var(--header-height); - } - - .opened #top-nav .menu-button { - background: white; - color: #006400; - } - #top-right-nav { position: absolute; - top: -300px; + top: var(--header-height); flex-direction: column; width: 100vw; height: min-content; @@ -233,41 +208,3 @@ header { top: 2.4em; } } - -@media (min-width: 735px) and (max-width: 991px) { - .onGuide #top-nav { - padding: 0; - } - - .onGuide #top-nav .menu-button { - display: block; - margin: 0 20px 0 12px; - padding: 2px 14px; - border: 1px solid #fff; - border-radius: 3px; - cursor: pointer; - } - - .onGuide #top-right-nav { - top: var(--header-height); - } - - .opened #top-nav .menu-button { - background: white; - color: #006400; - } - - .onGuide #top-right-nav { - position: absolute; - top: -300px; - flex-direction: column; - width: 100vw; - height: min-content; - min-height: 160px; - padding: 10px 0; - } - - .onGuide #top-nav img { - margin: 0 0 0 10px; - } -} diff --git a/client/src/components/Header/index.js b/client/src/components/Header/index.js index d1d07cc02c..1caf207ed1 100644 --- a/client/src/components/Header/index.js +++ b/client/src/components/Header/index.js @@ -13,7 +13,6 @@ import { Link } from '../helpers'; import './header.css'; import { - toggleDisplaySideNav, toggleDisplayMenu, displayMenuSelector } from '../layouts/components/guide/redux'; @@ -26,14 +25,14 @@ const mapStateToProps = createSelector( ); const mapDispatchToProps = dispatch => - bindActionCreators({ toggleDisplaySideNav, toggleDisplayMenu }, dispatch); + bindActionCreators({ toggleDisplayMenu }, dispatch); const propTypes = { + disableMenuButtonBehavior: PropTypes.bool, disableSettings: PropTypes.bool, displayMenu: PropTypes.bool, - onGuide: PropTypes.bool, - toggleDisplayMenu: PropTypes.func, - toggleDisplaySideNav: PropTypes.func + mediaBreakpoint: PropTypes.string.isRequired, + toggleDisplayMenu: PropTypes.func.isRequired }; class Header extends Component { @@ -50,97 +49,85 @@ class Header extends Component { document.removeEventListener('click', this.handleClickOutside); } - toggleDisplayMenuLogic = () => { - if (this.props.onGuide) { - this.props.toggleDisplaySideNav(); - } else { - this.props.toggleDisplayMenu(); - } - }; - handleClickOutside = event => { if ( + !this.props.disableMenuButtonBehavior && this.props.displayMenu && - !this.menuButtonRef.current.contains(event.target) && - !this.props.onGuide + this.menuButtonRef.current && + !this.menuButtonRef.current.contains(event.target) ) { - this.toggleDisplayMenuLogic(); + this.props.toggleDisplayMenu(); } }; handleMediaChange = matches => { if (!matches && this.props.displayMenu) { - this.toggleDisplayMenuLogic(); + this.props.toggleDisplayMenu(); } }; - renderClassNames = (displayMenu, onGuide) => { - if (displayMenu && onGuide) { - return 'opened onGuide'; - } else if (displayMenu) { - return 'opened'; - } else if (onGuide) { - return 'onGuide'; - } - return ''; - }; - render() { const { + disableMenuButtonBehavior, disableSettings, - onGuide, displayMenu, + mediaBreakpoint, toggleDisplayMenu } = this.props; return ( -
+
); @@ -148,6 +135,9 @@ class Header extends Component { } Header.propTypes = propTypes; +Header.defaultProps = { + mediaBreakpoint: '734px' +}; export default connect( mapStateToProps, diff --git a/client/src/components/layouts/Default.js b/client/src/components/layouts/Default.js index 534fd5a740..a1127b3506 100644 --- a/client/src/components/layouts/Default.js +++ b/client/src/components/layouts/Default.js @@ -56,6 +56,7 @@ const metaKeywords = [ const propTypes = { children: PropTypes.node.isRequired, + disableMenuButtonBehavior: PropTypes.bool, disableSettings: PropTypes.bool, fetchUser: PropTypes.func.isRequired, flashMessages: PropTypes.arrayOf( @@ -69,7 +70,7 @@ const propTypes = { isOnline: PropTypes.bool.isRequired, isSignedIn: PropTypes.bool, landingPage: PropTypes.bool, - onGuide: PropTypes.bool, + mediaBreakpoint: PropTypes.string, onlineStatusChange: PropTypes.func.isRequired, removeFlashMessage: PropTypes.func.isRequired, showFooter: PropTypes.bool @@ -141,7 +142,8 @@ class DefaultLayout extends Component { removeFlashMessage, landingPage, showFooter = true, - onGuide = false, + mediaBreakpoint, + disableMenuButtonBehavior, isOnline, isSignedIn } = this.props; @@ -160,7 +162,11 @@ class DefaultLayout extends Component { > -
+
{hasMessages ? ( diff --git a/client/src/components/layouts/Guide.js b/client/src/components/layouts/Guide.js index 2e252253e8..4f46fad37a 100644 --- a/client/src/components/layouts/Guide.js +++ b/client/src/components/layouts/Guide.js @@ -14,8 +14,7 @@ import './guide.css'; import { toggleExpandedState, - toggleDisplaySideNav, - displaySideNavSelector, + toggleDisplayMenu, displayMenuSelector, expandedStateSelector } from './components/guide/redux'; @@ -37,48 +36,37 @@ const propTypes = { }) }), displayMenu: PropTypes.bool, - displaySideNav: PropTypes.bool, expandedState: PropTypes.object, location: PropTypes.object, - toggleDisplaySideNav: PropTypes.func, + toggleDisplayMenu: PropTypes.func, toggleExpandedState: PropTypes.func }; const mapStateToProps = createSelector( - displaySideNavSelector, displayMenuSelector, expandedStateSelector, - (displaySideNav, displayMenu, expandedState) => ({ - displaySideNav, + (displayMenu, expandedState) => ({ displayMenu, expandedState }) ); const mapDispatchToProps = dispatch => - bindActionCreators({ toggleExpandedState, toggleDisplaySideNav }, dispatch); + bindActionCreators({ toggleExpandedState, toggleDisplayMenu }, dispatch); class GuideLayout extends React.Component { getContentRef = ref => (this.contentRef = ref); - handleNavigation = () => { - this.contentRef.scrollTop = 0; - this.contentRef.focus(); + handleNavigation = () => {}; + + hideSideNav = () => { + if (this.props.displayMenu) { + this.props.toggleDisplayMenu(); + } }; - componentWillUnmount() { - if (this.props.displayMenu) { - this.props.toggleDisplaySideNav(); - } - } - render() { - let { - displaySideNav, - expandedState, - toggleExpandedState, - toggleDisplaySideNav - } = this.props; + const { expandedState, toggleExpandedState, displayMenu } = this.props; return ( - + - +
state[ns].displaySideNav; export const displayMenuSelector = state => state[ns].displayMenu; export const expandedStateSelector = state => state[ns].expandedState; @@ -35,11 +29,6 @@ export const reducer = handleActions( [payload]: !state.expandedState[payload] } }), - [types.toggleDisplaySideNav]: state => ({ - ...state, - displayMenu: !state.displayMenu, - displaySideNav: !state.displaySideNav - }), [types.toggleDisplayMenu]: state => ({ ...state, displayMenu: !state.displayMenu