2017-09-18 14:12:01 +03:00
|
|
|
import { isNumber, isObject } from '../utils';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @ignore
|
|
|
|
* @param {Object} props
|
|
|
|
* @return {?Error} Return Error if validation fails
|
|
|
|
*/
|
|
|
|
export default function valuePropType(props, propName) {
|
|
|
|
const { maxValue, minValue } = props;
|
|
|
|
const value = props[propName];
|
|
|
|
|
2017-09-20 12:30:53 +03:00
|
|
|
if (
|
|
|
|
!isNumber(value) &&
|
|
|
|
(!isObject(value) || !isNumber(value.min) || !isNumber(value.max))
|
|
|
|
) {
|
2017-09-18 14:12:01 +03:00
|
|
|
return new Error(`"${propName}" must be a number or a range object`);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isNumber(value) && (value < minValue || value > maxValue)) {
|
2017-09-20 12:30:53 +03:00
|
|
|
return new Error(
|
|
|
|
`"${propName}" must be in between "minValue" and "maxValue"`
|
|
|
|
);
|
2017-09-18 14:12:01 +03:00
|
|
|
}
|
|
|
|
|
2017-09-20 12:30:53 +03:00
|
|
|
if (
|
|
|
|
isObject(value) &&
|
|
|
|
(value.min < minValue ||
|
|
|
|
value.min > maxValue ||
|
|
|
|
value.max < minValue ||
|
|
|
|
value.max > maxValue)
|
|
|
|
) {
|
|
|
|
return new Error(
|
|
|
|
`"${propName}" must be in between "minValue" and "maxValue"`
|
|
|
|
);
|
2017-09-18 14:12:01 +03:00
|
|
|
}
|
|
|
|
}
|