31 lines
1.3 KiB
JavaScript
31 lines
1.3 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = requirePropFactory;
|
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
function requirePropFactory(componentNameInError, Component) {
|
|
if (process.env.NODE_ENV === 'production') {
|
|
return () => null;
|
|
}
|
|
|
|
// eslint-disable-next-line react/forbid-foreign-prop-types
|
|
const prevPropTypes = Component ? (0, _extends2.default)({}, Component.propTypes) : null;
|
|
const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {
|
|
const propFullNameSafe = propFullName || propName;
|
|
const defaultTypeChecker = prevPropTypes == null ? void 0 : prevPropTypes[propFullNameSafe];
|
|
if (defaultTypeChecker) {
|
|
const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);
|
|
if (typeCheckerResult) {
|
|
return typeCheckerResult;
|
|
}
|
|
}
|
|
if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {
|
|
return new Error(`The prop \`${propFullNameSafe}\` of ` + `\`${componentNameInError}\` can only be used together with the \`${requiredProp}\` prop.`);
|
|
}
|
|
return null;
|
|
};
|
|
return requireProp;
|
|
} |