UNPKG

react-hook-mask

Version:
135 lines 6.2 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCurrencyMaskGenerator = exports.createDynamicNumberMaskGenerator = exports.createDefaultMaskGenerator = exports.mask = exports.DEFAULT_MASK_RULES = void 0; var mask_1 = __importDefault(require("./mask")); exports.DEFAULT_MASK_RULES = new Map([ ['A', /[A-Za-z]/], ['9', /\d/], ['?', /\w/], ]); // Helper functions var mask = function (value, maskGenerator) { var _a, _b; return (_b = (_a = mask_1.default.mask(value, maskGenerator)) === null || _a === void 0 ? void 0 : _a.maskedValue) !== null && _b !== void 0 ? _b : ''; }; exports.mask = mask; var createDefaultMaskGenerator = function (mask) { return ({ rules: exports.DEFAULT_MASK_RULES, generateMask: function () { return mask; }, }); }; exports.createDefaultMaskGenerator = createDefaultMaskGenerator; var onlyDigits = function (value) { var onlyDigits = value != null ? value.replace(/\D/g, '') : null; return onlyDigits; }; var hasMoreDigits = function (v01, v02) { var _a, _b; var d01 = onlyDigits(v01); var d02 = onlyDigits(v02); var len01 = (_a = d01 === null || d01 === void 0 ? void 0 : d01.length) !== null && _a !== void 0 ? _a : 0; var len02 = (_b = d02 === null || d02 === void 0 ? void 0 : d02.length) !== null && _b !== void 0 ? _b : 0; var moreDigits = len01 > len02; return moreDigits; }; var dynamicNumberMask = function (value) { var masks = []; for (var _i = 1; _i < arguments.length; _i++) { masks[_i - 1] = arguments[_i]; } var currentMask = null; for (var _a = 0, masks_1 = masks; _a < masks_1.length; _a++) { var mask_2 = masks_1[_a]; if (!hasMoreDigits(value, mask_2)) { return mask_2; } currentMask = mask_2; } return currentMask !== null && currentMask !== void 0 ? currentMask : ''; }; var createDynamicNumberMaskGenerator = function () { var masks = []; for (var _i = 0; _i < arguments.length; _i++) { masks[_i] = arguments[_i]; } return ({ rules: exports.DEFAULT_MASK_RULES, generateMask: function (v) { return dynamicNumberMask.apply(void 0, __spreadArray([v], masks, false)); }, }); }; exports.createDynamicNumberMaskGenerator = createDynamicNumberMaskGenerator; var getCurrencyMaskGenerator = function (_a) { var _b = _a.prefix, prefix = _b === void 0 ? '' : _b, _c = _a.thousandSeparator, thousandSeparator = _c === void 0 ? '' : _c, _d = _a.centsSeparator, centsSeparator = _d === void 0 ? '' : _d; var getRawValue = function (value) { var _a; return (_a = value === null || value === void 0 ? void 0 : value.replace(/\D/g, '')) !== null && _a !== void 0 ? _a : ''; }; return { rules: exports.DEFAULT_MASK_RULES, generateMask: function (value) { var rawVal = getRawValue(value); var len = rawVal.length; var lenCents = centsSeparator ? Math.min(2, Math.max(len - 1, 0)) : 0; var lenNoCents = Math.max(len - lenCents, 0); var mask = prefix + '9'.repeat(lenNoCents % 3) + (lenNoCents % 3 > 0 && lenNoCents >= 3 ? thousandSeparator : '') + (lenNoCents >= 3 ? Array(Math.trunc(lenNoCents / 3)) .fill('999') .join(thousandSeparator) : '') + (lenCents ? centsSeparator : '') + '9'.repeat(lenCents); return mask; }, transform: function (value) { var _a; var valDigits = getRawValue(value); var rawVal = valDigits === null || valDigits === void 0 ? void 0 : valDigits.replace(/^0+/, ''); var len = rawVal.length; var prefixToUse = (value === null || value === void 0 ? void 0 : value.startsWith(prefix)) ? prefix : ''; if (((_a = valDigits === null || valDigits === void 0 ? void 0 : valDigits.length) !== null && _a !== void 0 ? _a : 0) === 0) { return value; } else if (centsSeparator && len < 3) { return (prefixToUse + '0' + centsSeparator + '0'.repeat(2 - len) + rawVal); } else if ((valDigits === null || valDigits === void 0 ? void 0 : valDigits.length) !== (rawVal === null || rawVal === void 0 ? void 0 : rawVal.length)) { var initial = { current: '', parts: [] }; var thousandsParts = rawVal .substring(0, len - 2) .split('') .reverse() .reduce(function (_a, char, idx, arr) { var current = _a.current, parts = _a.parts; var newCurrent = char + current; if (idx === (arr === null || arr === void 0 ? void 0 : arr.length) - 1 || (idx + 1) % 3 === 0) { return { current: '', parts: __spreadArray([newCurrent], parts, true), }; } return { current: newCurrent, parts: parts, }; }, initial).parts; var valNoCents = thousandsParts.join(thousandSeparator); var newValue = prefixToUse + valNoCents + centsSeparator + rawVal.substring(len - 2); return newValue; } return value; }, }; }; exports.getCurrencyMaskGenerator = getCurrencyMaskGenerator; //# sourceMappingURL=mask-util.js.map