bhrott / react-native-masked-text

A pure javascript masked text and input text component for React-Native.
MIT License
1.61k stars 249 forks source link

How to put two masks in 1 input #265

Open MatheusFC2 opened 2 years ago

MatheusFC2 commented 2 years ago

In my case, I want to put a CPF and CNPJ mask in 1 input

image

When the person adds a number more than 11 digits, the mask turns into cpnj

image

I tried to add 2 mask types

` export default function App() {

    const [cpf, setCpf] = useState('');

    return (
      <View style={styles.container}>
        <TextInputMask 
          style={styles.input}

          type={'cpf', 'cpnj'}

          value={cpf}
          onChangeText={text => setCpf(text)}
        />

      </View>
    );
}

`

I wanted help on how I could create this code

Sorry my english i'm from brazil

ederhmaia commented 2 years ago

First of all you need hook the useState when you want component updates. In this case you wanna update the state of the attribute type (type="cpf" // type="cnpj") according to the character length. You can pass 'cpf' as the initial value, because has less characters and will be the first option to check.

const [inputMask, setInputMask] = useState('cpf')

Then, in the component when onChangeText event is fired, the setInputMask function is called passing cpf or cnpj (depending on text length) as an argument, which will be the value of inputMask

<TextInputMask
         placeholder="CPF/CNPJ"
         type={inputMask}
         onChangeText={(text) => {
               setInputMask(text?.length >= 14 ? 'cnpj' : 'cpf')
          }}
/>