Merge pull request #43 from Bouncey/feat/introOnBlockClick

Feat: Navigate to intro page on block click
This commit is contained in:
Stuart Taylor
2018-05-16 15:10:17 +01:00
committed by Mrugesh Mohapatra
parent 27b65b94a7
commit 571209809c
16 changed files with 108 additions and 10 deletions

View File

@ -3,4 +3,6 @@ import React from 'react';
const mockComponent = name => props => const mockComponent = name => props =>
React.createElement(name, props, props.children); React.createElement(name, props, props.children);
export const navigateTo = () => {};
export default mockComponent('MockedLink'); export default mockComponent('MockedLink');

View File

@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import Link from 'gatsby-link'; import Link, { navigateTo } from 'gatsby-link';
import { makeExpandedBlockSelector, toggleBlock } from '../redux'; import { makeExpandedBlockSelector, toggleBlock } from '../redux';
import Caret from '../../icons/Caret'; import Caret from '../../icons/Caret';
@ -27,6 +27,23 @@ const propTypes = {
}; };
export class Block extends PureComponent { export class Block extends PureComponent {
constructor(...props) {
super(...props);
this.handleBlockClick = this.handleBlockClick.bind(this);
this.renderChallenges = this.renderChallenges.bind(this);
}
handleBlockClick() {
const { blockDashedName, challenges, toggleBlock } = this.props;
const blockPath = challenges[0].fields.slug
.split('/')
.slice(0, -1)
.join('/');
toggleBlock(blockDashedName);
return navigateTo(blockPath);
}
renderChallenges(challenges) { renderChallenges(challenges) {
// TODO: Split this into a Challenge Component and add tests // TODO: Split this into a Challenge Component and add tests
return challenges.map(challenge => ( return challenges.map(challenge => (
@ -37,11 +54,11 @@ export class Block extends PureComponent {
} }
render() { render() {
const { blockDashedName, challenges, isExpanded, toggleBlock } = this.props; const { challenges, isExpanded } = this.props;
const { blockName } = challenges[0].fields; const { blockName } = challenges[0].fields;
return ( return (
<li className={`block ${isExpanded ? 'open' : ''}`}> <li className={`block ${isExpanded ? 'open' : ''}`}>
<div className='map-title' onClick={() => toggleBlock(blockDashedName)}> <div className='map-title' onClick={this.handleBlockClick}>
<Caret /> <Caret />
<h5>{blockName}</h5> <h5>{blockName}</h5>
</div> </div>

View File

@ -0,0 +1,10 @@
---
title: Introduction to the Coding Interview Algorithms
block: Algorithms
superBlock: Coding Interview Prep
---
## Introduction to the Coding Interview Algorithms
This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -0,0 +1,10 @@
---
title: Introduction to the Coding Interview Data Structure Questions
block: Data Structures
superBlock: Coding Interview Prep
---
## Introduction to the Coding Interview Data Structure Questions
This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -0,0 +1,10 @@
---
title: Introduction to the Project Euler Problems
block: Project Euler
superBlock: Coding Interview Prep
---
## Introduction to the Project Euler Problems
This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -0,0 +1,10 @@
---
title: Introduction to the Rosetta Code Problems
block: Rosetta Code
superBlock: Coding Interview Prep
---
## Introduction to the Rosetta Code Problems
This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -0,0 +1,10 @@
---
title: Introduction to the Coding Interview Take Home Projects
block: Take Home Projects
superBlock: Coding Interview Prep
---
## Introduction to the Coding Interview Take Home Projects
This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -5,4 +5,6 @@ superBlock: Front End Libraries
--- ---
## Introduction to the React and Redux Challenges ## Introduction to the React and Redux Challenges
This is a stub introduction. This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -5,4 +5,6 @@ superBlock: Front End Libraries
--- ---
## Introduction to the React Challenges ## Introduction to the React Challenges
This is a stub introduction. This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -5,4 +5,6 @@ superBlock: Front End Libraries
--- ---
## Introduction to the Redux Challenges ## Introduction to the Redux Challenges
This is a stub introduction. This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -0,0 +1,10 @@
---
title: Introduction to Basic Algorithm Scripting
block: Basic Algorithm Scripting
superBlock: JavaScript Algorithms and Data Structures
---
## Introduction to Basic Algorithm Scripting
This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -5,4 +5,6 @@ superBlock: JavaScript Algorithms and Data Structures
--- ---
## Introduction to the Basic Data Structure Challenges ## Introduction to the Basic Data Structure Challenges
This is a stub introduction This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -0,0 +1,10 @@
---
title: Introduction to Basic HTML and HTML5
block: Basic HTML and HTML5
superBlock: Responsive Web Design
---
## Introduction to Basic HTML & HTML5
This introduction is a stub
Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions).

View File

@ -26,7 +26,9 @@ const mapDispatchToProps = dispatch =>
updateChallengeMeta, updateChallengeMeta,
createFiles, createFiles,
updateSuccessMessage updateSuccessMessage
}, dispatch); },
dispatch
);
const propTypes = { const propTypes = {
createFiles: PropTypes.func.isRequired, createFiles: PropTypes.func.isRequired,

View File

@ -74,7 +74,6 @@ function clearCodeEpic(action$, { getState }) {
function saveCodeEpic(action$, { getState }) { function saveCodeEpic(action$, { getState }) {
return action$.pipe( return action$.pipe(
tap(console.info),
ofType(types.executeChallenge), ofType(types.executeChallenge),
// do not save challenge if code is locked // do not save challenge if code is locked
filter(() => !isCodeLockedSelector(getState())), filter(() => !isCodeLockedSelector(getState())),

View File

@ -20,7 +20,7 @@ const propTypes = {
function renderMenuItems({ edges }) { function renderMenuItems({ edges }) {
return edges.map(({ node }) => node).map(({ title, fields: { slug } }) => ( return edges.map(({ node }) => node).map(({ title, fields: { slug } }) => (
<Link to={slug}> <Link key={'intro-' + slug} to={slug}>
<ListGroupItem>{title}</ListGroupItem> <ListGroupItem>{title}</ListGroupItem>
</Link> </Link>
)); ));