Skip to content

Instantly share code, notes, and snippets.

@iamdustan
Last active August 29, 2015 14:16
Show Gist options
  • Save iamdustan/12f69c9cf3aeb6a64a70 to your computer and use it in GitHub Desktop.
Save iamdustan/12f69c9cf3aeb6a64a70 to your computer and use it in GitHub Desktop.
react-router-autonav.js
/** @flow */
require('./styles.css');
var React = require('react');
var {Link} = require('react-router');
var ignoreSplatRoutes = a => !/\*$/.test(a.path);
var ignoreDefaultRoutes = (a, b) => a !== b.defaultRoute;
var Toc = React.createClass({
getDefaultProps(): Object {
return {
width: 200,
};
},
render(): ?ReactElement {
var routes = this.props.routes.childRoutes;
return (
<nav className="Toc" role="navigation" style={{width: this.props.width +'px'}}>
<header className="Toc-header">Table of Contents</header>
<ul role="tablist" className="Toc-list">
{routes.map(i => (
ignoreSplatRoutes(i) &&
<li className="Toc-item" key={i.path || i.defaultRoute.name}>
<Link
className="Toc-link"
to={i.path || i.defaultRoute.name}
activeClassName="is-active"
>{i.name || i.defaultRoute.name || i.path}</Link>
{i.childRoutes && i.childRoutes.map(c => (
ignoreSplatRoutes(c) && ignoreDefaultRoutes(c, i) &&
<Link
className="Toc-link Toc-link--child"
key={c.name || c.path}
to={c.path}
activeClassName="is-active"
>{c.name || c.path}</Link>
))}
</li>
))}
</ul>
</nav>
);
}
});
module.exports = Toc;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment