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.

NumberField.js 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import BaseInputField from './BaseInputField';
  4. import {
  5. PERIOD_SYMBOL,
  6. COMMA_SYMBOL,
  7. PLUS_SYMBOL,
  8. MINUS_SYMBOL,
  9. NUMPAD_PERIOD_SYMBOL,
  10. NUMPAD_MINUS_SYMBOL,
  11. NUMPAD_PLUS_SYMBOL,
  12. DOWN_ARROW_KEYCODE,
  13. UP_ARROW_KEYCODE,
  14. } from '../../constants/keyCodeConstants';
  15. const NumberField = ({
  16. field,
  17. form,
  18. label,
  19. placeholder,
  20. disabled,
  21. preventAllExceptNumbers,
  22. ...props
  23. }) => {
  24. const onKeydownHandler = (event) => {
  25. if (preventAllExceptNumbers) {
  26. if (
  27. event.keyCode === PERIOD_SYMBOL ||
  28. event.keyCode === COMMA_SYMBOL ||
  29. event.keyCode === NUMPAD_PERIOD_SYMBOL ||
  30. event.keyCode === DOWN_ARROW_KEYCODE ||
  31. event.keyCode === UP_ARROW_KEYCODE
  32. ) {
  33. event.preventDefault();
  34. }
  35. }
  36. if (
  37. event.keyCode === PLUS_SYMBOL ||
  38. event.keyCode === MINUS_SYMBOL ||
  39. event.keyCode === NUMPAD_MINUS_SYMBOL ||
  40. event.keyCode === NUMPAD_PLUS_SYMBOL ||
  41. event.keyCode === DOWN_ARROW_KEYCODE ||
  42. event.keyCode === UP_ARROW_KEYCODE
  43. ) {
  44. event.preventDefault();
  45. }
  46. };
  47. return (
  48. <BaseInputField
  49. type="number"
  50. label={label}
  51. placeholder={placeholder}
  52. disabled={disabled}
  53. form={form}
  54. field={field}
  55. {...props}
  56. onKeyDown={(event) => onKeydownHandler(event)}
  57. />
  58. );
  59. };
  60. NumberField.propTypes = {
  61. field: PropTypes.shape({}),
  62. form: PropTypes.shape({}),
  63. label: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({})]),
  64. placeholder: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
  65. disabled: PropTypes.bool,
  66. preventAllExceptNumbers: PropTypes.bool,
  67. };
  68. export default NumberField;