You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

84 lines
2.6 KiB

  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. exports.__esModule = true;
  4. exports.default = void 0;
  5. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  6. var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
  7. var _react = require("react");
  8. var _reactLifecyclesCompat = require("react-lifecycles-compat");
  9. var _pick = _interopRequireDefault(require("./utils/pick"));
  10. var _shallowEqual = _interopRequireDefault(require("./shallowEqual"));
  11. var _setDisplayName = _interopRequireDefault(require("./setDisplayName"));
  12. var _wrapDisplayName = _interopRequireDefault(require("./wrapDisplayName"));
  13. var withPropsOnChange = function withPropsOnChange(shouldMapOrKeys, propsMapper) {
  14. return function (BaseComponent) {
  15. var factory = (0, _react.createFactory)(BaseComponent);
  16. var shouldMap = typeof shouldMapOrKeys === 'function' ? shouldMapOrKeys : function (props, nextProps) {
  17. return !(0, _shallowEqual.default)((0, _pick.default)(props, shouldMapOrKeys), (0, _pick.default)(nextProps, shouldMapOrKeys));
  18. };
  19. var WithPropsOnChange =
  20. /*#__PURE__*/
  21. function (_Component) {
  22. (0, _inheritsLoose2.default)(WithPropsOnChange, _Component);
  23. function WithPropsOnChange() {
  24. var _this;
  25. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  26. args[_key] = arguments[_key];
  27. }
  28. _this = _Component.call.apply(_Component, [this].concat(args)) || this;
  29. _this.state = {
  30. computedProps: propsMapper(_this.props),
  31. prevProps: _this.props
  32. };
  33. return _this;
  34. }
  35. WithPropsOnChange.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {
  36. if (shouldMap(prevState.prevProps, nextProps)) {
  37. return {
  38. computedProps: propsMapper(nextProps),
  39. prevProps: nextProps
  40. };
  41. }
  42. return {
  43. prevProps: nextProps
  44. };
  45. };
  46. var _proto = WithPropsOnChange.prototype;
  47. _proto.render = function render() {
  48. return factory((0, _extends2.default)({}, this.props, this.state.computedProps));
  49. };
  50. return WithPropsOnChange;
  51. }(_react.Component);
  52. (0, _reactLifecyclesCompat.polyfill)(WithPropsOnChange);
  53. if (process.env.NODE_ENV !== 'production') {
  54. return (0, _setDisplayName.default)((0, _wrapDisplayName.default)(BaseComponent, 'withPropsOnChange'))(WithPropsOnChange);
  55. }
  56. return WithPropsOnChange;
  57. };
  58. };
  59. var _default = withPropsOnChange;
  60. exports.default = _default;