UNPKG

react-native-mask-text

Version:
57 lines (51 loc) 2.32 kB
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