Blame view

天文台pc/tianwentai-ui/node_modules/@mui/utils/resolveProps/resolveProps.js 2.32 KB
bc518174   王天杨   提交两个项目文件
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
  "use strict";
  
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  Object.defineProperty(exports, "__esModule", {
    value: true
  });
  exports.default = resolveProps;
  var _clsx = _interopRequireDefault(require("clsx"));
  /**
   * Add keys, values of `defaultProps` that does not exist in `props`
   * @param defaultProps
   * @param props
   * @param mergeClassNameAndStyle If `true`, merges `className` and `style` props instead of overriding them.
   *   When `false` (default), props override defaultProps. When `true`, `className` values are concatenated
   *   and `style` objects are merged with props taking precedence.
   * @returns resolved props
   */
  function resolveProps(defaultProps, props, mergeClassNameAndStyle = false) {
    const output = {
      ...props
    };
    for (const key in defaultProps) {
      if (Object.prototype.hasOwnProperty.call(defaultProps, key)) {
        const propName = key;
        if (propName === 'components' || propName === 'slots') {
          output[propName] = {
            ...defaultProps[propName],
            ...output[propName]
          };
        } else if (propName === 'componentsProps' || propName === 'slotProps') {
          const defaultSlotProps = defaultProps[propName];
          const slotProps = props[propName];
          if (!slotProps) {
            output[propName] = defaultSlotProps || {};
          } else if (!defaultSlotProps) {
            output[propName] = slotProps;
          } else {
            output[propName] = {
              ...slotProps
            };
            for (const slotKey in defaultSlotProps) {
              if (Object.prototype.hasOwnProperty.call(defaultSlotProps, slotKey)) {
                const slotPropName = slotKey;
                output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName], mergeClassNameAndStyle);
              }
            }
          }
        } else if (propName === 'className' && mergeClassNameAndStyle && props.className) {
          output.className = (0, _clsx.default)(defaultProps?.className, props?.className);
        } else if (propName === 'style' && mergeClassNameAndStyle && props.style) {
          output.style = {
            ...defaultProps?.style,
            ...props?.style
          };
        } else if (output[propName] === undefined) {
          output[propName] = defaultProps[propName];
        }
      }
    }
    return output;
  }