react-hook-mask
Version:
React masked input component and hooks
135 lines • 6.2 kB
JavaScript
;
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