wix-style-react
Version:
wix-style-react
38 lines • 1.62 kB
JavaScript
const isEmptyValue = (value) => value === null || value === undefined || value === '';
const isInvalidNumber = (value) => isEmptyValue(value) || !/[0-9]$/.test(String(value));
export const defaultValueToNullIfEmpty = (value, defaultValue) => {
if (!isEmptyValue(value)) {
return String(value);
}
return !isEmptyValue(defaultValue) ? Number(defaultValue) : '';
};
export const defaultValueToNullIfInvalidNumber = (value) => (isInvalidNumber(value) ? null : Number(value));
export const normalizeValue = (value) => {
const valueWithDotDecimalSeparator = value.replace(',', '.');
if (isInvalidNumber(valueWithDotDecimalSeparator)) {
return valueWithDotDecimalSeparator;
}
// Preserve minus sign when typing '-00'.
return valueWithDotDecimalSeparator.startsWith('-')
? valueWithDotDecimalSeparator.replace(/^-0+(?!\.|,|$)/, '-')
: valueWithDotDecimalSeparator.replace(/^0+(?!\.|,|$)/, '');
};
export const isInRange = ({ value, minValue, maxValue, }) => !(!Number.isNaN(minValue) && value < Number(minValue)) &&
!(!Number.isNaN(maxValue) && value > Number(maxValue));
export const validateValue = ({ value, minValue, maxValue, }) => {
if (isEmptyValue(value)) {
return { hasError: false };
}
if (isInvalidNumber(value)) {
return { hasError: true, validationType: 'formatError' };
}
if (!isInRange({
value: Number(value),
minValue,
maxValue,
})) {
return { hasError: true, validationType: 'outOfBoundsError' };
}
return { hasError: false };
};
//# sourceMappingURL=index.js.map