dtable-utils
Version:
dtable common utils
128 lines (121 loc) • 4.32 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var index = require('../helper/number-precision/index.js');
var number = require('../number.js');
var column = require('../constants/column.js');
/**
* @param {string} sNumber e.g. '1.23'
* @param {string} format e.g. 'percent'
* @returns float number from string. e.g. '1.23' = 1.23
*/
var getFloatNumber = function getFloatNumber(sNumber, format) {
if (!sNumber && sNumber !== 0) {
return null;
}
if (typeof sNumber === 'number') return sNumber;
if (typeof sNumber !== 'string') return null;
var parsedNum = parseFloat(sNumber.replace(/[^.-\d]/g, ''));
if (format === 'percent' && !isNaN(parsedNum)) {
return index.NPdivide(parsedNum, 100);
}
return isNaN(parsedNum) ? null : parsedNum;
};
/**
* parse string to number depend on formats
* @param {string} sNum e.g. '1.23'
* @param {object} formats { format, decimal, ... }
* @returns parsed number
*/
var formatStringToNumber = function formatStringToNumber(sNum, formats) {
var _ref = formats || {},
format = _ref.format,
decimal = _ref.decimal,
thousands = _ref.thousands,
enable_precision = _ref.enable_precision,
precision = _ref.precision;
var value = sNum;
if (decimal && thousands && decimal === 'comma') {
if (thousands === 'dot') {
value = value.replace(/,/, '@');
value = value.replace(/\./g, ',');
value = value.replace(/@/, '.');
} else {
value = value.replace(/\./g, '');
value = value.replace(/,/, '.');
}
}
value = getFloatNumber(value, format);
if (enable_precision && value) {
var fixedPrecision = format === 'percent' ? precision + 2 : precision;
value = parseFloat(number.round(value, fixedPrecision).toFixed(fixedPrecision));
}
return value;
};
/**
* parse duration to seconds depend on formats
* @param {string} duration
* @param {object} data { duration_format: '' }
* @returns number
*/
var formatDurationToNumber = function formatDurationToNumber(duration, data) {
if (duration === 0) return 0;
if (!duration) return null;
var _ref2 = data || {},
duration_format = _ref2.duration_format;
duration_format = duration_format || column.DURATION_FORMATS_MAP.H_MM;
if (column.DURATION_FORMATS.findIndex(function (format) {
return format.type === duration_format;
}) < 0) {
return null;
}
var numericDuration = duration - 0;
if (number.isNumber(numericDuration)) {
return duration_format === column.DURATION_FORMATS_MAP.H_MM ? numericDuration * 60 : numericDuration;
}
var stringifyDuration = String(duration);
var isNegative = stringifyDuration[0] === '-';
if (isNegative) {
stringifyDuration = stringifyDuration.substring(1);
}
var timeParts = stringifyDuration.split(/[::]/); // support ':' and ':'.
var timePartsLen = timeParts.length;
var hoursIndex;
var minutesIndex;
var secondsIndex;
if (duration_format === column.DURATION_FORMATS_MAP.H_MM) {
hoursIndex = timePartsLen - 2;
minutesIndex = timePartsLen - 1;
} else {
hoursIndex = timePartsLen - 3;
minutesIndex = timePartsLen - 2;
secondsIndex = timePartsLen - 1;
}
var hours = timeParts[hoursIndex] - 0;
var minutes = timeParts[minutesIndex] - 0;
var seconds = timeParts[secondsIndex] - 0;
if (!number.isNumber(hours) && !number.isNumber(minutes) && !number.isNumber(seconds)) return null;
hours = number.isNumber(hours) ? hours : 0;
minutes = number.isNumber(minutes) ? minutes : 0;
seconds = number.isNumber(seconds) ? seconds : 0;
var result = hours * 3600 + minutes * 60 + seconds;
return isNegative ? -result : result;
};
var formatTextToNumber = function formatTextToNumber(value) {
if (typeof value === 'number') {
return value;
}
if (!value || !value.trim()) {
return null;
}
var newValue = value.trim();
var isIncludePercent = String(newValue).indexOf('%') > -1;
var newData = parseFloat(newValue.replace(/[^.-\d]/g, ''));
if (isIncludePercent && !isNaN(newData)) {
return newData / 100;
}
return isNaN(newData) ? null : newData;
};
exports.formatDurationToNumber = formatDurationToNumber;
exports.formatStringToNumber = formatStringToNumber;
exports.formatTextToNumber = formatTextToNumber;
exports.getFloatNumber = getFloatNumber;
;