import PropTypes from 'prop-types'; import * as React from 'react'; import { Controller, useFormContext } from 'react-hook-form'; import MuiTextField from '@mui/material/TextField'; import IconButton from '@mui/material/IconButton'; import InputAdornment from '@mui/material/InputAdornment'; import ContentCopyIcon from '@mui/icons-material/ContentCopy'; import copyInputValue from 'helpers/copyInputValue'; const createCopyAdornment = (ref) => { return ( copyInputValue(ref.current)} edge="end"> ); }; function TextField(props) { const { control } = useFormContext(); const inputRef = React.useRef(null); const { required, name, defaultValue, shouldUnregister = false, clickToCopy = false, readOnly = false, disabled = false, onBlur, onChange, 'data-test': dataTest, showError = false, ...textFieldProps } = props; return ( ( { controllerOnChange(...args); onChange?.(...args); }} onBlur={(...args) => { controllerOnBlur(); onBlur?.(...args); }} inputRef={(element) => { inputRef.current = element; ref(element); }} InputProps={{ readOnly, endAdornment: clickToCopy ? createCopyAdornment(inputRef) : null, }} inputProps={{ 'data-test': dataTest, }} {...(showError && { helperText: error?.message, error: !!error })} /> )} /> ); } TextField.propTypes = { required: PropTypes.bool, defaultValue: PropTypes.string, shouldUnregister: PropTypes.bool, name: PropTypes.string.isRequired, clickToCopy: PropTypes.bool, readOnly: PropTypes.bool, 'data-test': PropTypes.string, disabled: PropTypes.bool, onBlur: PropTypes.func, onChange: PropTypes.func, showError: PropTypes.bool, }; export default TextField;