UNPKG

credit-card-input-mask

Version:

Restrict inputs to certain valid characters (e.g. formatting phone or card numbers)

127 lines (126 loc) 4.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PatternFormatter = void 0; var parse_pattern_1 = require("./parse-pattern"); var is_backspace_1 = require("../is-backspace"); var PatternFormatter = /** @class */ (function () { function PatternFormatter(pattern) { this.pattern = (0, parse_pattern_1.parsePattern)(pattern); } PatternFormatter.prototype.format = function (options) { var originalString = options.value; var originalStringIndex = 0; var formattedString = ""; var selection = { start: options.selection.start, end: options.selection.end, }; for (var i = 0; i < this.pattern.length; i++) { var patternChar = this.pattern[i]; var inputChar = originalString[originalStringIndex]; if (originalStringIndex > originalString.length) { break; } if (typeof patternChar.value === "string") { if (inputChar != null || formattedString.length === patternChar.index) { formattedString += patternChar.value; if (patternChar.index <= selection.start) { selection.start++; } if (patternChar.index <= selection.end) { selection.end++; } } } else { // User input char // prettier-ignore for (; originalStringIndex < originalString.length; originalStringIndex++) { inputChar = originalString[originalStringIndex]; if (patternChar.value.test(inputChar)) { formattedString += inputChar; originalStringIndex++; break; } else { if (patternChar.index <= selection.start) { selection.start--; } if (patternChar.index <= selection.end) { selection.end--; } } } } } return { value: formattedString, selection: selection, }; }; PatternFormatter.prototype.unformat = function (options) { var start = options.selection.start; var end = options.selection.end; var unformattedString = ""; var formatCompensation = 0; function isPatterntChar(patternChar, index) { var value = options.value[index - formatCompensation]; return (typeof patternChar.value !== "string" && value != null && patternChar.value.test(value)); } for (var i = 0; i < this.pattern.length; i++) { var patternChar = this.pattern[i]; if (isPatterntChar(patternChar, i)) { unformattedString += options.value[i - formatCompensation]; continue; } if (patternChar.value !== options.value[patternChar.index]) { formatCompensation++; continue; } if (patternChar.index < options.selection.start) { start--; } if (patternChar.index < options.selection.end) { end--; } } return { selection: { start: start, end: end, }, value: unformattedString, }; }; PatternFormatter.prototype.simulateDeletion = function (options) { var deletionStart, deletionEnd; var state = this.unformat(options); var value = state.value; var selection = state.selection; var delta = Math.abs(state.selection.end - state.selection.start); if (delta) { deletionStart = selection.start; deletionEnd = selection.end; } else if ((0, is_backspace_1.isBackspace)(options.event)) { deletionStart = Math.max(0, selection.start - 1); deletionEnd = selection.start; } else { // Handle forward delete deletionStart = selection.start; deletionEnd = Math.min(value.length, selection.start + 1); } return { selection: { start: deletionStart, end: deletionStart, }, value: value.substr(0, deletionStart) + value.substr(deletionEnd), }; }; return PatternFormatter; }()); exports.PatternFormatter = PatternFormatter;