react-native-mask-text
Version:
A React Native and Expo library to mask text
57 lines (51 loc) • 2.32 kB
JavaScript
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
import React, { useEffect, useState, forwardRef } from 'react';
import { TextInput } from 'react-native';
import { mask, unMask } from '../utils/mask';
export const MaskedTextInputComponent = (_ref, ref) => {
let {
mask: pattern = '',
type = 'custom',
options = {},
defaultValue,
onChangeText,
value,
inputAccessoryView,
...rest
} = _ref;
const getMaskedValue = value => mask(value, pattern, type, options);
const getUnMaskedValue = value => unMask(value, type);
const defaultValueCustom = defaultValue || '';
const defaultValueCurrency = defaultValue || '0';
const initialMaskedValue = getMaskedValue(type === 'currency' ? defaultValueCurrency : defaultValueCustom);
const initialUnMaskedValue = getUnMaskedValue(type === 'currency' ? defaultValueCurrency : defaultValueCustom);
const [maskedValue, setMaskedValue] = useState(initialMaskedValue);
const [unMaskedValue, setUnmaskedValue] = useState(initialUnMaskedValue);
function onChange(value) {
const newUnMaskedValue = unMask(value, type);
const newMaskedValue = mask(newUnMaskedValue, pattern, type, options);
setMaskedValue(newMaskedValue);
setUnmaskedValue(newUnMaskedValue);
}
useEffect(() => {
onChangeText(maskedValue, unMaskedValue);
}, [maskedValue, unMaskedValue]);
useEffect(() => {
if (value) {
setMaskedValue(getMaskedValue(value));
setUnmaskedValue(getUnMaskedValue(value));
} else {
setMaskedValue(initialMaskedValue);
setUnmaskedValue(initialUnMaskedValue);
}
}, [value]);
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TextInput, _extends({
onChangeText: value => onChange(value),
ref: ref,
maxLength: pattern.length || undefined
}, rest, {
value: maskedValue
})), inputAccessoryView);
};
export const MaskedTextInput = /*#__PURE__*/forwardRef(MaskedTextInputComponent);
//# sourceMappingURL=MaskedTextInput.js.map