UNPKG

dtable-utils

Version:

dtable common utils

128 lines (121 loc) 4.32 kB
'use strict'; 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;