import React, { ReactElement, InputHTMLAttributes, ChangeEvent, forwardRef, } from 'react'; import classNames from 'classnames'; import { IconProp } from '@fortawesome/fontawesome-svg-core'; import Icon from '../Icon/icon'; type InputSize = 'lg' | 'sm'; export interface InputProps extends Omit, 'size'> { disabled?: boolean; size?: InputSize; icon?: IconProp; prepend?: string | ReactElement; append?: string | ReactElement; onChange?: (e: ChangeEvent) => void; } export const Input = forwardRef((props, ref) => { const { disabled, size, icon, prepend, append, style, ...restProps } = props; const cnames = classNames('paypay-input-wrapper', { [`input-size-${size}`]: size, 'is-disabled': disabled, 'input-group': prepend || append, 'input-group-append': !!append, 'input-group-prepend': !!prepend, }); const fixControlledValue = (value: any) => { if (typeof value === 'undefined' || value === null) { return ''; } return value; }; if ('value' in props) { delete restProps.defaultValue; restProps.value = fixControlledValue(props.value); } return (
{prepend &&
{prepend}
} {icon && (
)} {append &&
{append}
}
); }); export default Input;