gatsby-remark-dictionary
Version:
Create a dictionary of word and phrases to be converted to highlighted values and links. define once and all phrases will be converted during build time.
56 lines (46 loc) • 1.52 kB
JavaScript
import React from 'react';
import OpenedSvg from '../images/opened';
import ClosedSvg from '../images/closed';
import config from '../../../config';
import Link from '../link';
const TreeNode = ({ className = '', setCollapsed, collapsed, url, title, items, ...rest }) => {
const isCollapsed = collapsed[url];
const collapse = () => {
setCollapsed(url);
};
const hasChildren = items.length !== 0;
let location;
if (typeof document != 'undefined') {
location = document.location;
}
const active =
location && (location.pathname === url || location.pathname === config.gatsby.pathPrefix + url);
const calculatedClassName = `${className} item ${active ? 'active' : ''}`;
return (
<li className={calculatedClassName}>
{title && (
<Link to={url}>
{title}
{!config.sidebar.frontLine && title && hasChildren ? (
<button onClick={collapse} aria-label="collapse" className="collapser">
{!isCollapsed ? <OpenedSvg /> : <ClosedSvg />}
</button>
) : null}
</Link>
)}
{!isCollapsed && hasChildren ? (
<ul>
{items.map((item, index) => (
<TreeNode
key={item.url + index.toString()}
setCollapsed={setCollapsed}
collapsed={collapsed}
{...item}
/>
))}
</ul>
) : null}
</li>
);
};
export default TreeNode;