Advertisement
nikpolale

Stormotion Field

Nov 19th, 2019
441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import {useCallback, useState} from 'react';
  2. import {validateEmail, validatePhone} from '../utils/validate';
  3.  
  4. type ValidateRuleType =
  5.   | ((text: string) => boolean)
  6.   | 'email'
  7.   | 'filled'
  8.   | 'phone';
  9.  
  10. const useField = (
  11.   defaultField: string,
  12.   validateRule: ValidateRuleType = 'filled',
  13. ): [string, (value: string) => void, boolean | undefined] => {
  14.   const [value, setValue] = useState(defaultField);
  15.   const [error, setError] = useState<!!|>(undefined);
  16.  
  17.   const onChangeText = useCallback(
  18.     (text: string) => {
  19.       setValue(text);
  20.  
  21.       if (validateRule === 'email') {
  22.         setError(validateEmail(text));
  23.       } else if (validateRule === 'phone') {
  24.         setError(validatePhone(text));
  25.       } else if (validateRule === 'filled') {
  26.         setError(text.trim() === '');
  27.       } else if (validateRule instanceof Function) {
  28.         setError(validateRule(text));
  29.       }
  30.     },
  31.     [validateRule],
  32.   );
  33.  
  34.   return [value, onChangeText, error];
  35. };
  36.  
  37. export default useField;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement