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.

TextField.js 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import BaseInputField from './BaseInputField';
  4. import {
  5. BACKSPACE_KEYCODE,
  6. TAB_KEYCODE,
  7. RIGHT_ARROW_KEYCODE,
  8. LEFT_ARROW_KEYCODE,
  9. } from '../../constants/keyCodeConstants';
  10. const TextField = ({
  11. field,
  12. form,
  13. label,
  14. placeholder,
  15. disabled,
  16. centerText,
  17. autoFocus,
  18. preventAllExceptNumbers,
  19. ...props
  20. }) => {
  21. const onKeydownHandler = (event) => {
  22. if (preventAllExceptNumbers) {
  23. if (
  24. event.keyCode === BACKSPACE_KEYCODE ||
  25. event.keyCode === TAB_KEYCODE ||
  26. event.keyCode === RIGHT_ARROW_KEYCODE ||
  27. event.keyCode === LEFT_ARROW_KEYCODE
  28. ) {
  29. return;
  30. }
  31. if (
  32. (event.keyCode < 58 && event.keyCode > 47) ||
  33. (event.keyCode < 106 && event.keyCode > 95)
  34. ) {
  35. return;
  36. }
  37. event.preventDefault();
  38. }
  39. };
  40. return (
  41. <BaseInputField
  42. autoFocus={autoFocus}
  43. type="text"
  44. label={label}
  45. placeholder={placeholder}
  46. disabled={disabled}
  47. form={form}
  48. field={field}
  49. centerText={centerText}
  50. {...props}
  51. onKeyDown={(event) => onKeydownHandler(event)}
  52. />
  53. );
  54. };
  55. TextField.propTypes = {
  56. field: PropTypes.shape({}),
  57. form: PropTypes.shape({}),
  58. label: PropTypes.string,
  59. placeholder: PropTypes.string,
  60. disabled: PropTypes.bool,
  61. centerText: PropTypes.bool,
  62. autoFocus: PropTypes.bool,
  63. preventAllExceptNumbers: PropTypes.bool,
  64. };
  65. export default TextField;