@mui/utils
Version:
Utility functions for React components.
43 lines • 1.44 kB
JavaScript
/**
* Add keys, values of `defaultProps` that does not exist in `props`
* @param defaultProps
* @param props
* @returns resolved props
*/
export default function resolveProps(defaultProps, props) {
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]);
}
}
}
} else if (output[propName] === undefined) {
output[propName] = defaultProps[propName];
}
}
}
return output;
}