mirror of
https://github.com/visgl/react-map-gl.git
synced 2026-02-01 16:46:24 +00:00
54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
import React, {Component} from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import TOC from './constants/toc';
|
|
|
|
export default class TableOfContents extends Component {
|
|
|
|
_renderPage(page, i) {
|
|
const {activeId, onChange} = this.props;
|
|
const {children, name, path, component} = page;
|
|
|
|
if (children) {
|
|
return (
|
|
<div key={`page-${i}`}>
|
|
<div className="list-header expanded" key={`group-header${i}`}>
|
|
{name}
|
|
</div>
|
|
<div className="subpages" style={{maxHeight: `${40 * children.length}px`}}>
|
|
<ul key={`group-list${i}`} >
|
|
{children.map(this._renderPage.bind(this))}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
const activeClass = activeId === path ? 'active' : '';
|
|
|
|
return (
|
|
<li key={`page-${i}`}>
|
|
<a
|
|
onClick={onChange.bind(null, path, component)}
|
|
className={`link ${activeClass}`}>
|
|
{name}
|
|
</a>
|
|
</li>
|
|
);
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<div className="toc" style={{zIndex: 1}}>
|
|
<div>
|
|
{TOC.map(this._renderPage.bind(this))}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
TableOfContents.propTypes = {
|
|
activeId: PropTypes.string,
|
|
onChange: PropTypes.func
|
|
};
|