mergeProps.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. exports.__esModule = true;
  4. exports.defaultMergeProps = defaultMergeProps;
  5. exports.wrapMergePropsFunc = wrapMergePropsFunc;
  6. exports.mergePropsFactory = mergePropsFactory;
  7. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  8. var _verifyPlainObject = _interopRequireDefault(require("../utils/verifyPlainObject"));
  9. var _invalidArgFactory = require("./invalidArgFactory");
  10. function defaultMergeProps(stateProps, dispatchProps, ownProps) {
  11. // @ts-ignore
  12. return (0, _extends2.default)({}, ownProps, stateProps, dispatchProps);
  13. }
  14. function wrapMergePropsFunc(mergeProps) {
  15. return function initMergePropsProxy(dispatch, {
  16. displayName,
  17. areMergedPropsEqual
  18. }) {
  19. let hasRunOnce = false;
  20. let mergedProps;
  21. return function mergePropsProxy(stateProps, dispatchProps, ownProps) {
  22. const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);
  23. if (hasRunOnce) {
  24. if (!areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;
  25. } else {
  26. hasRunOnce = true;
  27. mergedProps = nextMergedProps;
  28. if (process.env.NODE_ENV !== 'production') (0, _verifyPlainObject.default)(mergedProps, displayName, 'mergeProps');
  29. }
  30. return mergedProps;
  31. };
  32. };
  33. }
  34. function mergePropsFactory(mergeProps) {
  35. return !mergeProps ? () => defaultMergeProps : typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : (0, _invalidArgFactory.createInvalidArgFactory)(mergeProps, 'mergeProps');
  36. }