Convert SyntaxHighlight to TS

Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
Šimon Brandner 2021-09-15 21:09:23 +02:00
parent 8bf5d97b9e
commit 6f2ef34dd7
No known key found for this signature in database
GPG key ID: 55C211A1226CB17D

View file

@ -15,40 +15,40 @@ limitations under the License.
*/
import React from 'react';
import PropTypes from 'prop-types';
import { highlightBlock } from 'highlight.js';
import { replaceableComponent } from "../../../utils/replaceableComponent";
interface IProps {
className?: string;
children?: React.ReactNode;
}
@replaceableComponent("views.elements.SyntaxHighlight")
export default class SyntaxHighlight extends React.Component {
static propTypes = {
className: PropTypes.string,
children: PropTypes.node,
};
export default class SyntaxHighlight extends React.Component<IProps> {
private el: HTMLPreElement = null;
constructor(props) {
constructor(props: IProps) {
super(props);
this._ref = this._ref.bind(this);
}
// componentDidUpdate used here for reusability
componentDidUpdate() {
if (this._el) highlightBlock(this._el);
public componentDidUpdate(): void {
if (this.el) highlightBlock(this.el);
}
// call componentDidUpdate because _ref is fired on initial render
// which does not fire componentDidUpdate
_ref(el) {
this._el = el;
private ref = (el: HTMLPreElement): void => {
this.el = el;
this.componentDidUpdate();
}
};
render() {
public render(): JSX.Element {
const { className, children } = this.props;
return <pre className={`${className} mx_SyntaxHighlight`} ref={this._ref}>
return <pre className={`${className} mx_SyntaxHighlight`} ref={this.ref}>
<code>{ children }</code>
</pre>;
}
}