From 42de7c57efb518ff5fc23a0fbb26d7fb97a6694f Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Wed, 3 Aug 2016 12:56:00 -0700 Subject: [PATCH] Feature(nav): clicking on logo takes user to current challenge --- common/app/App.jsx | 15 ++++--- common/app/components/Nav/Nav.jsx | 32 ++++++++------ common/app/redux/actions.js | 1 + common/app/redux/index.js | 6 ++- .../app/redux/load-current-challenge-saga.js | 42 +++++++++++++++++++ common/app/redux/selectors.js | 24 +++++++++++ common/app/redux/types.js | 1 + common/models/user.json | 8 +++- common/utils/get-actions-of-type.js | 10 +++++ 9 files changed, 120 insertions(+), 19 deletions(-) create mode 100644 common/app/redux/load-current-challenge-saga.js create mode 100644 common/utils/get-actions-of-type.js diff --git a/common/app/App.jsx b/common/app/App.jsx index 28ec870e0c..de4fb7722d 100644 --- a/common/app/App.jsx +++ b/common/app/App.jsx @@ -11,7 +11,8 @@ import { toggleMapDrawer, toggleMainChat, updateAppLang, - trackEvent + trackEvent, + loadCurrentChallenge } from './redux/actions'; import { submitChallenge } from './routes/challenges/redux/actions'; @@ -28,7 +29,8 @@ const bindableActions = { toggleMapDrawer, toggleMainChat, updateAppLang, - trackEvent + trackEvent, + loadCurrentChallenge }; const mapStateToProps = createSelector( @@ -80,7 +82,8 @@ export class FreeCodeCamp extends React.Component { shouldShowSignIn: PropTypes.bool, params: PropTypes.object, updateAppLang: PropTypes.func.isRequired, - trackEvent: PropTypes.func.isRequired + trackEvent: PropTypes.func.isRequired, + loadCurrentChallenge: PropTypes.func.isRequired }; componentWillReceiveProps(nextProps) { @@ -124,7 +127,8 @@ export class FreeCodeCamp extends React.Component { toggleMainChat, shouldShowSignIn, params: { lang }, - trackEvent + trackEvent, + loadCurrentChallenge } = this.props; const navProps = { isOnMap: router.isActive(`/${lang}/map`), @@ -135,7 +139,8 @@ export class FreeCodeCamp extends React.Component { toggleMapDrawer, toggleMainChat, shouldShowSignIn, - trackEvent + trackEvent, + loadCurrentChallenge }; return ( diff --git a/common/app/components/Nav/Nav.jsx b/common/app/components/Nav/Nav.jsx index a3c60b4894..fd8b6f9412 100644 --- a/common/app/components/Nav/Nav.jsx +++ b/common/app/components/Nav/Nav.jsx @@ -15,16 +15,6 @@ import AvatarNavItem from './Avatar-Nav-Item.jsx'; const fCClogo = 'https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg'; -const logoElement = ( - - learn to code javascript at Free Code Camp logo - -); - const toggleButtonChild = ( Menu @@ -43,6 +33,7 @@ export default class extends React.Component { constructor(...props) { super(...props); this.handleMapClickOnMap = this.handleMapClickOnMap.bind(this); + this.handleLogoClick = this.handleLogoClick.bind(this); navLinks.forEach(({ content }) => { this[`handle${content}Click`] = handleNavLinkEvent.bind(this, content); }); @@ -58,7 +49,8 @@ export default class extends React.Component { toggleMapDrawer: PropTypes.func, toggleMainChat: PropTypes.func, shouldShowSignIn: PropTypes.bool, - trackEvent: PropTypes.func.isRequired + trackEvent: PropTypes.func.isRequired, + loadCurrentChallenge: PropTypes.func.isRequired }; componentDidMount() { @@ -83,6 +75,11 @@ export default class extends React.Component { }); } + handleLogoClick(e) { + e.preventDefault(); + this.props.loadCurrentChallenge(); + } + renderMapLink(isOnMap, toggleMapDrawer) { if (isOnMap) { return ( @@ -218,7 +215,18 @@ export default class extends React.Component { className='nav-height' fixedTop={ true } > - { logoElement } + + + learn to code javascript at Free Code Camp logo + +