mergeProps.js 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import verifyPlainObject from '../utils/verifyPlainObject';
  3. import { createInvalidArgFactory } from './invalidArgFactory';
  4. export function defaultMergeProps(stateProps, dispatchProps, ownProps) {
  5. // @ts-ignore
  6. return _extends({}, ownProps, stateProps, dispatchProps);
  7. }
  8. export function wrapMergePropsFunc(mergeProps) {
  9. return function initMergePropsProxy(dispatch, {
  10. displayName,
  11. areMergedPropsEqual
  12. }) {
  13. let hasRunOnce = false;
  14. let mergedProps;
  15. return function mergePropsProxy(stateProps, dispatchProps, ownProps) {
  16. const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);
  17. if (hasRunOnce) {
  18. if (!areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;
  19. } else {
  20. hasRunOnce = true;
  21. mergedProps = nextMergedProps;
  22. if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');
  23. }
  24. return mergedProps;
  25. };
  26. };
  27. }
  28. export function mergePropsFactory(mergeProps) {
  29. return !mergeProps ? () => defaultMergeProps : typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, 'mergeProps');
  30. }