@wix/design-system
Version:
@wix/design-system
82 lines (80 loc) • 2.76 kB
JavaScript
;
exports.__esModule = true;
exports.validateValue = exports.normalizeValues = exports.isInRange = exports.getClosestValue = exports.defaultValueToNullIfInvalidNumber = exports.defaultValueToNullIfEmpty = void 0;
var isEmptyValue = value => value === null || value === undefined || value === '';
var isInvalidNumber = value => isEmptyValue(value) || !/[0-9]$/.test(String(value));
var defaultValueToNullIfEmpty = (value, defaultValue) => {
if (!isEmptyValue(value)) {
return String(value);
}
return !isEmptyValue(defaultValue) ? Number(defaultValue) : '';
};
exports.defaultValueToNullIfEmpty = defaultValueToNullIfEmpty;
var defaultValueToNullIfInvalidNumber = value => isInvalidNumber(value) ? null : Number(value);
exports.defaultValueToNullIfInvalidNumber = defaultValueToNullIfInvalidNumber;
var normalizeStringValue = value => {
var valueWithDotDecimalSeparator = value.replace(',', '.');
if (isInvalidNumber(valueWithDotDecimalSeparator)) {
return valueWithDotDecimalSeparator;
}
// Preserve minus sign when typing '-00'.
return valueWithDotDecimalSeparator.startsWith('-') ? valueWithDotDecimalSeparator.replace(/^-0+(?!\.|,|$)/, '-') : valueWithDotDecimalSeparator.replace(/^0+(?!\.|,|$)/, '');
};
var normalizeValues = value => {
var stringValue = normalizeStringValue(String(value));
var numberValue = stringValue === '' ? null : Number(stringValue);
return {
numberValue,
stringValue
};
};
exports.normalizeValues = normalizeValues;
var isInRange = _ref => {
var {
value,
minValue,
maxValue
} = _ref;
return !(!Number.isNaN(minValue) && value < Number(minValue)) && !(!Number.isNaN(maxValue) && value > Number(maxValue));
};
exports.isInRange = isInRange;
var validateValue = _ref2 => {
var {
value,
minValue,
maxValue
} = _ref2;
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
};
};
exports.validateValue = validateValue;
var getClosestValue = (currentValue, options, direction) => {
var _sortedOptions$find;
var sortedOptions = [...options];
sortedOptions.sort((a, b) => direction === 'up' ? a - b : b - a);
return (_sortedOptions$find = sortedOptions.find(v => direction === 'up' ? v > currentValue : v < currentValue)) !== null && _sortedOptions$find !== void 0 ? _sortedOptions$find : sortedOptions[sortedOptions.length - 1];
};
exports.getClosestValue = getClosestValue;
//# sourceMappingURL=index.js.map