All files createMathComponent.js

95.24% Statements 20/21
90% Branches 9/10
100% Functions 7/7
95.24% Lines 20/21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74        1x     24x   24x   24x       8x       8x       32x 32x   20x   12x 12x               32x   32x               32x 32x   32x 12x             20x       2x             2x        
import React from 'react';
import PropTypes from 'prop-types';
import KaTeX from 'katex';
 
const createMathComponent = (Component, { displayMode }) => {
  class MathComponent extends React.Component {
    constructor(props) {
      super(props);
 
      this.usedProp = props.math ? 'math' : 'children';
 
      this.state = this.createNewState(null, props);
    }
 
    componentWillReceiveProps() {
      this.setState(this.createNewState);
    }
 
    shouldComponentUpdate(nextProps) {
      return nextProps[this.usedProp] !== this.props[this.usedProp];
    }
 
    createNewState(prevState, props) {
      try {
        const html = this.generateHtml(props);
 
        return { html, error: undefined };
      } catch (error) {
        Eif (error instanceof KaTeX.ParseError || error instanceof TypeError) {
          return { error };
        }
 
        throw error;
      }
    }
 
    generateHtml(props) {
      const { errorColor, renderError } = props;
 
      return KaTeX.renderToString(props[this.usedProp], {
        displayMode,
        errorColor,
        throwOnError: !!renderError
      });
    }
 
    render() {
      const { error, html } = this.state;
      const { renderError } = this.props;
 
      if (error) {
        return renderError ? (
          renderError(error)
        ) : (
          <Component html={`${error.message}`} />
        );
      }
 
      return <Component html={html} />;
    }
  }
 
  MathComponent.propTypes = {
    children: PropTypes.string,
    errorColor: PropTypes.string,
    math: PropTypes.string,
    renderError: PropTypes.func
  };
 
  return MathComponent;
};
 
export default createMathComponent;