@douyinfe/semi-ui
Version:
A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.
53 lines • 2.04 kB
JavaScript
import * as React from 'react';
import BaseComponent from '../_base/baseComponent';
import MarkdownRenderFoundation from '@douyinfe/semi-foundation/lib/es/markdownRender/foundation';
import '@douyinfe/semi-foundation/lib/es/markdownRender/markdownRender.css';
import * as runtime from 'react/jsx-runtime';
import { cssClasses } from '@douyinfe/semi-foundation/lib/es/markdownRender/constants';
import * as SemiMarkdownComponents from "./components";
import cls from "classnames";
import PropTypes from 'prop-types';
import { getDefaultPropsFromGlobalConfig } from '../_utils';
class MarkdownRender extends BaseComponent {
constructor(props) {
super(props);
this.foundation = new MarkdownRenderFoundation(this.adapter);
this.state = {
MDXContentComponent: this.foundation.evaluateSync(this.props.raw)
};
}
componentDidUpdate(prevProps, prevState, snapshot) {
if (prevProps.raw !== this.props.raw) {
this.setState({
MDXContentComponent: this.foundation.evaluateSync(this.props.raw)
});
}
}
get adapter() {
return Object.assign(Object.assign({}, super.adapter), {
getRuntime: () => runtime
});
}
render() {
const ComponentConstructor = this.state.MDXContentComponent;
return /*#__PURE__*/React.createElement("div", Object.assign({
className: cls(cssClasses.PREFIX, this.props.className),
style: this.props.style
}, this.getDataAttr()), /*#__PURE__*/React.createElement(ComponentConstructor, {
components: Object.assign(Object.assign({}, SemiMarkdownComponents), this.props.components)
}));
}
}
MarkdownRender.propTypes = {
className: PropTypes.string,
style: PropTypes.object,
format: PropTypes.string,
components: PropTypes.any,
raw: PropTypes.string
};
MarkdownRender.__SemiComponentName__ = "MarkdownRender";
MarkdownRender.defaultProps = getDefaultPropsFromGlobalConfig(MarkdownRender.__SemiComponentName__, {
format: "mdx"
});
MarkdownRender.defaultComponents = SemiMarkdownComponents;
export default MarkdownRender;