2018-09-13 14:05:36 -07:00
|
|
|
import React from 'react';
|
2018-11-02 09:24:28 -07:00
|
|
|
import classnames from 'classnames';
|
2018-09-22 22:09:12 -07:00
|
|
|
import { convert, MARKDOWN_TYPE } from 'utils/markdown';
|
|
|
|
import './Markdown.less';
|
2018-09-13 14:05:36 -07:00
|
|
|
|
2018-10-19 15:03:37 -07:00
|
|
|
interface Props extends React.HTMLAttributes<HTMLDivElement> {
|
2018-09-13 14:05:36 -07:00
|
|
|
source: string;
|
2018-09-18 15:15:01 -07:00
|
|
|
type?: MARKDOWN_TYPE;
|
2018-09-13 14:05:36 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
export default class Markdown extends React.PureComponent<Props> {
|
|
|
|
render() {
|
2018-09-18 15:15:01 -07:00
|
|
|
const { source, type, ...rest } = this.props;
|
|
|
|
const html = convert(source, type);
|
2018-10-19 15:03:37 -07:00
|
|
|
// TS types seem to be fighting over react prop defs for div
|
|
|
|
const divProps = rest as any;
|
2018-09-22 22:09:12 -07:00
|
|
|
return (
|
2018-10-19 15:03:37 -07:00
|
|
|
<div
|
|
|
|
{...divProps}
|
2018-11-02 09:24:28 -07:00
|
|
|
className={classnames('Markdown', divProps.className)}
|
2018-10-19 15:03:37 -07:00
|
|
|
dangerouslySetInnerHTML={{ __html: html }}
|
|
|
|
/>
|
2018-09-22 22:09:12 -07:00
|
|
|
);
|
2018-09-13 14:05:36 -07:00
|
|
|
}
|
|
|
|
}
|