All files Memoizer.js

100% Statements 12/12
100% Branches 4/4
100% Functions 4/4
100% Lines 12/12
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              1x                         15x 15x 15x 10x       5x               10x       13x       2x 2x     1x 1x        
import { Component } from 'react';
import PropTypes from 'prop-types';
import polyfill from 'react-lifecycles-compat';
 
import memoizeState from 'memoize-state';
import memoizeOne from 'memoize-one';
 
const createMemoizer = (memoizationFunction) => {
  class Memoize extends Component {
    static propTypes = {
      children: PropTypes.func.isRequired,
      compute: PropTypes.func.isRequired,
      pure: PropTypes.bool,
    };
 
    static defaultProps = {
      pure: false,
    };
 
    static getDerivedStateFromProps(props, state) {
      const { children, compute, pure, ...rest } = props;
      const result = state.calculateResult(rest);
      if (result !== state.result) {
        return {
          result,
        };
      }
      return null;
    }
 
    state = {
      calculateResult: memoizationFunction(this.props.compute),
    };
 
    shouldComponentUpdate(nextProps, nextState) {
      return !nextProps.pure || nextState.result !== this.state.result;
    }
 
    render() {
      return this.props.children(this.state.result);
    }
  }
 
  polyfill(Memoize);
  return Memoize;
};
 
export const MemoizeOne = createMemoizer(memoizeOne);
export const MemoizeState = createMemoizer(memoizeState);
 
/* eslint-disable */
export default MemoizeState;