UNPKG

react-native-mask-input

Version:

TextInput with mask for ReactNative on both iOS and Android. Includes obfuscation characters feature.

85 lines (74 loc) 3.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _formatWithMask = _interopRequireDefault(require("./formatWithMask")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var _default = props => { const { value, mask, onChangeText, placeholderFillCharacter = '_', obfuscationCharacter, showObfuscatedValue, maskAutoComplete } = props; const maskArray = React.useMemo(() => typeof mask === 'function' ? mask(value) : mask, [mask, value]); const formattedValueResult = React.useMemo(() => { return (0, _formatWithMask.default)({ text: value || '', mask, obfuscationCharacter }); }, [mask, obfuscationCharacter, value]); const maskHasObfuscation = React.useMemo(() => maskArray && !!maskArray.find(maskItem => Array.isArray(maskItem)), [maskArray]); const isValueObfuscated = React.useMemo(() => !!maskHasObfuscation && !!showObfuscatedValue, [maskHasObfuscation, showObfuscatedValue]); const handleChangeText = React.useCallback(text => { let textToFormat = text; if (isValueObfuscated) { textToFormat = formattedValueResult.masked || ''; if (textToFormat.length > text.length) { textToFormat = textToFormat.slice(0, -1); } else if (textToFormat.length < text.length) { textToFormat = textToFormat + text[text.length - 1]; } } const result = (0, _formatWithMask.default)({ text: textToFormat, mask, obfuscationCharacter, maskAutoComplete: maskAutoComplete && textToFormat.length > formattedValueResult.masked.length }); onChangeText && onChangeText(result.masked, result.unmasked, result.obfuscated); }, [isValueObfuscated, mask, obfuscationCharacter, onChangeText, formattedValueResult.masked, maskAutoComplete]); const defaultPlaceholder = React.useMemo(() => { if (maskArray) { return maskArray.map(maskChar => { if (typeof maskChar === 'string') { return maskChar; } else { return placeholderFillCharacter; } }).join(''); } else { return undefined; } }, [maskArray, placeholderFillCharacter]); const inputValue = isValueObfuscated ? formattedValueResult.obfuscated : formattedValueResult.masked; return { onChangeText: handleChangeText, value: inputValue, selection: isValueObfuscated ? { start: inputValue.length, end: inputValue.length } : undefined, placeholder: defaultPlaceholder }; }; exports.default = _default; //# sourceMappingURL=useMaskedInputProps.js.map