vcc-ui
Version:
A React library for building user interfaces at Volvo Cars
17 lines • 1.02 kB
JavaScript
import PropTypes from 'prop-types';
/**
We need to create our own version of this, as it's
not possible to combine out-of-the-box PropTypes
with custom function validators.
*/
export const oneOf = validTypes => (props, propName, componentName) => {
if (validTypes.indexOf(props[propName]) === -1) {
return new Error(`Invalid prop supplied to '${componentName}'. Must be one of ['${validTypes.join("', '")}'].`);
}
};
export const responsiveNumberOrStringProp = createResponsivePropType([PropTypes.number, PropTypes.string]);
export const responsiveNumberProp = createResponsivePropType(PropTypes.number);
export const responsiveStringProp = createResponsivePropType(PropTypes.string);
export function createResponsivePropType(propTypes) {
return Array.isArray(propTypes) ? PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType(propTypes)), PropTypes.objectOf(PropTypes.oneOfType(propTypes)), ...propTypes]) : PropTypes.oneOfType([PropTypes.arrayOf(propTypes), PropTypes.objectOf(propTypes), propTypes]);
}