diff --git a/client/less/lib/bootstrap/variables.less b/client/less/lib/bootstrap/variables.less index 019b8e7a58..15fcda30c3 100755 --- a/client/less/lib/bootstrap/variables.less +++ b/client/less/lib/bootstrap/variables.less @@ -328,7 +328,7 @@ @grid-gutter-width: 30px; // Navbar collapse //** Point at which the navbar becomes uncollapsed. -@grid-float-breakpoint: @screen-sm-min; +@grid-float-breakpoint: 955px; //** Point at which the navbar begins collapsing. @grid-float-breakpoint-max: (@grid-float-breakpoint - 1); diff --git a/common/app/Nav/LargeNav.jsx b/common/app/Nav/LargeNav.jsx new file mode 100644 index 0000000000..e9d4052a6c --- /dev/null +++ b/common/app/Nav/LargeNav.jsx @@ -0,0 +1,47 @@ +import React from 'react'; +import Media from 'react-media'; +import { Col, Navbar, Row } from 'react-bootstrap'; +import FCCSearchBar from 'react-freecodecamp-search'; +import { NavLogo, BinButtons, NavLinks } from './components'; + +import propTypes from './navPropTypes'; + +function LargeNav({ clickOnLogo, clickOnMap, shouldShowMapButton, panes }) { + return ( + ( + + + + + + + + + + + + + + + + + ) + } + /> + ); +} + +LargeNav.displayName = 'LargeNav'; +LargeNav.propTypes = propTypes; + +export default LargeNav; diff --git a/common/app/Nav/MediumNav.jsx b/common/app/Nav/MediumNav.jsx new file mode 100644 index 0000000000..498b7b367e --- /dev/null +++ b/common/app/Nav/MediumNav.jsx @@ -0,0 +1,52 @@ +import React from 'react'; +import Media from 'react-media'; +import { Col, Navbar, Row } from 'react-bootstrap'; +import FCCSearchBar from 'react-freecodecamp-search'; +import { NavLogo, BinButtons, NavLinks } from './components'; + +import propTypes from './navPropTypes'; + +function MediumNav({ clickOnLogo, clickOnMap, shouldShowMapButton, panes }) { + return ( + ( +
+ + +
+ + + +
+
+ +
+
+
+ + + + + + + +
+ ) + } + /> + ); +} + +MediumNav.displayName = 'MediumNav'; +MediumNav.propTypes = propTypes; + +export default MediumNav; diff --git a/common/app/Nav/Nav.jsx b/common/app/Nav/Nav.jsx index 2fb225beca..1e41d1b155 100644 --- a/common/app/Nav/Nav.jsx +++ b/common/app/Nav/Nav.jsx @@ -1,19 +1,18 @@ import React from 'react'; -import PropTypes from 'prop-types'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; -import FCCSearchBar from 'react-freecodecamp-search'; -import { - Navbar -} from 'react-bootstrap'; +import { Navbar } from 'react-bootstrap'; -import { BinButtons, NavLogo, NavLinks } from './components'; +import LargeNav from './LargeNav.jsx'; +import MediumNav from './MediumNav.jsx'; +import SmallNav from './SmallNav.jsx'; import { clickOnLogo, clickOnMap } from './redux'; import { panesSelector } from '../Panes/redux'; +import propTypes from './navPropTypes'; const mapStateToProps = createSelector( panesSelector, @@ -63,13 +62,6 @@ function mergeProps(stateProps, dispatchProps, ownProps) { }; } -const propTypes = { - clickOnLogo: PropTypes.func.isRequired, - clickOnMap: PropTypes.func.isRequired, - panes: PropTypes.array, - shouldShowMapButton: PropTypes.bool -}; - function FCCNav(props) { const { panes, @@ -83,23 +75,24 @@ function FCCNav(props) { id='navbar' staticTop={ true } > -
- - - - - - - - - -
+ + + ); } diff --git a/common/app/Nav/SmallNav.jsx b/common/app/Nav/SmallNav.jsx new file mode 100644 index 0000000000..16713ea238 --- /dev/null +++ b/common/app/Nav/SmallNav.jsx @@ -0,0 +1,53 @@ +import React from 'react'; +import Media from 'react-media'; +import { Col, Navbar, Row } from 'react-bootstrap'; +import FCCSearchBar from 'react-freecodecamp-search'; +import { NavLogo, BinButtons, NavLinks } from './components'; + +import propTypes from './navPropTypes'; + +function SmallNav({ clickOnLogo, clickOnMap, shouldShowMapButton, panes }) { + return ( + ( +
+ + +
+ + +
+
+ +
+
+
+ + + + + + + + + +
+ ) + } + /> + ); +} + +SmallNav.displayName = 'SmallNav'; +SmallNav.propTypes = propTypes; + +export default SmallNav; diff --git a/common/app/Nav/components/Bin-Button.jsx b/common/app/Nav/components/Bin-Button.jsx index 21360d4cdf..d0ec1f35f5 100644 --- a/common/app/Nav/components/Bin-Button.jsx +++ b/common/app/Nav/components/Bin-Button.jsx @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { NavItem } from 'react-bootstrap'; +import { Button } from 'react-bootstrap'; const propTypes = { content: PropTypes.string, @@ -9,11 +9,12 @@ const propTypes = { export default function BinButton({ content, handleClick }) { return ( - { content } - + ); } BinButton.displayName = 'BinButton'; diff --git a/common/app/Nav/components/BinButtons.jsx b/common/app/Nav/components/BinButtons.jsx index 67ae2072d6..f6d429f4e1 100644 --- a/common/app/Nav/components/BinButtons.jsx +++ b/common/app/Nav/components/BinButtons.jsx @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Nav } from 'react-bootstrap'; +import { ButtonGroup } from 'react-bootstrap'; import BinButton from './Bin-Button.jsx'; const propTypes = { @@ -14,19 +14,17 @@ const propTypes = { function BinButtons({ panes }) { return ( -
- -
+ + { + panes.map(({ content, actionCreator }) => ( + + )) + } + ); } diff --git a/common/app/Nav/components/NavLinks.jsx b/common/app/Nav/components/NavLinks.jsx index 2a8cec2024..02a33cdc9f 100644 --- a/common/app/Nav/components/NavLinks.jsx +++ b/common/app/Nav/components/NavLinks.jsx @@ -57,9 +57,11 @@ const navLinkPropType = PropTypes.shape({ }); const propTypes = { + children: PropTypes.any, clickOnMap: PropTypes.func.isRequired, closeDropdown: PropTypes.func.isRequired, isDropdownOpen: PropTypes.bool, + isInNav: PropTypes.bool, isSignedIn: PropTypes.bool, navLinks: PropTypes.arrayOf(navLinkPropType), openDropdown: PropTypes.func.isRequired, @@ -86,8 +88,6 @@ class NavLinks extends PureComponent { key={ content } noCaret={ true } onClick={ openDropdown } - onMouseEnter={ openDropdown } - onMouseLeave={ closeDropdown } onToggle={ isDropdownOpen ? closeDropdown : openDropdown } open={ isDropdownOpen } title={ content } @@ -129,10 +129,13 @@ class NavLinks extends PureComponent { clickOnMap, showLoading, isSignedIn, - navLinks + navLinks, + isInNav = true, + children } = this.props; return (