choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
425 lines (332 loc) • 13.4 kB
JavaScript
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MIN_SAFE_INTEGER = exports.MAX_SAFE_INTEGER = void 0;
exports.bigNumberToFixed = bigNumberToFixed;
exports["default"] = void 0;
exports.getDateFormatByField = getDateFormatByField;
exports.getDateFormatByFieldType = getDateFormatByFieldType;
exports.getGlobalConfig = getGlobalConfig;
exports.getNearStepValues = getNearStepValues;
exports.getNumberFormatOptions = getNumberFormatOptions;
exports.getPrecision = getPrecision;
exports.isEmpty = isEmpty;
exports.isSame = isSame;
exports.isSameLike = isSameLike;
exports.isValidBigNumber = isValidBigNumber;
exports.normalizeLanguage = normalizeLanguage;
exports.parseBigNumber = parseBigNumber;
exports.parseNumber = parseNumber;
exports.plus = plus;
exports.toLocaleStringPolyfill = toLocaleStringPolyfill;
exports.toLocaleStringSupportsLocales = toLocaleStringSupportsLocales;
exports.toRangeValue = toRangeValue;
exports.warning = warning;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _moment = _interopRequireWildcard(require("moment"));
var _mobx = require("mobx");
var _warning = _interopRequireDefault(require("warning"));
var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
var _defaultTo = _interopRequireDefault(require("lodash/defaultTo"));
var _isObject = _interopRequireDefault(require("lodash/isObject"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _bignumber = require("bignumber.js");
var _enum = require("../enum");
var _enum2 = require("../data-set/enum");
var _configure = require("../configure");
var _formatter = require("../formatter");
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1;
exports.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;
var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || 1 - Math.pow(2, 53);
exports.MIN_SAFE_INTEGER = MIN_SAFE_INTEGER;
var warned = {};
function warning(valid, message) {
if (!valid && !warned[message]) {
(0, _warning["default"])(false, message);
warned[message] = true;
}
}
function isEmpty(value) {
return (0, _isNil["default"])(value) || value === '';
}
function isSame(newValue, oldValue) {
return newValue === oldValue || isEmpty(newValue) && isEmpty(oldValue) || (0, _isEqual["default"])(newValue, oldValue);
}
function isSameLike(newValue, oldValue) {
/* eslint-disable-next-line */
return isSame(newValue, oldValue) || newValue == oldValue;
}
function parseNumber(value, precision) {
if ((0, _isNil["default"])(precision)) {
return Number(value);
}
return Number((0, _formatter.formatNumber)(value, undefined, {
maximumFractionDigits: precision,
useGrouping: false
}));
}
function parseBigNumber(value, precision, defaultValue) {
var valueBig = new _bignumber.BigNumber(value);
precision = !isEmpty(precision) && precision >= 0 && isFinite(precision) ? new _bignumber.BigNumber(precision).integerValue(_bignumber.BigNumber.ROUND_DOWN).toNumber() : valueBig.decimalPlaces();
return bigNumberToFixed(valueBig, precision, defaultValue);
}
function getPrecision(value) {
var valueString = value.toString();
if (valueString.indexOf('e-') >= 0) {
return parseInt(valueString.slice(valueString.indexOf('e-') + 2), 10);
}
if (valueString.indexOf('.') >= 0) {
return valueString.length - valueString.indexOf('.') - 1;
}
return 0;
}
function getMaxPrecision(value, step) {
var stepPrecision = getPrecision(step);
var currentValuePrecision = getPrecision(value);
if (!value) {
return stepPrecision;
}
return Math.max(currentValuePrecision, stepPrecision);
}
function getPrecisionFactor(value, step) {
return Math.pow(10, getMaxPrecision(value, step));
}
function precisionFix(value, precisionFactor) {
return Math.round(value * precisionFactor);
}
function isValidBigNumber(bigNumber) {
return !!bigNumber && !bigNumber.isNaN() && bigNumber.isFinite();
}
function bigNumberToFixed(bigNumber, precision, defaultValue) {
return isValidBigNumber(bigNumber) ? bigNumber.toFixed((0, _defaultTo["default"])(precision, bigNumber.decimalPlaces())) : defaultValue;
}
function getBigBeforeStepValue(valueFactorBig, minOrMaxFactorBig, stepFactorBig) {
// value - ((value - minFactor) % stepFactor)
return valueFactorBig.minus(valueFactorBig.minus(minOrMaxFactorBig).modulo(stepFactorBig));
}
function getBigNumberNearStepValues(value, step, min, max) {
if (isEmpty(min)) {
return undefined;
}
var valueBig = new _bignumber.BigNumber(value);
var minBig = new _bignumber.BigNumber(min);
var stepBig = new _bignumber.BigNumber(step);
var maxBig;
if (isEmpty(max)) {
maxBig = valueBig.plus(step);
} else {
maxBig = new _bignumber.BigNumber(max);
}
var maxDecimal = Math.max(valueBig.decimalPlaces(), stepBig.decimalPlaces());
var precisionFactorBig = new _bignumber.BigNumber(10).exponentiatedBy(maxDecimal);
var valueFactorBig = valueBig.multipliedBy(precisionFactorBig);
var minFactorBig = new _bignumber.BigNumber(minBig.multipliedBy(precisionFactorBig).toFixed(0));
var stepFactorBig = stepBig.multipliedBy(precisionFactorBig);
var maxFactorBig = new _bignumber.BigNumber(maxBig.multipliedBy(precisionFactorBig).toFixed(0)); // min 等于最小安全数时, 且 max 小于 0, 设置 step 计算起点为: Math.floor(max / step) * step
var minFactorBase = minBig.isEqualTo(-MAX_SAFE_INTEGER) ? maxBig.isLessThan(0) ? stepBig.multipliedBy(maxBig.dividedBy(stepBig).toFormat(0, _bignumber.BigNumber.ROUND_FLOOR)) : new _bignumber.BigNumber(0) : minBig;
var minFactorBaseBig = new _bignumber.BigNumber(minFactorBase.multipliedBy(precisionFactorBig).toFixed(0));
var beforeStepFactorBig = getBigBeforeStepValue(valueFactorBig, minFactorBaseBig, stepFactorBig);
if (beforeStepFactorBig.isEqualTo(valueFactorBig)) {
return undefined;
}
if (beforeStepFactorBig.isGreaterThan(maxFactorBig)) {
beforeStepFactorBig = getBigBeforeStepValue(maxFactorBig, minFactorBaseBig, stepFactorBig);
} else if (beforeStepFactorBig.isLessThan(minFactorBig)) {
beforeStepFactorBig = minFactorBig;
}
var afterStepFactorBig = beforeStepFactorBig.plus(stepFactorBig);
var values = [bigNumberToFixed(beforeStepFactorBig.dividedBy(precisionFactorBig), undefined, String(value))];
if (afterStepFactorBig.isLessThanOrEqualTo(maxFactorBig) && afterStepFactorBig.dividedBy(precisionFactorBig).isLessThanOrEqualTo(maxBig)) {
values.push(bigNumberToFixed(afterStepFactorBig.dividedBy(precisionFactorBig), undefined, String(value)));
}
return values;
}
function plus() {
for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
values[_key] = arguments[_key];
}
if (values.length > 2) {
return plus(values.shift(), plus.apply(void 0, values));
}
if (values.length < 2) {
return values[0];
}
var v1 = values[0];
var v2 = values[1];
var precisionFactor = getPrecisionFactor(v1, v2);
return (precisionFix(v1, precisionFactor) + precisionFix(v2, precisionFactor)) / precisionFactor;
}
function getBeforeStepValue(value, minFactor, stepFactor) {
return value - (value - minFactor) % stepFactor;
}
function getNearStepMoments(value, step, unit) {
var unitValue = value.get(unit);
var mod = unitValue % step;
if (mod !== 0) {
var before = unitValue - mod;
var after = before + step;
return [value.clone().set(unit, before), value.clone().set(unit, after)];
}
}
function getNearStepValues(value, step, min, max, isBigNumber) {
if ((0, _moment.isMoment)(value)) {
if (!(0, _isNumber["default"])(step) && !(0, _isString["default"])(step)) {
var hour = step.hour,
minute = step.minute,
second = step.second;
if (second) {
return getNearStepMoments(value, second, _enum.TimeUnit.second);
}
if (minute) {
return getNearStepMoments(value, minute, _enum.TimeUnit.minute);
}
if (hour) {
return getNearStepMoments(value, hour, _enum.TimeUnit.hour);
}
}
} else if (!isEmpty(value) && !!step && (0, _typeof2["default"])(step) !== 'object') {
if (isBigNumber) {
return getBigNumberNearStepValues(value, step, min, max);
}
min = (0, _defaultTo["default"])(Number(min), -MAX_SAFE_INTEGER);
max = (0, _defaultTo["default"])(Number(max), MAX_SAFE_INTEGER);
var precisionFactor = getPrecisionFactor(Number(value), Number(step));
var valueFactor = precisionFix(Number(value), precisionFactor);
var minFactor = precisionFix(min, precisionFactor); // min 等于最小安全数时, 且 max 小于 0, 设置 step 计算起点为: Math.floor(max / step) * step
var minFactorBase = min === -MAX_SAFE_INTEGER ? max < 0 ? precisionFix(Math.floor(max / Number(step)) * Number(step), precisionFactor) : 0 : minFactor;
var maxFactor = precisionFix(max, precisionFactor);
var stepFactor = precisionFix(Number(step), precisionFactor);
var beforeStepFactor = getBeforeStepValue(valueFactor, minFactorBase, stepFactor);
if (beforeStepFactor === valueFactor) {
return undefined;
}
if (beforeStepFactor > maxFactor) {
beforeStepFactor = getBeforeStepValue(maxFactor, minFactorBase, stepFactor);
} else if (beforeStepFactor < minFactor) {
beforeStepFactor = minFactor;
}
var afterStepFactor = beforeStepFactor + stepFactor;
var values = [beforeStepFactor / precisionFactor];
if (afterStepFactor <= maxFactor && afterStepFactor / precisionFactor <= max) {
values.push(afterStepFactor / precisionFactor);
}
return values;
}
}
function getGlobalConfig(key, field) {
if (field) {
return field.dataSet.getConfig(key);
}
return (0, _configure.getConfig)(key);
}
function getDateFormatByFieldType(type, field) {
var formatter = getGlobalConfig('formatter', field);
switch (type) {
case _enum2.FieldType.date:
return formatter.date;
case _enum2.FieldType.dateTime:
return formatter.dateTime;
case _enum2.FieldType.week:
return formatter.week;
case _enum2.FieldType.month:
return formatter.month;
case _enum2.FieldType.year:
return formatter.year;
case _enum2.FieldType.time:
return formatter.time;
default:
return formatter.date;
}
}
function getDateFormatByField(field, type, record) {
if (field) {
return field.get('format', record) || getDateFormatByFieldType(type || field.get('type', record), field);
}
if (type) {
return getDateFormatByFieldType(type, field);
}
return getGlobalConfig('formatter', field).jsonDate || _moment["default"].defaultFormat;
}
var supportsLocales;
function toLocaleStringSupportsLocales() {
if (supportsLocales === undefined) {
try {
0 .toLocaleString('i');
supportsLocales = false;
} catch (e) {
supportsLocales = e.name === 'RangeError';
}
}
return supportsLocales;
}
function getNumberFormatOptions(type, options) {
if (type === _enum2.FieldType.number) {
return {
style: 'decimal'
};
}
if (options && options.currency) {
return {
style: 'currency'
};
}
return {
style: 'decimal',
minimumFractionDigits: 2,
maximumFractionDigits: 2
};
}
function toLocaleStringPolyfill(value, type, options) {
if (type === _enum2.FieldType.number) {
var fraction = String(value).split('.')[1];
return value.toLocaleString().split('.')[0] + (fraction ? ".".concat(fraction) : '');
}
var currency = options && options.currency;
return "".concat(currency ? "".concat(currency, " ") : '').concat(value.toLocaleString());
}
function toRangeValue(value, range) {
if ((0, _mobx.isArrayLike)(range)) {
if ((0, _mobx.isObservableObject)(value)) {
return [(0, _mobx.get)(value, range[0]), (0, _mobx.get)(value, range[1])];
}
if ((0, _isObject["default"])(value)) {
return [value[range[0]], value[range[1]]];
}
} else if ((0, _mobx.isArrayLike)(value)) {
return value.slice(0, 2);
}
return [undefined, undefined];
}
function normalizeLanguage(language) {
return language && language.replace('_', '-').toLowerCase();
}
var _default = {
MAX_SAFE_INTEGER: MAX_SAFE_INTEGER,
MIN_SAFE_INTEGER: MIN_SAFE_INTEGER,
warning: warning,
isEmpty: isEmpty,
isSame: isSame,
isSameLike: isSameLike,
parseNumber: parseNumber,
getPrecision: getPrecision,
plus: plus,
getNearStepValues: getNearStepValues,
getDateFormatByFieldType: getDateFormatByFieldType,
getDateFormatByField: getDateFormatByField,
toLocaleStringSupportsLocales: toLocaleStringSupportsLocales,
getNumberFormatOptions: getNumberFormatOptions,
toLocaleStringPolyfill: toLocaleStringPolyfill,
toRangeValue: toRangeValue,
normalizeLanguage: normalizeLanguage,
isValidBigNumber: isValidBigNumber,
bigNumberToFixed: bigNumberToFixed,
parseBigNumber: parseBigNumber,
formatFileSize: _formatter.formatFileSize
};
exports["default"] = _default;
//# sourceMappingURL=index.js.map
;