Advertisement
minafaw3

NumberEditor

May 3rd, 2024
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. import React, {
  2. forwardRef, useRef, useState, useImperativeHandle,
  3. } from 'react';
  4. import PropTypes from 'prop-types';
  5. import { TextField } from '@mui/material';
  6.  
  7. const NumberEditor = forwardRef((props, ref) => {
  8. const [number, setNumber] = useState(props.value);
  9. const inputRef = useRef(null);
  10.  
  11. const handleChange = (event) => {
  12. setNumber(event.target.value);
  13. };
  14.  
  15. useImperativeHandle(ref, () => ({
  16. getValue: () => number,
  17. isCancelBeforeStart: () => false,
  18. isCancelAfterEnd: () => {
  19. if (number < 0) {
  20. return true;
  21. }
  22. return false;
  23. },
  24.  
  25. afterGuiAttached: () => {
  26. if (inputRef.current) {
  27. setTimeout(() => inputRef.current.focus(), 100);
  28. }
  29. },
  30. }));
  31.  
  32. return (
  33. <TextField
  34. type="number"
  35. value={number}
  36. onChange={handleChange}
  37. ref={inputRef}
  38. InputLabelProps={{
  39. shrink: true,
  40. }}
  41. variant="outlined"
  42. size="small"
  43. fullWidth
  44. style={{ height: '100%' }}
  45. />
  46. );
  47. });
  48.  
  49. NumberEditor.defaultProps = {
  50. value: 0,
  51. };
  52.  
  53. NumberEditor.propTypes = {
  54. value: PropTypes.oneOfType([
  55. PropTypes.string,
  56. PropTypes.number,
  57. ]),
  58. };
  59. export default NumberEditor;
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement