Next.js template
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PhoneNumberField.js 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { ErrorMessage, useField } from 'formik';
  4. import PhoneInput from 'react-phone-number-input';
  5. import 'react-phone-number-input/style.css';
  6. const PhoneNumberField = ({ label, ...props }) => {
  7. const [field, meta] = useField(props);
  8. const inputErrorClassName =
  9. meta.error && meta.touched ? 'c-input--error' : '';
  10. return (
  11. <div className={`c-input c-phone-number ${inputErrorClassName}`}>
  12. {!!label && (
  13. <label className="c-input__label" htmlFor={field.name}>
  14. {label}
  15. </label>
  16. )}
  17. <PhoneInput
  18. international
  19. defaultCountry="US"
  20. {...field}
  21. {...props}
  22. onChange={(value) => {
  23. props.onPhoneChange(value);
  24. }}
  25. countryOptionsOrder={['US']}
  26. />
  27. <ErrorMessage name={field.name}>
  28. {(errorMessage) => (
  29. <span className="c-input__error">{errorMessage}</span>
  30. )}
  31. </ErrorMessage>
  32. </div>
  33. );
  34. };
  35. PhoneNumberField.propTypes = {
  36. field: PropTypes.shape({
  37. name: PropTypes.string,
  38. }),
  39. form: PropTypes.shape({}),
  40. label: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({})]),
  41. disabled: PropTypes.bool,
  42. onChange: PropTypes.func,
  43. onPhoneChange: PropTypes.func,
  44. };
  45. export default PhoneNumberField;