@readme/markdown
Version:
ReadMe's React-based Markdown parser
45 lines (37 loc) • 1.38 kB
JSX
const Tooltip = require('@tippyjs/react').default;
const PropTypes = require('prop-types');
const React = require('react');
const GlossaryContext = require('../../contexts/GlossaryTerms');
// https://github.com/readmeio/api-explorer/blob/0dedafcf71102feedaa4145040d3f57d79d95752/packages/api-explorer/src/lib/replace-vars.js#L8
function GlossaryItem({ term, terms }) {
const foundTerm = terms.find(i => term.toLowerCase() === i.term.toLowerCase());
if (!foundTerm) return <span>{term}</span>;
return (
<Tooltip
content={
<div className="GlossaryItem-tooltip-content">
<strong className="GlossaryItem-term">{foundTerm.term}</strong> - {foundTerm.definition}
</div>
}
offset={[-5, 5]}
placement="bottom-start"
>
<span className="GlossaryItem-trigger">{term}</span>
</Tooltip>
);
}
GlossaryItem.propTypes = {
term: PropTypes.string.isRequired,
terms: PropTypes.arrayOf(
PropTypes.shape({
definition: PropTypes.string.isRequired,
term: PropTypes.string.isRequired,
})
).isRequired,
};
// eslint-disable-next-line react/display-name
module.exports = props => (
<GlossaryContext.Consumer>{terms => terms && <GlossaryItem {...props} terms={terms} />}</GlossaryContext.Consumer>
);
module.exports.GlossaryItem = GlossaryItem;
module.exports.GlossaryContext = GlossaryContext;