import * as React from 'react'; import classnames from 'classnames'; import styles from './BasicInput.scss'; import ILocalContainerProps from '../../../common/structures/ILocalContainerProps'; import useForwardedRef from '../../../common/helpers/useForwardedRef'; export interface IBasicInputProps extends ILocalContainerProps { name?: string; onChange?: any; value?: string; minlength?: number; maxlength?: number; list?: string; pattern?: string; placeholder?: string; readonly?: boolean; size?: number; spellcheck?: boolean; invalid?: boolean; invalidIcon?: React.ReactElement invalidMessage?: React.ReactNode; helpText?: React.ReactNode; autofocus?: boolean; disabled?: boolean; /** Highlight the text on mount, useful for renaming */ highlightText?: boolean; required?: boolean; 'aria-invalid'?: React.HTMLProps['aria-invalid']; } const BasicInput = React.forwardRef((props: IBasicInputProps, ref: React.ForwardedRef) => { const { className, id, name, style, invalid, invalidIcon, invalidMessage, helpText, autofocus, disabled, highlightText, ...otherProps } = props; const input = useForwardedRef(ref); React.useEffect(() => { if (autofocus) { input.current?.focus(); } if (highlightText) { input.current?.select(); } }, []); return (
{invalid && invalidMessage && (typeof invalidMessage === 'string' ? <>{invalidIcon}{invalidMessage} : (invalidMessage) ) } {!invalid && helpText}
); }); export default BasicInput;