UNPKG

nbit-arco

Version:

Arco Design React UI Library.

90 lines (89 loc) 3.37 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; Object.defineProperty(exports, "__esModule", { value: true }); var number_precision_1 = require("number-precision"); var is_1 = require("../../_util/is"); var utils_1 = require("../utils"); function useLegalValue(props) { var isRange = props.isRange, min = props.min, max = props.max, onlyMarkValue = props.onlyMarkValue, intervalConfigs = props.intervalConfigs, marks = props.marks; function getPrecisionValue(val) { var _a = intervalConfigs.find(function (config) { return val >= config.begin && val <= config.end; }), begin = _a.begin, step = _a.step; var offsetVal = val - begin; var stepNum = Math.round(offsetVal / step); var precision = (0, utils_1.getPrecision)(step); var currentIntervalPrecision = parseFloat((0, number_precision_1.times)(step, stepNum).toFixed(precision)); return (0, number_precision_1.plus)(begin, currentIntervalPrecision); } // 在只允许选择 marks 中的值的时候,找到离value最接近的值 function getMarkValue(val) { if (!(0, is_1.isObject)(marks) || (0, is_1.isEmptyObject)(marks)) { console.warn('marks must be an object when onlyMarkValue is true'); return min; } if (marks[val]) { return val; } var keys = Object.keys(marks); var diffs = keys.map(function (x) { return Math.abs(val - parseFloat(x)); }); var minIndex = diffs.indexOf(Math.min.apply(null, diffs)); return parseFloat(keys[minIndex]); } // 判断值是否在[min, max]区间内,并且满足步长或是标签值 function getLegalValue(val) { if ((0, is_1.isUndefined)(val)) return min; if (val <= min) return min; if (val >= max) return max; if (onlyMarkValue) return getMarkValue(val); return getPrecisionValue(val); } function isLegalValue(val) { return getLegalValue(val) === val; } // 获取合法的 range value function getLegalRangeValue(val) { var _a = __read([min, min], 2), beginVal = _a[0], endVal = _a[1]; if (isRange) { if ((0, is_1.isArray)(val)) { beginVal = getLegalValue(val[0]); endVal = getLegalValue(val[1]); } else { console.error('value must be an array when range is true'); } } else if ((0, is_1.isNumber)(val)) { endVal = getLegalValue(val); } else { console.error('value must be a number when range is false'); } return [beginVal, endVal]; } return { getLegalRangeValue: getLegalRangeValue, getLegalValue: getLegalValue, isLegalValue: isLegalValue, }; } exports.default = useLegalValue;